2014-01-23 115 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); 

然后进行比较。