제 14강) 반복문1 - for문 |
반복문의 첫번째 시간입니다.
바로 "for문"에 대해서 배울겁니다.
(for문과 for 루프는 같은 말입니다만, 저는 제가 많이 써왔던 for 루프 라고 표현하겠습니다.)
1) 반복문 |
반복문은 말 그대로 "반복하는 문장"입니다.
하지만 무턱대고 반복하면 안되겠죠?
즉, 컴퓨터에서 반복문은 "특정한 조건에 부합하면 해당 스코프 내의 내용을 반복한다" 라는 뜻을 가졌습니다.
스코프(Scope) |
컴퓨터 언어에서 "유효범위"라는 뜻으로 사용되는 것으로, 해당하는 문장 혹은 객체, 변수등이 유효한 범위를 뜻합니다. (범위는 { }로 흔히 나타냅니다.) int main(void) { int num1; ... } void func() { int num2; ... } 위의 소스에서 num1은 main 함수의 내부가 유효범위가 되고요. num2는 func 함수의 내부가 유효범위가 됩니다. |
C언어에서 반복문은 크게 2가지로 구분됩니다.
1. for 루프
2. while 루프
이렇게 2가지로 구분 됩니다.
2) for |
C언어 뿐만 아니라 타 언어에서도 많이쓰이는 반복문중 하나인 "for 루프" 입니다.
int i;
for (i = 0; i < 5; i++)
{
printf("%d \n", i);
}
위의 예제를 보면서 사용법을 익혀봅시다.
for (조건에_사용할_변수 ; 반복에_쓰일_조건 ; 반복문의_종료를_위한_문구)
{
반복할_내용
}
먼저 for문의 조건(괄호)에는 총 3가지가 들어가게 됩니다.
"조건에 사용할 변수", "반복에 쓰일 조건", "반복문의 종료를 위한 문구" 가 들어가지요.
위에서 봤던 예제와 같이 봅시다.
for (i = 0; i < 5; i++)
for (조건에_사용할_변수 ; 반복에_쓰일_조건 ; 반복문의_종료를_위한_문구)
조건에 사용할 변수는 i이며 그 초기값은 0으로 선언하였습니다.
(이때 해당하는 변수를 for문에서 직접선언 또는 외부에서 선언해야합니다.)
반복에 쓰일 조건, 말이 좀 애매모호합니다만 이렇게 이해하시면 됩니다.
"반복문이 반복을 할 수 있도록 하는 조건"
이때 조건은 보통은 조건에 사용할 변수의 값의 상태를 기반으로 조건을 걸게됩니다.
위의 예제에서는 "i의 값이 5보다 작으면 반복을 허용한다." 라고 조건을 걸었습니다.
반복문의 종료를 위한 문구는 해당하는 반복문이 원하는 만큼만 반복을 하게하고 종료할 수 있도록 이끌어주는 문구입니다. 즉, 반복문이 한 번 실행하고 나서 실행하는 문구입니다.
위의 예제에서는 "i 값 증가"를 종료로 이끄는 문구로 설정하였습니다.
#include <stdio.h>
int main(void)
{
int i;
printf("for문 시작\n");
for (i = 0; i < 5; i++)
{
printf("i = %d \n", i);
}
printf("for문 종료\n");
return 0;
}
위의 예제는 총 5번의 반복을 하는 for 루프 예제입니다.
그럼 왜 5번 반복이며 0 ~ 4까지 출력을 할까요?
i = 0 → i < 5 조건 부합 → i = 0 출력 → i++
i = 1 → i < 5 조건 부합 → i = 1 출력 → i++
i = 2 → i < 5 조건 부합 → i = 2 출력 → i++
i = 3 → i < 5 조건 부합 → i = 3 출력 → i++
i = 4 → i < 5 조건 부합 → i = 4 출력 → i++
i = 5 → i < 5 조건 부합하지 않음 → for 루프 탈출
|
이렇게 되기 때문이죠.
이제 0부터 입력한 수까지 더하는 for 루프 예제를 봅시다.
#include <stdio.h>
int main(void)
{
int num, total = 0;
printf("숫자 입력 : ");
scanf("%d", &num);
int i;
for (i = 0; i <= num; i++)
{
total += i;
}
printf("0 부터 %d 까지의 합은 %d 입니다. \n", num, total);
return 0;
}
아주 간단한 예제입니다.
입력한 숫자(num)를 반복문이 반복할 수 있도록 하는 조건으로 두게 됩니다.
그럼 for 루프는 0부터 num까지 i는 반복하게 되는 것이죠.
그래서 total은 i의 값(0부터 num까지)을 더하게 됩니다.
번외) continue |
continue란 "계속"이라는 뜻이라는 것을 다 아실겁니다.
C언어에서도 저 뜻은 통합니다만, 조금은 다른 행동을 보여줍니다.
방금 배운 for문 예제와 같이 보도록 합시다.
#include <stdio.h>
int main(void)
{
int num, total = 0;
printf("숫자 입력 : ");
scanf("%d", &num);
int i;
for (i = 0; i <= num; i++)
{
total += i;
}
printf("0 부터 %d 까지의 합은 %d 입니다. \n", num, total);
return 0;
}
이 예제는 단순히 입력한 숫자까지 더하는 프로그램입니다.
그런데 "짝수만 더하는 프로그램"을 만들려면 어떻게 해야할까요?
#include <stdio.h>
int main(void)
{
int num, total = 0;
printf("숫자 입력 : ");
scanf("%d", &num);
int i;
for (i = 0; i <= num; i++)
{
if (i % 2 == 0)
total += i;
}
printf("0 부터 %d 까지의 합은 %d 입니다. \n", num, total);
return 0;
}
이렇게 만들면 됩니다.
i를 2로 나누었을때 나머지가 0 즉, 짝수일때만 더하도록 하면 됩니다.
그런데 continue를 써도 가능합니다.
#include <stdio.h>
int main(void)
{
int num, total = 0;
printf("숫자 입력 : ");
scanf("%d", &num);
int i;
for (i = 0; i <= num; i++)
{
if (i % 2 != 0)
continue;
total += i;
}
printf("0 부터 %d 까지의 합은 %d 입니다. \n", num, total);
return 0;
}
여기서 보면
i를 2로 나누었을때 나머지가 0이 아닐때 즉, 홀수일때 continue를 하도록 합니다.
그럼 continue가 뭐길래 저렇게 하는 것일까요?
바로 "뒤의 내용을 무시하고 계속한다는 뜻(해당 스코프 내)"입니다.
그럼 다시 위의 예제를 봅시다.
for (i = 0; i <= num; i++) { if (i % 2 != 0) continue; total += i; }
continue는 현재 for 루프의 스코프에 해당하는 if 문에 속해 있습니다.
그래서 continue가 실행되면 continue 이후의 모든 내용(for 루프 내의)이 무시됩니다.
그렇기 때문에 홀수일때의 "total += i"는 무시됩니다.
3) C99에서 추가된 기능 |
위에 있는 예제들을 보시면
int i;
for (i = 0; i <= num; i++)
{
if (i % 2 != 0)
continue;
total += i;
}
이런식으로 for문에서 i를 사용하기 위해서 i를 for문을 사용하기 전에 미리 선언해놓은 것을 보실 수 있습니다.
하지만 C99 표준에서 for문 내부에 i를 직접 선언할 수 있게 되었습니다.
for (int i = 0; i <= num; i++)
{
if (i % 2 != 0)
continue;
total += i;
}
즉, 이렇게 선언이 가능하다는 소리이죠.
하지만 이렇게 되면 i는 for문 내부에서만 사용이 가능하다는 점!!
외부에서 for문에서 사용한 i의 값에 접근하고 싶다면 기존의 방법
(for문을 사용하기 전에 미리 선언)을 사용할 것!
다음 시간에는 |
이번시간에는 for문에 대해서 알아보았습니다.
for문은 while문 배울때 한번 더 보도록 하겠습니다.
다음 시간에는 "반복문2 while 문"에 대해서 알아보겠습니다.
'Study > C언어' 카테고리의 다른 글
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 16 [함수] (0) | 2018.10.17 |
---|---|
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 15 [반복문2 - While] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 07 [입력문과 출력문(printf, scanf, scanf_s)] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 08 [변수에 대한 추가적인 이야기] (0) | 2018.10.17 |
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 10 [연산자 이야기] (0) | 2018.10.17 |