먼저 학번과 성적이 저장된 파일이 존재해야한다.
/* 목적 : 파일을 읽어 각 반의 학생의 성적과 합계, 평균을 구하고 각 과목의 반평균을 구한다. 작성날짜 : 2013.09.23 */ #include <stdio.h> #include <stdlib.h> // 상수들 #define PEPLE_NUM 181 // 총학생수 정의 void openFile(FILE* fp); void printClass(int class); // 학생 정보를 저장하기 위한 구조체 선언 typedef struct student{ char class_st[10]; int class[3]; int score[5]; int total; float average; } Student; // 모든 함수에서 사용하기 위해 전역부에 선언 Student stu[PEPLE_NUM]; int main(int argc, char *argv[]) { FILE* fp = fopen("scr2013.txt", "r"); if (fp == NULL) { printf(" File is null.\n"); return -1; } openFile(fp); fclose(fp); printf("┌──────────────────────┐\n"); printf("│ 초등학교 1학년 성적 일람표 출력하기. │\n"); printf("└──────────────────────┘\n"); while(1) { int in = 0; printf(" 어느 반을 출력할 것입니까?(exit=0) : "); scanf("%d", &in); if(in == 0) { printf("program exit...\n"); break; } // 성적일람표 출력 함수 실행 printClass(in); } // while return 0; } /* =============== openFile ====================================== 파일을 읽어서 구조체 배열에 저장하고 총점, 평균 구하는 함수 사전조건 : main에서 읽은 파일을 배열에 입력하기 위해서 매개변수 fp로 받아온다. 사후조건 : 구조체 배열에 점수를 입력하고 총점, 평균을 구한다. */ void openFile(FILE* fp) { // 지역정의 int temp; int i; // 문장들 // 파일 읽어서 구조체 배열에 입력하기 for(i=0; i < PEPLE_NUM; i++) { fscanf(fp, "%s %d %d %d %d %d", &(stu[i]).class_st, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].score[3], &stu[i].score[4]); // 입력받은 문자열인 학번을 integer로 변환하기 위해 atoi함수를 사용했다. temp = atoi(stu[i].class_st); stu[i].class[0] = temp / 10000; stu[i].class[1] = (temp - (stu[i].class[0] * 10000)) / 100; stu[i].class[2] = (temp - (stu[i].class[0] * 10000) - (stu[i].class[1] * 100)) / 1; } // 입력받은 점수로 총점, 평균 계산하기 for(i = 0; i < PEPLE_NUM; i++) { stu[i].total = stu[i].score[0] + stu[i].score[1] + stu[i].score[2] + stu[i].score[3] + stu[i].score[4]; stu[i].average = stu[i].total / 5.0; } } // openFile //================= openFile End ================================= /* =============== printClass =================================== 출력하고자 하는 반을 주어진 틀에 맞게 출력하는 함수. 사전조건 : 출력하고자하는 반을 매개변수로 받는다. 사후조건 : 헤더를 출력하고 학생들의 정보를 모두 출력한다. 모두 출력하고 난뒤에 각 과목의 반평균을 출력한다. */ void printClass(int class) { // 지역정의 int i; int count = 0; float kor = 0; float math = 0; float social = 0; float science = 0; float pe = 0; // 문장들 printf("\n 1 학년 %2d 반 성적일람표\n", class); printf(" 학번 국어 산수 사회 과학 체육 총점 평균 \n"); printf("------------------------------------------------\n"); // 학생 출력. for(i = 0; i < PEPLE_NUM ;i++ ) { if(stu[i].class[1] == class) { printf("%5s %3d %3d %3d %3d %3d %3d %3.1f \n", stu[i].class_st, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].score[4], stu[i].total, stu[i].average); kor += stu[i].score[0]; math += stu[i].score[1]; social += stu[i].score[2]; science += stu[i].score[3]; pe += stu[i].score[4]; count++; } } // 학생이 없을 경우 출력. if(count == 0) { printf(" 자료가 없습니다.\n\n"); return; } printf("------------------------------------------------\n"); printf("반평균 %3.1f %3.1f %3.1f %3.1f %3.1f \n\n", kor/(float)count, math/count, social/count, science/count, pe/count); } // printClass //================= printClass End ===============================
'대학 생활 > C' 카테고리의 다른 글
[C] error C4996: 'fopen': This function ... 에러 (2) | 2014.03.12 |
---|---|
[C++]ifstream 클래스 (0) | 2013.10.31 |
[C] Binary Search, Sequential Search(이진찾기, 순차적찾기) 단어검색 (0) | 2013.10.14 |
[C] 프로그램 실행 시간 측정 (0) | 2013.10.08 |