Chapter 08. 배열 (문제 풀이)
08 - 1) 배열에서 최댓값 구하기
최댓값을 출력하는 프로그램을 완성한다.
단, 기존에 최댓값이 저장되었던 nMax 변수를 사용하지 않아야 하며, 추가로 새로운 변수를 선언할 수도 없다.
그러므로 아래 코드에 기반을 두고 새로운 코드를 추가하여 최댓값을 구하는 프로그램을 완성한다.
#include <stdio.h>
int main(void)
{
int aList[5] = {30, 40, 10, 50, 20};
int i =0;
//여기에 들어갈 코드를 작성
//이하 코드는 수정하지 않는다.
for(i = 0; i < 5; ++i)
{
printf("%d\t", aList[i]);
}
putchar('\n');
printf("MAX: %d\n", aList[0]);
return 0;
}
출력 예:
50 40 10 50 20
MAX: 50
출력 예와 가장 아래쪽에 MAX를 출력하는 printf문을 보니 단순히 MAX값을 aList[0]으로 보내면 되는 문제인 것 같다.
실행 결과
08 - 2) 요소의 값을 교환하는 방식으로 배열에서 최솟값 구하기
최솟값을 변수를 별도로 선언하지 않고 배열의 0번 요소(aList[0])에 저장한다.
그러나 1~4번 요소들을 각각 비교하여 작은 값을 무조건 0번 요소에 대입하는 것이 아니라 교환한다.
예를 들어, 0번 요소에 30이 들어있고 2번 요소에 10이 들어있을 경우 10이 0번 요소에 대입되는 것이 아니라 0번 요소와 2번 요소의 값을 서로 교환해서 0번 요소에 10이 2번 요소에 30이 저장되도록 한다.
따라서 단순 대입으로 인해 배열 요소 중 일부 값이 유실되는 일이 없어야 한다.
#include <stdio.h>
int main(void)
{
int aList[5] = {30, 40, 10, 50, 20};
int i =0, nTmp = 0;
//여기에 들어갈 코드를 작성한다.
//이하 코드는 수정하지 않는다.
for(i = 0; i < 5; ++i)
{
printf("%d\t", aList[i]);
}
putchar('\n');
printf("MIN: %d\n", aList[0]);
return 0;
}
출력 예:
10 40 30 50 20
MIN: 10
실행 결과
08 - 3) 2차원 배열의 행과 열의 총합 계산하기
요소가 int형이고 열의 길이가 4, 행의 길이가 3인 배열의 행, 열의 총합을 계산하는 프로그램을 작성한다.
예를 들어, 0번 행의 0~2열 요소의 총합을 0번 행의 3번 열에 저장한다.
같은 방법으로 1번의 3번 열에도 같은 행에 속한 나머지 요소들의 총합을 저장한다.
그리고 마지막 2번 행은 각 열의 총합이 2번 행에 속한 요소에 저장되도록 한다.
즉, aList[0][0], aList[0][1] 요소의 총합을 aList[0][2]에 저장해야 한다.
반드시 다음 코드를 기반으로 작성하며, 추가로 변수를 선언할 수 없다.
#include <stdio.h>
int main(void)
{
int aList[3][4] = {
{10, 20, 30},
{40, 50, 60}
};
int i=0, j=0;
//여기에 들어갈 코드를 작성한다.
for( i=0; i<3; ++i)
{
for( j=0; j<4; ++j)
{
printf("%d\t", aList[i][j]);
}
putchar('\n');
}
}
출력 예:
10 20 30 60
40 50 60 150
50 70 90 210
실행 결과
연습문제
8 - 1) 요소의 자료형이 int형이고 길이가 5인 배열을 선언한 후, 사용자가 입력한 다섯 개의 정수로 초기화 합니다.
그리고 그중에서 가장 큰 수와 가장 작은 수를 출력하는 프로그램을 작성합니다.
실행 결과
8 - 2) 사용자로부터 문자열을 입력받은 후 문자열의 길이를 출력하는 프로그램을 작성합니다.
단, 입력되는 문자열이 한글이라고 가정하고 한글 문자의 개수를 출력해야 합니다.
(무조건 한글만 입력, 화이트 스페이스도 없음)
실행 결과
- 출처 : 독하게 시작하는 C 프로그래밍 (최호성, 루비 페이퍼)