2014-01-23 38 views
0

我的任務是:一個計算平均成績

  1. 輸入學生在課堂上的號碼,然後
  2. 在等級爲他們的列表輸入,然後計算平均值爲每一位學生。

我寫了下面的程序:

int main() 
{ 
    int s, i, grade, total, gradenum, finalgrade; 

    printf("How many students?\n"); 
    scanf("%d", &s); 
    i = 0; 

    do 
    { 
     printf("Enter grade. Enter x when done."); 
     scanf("%d", grade); 
     total = 0; 
     if (grade != 'x') 
     { 
      total = total + grade; 
      gradenum++; 
     } 
     else 
     { 
      finalgrade = total/gradenum; 
      printf("The final grade is %d", finalgrade); 
      i++; 
     } 
    } 
    while (i <= s); 
    return 0; 
} 

的想法是,你通過用戶輸入得到的學生數量,那麼做循環僅應重複的次數。

但是當我編譯程序時,我收到一條警告消息,說明'total'沒有被使用(當我看到它被使用時!)。然後,當我嘗試運行該程序時,我陷入了無限循環。

我在做什麼錯?

該類是C的介紹,我們沒有涉及cout,數組或類似的東西,所以我不認爲我有望在這個任務中使用它們。循環(只爲,if,else)。

+3

對'scanf'使用'%d'格式時,不能輸入'x'。 – Barmar

+0

快速瀏覽一下:'total'已被明確使用。 '鈰'被使用未初始化。 'if(grade!='x')'混合了字符和整數。在循環中有'if'來控制添加以及'do-while'。 – John3136

+0

您應該在此處顯示實際的警告消息 –

回答

0

你有幾個問題,在這裏:

  1. 您使用gradenum未初始化,出於同樣的原因,你不能將其復位爲每次迭代,因此平均計算會出問題。

  2. 您初始化爲i0,但繼續,直到i <= s,因此,例如,3名學生,你實際上循環4次。

  3. 你錯過了一個循環來收集你的學生的個人成績。

  4. scanf("%d", grade)應該是scanf("%d", &grade)

  5. 您正在將整數與字符混合在一起,最簡單的解決方法是輸入如-1之類的內容退出,而不是'x'

下面是修改後的版本:

#include <stdio.h> 

int main() 
{ 
    int s, i, grade, total, gradenum, finalgrade; 

    printf("How many students?\n"); 
    scanf("%d", &s); 
    i = 1; 

    do 
    { 
     printf("Enter grades for student %d\n", i); 
     gradenum = 0; 
     grade = 0; 
     total = 0; 

     while (grade != -1) { 
      printf("Enter grade. Enter -1 when done.\n"); 
      scanf("%d", &grade); 
      if (grade != -1) 
      { 
       total = total + grade; 
       gradenum++; 
      } 
      else 
      { 
       finalgrade = total/gradenum; 
       printf("The final grade is %d\n", finalgrade); 
       i++; 
      } 
     } 
    } 
    while (i <= s); 

    return 0; 
} 

,輸出:

[email protected]:~/Documents/src/scratch$ ./grades 
How many students? 
3 
Enter grades for student 1 
Enter grade. Enter -1 when done. 
77 
Enter grade. Enter -1 when done. 
68 
Enter grade. Enter -1 when done. 
71 
Enter grade. Enter -1 when done. 
-1 
The final grade is 72 
Enter grades for student 2 
Enter grade. Enter -1 when done. 
55 
Enter grade. Enter -1 when done. 
58 
Enter grade. Enter -1 when done. 
70 
Enter grade. Enter -1 when done. 
-1 
The final grade is 61 
Enter grades for student 3 
Enter grade. Enter -1 when done. 
22 
Enter grade. Enter -1 when done. 
25 
Enter grade. Enter -1 when done. 
30 
Enter grade. Enter -1 when done. 
-1 
The final grade is 25 
[email protected]:~/Documents/src/scratch$ 

,它看起來像你想要什麼。

+0

謝謝,我感謝幫助! – TeraBat

0

我認爲你可以使用

char grade; 
scanf("%c",&grade); 

然後進行比較。