c - 使用 C 打印学生综合成绩的平均值

标签 c if-statement while-loop

我编写了下面这个程序来计算学生的平均分。 一切正常,直到我使用 -1,它应该停止程序,因为它显示已输入的所有学生的平均值,说再见!然后终止。

我认为我的计算可能是错误的,因为它打印了学生平均分的错误结果。 提前致谢。

#include <stdio.h>

int main(void)
{
float final_mark(int a_mark1, int a_mark2, int lab_mark, int quiz_mark, int exam_mark);
int i, a_mark1, a_mark2, lab_mark, quiz_mark, exam_mark;
float average_mark = 0.0;
do
{
    for (i = 0; i < 2; i++)
    {
        printf("Enter assignment 1 mark (-1 to quit): ");
        scanf("%d", &a_mark1);

        if(a_mark1 == -1)
        {
            average_mark += final_mark(a_mark1, a_mark2, lab_mark, quiz_mark, exam_mark);
            if ((average_mark > 1 ) && (average_mark < 100 ))
            {
                printf("The average student mark is %.2f%% \n", average_mark);
            }
            printf("Goodbye! \n");
            return 0;
        }

        printf("Enter assignment 2 mark: ");
        scanf("%d", &a_mark2);

        printf("Enter laboratory mark: ");
        scanf("%d", &lab_mark);

        printf("Enter quiz mark: ");
        scanf("%d", &quiz_mark);

        printf("Enter exam mark: ");
        scanf("%d", &exam_mark);

        printf("Student %d final mark: %.2f \n", i + 1, final_mark(a_mark1, a_mark2, lab_mark, quiz_mark, exam_mark));
    }
}
while(a_mark1 != -1);
return 0;
}
float final_mark(int a_mark1, int a_mark2, int lab_mark, int quiz_mark, int     exam_mark)
{
float final_mark = a_mark1 * 0.1 + a_mark2 * 0.15 + lab_mark * 0.15 +     quiz_mark * 0.1 + exam_mark * 0.5;
return final_mark;
}

最佳答案

我认为你需要重新考虑一下你的逻辑。为什么不使用 while 循环来控制流程。然后,如果用户立即输入-1,您可以立即退出程序。您应该使用一个数组来存储每个学生的平均值,然后您可以循环遍历并找到类(class)平均值。

-您的 float Final_mark 函数在没有任何括号的情况下看起来有点粗略。

- 您也应该将函数原型(prototype)放在 main 之外。请参阅下面的更改。

#include <stdio.h>

#define MAX_STUDENTS 10 //define what the max number of students is

float final_mark(int mark1, int mark2, int lab, int quiz, int exam);

int main()
{
   int i = 0, mark1 = 0, mark2 = 0,
       lab = 0, quiz = 0, exam = 0;
   int num_students;
   float students_avg[MAX_STUDENTS] = {0}; //array to hold averages for students
   float average = 0;

   while (i < MAX_STUDENTS) {

      printf("Enter assignment 1 mark (enter -1 to quit):\n");
      scanf("%d", &mark1);

      if (mark1 == -1)
         break; //no more students, break out of while loop

      printf("Enter assignment 2 mark: ");
      scanf("%d", &mark2);

      printf("Enter laboratory mark: ");
      scanf("%d", &lab);

      printf("Enter quiz mark: ");
      scanf("%d", &quiz);

      printf("Enter exam mark: ");
      scanf("%d", &exam);

      average = final_mark(mark1, mark2, lab, quiz, exam);

      students_avg[i] = average; //add this average to array

      printf("Student # %d average was %.2f\n", i, students_avg[i]);//debug info

      i++;
   }
   num_students = i; //how many students grades did we read?

   average = 0; //reset to 0 so we can use below

   for (i = 0; i < num_students; i++)
      average += students_avg[i];

   if (num_students > 0)
      printf("Class average is %.2f\n", average/num_students);
   else
      printf("Goodbye!\n");

   return 0;
}

float final_mark(int mark1, int mark2, int lab, int quiz, int exam)
{
   //we can just return the calculation
   return ((mark1 * 0.1) + (mark2 * 0.15) + (lab * 0.15) + (quiz * 0.1) + (exam * 0.5));
}

关于c - 使用 C 打印学生综合成绩的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568689/

相关文章:

c - 传递可变数量的参数

c - nftw 目录的总大小与 du 输出不同

matlab - 如何有效地遍历矩阵元素

c - 不同{结构的 "if"句子之间的区别

PHP While 循环未遍历 MySQL 数据库中的所有选定记录

java - 根据输入询问变量数量(for/while 语句?)

regex - Perl:while block 中的多个全局 "or"分隔的正则表达式条件导致无限循环?

c - C 中的内联 Setter 和 Getter 函数

bash - 如何在(负)Bash 条件下使用 OR

java - 不同编程语言访问的socket可以通信吗?