"/>

프로그래밍 기초-C언어 배우기(반복문).9

-처음부터 배우기-

while

while은 조건이 참일 동안 계속 명령을 실행하고 조건이 거짓이면 종료한다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int a;
5  scanf(“%d”, &a);
6  while (a>0)
7  {
8  if (a%2==1)
9  printf(“홀수\n”);
10 else
11 printf(“짝수\n”);
12 scanf(“%d”, &a);
13 }
14 }

실행결과

위프로그램을 실행해 숫자를 입력하면 홀수인지 짝수인지 출력하고 다시 입력을 기다린다. 또한 음수를 입력하면 종료된다.

  • 5행에서 입력받은 변수 a의 값이 양수이면 반복 조건이 참이 되어 홀수 또는 짝수를 판단하여 6 ~ 13행의 블록을 실행하게 된다.
  • 6행에서 입력한 숫자가 0이하이면 while의 반복 조건이 거짓이 되므로, while 안의 블록을 실행하지 않은 채 프로그램이 종료된다.
  • 12행에서 새로운 숫자를 입력 받으면서 6행으로 다시 돌아가 while 옆의 조건을 확인하고 반복한다. 만약 (a>0)의 거짓이 입력 되었을 경우 프로그램을 종료한다.

while은 조건이 참인 동안 계속 반복하는 명령이다. if와 마찬가지로 조건이 참이면 해당 블록을 실행하고, 거짓이면 블록을 실행하지 않고 종료한다.

while문의 기본 형식

1  while (반복 조건)
2  {
3  반복 조건이 참일 경우 실행되는 명령문
4  }  //정상적으로 실행된 뒤 1행으로 돌아간다.

do ~ while

do ~ while은 반복 조건이 아래에 있어 일단 do 블록을 한 번 실행한 후 반복 조건을 확인한다. 따라서 조건이 거짓인 경우에도 최소 한 번은 실행한다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int a;
5  do
6  {
7  scanf(“%d”, &a);
8  if (a%2==1)
9  printf(“홀수\n”);
10 else
11 printf(“짝수\n”);
12 }while (a>0);
13 }

실행결과

0보다 작은 수를 입력해도 최소 한번은 실행되고 종료되기 때문에 값이 입력되었다.

  • do ~ while문의 경우 while(조건) 뒤에 세미콜론(;)을 반드시 넣어야 한다. 

do ~ while문의 기본 형식

1  do{
2  반드시 실행되는 명령문
3  } while(조건); //조건이 참이 될 경우 1행으로 이동, 거짓일 경우 종료

for

for문은 while문처럼 원리는 같지만 표현 방법이 다르다. while은 반복 조건만 확인하지만, for는 반복 조건을 포함하여 시작 값과 증감식 등 여러가지 요소를 더 넣을 수 있다.

for문

for문을 이용하여 초깃값과 조건에 따라 숫자와 합계를 구할 수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int a, b=0;
5  for (a=1;a<=100;a++)
6  {
7  printf(“%d\n”, a);
8  b += a;
9  }
10 printf(“1~100까지의 합은 %d입니다.\n”, b);
11 }

실행결과

위의 프로그램을 실행하면 위에서 아래로 1부터 100까지의 숫자가 출력되고 마지막에 그 합을 출력한다.

  • 4행에서 변수 a와 b를 선언한 후 b를 0으로 초기화하였다.
  • 5행의  for (a=1;a<=100;a++)는 “a=1로 초기화한다.(시작값) a가 100보다 작거나 같으면(반복 조건) a가 1씩 증가한다.(증감식)”는 뜻이다.
  • 8행은 a=a+b와 같은 뜻이다.

for문의 기본 형식

for (시작값; 반복 조건; 증감식;) { // 시작값은 처음 한번만 실행되고 쓰이지 않는다. 
반복 조건이 참일 경우 실행되는 명령문
}

