[c언어 기초]

우리가 아는 C언어

[c언어 기초] 우리가 아는 C언어

반복문2

반복문

for

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

아래의 코드를 직접 작성하고 실행해 봅시다.

#include <stdio.h>
main()
{
int a, b=0;
for (a=1;a<=100;a++)
{
printf("%d\n", a);
b += a;
}
printf("1~100까지의 합은 %d입니다.\n", b);
}
실행결과
 
위의 프로그램을 실행하면 위에서 아래로 1부터 100까지의 숫자가 출력되고 마지막에 그 합을 출력한다.만 확인하지만, for는 반복 조건을 포함하여 시작 값과 증감식 등 여러가지 요소를 더 넣을 수 있습니다.
 
  • 4행에서 변수 a와 b를 선언한 후 b를 0으로 초기화시킵니다.
  • 5행의  for (a=1;a<=100;a++)는 “a=1로 초기화한다.(시작값) a가 100보다 작거나 같으면(반복 조건) a가 1씩 증가한다.(증감식)”는 뜻입니다.
  • 8행은 b=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문을 넣어 구구단을 완성해 봅시다.
#include <stdio.h>
main()
{
int a, b;
for (a=1;a<=9;a++)
{
for (b=1;b<=9;b++)
printf("%d*%d=%d\n", a, b, a*b);
}
}

 

실행결과
위의 프로그램을 실행하면 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는 이후 명령을 실행하지 않고 조건을 판단하는 부분으로 넘어갈 때 사용합니다.
아래의 코드를  직접 작성하고 실행해 봅시다.
 
#include <stdio.h>
main()
{
int a;
while (1)
{
printf("숫자를 입력하세요 :");
scanf("%d", &a);
if (a<0) break;
if (a==0) continue;
if (a%2==1)
printf("홀수\n");
else
printf("짝수\n");
}
}

실행결과

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

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

다음 토픽에서는 반복문을 활용한 코드업 문제를 풀어봅시다.

댓글

댓글 본문
  1. life knowledge
    수정했습니다.^^
    대화보기
    • C를 찾습니다
      for 예시설명 3번째에서
      a=a+b 가 아니라
      b=a+b 가 되어야하지 않나요??
    • 호두
      고맙습니다.
    버전 관리
    life knowledge
    현재 버전
    선택 버전
    graphittie 자세히 보기