计算平均成绩

标签 c loops do-while

我的任务是:

  1. 输入类(class)中的学生人数,然后
  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;
}

这个想法是通过用户输入获取学生数量,然后 do 循环应该只重复该次数。

但是当我编译程序时,我收到一条警告消息,指出未使用“total”(据我所知,它正在被使用!)。然后当我尝试运行该程序时,我陷入了无限循环。

我做错了什么?

这门课是 C 语言简介,我们还没有介绍 cout、数组或类似的内容,所以我认为我不应该在这个作业中使用它们。仅循环(do、for、if/else)。

最佳答案

您遇到了几个问题:

  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;
}

输出:

paul@MacBook:~/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
paul@MacBook:~/Documents/src/scratch$ 

这看起来像你想要的。

关于计算平均成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298509/

相关文章:

c - 当非静态函数声明跟在静态函数声明之后会发生什么?

php - array_push 在 foreach 循环中不起作用

c# - 何时使用每种类型的循环?

javascript - Android:使用 Javascript 制作全景图像的循环 Horizo​​ntalScrollView

c# - 不知道为什么我的循环不循环

javascript - do-while 循环意外标识符

c - 在 Cygwin 中使用 NCurses 扫描 USB 设备的输入

c - 使用相同程序的单个队列和多个队列不起作用

c - 随机数游戏C

c - C 编程中的 pragmapack() 除了结构打包之外还有其他用途吗?