게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 공부중에 static변수 관련 질문입니다
게시물ID : programmer_10153짧은주소 복사하기
작성자 : 형광젖소
추천 : 1
조회수 : 421회
댓글수 : 4개
등록시간 : 2015/05/17 12:32:47
옵션
  • 본인삭제금지
열혈강의 c프로그래밍 이라는 책으로 공부중입니다
도전!프로그래밍 Three에 2번 문제입니다. 달팽이 형태의 배열을 만드는 문제인데
4를 입력하면
1 2 3
12 13 14 5
11 16 15 6
10 9 8 7
이런식으로 시계방향으로 1씩 오르게 하는 문제입니다

이걸 제 나름 푼답시고 복잡하게 만들고 있는 도중에
static변수를 사용하다가 잘 이해가 안되는 부분이 있어서 질문좀 드릴까 합니다

아래는 제가 짠 부분인데요
-----------------------------------------------------------------------------------------------------


#include <stdio.h>

void tpfh1(int (*a)[10],int n,int k,int j)    // 세로 정방향 증가
{
int i;


for(i=0; i<n-(2*j); i++)
{
a[j][i+j]=k;
k++;
}

}

void tpfh2(int (*a)[10],int n,int k,int j)  // 세로 역방향 증가
{
int i;

for(i=0; i<n-1-(2*j); i++)
{
a[n-1-j][n-j-2-i]=k;
k++;
}

}

void rkfh1(int (*a)[10],int n,int k,int j)   // 가로 정방향 증가
{
int i;

for(i=0; i<n-1-(2*j); i++)
{
a[i+1+j][n-1-j]=k;
k++;
}

}

void rkfh2(int (*a)[10],int n,int k,int j) // 가로 역방향 증가
{
int i;

for(i=0; i<n-2-(2*j); i++)
{
a[n-2-j-i][j]=k;
k++;
}

}

int main(void)
{
int n;
int a[10][10];
int i,l;
static int j=0;
static int k=1;

printf("숫자를 입력하시오: ");
scanf("%d",&n);

for(i=0; i<n; i++)
{
tpfh1(a,n,k,j);
rkfh1(a,n,k,j);
tpfh2(a,n,k,j);
rkfh2(a,n,k,j);
j++;
}


for(i=0; i<n; i++)
{
for(l=0; l<n; l++)
{
printf("%4d",a[i][l]);

}
printf("\n");
}




return 0;
}

------------------------------------------------------------------------------------------

만들어놓고 가로 정방향, 역방향, 세로 정방향, 역방향 이렇게 함수 4개를 만들어서 돌리고있는데요
이게 좋은방법이든 아니든 상관없이(더 좋은 방법을 찾는 건 제가 더 공부해봐야할 문제라고 생각하구요;;) 
이 방법으로 문제를 해결한다는 가정 하에 궁금한 점이 있습니다

일단 실행하면
1 2 3 4
2 1 2 1
1 2 1 2
3 2 1 3
이렇게 나옵니다. k부분이 증가가 안되고있는데요..

j와 k 둘다 static변수를 이용해서 1씩 증가시키려고하는데
static j 는 함수 내부에서 계속 1씩 +돼서 중첩이 되는 반면
static k 는 중첩이 안되고 함수에서 나오면 초기화가 되는데
j와 k의 무슨 차이 때문에 이런 현상이 일어나는건가요?

main함수 내부에서의 값 변경만 저장이 되고 그 외 함수에서 변경한 값은 나오면 저장이 안되는건가요?
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호