본 강의에 들어가기 전

Similar documents
untitled

K&R2 Reference Manual 번역본


PowerPoint 프레젠테이션

untitled

PowerPoint 프레젠테이션

중간고사

vi 사용법

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

chap7.key

Microsoft PowerPoint - lab14.pptx

03장.스택.key

untitled

C++-¿Ïº®Çؼ³10Àå

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

歯9장.PDF

C 언어 프로그래밊 과제 풀이

untitled

untitled

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

untitled

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

5.스택(강의자료).key

PowerPoint 프레젠테이션

02장.배열과 클래스

商用

Microsoft PowerPoint - chap11-포인터의활용.pptx

PowerPoint 프레젠테이션

교육지원 IT시스템 선진화

Microsoft PowerPoint - 08_(C_Programming)_(Korean)_Preprocessing

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

chap8.PDF

기초컴퓨터프로그래밍

PowerPoint 프레젠테이션


PowerPoint 프레젠테이션

/chroot/lib/ /chroot/etc/

제1장 Unix란 무엇인가?

untitled

PowerPoint 프레젠테이션

11장 포인터

13주-14주proc.PDF

1장. 유닉스 시스템 프로그래밍 개요

PowerPoint 프레젠테이션

C 프로그래밊 개요

Sena Technologies, Inc. HelloDevice Super 1.1.0

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

PowerPoint 프레젠테이션

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

14 주차구조체와공용체

컴파일러

C 프로그래밊 개요

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

윤성우의 열혈 TCP/IP 소켓 프로그래밍

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - Chapter_09.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - Lesson13.pptx

PowerPoint 프레젠테이션

