728x90
728x90
다차원 배열 : 2차원 이상의 배열
다차원배열 선언
int arr[100] // 40바이트 할당, 1차원배열, 선
int arr[10][10] // 10*10, 2차원배열, 면
int arr[5][5][5] // 5*5*5, 3차원배열
2차원배열의 선언 : 2차원적 메모리 구조를 구성
12개*4바이트 = 48바이트로 구성되는 배열이 만들어짐.
2차원 배열 요소 접근 방법
#include <stdio.h>
int main()
{
int arr[3][3];
arr[0][0]=2; // 첫 번째 요소
arr[1][0]=4; // 두번째 행 첫번째 요소
arr[2][2]=8; // 마지막 요소
return 0;
}
예제
#include <stdio.h>
int main()
{
int somang[4][2];
//int somang[8]; 1차원배열로 바꿀 경우도 생각해 볼 것
int i,j;
int popu;
// 가구별 거주인구 입력
for(i=0; i<4; i++) {
for(j=0; j<2; j++) {
printf("%d 층 %d 호 인구 입력 : ", i+1, j+1);
scanf("%d", &somang[i][j]);
}
}
// 소망빌라 층별 인구 수 출력
for(i=0; i<4; i++) {
popu=0;
for(j=0; j<2; j++) {
popu+=somang[i][j];
}
printf("%d 층 전체 인구 : %d \n", i+1, popu);
}
return 0;
}
다차원 배열의 실제 메모리 구성
1차원 배열과 동일하나 ** 접근 방법을 2차원적으로 해석할 뿐이다 **
2차원적으로 이해하는 습관을 가지자.
(시스템의 메모리구조는 1차원적이라 플랫하게 할당되긴 한다)
2차원배열 선언과 동시에 초기화
// 행 단위로 모든 요소를 초기화
int somag[3][3]={
{1,2,3},
{4,5,6},
{7,8,9},
};
// 행 단위로 일부 요소만 초기화
// 나머지는 0으로
int somag[3][3]={
{1},
{4,5},
{7,8,9},
};
// 1차원 배열 형태의 초기화
int somag[3][3]={1,2,3 4,5,6 7};
// 문법적으로는 가능하나 비추
// 내부중괄호를 활용할 것
초기화 리스트에 의한 배열 크기의 결정
1차원 배열의 예
int arr[] = {1,2,3,4,5};
2차원 배열의 예
int arr[][] = {1,2,3,4,5,6,7,8}; //에러
int arr[][4] = {1,2,3,4,5,6,7,8};
int arr[][2] = {1,2,3,4,5,6,7,8};
3차원 배열의 선언과 의미
3차원적 메모리 구조를 의미
일반적으로 필요 앖고 개념만 이해할 것
int a[3][3][3]
연습문제
1. 가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 2,3,4단을 저장 후 출력하라 (흰트 : 2중 for문)
더보기
#include <stdio.h>
int main()
{
int arr[3][9];
//2,3,4단 출력
for(int i=0; i<3; i++){
for(int j=0; j<9; j++) {
// 0 + 2, 3, 4
arr[i][j] = (i+2)*(j+1); //구구단 결과값
printf("%d x %d = %d\n", i+2, j+1, arr[i][j]);
}
}
return 0;
}
2. 생략,
3. 3명의 학생 국영수 3 과목의 점수를 입력한 후 4행에는 각 과목의 총점,
4열에는 각 학생 총점을 계산하는 프로그램을 제작해라.
더보기
https://karen0117.tistory.com/52 참고
#include <stdio.h>
int main()
{
int arr[4][4];
// 행은 과목
// 열은 사람
int studentTotal;
int subjectTotal;
int total = 0;
// 학생별 정보 입력
for(int i=0; i<3; i++) {
studentTotal=0;
printf("%d 번째 학생의 점수를 입력하시오\n", i+1);
// 과목별 성적 입력
for(int j=0; j<3; j++) {
scanf("%d", &arr[i][j]);
studentTotal += arr[i][j];
}
arr[i][3] = studentTotal; //학생별 총점
total += studentTotal;
//printf("%d\n", arr[i][3]);
}
// 과목별 총점
for(int i=0; i<3; i++)
{
subjectTotal=0;
for(int j=0; j<3; j++) {
subjectTotal += arr[j][i];
}
//마지막에 대입
arr[3][i] = subjectTotal;
}
arr[3][3] = total;
// 합쳐서 보여주는 부분
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
}
728x90
728x90
'C, C++ > 열혈 C 프로그래밍' 카테고리의 다른 글
열혈 C 18장 다차원 배열 그리고 포인터 (0) | 2021.09.07 |
---|---|
열혈 C 17장 포인터의 포인터 (0) | 2021.09.07 |
열혈 C 14장 포인터와 함수에 대한 이해 (0) | 2021.09.03 |
열혈 C 13장 포인터와 배열 함께 이해하기 (0) | 2021.09.02 |
열혈 C 12장 포인터 (0) | 2021.09.02 |