코린이
Day14 본문
2차원 배열
1차원 배열 도는 다시 배열로 선언함으로써 여러 개의 배열을 다시 배열로 만드는 방식
2차원 배열 선언 방법: 자료형 배열명[행 크기][열 크기]
2차원 배열을 초기화할 때는 {}와 개행을 적절히 사용해 준다.
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
2차원 배열을 사용하고 접근할 때는 보통 이중 반복문을 이용해서 접근한다.
#include<stdio.h>
int main(){
int arr[3][3];
arr[2][1] = 10;
printf("출력: %d\n",arr[2][1]);
retrun 0;
}
#include<stdio.h>
int main(){
int arr[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
retrun 0;
}
다음은 1부터 9까지의 배열을 3개씩 3줄로 출력하는 함수로 이중 for 문을 사용하여 출력하였다.
2차원 배열을 통해 정수형 공간 10개의 1차원 배열을 또다시 10개를 선언하고 각 공간에 1~100까지의 값을 할당한 뒤 출력을 진행하기
#include<stdio.h>
int main(){
int cnt = 1;
int arr[10][10];//100
//값을 저장해주는 반복문
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
arr[i][j] = cnt;
cnt++;
}
}
//실행해주는 반복문
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%3d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
문제 풀이로는 cnt를 1로 지정해 주고 arr 배열은 [10][10]으로 해주어 100개를 만들어준다.
이중 for 문에서는 바깥쪽 for 문에서 i의 초깃값 0을 가지고 안쪽 for 문으로 들어간다.
i=0를 가진 안쪽 for 문을 9번 실행한 후 i=0인 상태에서 j가 10까지 증가하여 실행이 완료된 후에는 바깥쪽으로 돌아간다. 그럼 arr[i][j]는 증가하면서 cnt++로 같이 증가한다.
그 후 실행을 해주는 반복문에서 똑같이 이중 for 문을 해준다. printf 문에서 % 3d로 해준 이유는 100이 3자릿수여서 % 3d로 맞춰서 정리해 준다.
위에서 만든 프로그램을 대각선을 기준으로 뒤집어진 모양으로 출력하기
#include<stdio.h>
int main(){
int cnt1 = 1;
int arr1[10][10];//100
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
arr1[i][j] = cnt1;
cnt1 += 10;
printf("%3d ",arr1[i][j]);
}
cnt1 = i + 2;
printf("\n");
}
return 0;
}
사진 설명을 입력하세요.
답이 나오긴 했지만 너무 복잡하게 한거 같다고 들어서 다시 코드로 짰다.
#include<stdio.h>
int main(){
int cnt = 1;
int arr[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
arr[i][j] = cnt;
cnt++;
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
printf("%3d ",arr[j][i]);
}
printf("\n");
}
return 0;
}
정답은 같게 나오지만 좀 더 쉽게 코딩해서 나온 답이다.
어렵따 어려워...