Line (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max

Microsoft PowerPoint - chap05-제어문.pptx

Chapter 4. LISTS

Microsoft PowerPoint - ch08 - 구조체 (structure) am0845

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

6주차.key

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

강의10

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

금오공대 컴퓨터공학전공 강의자료

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint 프레젠테이션

이번장에서학습할내용 구조체란무엇인가? 구조체의선언, 초기화, 사용 구조체의배열 구조체와포인터 구조체와함수 공용체 열거형 typedef 구조체는복잡한내용을일목요연하여정리하는데유용하게사용됩니다. 2

untitled


Microsoft PowerPoint - chap10-함수의활용.pptx

ch15

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap-07.pptx

11장 포인터

금오공대 컴퓨터공학전공 강의자료

02 C h a p t e r Java

슬라이드 1

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - Chapter14_17.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Transcription:

C 기초특강 종합과제

과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2

Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o score_util.o CC = gcc score : score.h $(OBJS) $(CC) -o score $(OBJS) score_main.o : score.h score_main.c score_util.o : score.h score_util.c score_input.o : score.h score_input.c score_calc.o : score.h score_calc.c score_print.o : score.h score_print.c test1 : test1.o score_input.o score_util.o gcc -o test1 test1.o score_input.o score_util.o test2 : test2.o score_input.o score_util.o gcc -o test2 test2.o score_input.o score_util.o test3 : test3.o score_input.o score_util.o score_print.o score_calc.o gcc -o test3 test3.o score_input.o score_util.o score_print.o score_calc.o clean : rm $(OBJS) score rebuild : make clean make score 3

score.h (1) 1 #ifndef _SCORE_H 2 #define _SCORE_H 3 4 #include <stdio.h> 5 6 #define MAX_CLASS_SIZE 100 7 #define MAX_SUBJECTS 50 8 #define MAX_SUBJECTS_PER_STD 10 9 10 #define LINE_SIZE 255 11 #define SUB_NAME_SIZE 40 12 #define STD_NAME_SIZE 12 13 #define STD_ID_SIZE 12 14 15 typedef struct { 16 char name[sub_name_size]; 17 int sub_code; 18 int scored_std_no; 19 int total_std_score; 20 } subject_t; 21 22 typedef struct { 23 int sub_code; 24 int score; 25 } sub_score_t; 26 27 typedef struct { 28 char std_name[std_name_size]; 29 char std_id[std_id_size]; 30 sub_score_t sub_scores[max_subjects_per_std]; 31 int subjects_no; 32 int total_score; 33 double average; 34 } score_t; 4

score.h (2) 36 int is_dup_sub(subject_t subjects[], int target); 37 int sub_code_to_index(subject_t subjects[], int table_size, int sub_code); 38 int is_valid_sub_code(subject_t subjects[], int table_size, int sub_code); 39 40 int fget_subjects(file *inflie, subject_t subjects[]); 41 int fget_std_scores(file *infile, score_t scores[], 42 subject_t subjects[], int sub_table_size); 43 44 void calc_personal_total_avg(score_t scores[], int table_size); 45 void calc_class_total_avg(score_t scores[], int table_size, 46 subject_t subjects[], int subjects_no, 47 int *total_all, double *average_all); 48 49 void fput_std_scores(file *outfile, score_t scores[], int table_size, 50 subject_t subjects[], int sub_table_size); 51 void fput_sub_summary(file *outfile, subject_t subjects[], int table_size); 52 53 #endif 5

test1.c 1 #include "score.h" 2 3 main() 4 { 5 FILE *ifile; 6 subject_t subjects[max_subjects] = {0}; 7 int subjects_no; 8 int i; 9 10 ifile = fopen("subject_data", "r"); 11 subjects_no = fget_subjects(ifile, subjects); 12 fclose(ifile); 13 14 for (i = 0; i < subjects_no; i++) { 15 printf("%s %d\n", subjects[i].name, subjects[i].sub_code); 16 } 17 } 6

test2.c 1 #include "score.h" 2 3 main() 4 { 5 FILE *ifile; 6 subject_t subjects[max_subjects] = {0}; 7 score_t scores[max_class_size] = {0}; 8 int subjects_no; 9 int students_no; 10 int i; 11 int j; 12 13 ifile = fopen("subject_data", "r"); 14 subjects_no = fget_subjects(ifile, subjects); 15 fclose(ifile); 16 17 for (i = 0; i < subjects_no; i++) { 18 printf("%s %d\n", subjects[i].name, subjects[i].sub_code); 19 } 20 21 ifile = fopen("score_data", "r"); 22 students_no = fget_std_scores(ifile, scores, subjects, subjects_no); 23 fclose(ifile); 24 25 for (i = 0; i < students_no; i++) { 26 printf("%s %s %d ", scores[i].std_name, scores[i].std_id, scores[i].subjects_no); 27 for (j = 0; j < scores[i].subjects_no; j++) { 28 printf("%d %d ", scores[i].sub_scores[j].sub_code, 29 scores[i].sub_scores[j].score); 30 } 31 printf("\n"); 32 } 33 } 7

test3.c 1 #include "score.h" 2 3 main() 4 { 5 FILE *ifile; 6 subject_t subjects[max_subjects] = {0}; 7 score_t scores[max_class_size] = {0}; 8 int subjects_no; 9 int students_no; 10 int total_score; 11 double total_avg; 12 int i; 13 int j; 14 15 ifile = fopen("subject_data", "r"); 16 subjects_no = fget_subjects(ifile, subjects); 17 fclose(ifile); 18 19 for (i = 0; i < subjects_no; i++) { 20 printf("%-20s %d\n", 21 subjects[i].name, subjects[i].sub_code); 22 } 23 24 ifile = fopen("score_data", "r"); 25 students_no = fget_std_scores(ifile, 26 scores, subjects, subjects_no); 27 fclose(ifile); 28 calc_personal_total_avg(scores, students_no); 29 calc_class_total_avg(scores, students_no, subjects, 30 subjects_no, &total_score, &total_avg); 31 fput_std_scores(stdout, scores, students_no, 32 subjects, subjects_no); 33 fput_sub_summary(stdout, subjects, subjects_no); 34 } 8

score_main.c (1) 1 #include "score.h" 2 #include <stdlib.h> 3 4 main() 5 { 6 FILE *ifile; 7 subject_t subjects[max_subjects] = {0}; 8 score_t scores[max_class_size] = {0}; 9 int subjects_no; 10 int students_no; 11 int total_score; 12 double total_avg; 13 14 ifile = fopen("subject_data", "r"); 15 if (ifile) { 16 subjects_no = fget_subjects(ifile, subjects); 17 fclose(ifile); 18 19 ifile = fopen("score_data", "r"); 20 if (ifile) { 21 students_no = fget_std_scores(ifile, scores, subjects, subjects_no); 22 fclose(ifile); 23 24 calc_personal_total_avg(scores, students_no); 25 calc_class_total_avg(scores, students_no, 26 subjects, subjects_no, &total_score, &total_avg); 27 28 fput_std_scores(stdout, scores, students_no, subjects, subjects_no); 29 fput_sub_summary(stdout, subjects, subjects_no); 30 } 9

score_main.c (2) 31 else { 32 fprintf(stderr, "Error in fopen!\n"); 33 exit(2); 34 } 35 } 36 else { 37 fprintf(stderr, "Error in fopen!\n"); 38 exit(1); 39 } 40 } 10

