/* Program file: snowhp5.c Author: Harmonie Snow Date: November 6, 2022 Assignment: Program #5 Objective: This program calculates and prints out a grade report for a class. It has been modified to include functions. */ #include /*define prototypes*/ int get_num_stud(void); int get_num_grds(void); int calc_average(int, int); int get_sum(int, int); int calc_class_average(int, int); int main(void) /*added int as return type to as C-Free was giving an error "return type defaults to 'int'"" since none was present*/ { int grade; int num_grades, num_stud; int max_grades = 10; int x, y; int sum = 0; int average[100] = {0}, class_average = 0; char c, class_name[20]; char name[100][25]; printf("\nThis program will find the average of up to %i grades " "for students.\n", max_grades); printf("\nPlease Enter the Class Name: "); scanf("%19[^\n]s", class_name); while ((c = getchar() != '\n') && c != EOF) ; do { num_stud = get_num_stud(); /*function #1 inserted - gets number of students to enter*/ if (num_stud < 2 || num_stud > 100) printf("\nInvalid number of students, enter 2 - 100.\n\n"); } while (num_stud < 2 || num_stud > 100); do { num_grades = get_num_grds(); /*function #2 inserted - gets number of grades to enter*/ if (num_grades < 2 || num_grades > max_grades) printf("\nInvalid number of grades, try again.\n\n"); } while (num_grades < 2 || num_grades > max_grades); printf("\nNow enter the %i grades to be averaged.\n\n", num_grades); for (y = 0; y < num_stud; y++) { printf("Enter name for student #%i: ", y + 1); scanf("%24[^\n]s", name[y]); while ((c = getchar() != '\n') && c != EOF) ; for (x = 0; x < num_grades; x++) { do { printf("Enter grade #%i for %s: ", x + 1, name[y]); scanf("%i", &grade); while ((c = getchar() != '\n') && c != EOF) ; if (grade < 0 || grade > 100) printf("*** Invalid entry. Grade must be 0 to 100.\n"); } while (grade < 0 || grade > 100); sum = get_sum(sum, grade); /*function #3 inserted - does the math to provide the sum and returns it*/ } printf("\n"); average[y] = calc_average(sum, num_grades); /*function #4 inserted - computes a student's average*/ sum = 0; } printf("\n\n The %s Grades Report\n\n", class_name); printf(" Student Average Grade \n\n"); for (x = 0; x < num_stud; x++) { printf("%-25s %3i ", name[x], average[x]); sum = sum + average[x]; if (average[x] < 64) printf("F"); else if (average[x] < 67) printf("D"); else if (average[x] < 70) printf("D+"); else if (average[x] < 74) printf("C-"); else if (average[x] < 77) printf("C"); else if (average[x] < 80) printf("C+"); else if (average[x] < 84) printf("B-"); else if (average[x] < 87) printf("B"); else if (average[x] < 90) printf("B+"); else if (average[x] < 94) printf("A-"); else printf("A"); printf("\n"); } class_average = calc_class_average(sum, num_stud); /*function #5 added - takes sum and the number of students, returns the class average*/ printf("\n\nThe average of the %i grades entered for %i students in %s" " is %i \n\n", num_grades, num_stud, class_name, class_average); getchar(); return 0; } /*end main*/ /*begin functions*/ int get_num_stud(void) { int num_st; char c; printf("\nEnter the number of students to process: "); scanf("%i", &num_st); while ((c = getchar() != '\n') && c != EOF) ; return num_st; } /*end get_num_stud*/ int get_num_grds(void) { int grd_st; char c; printf("\nEnter the number of grades to process: "); scanf("%i", &grd_st); while ((c = getchar() != '\n') && c != EOF) ; return grd_st; } /*end get_num_grds*/ int get_sum(sum, grade) { sum = sum + grade; return sum; } /*end get_sum*/ int calc_average(sum, num_grades) { int av; av = sum / num_grades; return av; } /*end calc_average*/ int calc_class_average(sum, num_stud) { int class_av; class_av = (float)sum / num_stud + .5; return class_av; } /*end calc_class_average*/