|
출력은 너무 길어서 생략. 프로그램을 구성시에는 반드시 하나 하나 따져본다. 이 변수의 값을 지정하면 어떤값이 들어가는지 하나하나 따져보면서 하자. 필자도 솔직히 고생많이 했다. 본론으로 가자면, while문내부에 while문을 중첩해서 썼다. 와일문 내부는 어제 정리했던 5구단을 옮겨온것이다. 이것은 제껴두고 생각한다.(기억안나면, 3월13일것 참고)
먼저 2구단. 2구단은 아홉번이 나오고 다음 3구단으로 넘어가야한다. 그러나 아래와 같은 소스를 짜면, 넘어가지 않는다.
while(ucdan<=9)
{
while(uiCnt<=9)
{
printf("%d * %d= %d\n",ucdan, uiCnt, uiCnt*ucdan);
uiCnt = uiCnt +1;
}
ucdan = ucdan +1;
}
위의 소스에서 내부while은 일단 없다고 가정한다. ucdan에서 1을 증가시키는 것을 썼는데도 출력은 2구단만 출력된다. 그 이유는 바로 메모리 저장형태를 잘 생각해보자. while문에서 ucdan이 초기값2는 프린트문에 들어가서 출력된다. 그러나, 다음 ucdan은 2를 아래 선언한 ucdan = ucdan +1; 에 저장이되어 3이된다. 그러나 3단은 나오지 않는다. 그 이유는 uiCnt에 있다. uiCnt는 내부while문에서 9를 넘으면 10의 값이 바깥으로 나가게된다.여기서 10은 메모리를 말한다. 그러니깐 2단수로 따지자면,
2*1, ~2*9까지 실행한후 10의 값은 원래는 2*10이 되나, 조건에서 uiCnt<=9이므로 조건을 만족시키지 못한다. 그래서 화면에는 2*9까지만 출력이 된다. while(안쪽)문이 실행을 멈춘다.
그래서 밖에 while문에 선언된 ucdan = ucdan +1; 에 값은 3은 들어가지만 정작 곱해야하는 수인 uiCnt는 출력되지 않으므로 실행되지 않는다. 그래서 따로 초기값을 설정한다!!
이것이 이 프로그램에 핵심이다. 안쪽 while문을 실행한 다음, while문에 uicnt =1;이라고 초기화 시켜야한다. 그래야 uicnt가 내부 while문에서 9까지 실행한 다음에 초기값에 의해 1이 되고 3단을 출력한다.
while(ucdan<=9)
{
while(uiCnt<=9)
{
printf("%d * %d= %d\n",ucdan, uiCnt, uiCnt*ucdan);
uiCnt = uiCnt +1;
}
ucdan = ucdan +1;
uiCnt = 1; // 여기에 초기화 값 넣는다.
}
while 조건이 <=9이므로 9단까지 출력이 되는 것이다.
홀수구구단 3,5,7,9
|
#include <stdio.h> |
if에 조건은 ucdan을 2로 나눈 나머지가 0과 같다면, ucdan은 1증가된다. 그리고 continue에 의하여 if문에서 위에 while문으로 올라가서 다시 실행된다. 즉 if문이 참이면 그 값이 아래 while문으로 가는 것이 아니라 if문 아래 ++ucdan;이 실행되고 continue;에 의해 if문으로 다시 올라가 조건을 따지게 된다. 여기서 continue는 현재위치에 다시 올라가서 반복을 하게 해주는 명령문이다. 그래서
ucdan<=9로 값이 가서 다시 조건을 따진다.
2%2= 0(나머지) 이므로 uiCnt가 1증가하여 다시 if문으로 가서 조건을 따진다.
3%2 =1(나머지) 나머지가 1이므로 if문은 실행되지 않고 while문으로 내려가 실행된다. 그래서 3단이 출력되고 다음에 5단 ,7단이 출력이 되는 것이다.
#include <stdio.h> |
출력을 잘보면 답이 나온다. 이번에는 내부에 while문에 if문을 썻다. if문에 의해 나머지가 0이 아니면 거짓이므로 if문 소스는 실행되지 않는다. 그래서 내부while문만 실행된다. 하지만, 나머지가 3이 되는 순간, if문이 실행되고 '\n'에 의해서 줄바꾸기가 실행된다. 그상태에서 계속 반복하여 3줄씩 출력된다. 이것은 보는것 보다 직접 입력해서 컴파일 하면 쉽게 이해 할 수 있다.
다음은 글자수를 알려주는 프로그램.
#include <stdio.h> |
while조건문 ch !='q'를 주목한다. !=와 같이 않으면 참이라는 뜻이다. q와 같지 않으면 실행된다. 그래서 q를 누르기 전까지 한 없이 반복되고 count에 의해 숫자가 늘어난다. 즉 a를 쓰면 1번, ab를 쓰면 2번 .... 이런식으로 값이 메모리에 저장하다고 q를 누르는 순간 멈추고 가장 아래 프린트문을 출력한다.
p3-14예제
#include <stdio.h>
number가 0과 같지 않으면 while문이 실행된다. 그래서 scanf로 키보드 숫자를 입력받아서 조건에 만족하면 계속 반복한다. 그러다가 0을 입력하면 실행을 멈추고 이때까지 입력했던 number를 더한다. 아래 9.2.3.100을 입력하다 0을 입력하니 바로 실행이 멈춤고(while문 멈춤) 214라는 값이 출력되었다. 214는 필자가 임의로 입력 한 것을 더해서 계산된 값이다.
|
p3-15예제
위와 비슷한 프로그램. 여기에서는 초기화를 scanf로 한 것 뿐이다.
|
'C언어 수업정리 > 3월 수업정리' 카테고리의 다른 글
3월15일 수업정리 while문 무한반복, 에러찾기 (0) | 2013.03.15 |
---|---|
3월 15일 195페이지 연습문제 (0) | 2013.03.15 |
3월 13일 정리 문자입출력함수 (0) | 2013.03.13 |
3월 13일 수업정리 if문 if else, case문 (2) | 2013.03.13 |
3월 12일 부가연산자, 함수, 제어문(if, else....) (0) | 2013.03.12 |