codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/* quiz7-1.c */ #include <stdio.h> #include <stdlib.h> /* filename of test-result. */ const char* g_filename = "quiz7-1.txt"; /* const char* g_filename = NULL; */ struct TestResult { int length; char kamoku1[6]; char kamoku2[6]; char kamoku3[6]; char kamoku4[6]; int tensu[100][5]; }; int die( const char* msg ); int check_eof(FILE* fp,int val); int skip_if_zero(FILE* fp,int val); int read_test_result(const char* filename,struct TestResult* out); int print_test_result(struct TestResult* result); int print_average_student(struct TestResult* result); int print_average_subject(struct TestResult* result); int main( int argc, char** argv){ struct TestResult result = {0}; const char* filename; if( g_filename != NULL ){ filename = g_filename; } else if( argc > 1 ){ filename = argv[1]; } else { die("error: filename required."); } read_test_result( filename, &result ); puts("tensu ::::"); print_test_result(&result); puts("\nStudent Average::::"); print_average_student(&result); puts("\nSubject Average::::"); print_average_subject(&result); return 0; } int read_test_result(const char* filename, struct TestResult* out){ int i; FILE* fp; int* pLine; int retVal = 0; if( ( fp = fopen(filename,"r") ) == NULL ){ die("error: cannot open file."); } while( retVal != 1 ){ retVal = fscanf(fp,"%d",&(out->length)); check_eof(fp,retVal); skip_if_zero(fp,retVal); } if( out->length < 1 || out->length > 100 ){ fclose(fp); die("error: invalid number of records."); } retVal = 0; while( retVal != 4 ){ retVal = fscanf(fp,"%5s%5s%5s%5s", out->kamoku1, out->kamoku2, out->kamoku3, out->kamoku4 ); check_eof(fp,retVal); skip_if_zero(fp,retVal); } for( i = 0; i < out->length; i++ ){ pLine = out->tensu[i]; retVal = 0; while( retVal != 5 ){ retVal = fscanf(fp,"%d%d%d%d%d", &(pLine[0]), &(pLine[1]), &(pLine[2]), &(pLine[3]), &(pLine[4]) ); check_eof(fp,retVal); skip_if_zero(fp,retVal); } } fclose(fp); return 0; } /* redundant */ int print_test_result(struct TestResult* result){ int i; int length; length = result->length; for( i = 0; i < length; i++ ){ printf("%d %d %d %d %d\n", result->tensu[i][0], result->tensu[i][1], result->tensu[i][2], result->tensu[i][3], result->tensu[i][4] ); } } /* redundant */ int print_average_student(struct TestResult* result){ int i; int j; int length; double sumStudent; length = result->length; for( i = 0; i < length; i++ ){ sumStudent = 0; for( j = 1; j < 5; j++ ){ sumStudent += result->tensu[i][j]; } printf("%d : %2.2f\n", result->tensu[i][0], (sumStudent/4) ); } return 0; } /* redundant */ int print_average_subject(struct TestResult* result){ int i; int j; int length; /* intmax >> 100*100 */ double sumSubject[4] = {0,0,0,0}; length = result->length; for( i = 0; i < length; i++ ){ for( j = 0; j < 4; j++ ){ sumSubject[j] += result->tensu[i][j+1]; } } if( length != 0 ){ printf("%s : %2.1f\n", result->kamoku1, (sumSubject[0]/length)); printf("%s : %2.1f\n", result->kamoku2, (sumSubject[1]/length)); printf("%s : %2.1f\n", result->kamoku3, (sumSubject[2]/length)); printf("%s : %2.1f\n", result->kamoku4, (sumSubject[3]/length)); } return 0; } int check_eof(FILE* fp,int val){ if( val == EOF ){ fclose(fp); die("error: unexpected EOF."); } return 0; } int skip_if_zero(FILE* fp, int val){ if( val == 0 ){ fgetc(fp); } return 0; } int die( const char* msg ){ puts(msg); exit(-1); return 0; } /* quiz 7-1.txt 5 Mat Phys Chem Eng 8001 78 64 88 90 8004 34 40 52 67 8013 83 77 89 93 8025 98 81 69 77 8062 56 63 47 23 */ /* $ ./a.out tensu :::: 8001 78 64 88 90 8004 34 40 52 67 8013 83 77 89 93 8025 98 81 69 77 8062 56 63 47 23 Student Average:::: 8001 : 80.00 8004 : 48.25 8013 : 85.50 8025 : 81.25 8062 : 47.25 Subject Average:::: Mat : 69.8 Phys : 65.0 Chem : 69.0 Eng : 70.0 */
Private
[
?
]
Run code
Submit