시작값: 반복과 관련된 변수의 시작값을 정한다.
반복 조건: 이 조건이 참으로 만족되면 블록 안의 명령을 실행한다.
증감식: 일정한 간격으로 증감이 있을 때 증감식을 적어준다. 예(‘변수 a가 1씩 증가한다.’의 표현은 주로 a++로 사용한다.)

for문의 실행 순서

시작값을 1, 반복조건을 2, 증감식을 3, 명령문을 4라고 할때

for (1; 2; 3;){
4
}

순서
1 → 2(참일 경우) → 4 → 3 → 2 → 4 → 3 → 2 → 4 → 3 → …(반복)→ 2(거짓일 경우) → for문 종료

중첩 for

기본적으로 for 안의 블록은 반복의 대상이 되는데, 블록 안에 for가 또 들어감으로써 반복이 이중으로 일어나는 구조인 중첩 구조를 중첩 for이라고 한다.

하나의 for문안에 또 다른 for문을 넣어 구구단을 완성할수 있다.
아래의 코드를 직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int a, b;
5  for (a=1;a<=9;a++)
6  {
7  for (b=1;b<=9;b++)
8  printf(“%d*%d=%d\n”, a, b, a*b);
9  }
10 }

실행결과

위의 프로그램을 실행하면 1 ~ 9단의 구구단을 모두 출력한다.

  • 위 프로그램의 for문의 순서를 고려하여 코드를 직접 해석해보자.
  • 5행에서 처음 a값은 1이 된다. a가 9이하이므로 for안의 블록을 실행한다. 여기서 두 번째 for을 실행하고 b의 값이 1부터 9가 될 때까지 1씩 계속 증가하여 8행의 printf()를 연속해서 실행한다. 실행하고 나서 바깥 for문을 이제 1번 반복한 상태가 된다. a값이 1에서 9가 될때까지 안쪽에 있는 2번째 for문이 계속 실행된다. 즉 바깥 for에 의해 a값이 1증가하면 안쪽 for의 b는 1 ~ 9가 될 때까지 계속 출력한다.  

중첩 for문의 실행 순서

for (1; 2; 9;){
3
for (4; 5; 7;){
6
}
8

}

순서

1→2(참)→3→4→5(참)→6→7→5(참)→6→7→5(거짓)→2번째 for문 종료→8→9→2(참)→3→4→5(참)→…→2(거짓)→첫번째 for문 종료

break, continue

break는 반복문을 빠져나갈 때 사용하며 continue는 이후 명령을 실행하지 않고 조건을 판단하는 부분으로 넘어갈 때 사용한다.
아래의 코드를  직접 작성하고 실행해 보자.

1  #include <stdio.h>
2  main()
3  {
4  int a;
5  while (1)
6  {
7  printf(“숫자를 입력하세요 :”);
8  scanf(“%d”, &a);
9  if (a<0) break;
10 if (a==0) continue;
11 if (a%2==1)
12 printf(“홀수\n”);
13 else
14 printf(“짝수\n”);
15 }
16 }

실행결과

위 프로그램을 실행하면 입력한 숫자가 양수일 때 홀수/짝수를 판별하여 출력하고, 0이면 다시 입력을 받고, 음수이면 종료한다.

  • 5행에서 while(1)의 1은 “참”을 의미하므로 비조 조건 없이 무조건 참이 되므로 이 반복문은 무한 반복하게 된다.
  • 9행에서 숫자의 값이 음수이면 break를 실행한다. break명령이 실행되면 현재 반복 중인 반복문을 빠져나간다.
  • 10행에서 입력된 숫자의 값이 0이면 continue를 실행한다. continue 명령이 실행되면 continue 이후 명령들은 실행하지 않고 반복문의 반복 조건 확인 부분으로 넘어간다. for문의 경우 증감식을 실행후 반복 조건으로 돌아간다.  

-코드업 문제 풀기-

문제를 다 풀었다면?

-이어서 공부하기-

 

댓글 남기기

Scroll Up