score_util.c (1) 1 #include "score.h" 2 3 /******************************************************************************/ 4 int is_dup_sub(subject_t subjects[], int target) 5 { 6 int i; 7 8 for (i = 0; i < target; i++) { 9 if (!strncmp(subjects[i].name, 10 subjects[target].name, 11 SUB_NAME_SIZE) 12 (subjects[i].sub_code 13 == subjects[target].sub_code)) 14 return 1; 15 } 16 return 0; 17 } 18 11

score_util.c (2) 19 /******************************************************************************/ 20 int sub_code_to_index(subject_t subjects[], int table_size, int target) 21 { 22 int i; 23 24 for (i = 0; i < table_size; i++) { 25 if (subjects[i].sub_code == target) 26 return i; 27 } 28 return -1; 29 } 30 31 /******************************************************************************/ 32 int is_valid_sub_code(subject_t subjects[], int table_size, int target) 33 { 34 if (sub_code_to_index(subjects, table_size, target) >= 0) 35 return 1; 36 else 37 return 0; 38 } 12

score_input.c (1) 1 #include "score.h" 2 #include <string.h> 3 4 /******************************************************************************/ 5 int fget_subjects(file* infile, subject_t subjects[]) 6 { 7 int i; 8 char line[line_size]; 9 int line_no = 0; 10 11 for (i = 0; i < MAX_SUBJECTS; i++) { 12 if (fgets(line, LINE_SIZE, infile)) { 13 ++line_no; 14 15 if (sscanf(line, "%s %d", 16 &subjects[i].name, 17 &subjects[i].sub_code)!= 2) { 18 return i; 19 } 20 else { 21 if (is_dup_sub(subjects, i)) { 22 fprintf(stderr, 23 "\nduplicated sub_code or sub_name in line %d!\n", 24 line_no); 25 i--; 26 } 27 } 28 } 29 else { 30 return i; 31 } 32 } 33 return i; 34 } 13

score_input.c (2) 36 /******************************************************************************/ 37 int fget_std_scores(file* infile, score_t scores[], subject_t subjects[], int sub_table_size) 38 { 39 int i; 40 int j; 41 char line[line_size]; 42 char *tmp; 43 int read_char_cnt; 44 int final_pos; 45 46 for (i = 0; i < MAX_CLASS_SIZE; i++) { 47 memset(line, 0, LINE_SIZE); 48 if (fgets(line, LINE_SIZE, infile)) { 49 tmp = line; 50 final_pos = strlen(line); 51 52 if (sscanf(tmp, "%s %s%n", 53 &scores[i].std_name, 54 &scores[i].std_id, 55 &read_char_cnt)!= 2) { 56 return i; 57 } 14

score_input.c (3) 58 else { 59 tmp += read_char_cnt; 60 for (j = 0; (j < MAX_SUBJECTS_PER_STD) && (tmp < line + final_pos); j++) { 61 if (sscanf(tmp, "%d %d%n", 62 &scores[i].sub_scores[j].sub_code, 63 &scores[i].sub_scores[j].score, 64 &read_char_cnt) == 2) { 65 tmp += read_char_cnt; 66 if (!is_valid_sub_code(subjects, 67 sub_table_size, 68 scores[i].sub_scores[j].sub_code) 69 (scores[i].sub_scores[j].score < 0) 70 (scores[i].sub_scores[j].score > 100)) { 71 fprintf(stderr, "Invalid data in scores[%d]\n", i); 72 j--; 73 } 74 } 75 else { 76 break; 77 } 78 } 79 scores[i].subjects_no = j; 80 } 81 } 82 else { 83 return i; 84 } 85 } 86 return i; 87 } 15

