Печать среднего значения комбинированных оценок учащихся с использованием C - PullRequest
0 голосов
/ 28 мая 2018

Я сделал эту программу ниже, чтобы вычислить среднюю оценку студента.Все работает хорошо, пока я не использую -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;
}

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Просто удалите две строки над printf ("ХОРОШО! \ N");вы получите то, что хотите.

0 голосов
/ 28 мая 2018

Я думаю, вам нужно немного переосмыслить свою логику.Почему бы не использовать цикл while для управления потоком.Затем вы можете немедленно выйти из программы, если пользователь сразу введет -1.Вы должны использовать массив для хранения средних значений для каждого учащегося, затем вы можете просмотреть и найти среднее значение по классу.

-Ваш float final_mark функция выглядит немного схематично без скобок.

-Вы также должны поместить прототип своей функции за пределы 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));
}
0 голосов
/ 28 мая 2018

возможно, вам придется инициализировать переменные mark с 0. и a_mark1 до 0, если пользователь вводит -1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...