◈ 기본 연습
1. 4 명의 국어 성적을 관리할 수 있는 배열을 선언하시오.
그리고 첫번째 학생은 90점, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입합니다.
네 명의 국어 성적의 합계, 평균을 출력하는 프로그램을 작성하시오
답:
//4 명의 국어 성적을 관리할 수 있는 배열을 선언하시오. //그리고 첫번째 학생은 90점, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입 //네 명의 국어 성적의 합계, 평균을 출력하는 프로그램을 작성하시오 #include <stdio.h> #define MAX_STUDENT 4 int main(void) { int scores[MAX_STUDENT]; int ni; int sum=0; scores[0] = 90; scores[1] = 85; scores[2] = 69; scores[3] = 75; for (ni = 0; ni < MAX_STUDENT; ni++) { sum += scores[ni]; } printf("합계: %d , 평균: %.2f\n", sum, sum / (double)MAX_STUDENT); return 0; }
▷실행 결과
합계: 319 평균: 79.75
2. 한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.
a. 국어, 영어, 수학 성적은 초기값을 -1로 설정합니다.
b. 프로그램은 다음을 반복합니다.
b.1 “I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력
b.2 하나의 문자를 입력받음
b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일
때는 검색,
‘l’, ‘L’일 때는 전체 출력을 수행합니다.
* 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.
*삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1로 설정합니다.
*검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.
*전체 출력에서는 모든 과목의 성적을 출력합니다.
(단, E를 누르면 프로그램을 종료)
답:
//한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오. //a.국어, 영어, 수학 성적은 초기값을 - 1로 설정합니다. //b.프로그램은 다음을 반복합니다. //b.1 “I: 추가 D : 삭제 S : 검색 L : 전체 출력 E : 종료”를 화면에 출력 //b.2 하나의 문자를 입력받음 //b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제, ‘s’ 혹은 ‘S’일 //때는 검색, //‘l’, ‘L’일 때는 전체 출력을 수행합니다. //* 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다. //*삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 - 1로 설정합니다. //*검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다. //*전체 출력에서는 모든 과목의 성적을 출력합니다. //(단, E를 누르면 프로그램을 종료) #include <stdio.h> enum SubjectType { KOREAN, ENGLISH, MATH, MAX_SUBJECT }; int main(void) { int scores[MAX_SUBJECT] = { -1,-1,-1 }; const char *titles[MAX_SUBJECT] = { "국어","영어","수학" }; char key = '\0'; int si, s; while (key != 'E') { printf("I:추가 D:삭제 S:검색 L:전체 출력 E:종료\n"); printf("메뉴 선택:"); scanf_s(" %c", &key, 1); //엔터를 스킵하기 위해 앞에 공백을 포함 switch (key) { case 'i': case 'I': for (si = 0; si < MAX_SUBJECT; si++) { printf("%s:%d ", titles[si], si + 1); } printf("과목 입력:"); scanf_s("%d", &s); if ((s <= 0) || (s>MAX_SUBJECT)) { printf("잘못 선택하셨네요."); } else { printf("성적 입력:"); scanf_s("%d", scores + s - 1); if ((scores[s - 1] < 0) || (scores[s - 1]>100)) { scores[s - 1] = -1; } } break; case 'd': case 'D': for (si = 0; si < MAX_SUBJECT; si++) { printf("%s:%d ", titles[si], si + 1); } printf("과목 입력:"); scanf_s("%d", &s); if ((s <= 0) || (s>MAX_SUBJECT)) { printf("잘못 선택하셨네요."); } else { scores[s - 1] = -1; } break; case 's': case 'S': for (si = 0; si < MAX_SUBJECT; si++) { printf("%s:%d ", titles[si], si + 1); } printf("과목 입력:"); scanf_s("%d", &s); if ((s <= 0) || (s>MAX_SUBJECT)) { printf("잘못 선택하셨네요."); } else { printf("%d\n",scores[s - 1]); } break; case 'l': case 'L': for (si = 0; si < MAX_SUBJECT; si++) { if (scores[si] != -1) { printf("%s과목 성적:%d\n", titles[si], scores[si]); } else { printf("%s과목 성적:입력하지 않았음\n", titles[si]); } } break; case 'E': break; default: printf("잘못 선택하셨네요.\n"); break; } } return 0; }
코드를 보시면 같은 작업을 계속 작성하는 부분을 알 수 있습니다.
이처럼 같은 코드를 중복하는 것은 유지 보수 비용을 많이 들게 합니다.
이러한 부분들은 함수를 사용하여 구조적으로 프로그래밍하여 개선할 수 있습니다.
3.10 개의 정수를 입력받아 크기 순으로 정렬하시오.
답:
//10 개의 정수를 입력받아 크기 순으로 정렬 #include <stdio.h> int main(void) { int arr[10]; int i,j; printf("10개의 정수를 입력하세요.\n"); //입력 for (i = 0; i < 10; i++) { printf("%d 번째:",i+1); scanf_s("%d", arr + i); } //순차 정렬 for (i = 0; i < 10; i++) { for (j = i; j < 10; j++) { if (arr[i] > arr[j])//arr[i]가 arr[j]보다 크면 { //두 수 교환 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } //출력 for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }