<윤성우의 열혈 C 프로그래밍>
(chap 16 : 다차원 배열)
- 간단 개념
int arr1[3] [4]; // 세로가 3, 가로가 4인 int형 2차원 배열
TYPE arr[세로길이] [가로길이]; // 2차원 배열의 선언형태
TYPE arr2[높이] [세로길이] [가로길이]; // 3차원 배열의 선언형태
1. 문제1
가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 중 2단, 3단, 4단을 저장한 후 출력해라.
풀이
단순하게 이중 for문을 사용해서 2차원 배열에 값을 저장하는 방식을 통해서 해결 할 수 있다.
#include <stdio.h>
int main(void)
{
int arr[3][9];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 9; j++)
arr[i][j] = (i + 2) * (j + 1);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 9; j++)
printf("%d * %d = %d ", i + 2, j + 1, arr[i][j]);
printf("\n");
}
return 0;
}
2. 문제2
문제 생략.
풀이
이 문제는 문제에서 2차원 배열 A를 선언함과 동시에 초기화하는 조건이 주어져 있다. 그래서 그에 맞춰서 초기화를 진행한 후에 문제의 주어진 조건에 맞게 2차원 배열 B에 이미 선언되어 있는 2차원 배열 A를 이용해서 초기화한 후 초기화가 잘 되었는지 확인하기 위해 출력하는 방식으로 문제를 풀이했다.
#include <stdio.h>
int main(void)
{
int A[2][4] = {
{1,2,3,4},
{5,6,7,8}
};
int B[4][2];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 4; j++)
B[j][i] = A[i][j];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 2; j++)
printf("%d ", B[i][j]);
printf("\n");
}
return 0;
}
3. 문제3
4명의 학생의 국어, 영어, 수학, 국사인 네 과목의 점수를 입력한 후 5행에는 각 과목의 총점, 5열에는 각 학생의 총점을 계산하는 프로그램을 제작해라.
풀이
문제의 주어진 조건에 따라서 2차원 배열의 합만 잘 지정해주면 쉽게 풀이할 수 있는 문제이다.
#include <stdio.h>
int main(void)
{
int arr[5][5];
int sum = 0;
int hap = 0;
int total = 0;
for (int i = 0; i < 4; i++) // 각 학생 성적 총점
{
sum = 0;
printf("%d번째 학생의 국, 영, 수, 국의 성적을 입력하시오 : ", i + 1);
for (int j = 0; j < 4; j++)
{
scanf_s("%d", &arr[i][j]);
sum += arr[i][j];
}
arr[i][4] = sum;
total += sum;
}
for (int i = 0; i < 4; i++) // 과목별 총점
{
hap = 0;
for (int j = 0; j < 4; j++)
{
hap += arr[j][i];
}
arr[4][i] = hap;
}
arr[4][4] = total;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
return 0;
}