[정답] 50. 인덱스 연산자
◈ 기본 연습
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;
}
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[정답] 디딤돌 C언어 73. 문자열 정리하기 (0) | 2016.05.01 |
---|---|
[정답] 디딤돌 C언어 67. 정리하기(함수) (0) | 2016.05.01 |
[정답] 디딤돌 C언어 52. 함수 개요 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 49. 간접 연산자 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 47. 포인터 + 정수 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 46. 배열 선언문 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 44.정리하기(제어문) (0) | 2016.05.01 |
[정답] 디딤돌 C언어 43. 제어문 연습 - 별출력 (0) | 2016.04.30 |
[정답] 41. 반복문(while, do while, for) (0) | 2016.04.30 |
[정답] 디딤돌 C언어 40. 선택문(switch case) (0) | 2016.04.30 |