score_calc.c (1) 1 #include "score.h" 2 3 /******************************************************************************/ 4 void calc_personal_total_avg(score_t scores[], int table_size) 5 { 6 int i; 7 int j; 8 9 for (i = 0; i < table_size; i++) { 10 scores[i].total_score = 0; 11 if (scores[i].subjects_no > 0) { 12 for (j = 0; j < scores[i].subjects_no; j++) 13 scores[i].total_score += scores[i].sub_scores[j].score; 14 15 scores[i].average = (double)scores[i].total_score / scores[i].subjects_no; 16 } 17 else { 18 scores[i].average = 0.; 19 } 20 } 21 } 16

score_calc.c (2) 23 /******************************************************************************/ 24 void calc_class_total_avg(score_t scores[], int table_size, 25 subject_t subjects[], int subjects_no, 26 int *total_all, double *average_all) 27 { 28 int i; 29 int j; 30 int sub_index; 31 32 *total_all = 0; 33 *average_all = 0.; 34 35 for (i = 0; i < table_size; i++) { 36 *total_all += scores[i].total_score; 37 38 for (j = 0; j < scores[i].subjects_no; j++) { 39 sub_index = sub_code_to_index(subjects, subjects_no, 40 scores[i].sub_scores[j].sub_code); 41 if (sub_index >= 0) { 42 subjects[sub_index].scored_std_no++; 43 subjects[sub_index].total_std_score 44 += scores[i].sub_scores[j].score; 45 } 46 else { 47 fprintf(stderr, "Invalid subject code in scores[%d]!\n", i); 48 } 49 } 50 } 51 } 17

score_print.c (1) 1 #include "score.h" 2 3 /******************************************************************************/ 4 void fput_std_scores(file *outfile, score_t scores[], int table_size, 5 subject_t subjects[], int sub_table_size) 6 { 7 int i; 8 int j; 9 int sub_index; 10 11 if (table_size > 0) { 12 fprintf(outfile, "Class Score Table\n\n"); 13 14 for (i = 0; i < table_size; i++) { 15 if (scores[i].subjects_no > 0) { 16 fprintf(outfile, "%-20s %-20s ", 17 scores[i].std_name, scores[i].std_id); 18 fprintf(outfile, "%4d / %d = %.2f\t", 19 scores[i].total_score, 20 scores[i].subjects_no, 21 scores[i].average); 22 23 for (j = 0; j < scores[i].subjects_no; j++) { 24 sub_index = sub_code_to_index(subjects, 25 sub_table_size, 26 scores[i].sub_scores[j].sub_code); 27 28 if (sub_index >= 0) { 29 fprintf(outfile, "%-20s %4d ", 30 subjects[sub_index].name, 31 scores[i].sub_scores[j].score); 32 } 33 } 34 fprintf(outfile, "\n"); 35 } 36 } 37 } 38 } 18

score_print.c (2) 40 /******************************************************************************/ 41 void fput_sub_summary(file *outfile, subject_t subjects[], int table_size) 42 { 43 int i; 44 45 if (table_size > 0) { 46 fprintf(outfile, "\nsubjects Summary\n\n"); 47 48 for (i = 0; i < table_size; i++) { 49 if (subjects[i].scored_std_no > 0) { 50 fprintf(outfile, "%-20s %6d %4d / %2d = %.2f\n", 51 subjects[i].name, 52 subjects[i].sub_code, 53 subjects[i].total_std_score, 54 subjects[i].scored_std_no, 55 (double) subjects[i].total_std_score 56 / subjects[i].scored_std_no); 57 } 58 } 59 } 60 } 19

subject_data 1 전산개론 1101 2 C프로그래밍 1201 3 DataBase 1201 4 기초프로그래밍 1102 관련데이터파일 score_data 1 홍길동 20133301 1101 90 1102 80 1201 70 2 이몽룡 20133302 1101 70 1102 80 3 김기영 20133303 1102 80 1201 200 4 김철수 20133304 1105 80 1201 80 1101 80 5 안현수 20133305 1102 90 1201 80 1101 80 20