Skip to main content

열혈강의 C프로그래밍 – 도전! 프로그래밍 THREE – 1

4 X 4 int형 2차원 배열을 선언하고, 모든 요소를 아래 그림의 왼쪽에 있는 형태와 동일하게 초기화하자. 그리고 배열의 요소들을 오른쪽 방향으로 90˚씩 이동시켜서 출력하는 프로그램을 작성해보자. 배열이 변경되는 형태는 다음과 같다.

#include <stdio.h>

void arrprint(int (*a)[4], int size);
void rspin(int (*a)[4], int size);

int main(void)
{
int arr[4][4]={
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int i, size;

size=(sizeof(arr)/sizeof(int))/4;

for(i=0; i<size; i++)
{
arrprint(arr, size);
rspin(arr, size);
}

return 0;
}

void arrprint(int (*a)[4], int size)
{
int i, j;

for(i=0; i<size; i++)
{
for(j=0; j<size; j++)
printf(”%5d ”, a[i][j]);
printf(”\n”);
}

printf(”\n\n”);

}

void rspin(int (*a)[4], int size)
{
int temp[4];
int i, j;

for(i=0; i<size/2; i++)
{
for(j=i; j<size-i-i; j++)
temp[j]=a[i][j];
for(j=i; j<size-1-i; j++)
a[i][2-j]=a[j+1][i];
for(j=i+1; j<size-i; j++)
a[j][i]=a[3-i][j];
for(j=i+1; j<size-i; j++)
a[3-i][j]=a[3-j][3-i];
for(j=i; j<size-i-i; j++)
a[j][3-i]=temp[j];
}
}

/*
megashocking님의 Hisworld.tistory.com에서 배워야 할 부분
rspin(int (*arr)[4], int rep) //rep는 배열을 90도씩 회전시키는 수.
{
int i, j, k;
int p_arr[4][4];

      for(k=0 ; k<rep ; k++)
{
for(i=0 ; i<4 ; i++)
for(j=0 ; j<4 ; j++)
p_arr[i][j]=arr[3-j][i]; //임시배열에 회전 시킨 후의 위치에 저장.

            for(i=0 ; i<4 ; i++)
for(j=0 ; j<4 ; j++)
arr[i][j]=p_arr[i][j]; //임시배열을 원래 배열에 복사.
}
}
*/

댓글 남기기