In “scores.txt”, fictitious students and their test scores are entered (open it
ID: 3865889 • Letter: I
Question
In “scores.txt”, fictitious students and their test scores are entered (open it with a suitable editor). Each horizontal line is tab-separated, and the fields of sum, average, and grade are not input. Make “grade.c” that fills in the fields of sum, average, and grade, and outputs it as a new file “grades.txt”.
• A grade determined as: 90 or more -> A +, 80 or more -> A, 70 or more -> B, 60 or more -> C, otherwise -> F.
• Display the name and ID of the A+ student on the terminal as the execution result for confirming your program.
"scores.txt":
name ID test1 test2 test3 test4 sum average grade
student1 1W0001 53 99 59 91
student2 1W0002 78 89 95 54
student3 1W0003 76 98 70 79
student4 1W0004 90 92 56 83
student5 1W0005 70 50 92 96
student6 1W0006 99 94 86 64
student7 1W0007 84 77 71 57
student8 1W0008 73 88 81 65
student9 1W0009 52 51 86 73
student10 1W0010 86 73 68 100
student11 1W0011 87 56 87 61
student12 1W0012 60 96 51 87
student13 1W0013 83 90 82 69
student14 1W0014 96 78 63 93
student15 1W0015 57 86 92 54
student16 1W0016 70 62 86 90
student17 1W0017 94 68 82 73
student18 1W0018 57 82 66 58
student19 1W0019 87 74 75 76
student20 1W0020 71 99 96 60
student21 1W0021 52 78 50 61
student22 1W0022 51 97 59 73
student23 1W0023 66 90 74 99
student24 1W0024 58 93 55 69
student25 1W0025 89 95 72 83
student26 1W0026 89 70 50 84
student27 1W0027 94 93 79 61
student28 1W0028 62 74 65 72
student29 1W0029 66 66 86 51
student30 1W0030 59 91 69 54
student31 1W0031 64 59 86 73
student32 1W0032 69 72 73 93
student33 1W0033 62 51 56 51
student34 1W0034 58 52 96 54
student35 1W0035 100 88 98 72
student36 1W0036 93 93 72 72
student37 1W0037 98 95 100 76
student38 1W0038 72 65 58 60
student39 1W0039 95 98 55 53
student40 1W0040 69 87 92 79
student41 1W0041 88 93 100 62
student42 1W0042 66 55 81 91
student43 1W0043 55 89 50 86
student44 1W0044 65 76 95 54
student45 1W0045 80 74 85 86
student46 1W0046 86 92 88 100
student47 1W0047 60 69 87 78
student48 1W0048 69 55 65 83
student49 1W0049 79 85 61 66
student50 1W0050 99 88 80 98
student51 1W0051 58 81 50 77
student52 1W0052 100 59 94 92
student53 1W0053 66 77 66 85
student54 1W0054 97 56 73 84
student55 1W0055 54 79 66 54
student56 1W0056 89 56 60 93
student57 1W0057 96 71 53 95
student58 1W0058 93 98 75 94
student59 1W0059 98 57 70 69
student60 1W0060 99 65 92 94
student61 1W0061 71 89 57 90
student62 1W0062 77 99 69 84
student63 1W0063 82 89 76 63
student64 1W0064 78 55 78 82
student65 1W0065 66 84 74 76
student66 1W0066 82 55 67 63
student67 1W0067 77 94 54 57
student68 1W0068 69 56 86 66
student69 1W0069 97 90 100 50
student70 1W0070 52 78 56 86
student71 1W0071 70 87 93 89
student72 1W0072 61 50 83 68
student73 1W0073 96 53 73 67
student74 1W0074 67 74 97 80
student75 1W0075 56 60 64 68
student76 1W0076 89 100 93 61
student77 1W0077 100 76 79 92
student78 1W0078 86 56 50 59
student79 1W0079 62 59 52 83
student80 1W0080 72 57 87 95
student81 1W0081 75 67 75 68
student82 1W0082 64 82 71 82
student83 1W0083 58 83 64 83
student84 1W0084 61 80 92 64
student85 1W0085 78 51 58 62
student86 1W0086 84 99 82 64
student87 1W0087 88 62 84 65
student88 1W0088 71 82 61 69
student89 1W0089 89 59 73 52
student90 1W0090 64 89 100 91
student91 1W0091 68 84 76 93
student92 1W0092 88 63 88 60
student93 1W0093 78 82 95 92
student94 1W0094 82 58 50 51
student95 1W0095 58 63 55 78
student96 1W0096 78 65 95 55
student97 1W0097 82 75 61 53
student98 1W0098 62 58 93 67
student99 1W0099 81 64 78 99
student100 1W0100 53 52 76 58
Explanation / Answer
Code:
#include<stdio.h>
int main() {
FILE *in = fopen("scores.txt", "r");
FILE *out = fopen("grades.txt", "w");
char student[20], id[20], misc[100], *grade;
int m1, m2, m3, m4, sum;
double avg;
fscanf(in,"%[^ ] ", misc); // read and dump the first line containing headers
fprintf(out,"%s ", misc);
while (!feof(in)) {
fscanf(in,"%[^ ] %[^ ] %d %d %d %d ", student, id, &m1, &m2, &m3, &m4);
sum = m1 + m2 + m3 + m4;
avg = sum/4.0;
if (avg >= 90)
grade = "A+";
else if (avg >= 80)
grade = "A";
else if (avg >= 70)
grade = "B";
else if (avg >= 60)
grade = "C";
else
grade = "F";
fprintf(out,"%s %s %d %d %d %d %d %.2lf %s ", student, id, m1, m2, m3, m4, sum, avg, grade);
}
fclose(in);
fclose(out);
}
Input file: scores.txt
Student id test1 test2 test3 test4 total average grade
Apple iko002 60 25 100 100
Orange iv3211 80 60 61 40
Berry kjmmm 45 45 140 45
Output file: grades.txt
Student id test1 test2 test3 test4 total average grade
Apple iko002 60 25 100 100 285 71.25 B
Orange iv3211 80 60 61 40 241 60.25 C
Berry kjmmm 45 45 140 45 275 68.75 C