<div>열혈강의 c프로그래밍 이라는 책으로 공부중입니다</div> <div>도전!프로그래밍 Three에 2번 문제입니다. 달팽이 형태의 배열을 만드는 문제인데</div> <div>4를 입력하면</div> <div>1<span class="Apple-tab-span" style="white-space:pre;"> </span>2<span class="Apple-tab-span" style="white-space:pre;"> </span>3<span class="Apple-tab-span" style="white-space:pre;"> </span>4 </div> <div>12<span class="Apple-tab-span" style="white-space:pre;"> </span>13<span class="Apple-tab-span" style="white-space:pre;"> </span>14<span class="Apple-tab-span" style="white-space:pre;"> </span>5</div> <div>11 <span class="Apple-tab-span" style="white-space:pre;"> </span>16<span class="Apple-tab-span" style="white-space:pre;"> </span>15<span class="Apple-tab-span" style="white-space:pre;"> </span>6</div> <div>10<span class="Apple-tab-span" style="white-space:pre;"> </span>9<span class="Apple-tab-span" style="white-space:pre;"> </span>8<span class="Apple-tab-span" style="white-space:pre;"> </span>7</div> <div>이런식으로 시계방향으로 1씩 오르게 하는 문제입니다</div> <div><br></div> <div>이걸 제 나름 푼답시고 복잡하게 만들고 있는 도중에</div> <div>static변수를 사용하다가 잘 이해가 안되는 부분이 있어서 질문좀 드릴까 합니다</div> <div><br></div> <div>아래는 제가 짠 부분인데요</div> <div>-----------------------------------------------------------------------------------------------------</div> <div><br></div> <div><br></div> <div>#include <stdio.h></div> <div><br></div> <div>void tpfh1(int (*a)[10],int n,int k,int j) <font color="#92d050">// 세<span style="font-size:9pt;line-height:1.5;">로 정방향 </span><span style="font-size:9pt;line-height:1.5;">증가</span></font></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n-(2*j); i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>a[j][i+j]=k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>k++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div>}</div> <div><br></div> <div>void tpfh2(int (*a)[10],int n,int k,int j) <span style="font-size:9pt;line-height:1.5;"> <font color="#92d050">// 세</font></span><font color="#92d050"><span style="font-size:9pt;line-height:1.5;">로 역방향 </span><span style="font-size:9pt;line-height:1.5;">증가</span></font></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n-1-(2*j); i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>a[n-1-j][n-j-2-i]=k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>k++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div>}</div> <div><br></div> <div>void rkfh1(int (*a)[10],int n,int k,int j) <span style="font-size:9pt;line-height:1.5;"> <font color="#92d050">// 가</font></span><font color="#92d050"><span style="font-size:9pt;line-height:1.5;">로 정방향 </span><span style="font-size:9pt;line-height:1.5;">증가</span></font></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n-1-(2*j); i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>a[i+1+j][n-1-j]=k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>k++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div>}</div> <div><br></div> <div>void rkfh2(int (*a)[10],int n,int k,int j)<span style="font-size:9pt;line-height:1.5;"> <font color="#92d050">// 가</font></span><span style="font-size:9pt;line-height:1.5;"><font color="#92d050">로 역방향 증가</font></span></div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n-2-(2*j); i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>a[n-2-j-i][j]=k;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>k++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div>}</div> <div><br></div> <div>int main(void)</div> <div>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int n;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int a[10][10];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i,l;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>static int j=0;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>static int k=1;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("숫자를 입력하시오: ");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>scanf("%d",&n);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>tpfh1(a,n,k,j);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>rkfh1(a,n,k,j);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>tpfh2(a,n,k,j);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>rkfh2(a,n,k,j);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>j++;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<n; i++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(l=0; l<n; l++)</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>{</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%4d",a[i][l]);</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div> <div><br></div> <div>------------------------------------------------------------------------------------------</div> <div><br></div> <div> <div>만들어놓고 가로 정방향, 역방향, 세로 정방향, 역방향 이렇게 <span style="font-size:9pt;line-height:1.5;">함수 4개를 만들어서 돌리고있는데요</span></div> <div><span style="font-size:9pt;line-height:1.5;">이게 좋은방법이든 아니든 상관없이(더 좋은 방법을 찾는 건 제가 더 공부해봐야할 문제라고 생각하구요;;) </span></div> <div>이 방법으로 문제를 해결한다는 가정 하에 궁금한 점이 있습니다</div></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">일단 실행하면</span></div> <div>1 <span class="Apple-tab-span" style="white-space:pre;"> </span>2<span class="Apple-tab-span" style="white-space:pre;"> </span>3<span class="Apple-tab-span" style="white-space:pre;"> </span>4</div> <div>2 <span class="Apple-tab-span" style="white-space:pre;"> </span>1<span class="Apple-tab-span" style="white-space:pre;"> </span>2<span class="Apple-tab-span" style="white-space:pre;"> </span>1</div> <div>1<span class="Apple-tab-span" style="white-space:pre;"> </span>2<span class="Apple-tab-span" style="white-space:pre;"> </span>1<span class="Apple-tab-span" style="white-space:pre;"> </span>2</div> <div>3<span class="Apple-tab-span" style="white-space:pre;"> </span>2<span class="Apple-tab-span" style="white-space:pre;"> </span>1<span class="Apple-tab-span" style="white-space:pre;"> </span>3</div> <div>이렇게 나옵니다. k부분이 증가가 안되고있는데요..</div> <div><br></div> <div>j와 k 둘다 static변수를 이용해서 1씩 증가시키려고하는데</div> <div>static j 는 함수 내부에서 계속 1씩 +돼서 중첩이 되는 반면</div> <div>static k 는 중첩이 안되고 함수에서 나오면 초기화가 되는데</div> <div>j와 k의 무슨 차이 때문에 이런 현상이 일어나는건가요?</div> <div><br></div> <div>main함수 내부에서의 값 변경만 저장이 되고 그 외 함수에서 변경한 값은 나오면 저장이 안되는건가요?</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.