Done
This commit is contained in:
88
Q2.c
88
Q2.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user