for문에 대한 이해 1
이제 프로그램을 작성하기위해서 printf, scanf함수 이외에
만나게된 첫번째 친구인 for문을 알아보도록 하자.
for문은 반복회수가 미리정해져 있는 경우에 사용하는
프로그램 제어구조이다.
10번만 "yes "를 출력하자.
100번만 "happy "를 출력하자.
1000번만 "laugh "를 출력하자.
위의 경우에 사용하는 제어구조가 for문인 것이다.
for(i=0;i<10;i++)
printf("yes ");
for(i=0;i<100;i++)
printf("happy ");
for(i=0;i<1000;i++)
printf("laugh ");
for문에 대한 이해 2
for문은 반복회수가 미리정해져 있는 경우에 사용한다고
했는데 그 사용회수가 꼭 숫자로 주어져야 하는 것은
아니고 변수로 주어질수도 있다.
다음의 경우를 생각해보자.
for(i=0;i<n;i++)
printf("yes ");
n의 값에 따라서 출력되는 "yes "의 갯수가 달라질 것이다.
for문이 어떻게 동작하는지 이해하기 위해서 간단한 경우를
생각해 보자 우선 n의 값을 3이라고 가정하자.
위의 for문이 실행되는 순서는 다음과 같다.
0. i=0;
1. i<n; 0<3 인가 테스트한다, 그렇다.
2. printf("yes ");
3. i++ i가 1증가한다 i=1 이된다.
4 i<n; 1<3 인가 테스트한다, 그렇다.
5. printf("yes ");
6. i++ i가 1증가한다 i=2 가된다.
7. i<n; 2<3 인가 테스트한다, 그렇다.
8. printf("yes ");
9. i++ i가 1증가한다 i=3 이된다.
10. i<n; 3<3 인가 테스트한다, 틀리다.
11. for문을 종료한다.
for문에 대한 이해 3
여기서는 for문에 대해 조금더 자세히 알아보자.
for(i=0;i<n;i++)
printf("yes ");
for문은 다음과 같은 구조를 가진다.
for(초기화; 실행조건; 변수증가)
실행문
위에서 i=0 은 초기화에 해당한다.
이 초기화는 for문의 실행시 처음에 한번만 실행된다.
위에서 i<n 은 실행조건에 해당한다. 실행조건이 맞게되면
실행문을 실행한다음 변수증가를 실행하게된다.
다시 (실행조건-> 실행문-> 변수증가-> )를 반복하게 된다.
실행조건이 틀리게 되면 for문을 종료하게 된다.
위에서 printf("yes ")는 실행문이다.
위에서 i++ 은 변수증가에 해당한다.
for문에서 실행문이 하나뿐이라는 것을 기억하고 있어야한다.
for문에 대한 이해 4
for문내에서 for문을 제어하기 위해서 사용한 변수를
사용하는 경우에 대해서 알아보자.
for(i=0;i<n;i++)
printf("%d", i);
n의 값을 3이라고 가정하자.
위의 for문이 실행되는 순서는 다음과 같다.
0. i=0;
1. i<n; 0<3 인가 테스트한다, 그렇다.
2. printf("%d", i);
0을 출력한다
3. i++ i가 1증가한다 i=1 이된다.
4 i<n; 1<3 인가 테스트한다, 그렇다.
5. printf("%d", i);
1을 출력한다
6. i++ i가 1증가한다 i=2 가된다.
7. i<n; 2<3 인가 테스트한다, 그렇다.
8. printf("%d", i);
2를 출력한다
9. i++ i가 1증가한다 i=3 이된다.
10. i<n; 3<3 인가 테스트한다, 틀리다.
11. for문을 종료한다.
for문을 종료했을때 i의 값이 3이 되어있다는 것을
꼭 기억하자.
for문에 대한 이해 5
다섯번째 프로그램에 나왔던 다음 프로그램을 한번보자
1. #include<stdio.h>
2. int main()
3. {
4. int i, j, n;
5.
6. printf("\nPlease enter number:");
7. scanf("%d", &n);
9.
10. for(i=0;i<n;i++)
11. {
12. for(j=0;j<n;j++)
13. printf("%4d", j+1);
14. printf("\n");
15. }
16. return 0;
17. }
설명을 돕기위해서 각줄에 번호를 붙였다.
질문: for문에는 실행문이 하나뿐이라고 했는데 왜 여러개가 있나요?
답변: 10 줄의 for(i=0;i<n;i++) 의 실행문은 11줄 부터 15줄 까지 입니다.
질문: 5줄의 복잡한 문들이 하나의 실행문이라고 주장하시는 가요?
답변: 그렇습니다. C 에서는 복합문 (또는 블럭) 을 하나의 실행문으로
취급합니다. 복합문이란 여러개의 문을 묶어서 사용할 수 있도록
해 줍니다.
질문: 복합문 속에 for문이 들어가도 되는 것입니까?
답변: 그렇습니다. 복합문은 아무리 복잡한 문이라도 담을 수 있는 그릇입니다.
지금까지 우리가 만난 가장 복잡한 문은 for문입니다. 복합문 속에
for문이 담겨 있다는 것은 자연 스러운 일입니다.
질문: 이 프로그램이 어떻게 동작하는지 이해할 수 있는 건가요?
답변: 물론입니다. 단지 약간의 상상력이 필요할 뿐입니다.
for문에 대한 이해 6
다섯번째 프로그램에 나왔던 다음 프로그램을 한번보자
1. #include<stdio.h>
2. int main()
3. {
4. int i, j, n;
5.
6. printf("\nPlease enter number:");
7. scanf("%d", &n);
9.
10. for(i=0;i<n;i++)
11. {
12. for(j=0;j<n;j++)
13. printf("%4d", j+1);
14. printf("\n");
15. }
16. return 0;
17. }
이 프로그램이 어떻게 동작하는지 한번 알아보도록 하자.
우선 n을 3이라고 가정하자.
10라인 for문에서
초기화: i=0 i는 0 이 된다
실행조건: i<3
실행문: 11라인 - 15라인 까지 실행
12라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 1 을 출력한다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 2 를 출력한다
변수증가: j++ j는 2 가 된다
실행조건: j<3
실행문: printf("%4d", j+1); 3 을 출력한다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(12라인)을 종료한다.
14라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(11라인-15라인) 종료
변수증가: i++ i는 1이 된다
실행조건: i<3
실행문: 11라인 - 15라인 까지 실행
12라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 1 을 출력한다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 2 를 출력한다
변수증가: j++ j는 2 가 된다
실행조건: j<3
실행문: printf("%4d", j+1); 3 을 출력한다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(12라인)을 종료한다.
14라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(11라인-15라인) 종료
변수증가: i++ i는 2가 된다
실행조건: i<3
실행문: 11라인 - 15라인 까지 실행
12라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 1 을 출력한다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", j+1); 2 를 출력한다
변수증가: j++ j는 2가 된다
실행조건: j<3
실행문: printf("%4d", j+1); 3 을 출력한다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(12라인)을 종료한다.
14라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(11라인-15라인) 종료
변수증가: i++ i는 3이 된다
실행조건: i<3
for문(10라인)을 종료한다.
------------------------------------------------------
따라서
1 2 3
1 2 3
1 2 3
위와 같은 출력이 화면에 보여진다.
여섯번째 프로그램
1. 다음 프로그램을 실행시켜보자.
#include<stdio.h>
int main()
{
int i, j, n;
printf("\nPlease enter number:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", j+1);
printf("\n");
}
return 0;
}
2. 12라인 printf("%4d", j+1);
대신 printf("%4d", i+1);
를 넣어 프로그램을 실행시켜 보자.
3. 12라인에 printf("%4d", i+j+1);
을 넣어 프로그램을 실행시켜 보자.
4. 12라인에 printf("%4d", (i+1)*(j+1));
을 넣어 프로그램을 실행시켜 보자.
프로그램을 실행시키기전에 그 결과를 예측할 수 있다면
for문에 대해서 약간 이해가 깊어 졌다고 볼 수 있겠다.
for문에 대한 이해 7
일곱번째 프로그램에 나왔던 다음 프로그램을 한번보자
1. #include<stdio.h>
2. int main()
3. {
4. int i, j, k, n;
5.
6. printf("\nPlease enter number:");
7. scanf("%d", &n);
9.
10. k=1;
11. for(i=0;i<n;i++)
12. {
13. for(j=0;j<n;j++)
14. printf("%4d", k++);
15. printf("\n");
16. }
17. return 0;
18. }
이 프로그램이 어떻게 동작하는지 한번 알아보도록 하자.
우선 n을 3이라고 가정하자.
10라인 에서 k=1; k는 1 이 된다
11라인 for문에서
초기화: i=0 i는 0 이 된다
실행조건: i<3
실행문: 12라인 - 16라인 까지 실행
13라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 1 을 출력한다 k는 2가 된다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 2 를 출력한다 k는 3이 된다
변수증가: j++ j는 2 가 된다
실행조건: j<3
실행문: printf("%4d", k++); 3 을 출력한다 k는 4가 된다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(13라인)을 종료한다.
15라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(12라인-16라인) 종료
변수증가: i++ i는 1이 된다
실행조건: i<3
실행문: 12라인 - 16라인 까지 실행
13라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 4 를 출력한다 k는 5가 된다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 5 를 출력한다 k는 6이 된다
변수증가: j++ j는 2 가 된다
실행조건: j<3
실행문: printf("%4d", k++); 6 을 출력한다 k는 7이 된다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(13라인)을 종료한다.
15라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(12라인-16라인) 종료
변수증가: i++ i는 2가 된다
실행조건: i<3
실행문: 12라인 - 16라인 까지 실행
13라인 for문에서
초기화: j=0 j는 0 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 7 을 출력한다 k는 8이 된다
변수증가: j++ j는 1 이 된다
실행조건: j<3
실행문: printf("%4d", k++); 8 을 출력한다 k는 9가 된다
변수증가: j++ j는 2가 된다
실행조건: j<3
실행문: printf("%4d", k++); 9 를 출력한다 k는 10이 된다
변수증가: j++ j는 3 이 된다
실행조건 j<3
for문(13라인)을 종료한다.
15라인에서
printf("\n"); 줄바꿈을 출력한다
실행문(12라인-16라인) 종료
변수증가: i++ i는 3이 된다
실행조건: i<3
for문(11라인)을 종료한다.
------------------------------------------------------
따라서
1 2 3
4 5 6
7 8 9
위와 같은 출력이 화면에 보여진다.
for문에 대한 이해 8
여덟번째 프로그램에 나왔던 다음 프로그램을 보자.
1. #include<stdio.h>
2. int main()
3. {
4. int i, j, n;
5.
6. printf("\nPlease enter number:");
7. scanf("%d", &n);
8.
9. for(i=0;i<n;i++)
10. {
11. for(j=0;j<i+1;j++)
12. printf("%4d", j+1);
13. printf("\n");
14. }
15. return 0;
16. }
이프로그램은 11번 라인의 for문속에 나오는
실행조건이 지금까지 보던것 과는 다르다.
즉 j<n 과 같이 정해져 있는 변수가 아니고
j<i+1과 같이 변하는 변수 i를 사용하고 있다는
점이 다르다고 하겠다.
우리가 지금까지 사용한 for 문에 나오는 실행조건들은
바로 실행회수를 나타내고 있다. i+1 도 실행회수를
나타내는 것이다.
지금까지 for문을 잘 이해해 왔다면 i의 값이 0, 1, 2,
3, . . . , n-1 로 변하다가 n이 되면 for 문을 종료하고
나왔다는 사실을 알고 있을 것이다.
따라서 i+1은 1, 2, 3, ... , n 과 같은 값을 가지게 된다.
한번, 두번, 세번, . . . , n번 같이 회수를 변화 시킬 필요가
있을때 사용할 수 있는 방법이 되겠다.
n=3 일때의 출력은 다름과 같다.
1
1 2
1 2 3
for문에 대한 이해 9
여덟번째 프로그램에 나왔던 다음 프로그램을 보자.
1. #include<stdio.h>
2. int main()
3. {
4. int i, j, n;
5.
6. printf("\nPlease enter number:");
7. scanf("%d", &n);
8.
9. for(i=0;i<n;i++)
10. {
11. for(j=0;j<n-i;j++)
12. printf("%4d", j+1);
13. printf("\n");
14. }
15. return 0;
16. }
n-i는 n, n-1, n-2, ... , 3, 2, 1 과 같은 값을 가지게 된다.
n번, n-1번, n-2번, . . . , 3번, 2번 1번 같이 회수를 변화
시킬 필요가 있을때 사용할 수 있는 방법이 되겠다.
n=3 일때의 출력은 다름과 같다.
1 2 3
1 2
1
for문에 대한 이해 10
#include<stdio.h>
int main()
{
int i, j, n;
printf("\nPlease enter number:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", j+1);
printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", 1);
printf("\n");
}
return 0;
}
n=3 일때의 출력은 다음과 같다.
1 2 3
1 2 3
1 2 3
1 1 1
1 1 1
1 1 1
for문에 대한 이해 11
#include<stdio.h>
int main()
{
int i, j, n;
printf("\nPlease enter number:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", i+1);
for(j=0;j<n;j++)
printf("%4d", n);
printf("\n");
}
return 0;
}
n=3 일때의 출력은 다음과 같다.
1 1 1 3 3 3
2 2 2 3 3 3
3 3 3 3 3 3
for문에 대한 이해 12
#include<stdio.h>
int main()
{
int i, j, n;
printf("\nPlease enter number:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", j+1);
for(j=0;j<n;j++)
printf("%4d", 1);
printf("\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d", i+1);
for(j=0;j<n;j++)
printf("%4d", n);
printf("\n");
}
return 0;
}
n=3 일때의 출력은 다음과 같다.
1 2 3 1 1 1
1 2 3 1 1 1
1 2 3 1 1 1
1 1 1 3 3 3
2 2 2 3 3 3
3 3 3 3 3 3
'C/C++ > C' 카테고리의 다른 글
[C] printf와 fprintf를 사용한 예제!!! (0) | 2009.07.23 |
---|---|
[C] 기본적인 파일 입출력 (0) | 2009.07.23 |
[C언어] 비트단위연산자 (0) | 2009.07.21 |
C소스 (0) | 2009.06.16 |
C프로그램 (0) | 2009.06.15 |
댓글