/* Program for computing letter grades in CPSC 441 */ /* This version also does class averages and stdev */ /* Usage: cc -o compute compute.c -lm */ /* ./compute < marks.txt */ /* Written by Carey Williamson January 5, 2014 */ #include #include #define STRLEN 20 main() { char fname[STRLEN], lname[STRLEN]; int id; float a1, a2, a3, a4; float quiz; float mid; float fin; float tot; char grade; char flag; float tota1, tota2, tota3, tota4, totq, totm, totf, tott; float totsqa1, totsqa2, totsqa3, totsqa4, totsqq, totsqm, totsqf, totsqt; float meana1, meana2, meana3, meana4, meanq, meanm, meanf, meant; float vara1, vara2, vara3, vara4, varq, varm, varf, vart; int count; /* Initialization */ count = 0; tota1 = 0.0; tota2 = 0.0; tota3 = 0.0; tota4 = 0.0; totq = 0.0; totm = 0.0; totf = 0.0; tott = 0.0; totsqa1 = 0.0; totsqa2 = 0.0; totsqa3 = 0.0; totsqa4 = 0.0; totsqq = 0.0; totsqm = 0.0; totsqf = 0.0; totsqt = 0.0; while( scanf("%s %s %d %f %f %f %f %f %f %f\n", fname, lname, &id, &a1, &a2, &a3, &a4, &quiz, &mid, &fin) == 10 ) { tot = a1 + a2 + a3 + a4; tot /= 4; tot += 0.08*100.0*quiz/32.0; tot += 0.20 * mid; tot += 0.40 * fin; tota1 += a1; tota2 += a2; tota3 += a3; tota4 += a4; totq += quiz; totm += mid; totf += fin; tott += tot; totsqa1 += a1*a1; totsqa2 += a2*a2; totsqa3 += a3*a3; totsqa4 += a4*a4; totsqq += quiz*quiz; totsqm += mid*mid; totsqf += fin*fin; totsqt += tot*tot; count++; grade = 'F'; flag = ' '; if( tot >= 50 ) { grade = 'D'; flag = ' '; } if( tot >= 55 ) { grade = 'C'; flag = '-'; } if( tot >= 60 ) { grade = 'C'; flag = ' '; } if( tot >= 65 ) { grade = 'C'; flag = '+'; } if( tot >= 70 ) { grade = 'B'; flag = '-'; } if( tot >= 75 ) { grade = 'B'; flag = ' '; } if( tot >= 80 ) { grade = 'B'; flag = '+'; } if( tot >= 85 ) { grade = 'A'; flag = '-'; } if( tot >= 90 ) { grade = 'A'; flag = ' '; } if( tot >= 95 ) { grade = 'A'; flag = '+'; } if( fin < 0 ) { grade = 'W'; flag = ' '; } printf("%20s %-15s %4.1f %4.1f %4.1f %4.1f %4.1f %5.1f %5.1f %5.1f %c%c\n", fname, lname, a1, a2, a3, a4, quiz, mid, fin, tot, grade, flag); } if( count > 0 ) { meana1 = tota1/count; meana2 = tota2/count; meana3 = tota3/count; meana4 = tota4/count; meanq = totq/count; meanm = totm/count; meanf = totf/count; meant = tott/count; vara1 = (totsqa1/count)-(meana1*meana1); vara2 = (totsqa2/count)-(meana2*meana2); vara3 = (totsqa3/count)-(meana3*meana3); vara4 = (totsqa4/count)-(meana4*meana4); varq = (totsqq/count)-(meanq*meanq); varm = (totsqm/count)-(meanm*meanm); varf = (totsqf/count)-(meanf*meanf); vart = (totsqt/count)-(meant*meant); } printf(" ---------------------------------------------------------------------\n"); printf(" Class Average (n=%3d) %4.1f %4.1f %4.1f %4.1f %4.1f %5.1f %5.1f %5.1f\n", count, meana1, meana2, meana3, meana4, meanq, meanm, meanf, meant); printf(" Standard Deviation %4.1f %4.1f %4.1f %4.1f %4.1f %5.1f %5.1f %5.1f\n", sqrt(vara1), sqrt(vara2), sqrt(vara3), sqrt(vara4), sqrt(varq), sqrt(varm), sqrt(varf), sqrt(vart)); }