This commit is contained in:
2024-10-22 21:49:04 -07:00
parent a7d959538a
commit e0f6ba1702

88
Q2.c
View File

@@ -1,64 +1,68 @@
#include <stdio.h> #include <stdio.h>
typedef union Student { typedef union Student {
char name[50]; char name[50];
int roll_number; int roll_number;
int grades[3]; int grades[3];
} Student; } Student;
double student_average_grade(Student student) { double student_average_grade(Student student) {
double average_grade = 0.0; double average_grade = 0.0;
for(int i = 0; i < 3; i++) { for(int i = 0; i < 3; i++) {
average_grade += student.grades[i]; average_grade += student.grades[i];
} }
return average_grade/3; return average_grade/3;
} }
double all_student_averages(Student arr[], int len) { double all_student_averages(Student arr[], int len) {
double average_grade = 0.0; double average_grade = 0.0;
for(int i = 0; i < len; i++) { for(int i = 0; i < len; i++) {
average_grade += student_average_grade(arr[i]); average_grade += student_average_grade(arr[i]);
} }
return average_grade/len; return average_grade/len;
} }
Student highest_grade(Student arr[], int len) { Student highest_grade(Student arr[], int len) {
Student highest = arr[0]; Student highest = arr[0];
for(int i = 0; i < len; i++) { for(int i = 0; i < len; i++) {
if(student_average_grade(arr[i]) > student_average_grade(highest)) { if(student_average_grade(arr[i]) > student_average_grade(highest)) {
highest = arr[i]; highest = arr[i];
} }
} }
return highest; return highest;
} }
int main() { int main() {
Student John; Student John;
John.grades[0] = 3; John.grades[0] = 3;
John.grades[1] = 4; John.grades[1] = 4;
John.grades[2] = 3; John.grades[2] = 3;
Student Bob; Student Bob;
Bob.grades[0] = 4; Bob.grades[0] = 4;
Bob.grades[1] = 4; Bob.grades[1] = 4;
Bob.grades[2] = 4; Bob.grades[2] = 4;
Student Bo; Student Bo;
Bo.grades[0] = 2; Bo.grades[0] = 2;
Bo.grades[1] = 1; Bo.grades[1] = 1;
Bo.grades[2] = 2; Bo.grades[2] = 2;
Student arr[3]; Student arr[3];
arr[0] = John; arr[0] = John;
arr[1] = Bob; arr[1] = Bob;
arr[2] = Bo; arr[2] = Bo;
printf("Average Grade: %0.02f\n", student_average_grade(arr[0])); printf("Average Grade: %0.02f\n", student_average_grade(arr[0]));
printf("Average Grade: %0.02f\n", student_average_grade(arr[1])); printf("Average Grade: %0.02f\n", student_average_grade(arr[1]));
printf("Average Grade: %0.02f\n", student_average_grade(arr[2])); printf("Average Grade: %0.02f\n", student_average_grade(arr[2]));
printf("Average Grade: %0.02f", all_student_averages(arr, 3)); printf("Average Grade: %0.02f\n", all_student_averages(arr, sizeof(arr) / sizeof(arr[0])));
//("Student with highest grades: ") // It is impossible to print the name of the student with the highest total marks,
// Because it is a union, and if the student has marks, they cannot have the name member also populated
// Therefore, this will print nonsense for the name of the student with highest grades
Student highest = highest_grade(arr, sizeof(arr) / sizeof(arr[0]));
printf("Student with highest grades: %s", highest.name);
return 0; return 0;
} }