안녕하세요. BlockDMask 입니다.
오늘은 C언어, C++ 반복문 2번째 시간 입니다. 오늘 알아볼 반복문은 for 반복문 입니다.
이전 시간에 알아본 반복문 while에 대해서 알고 싶으신분은 이쪽으로 가시면 됩니다. [바로가기]
<목차>
1. 반복문 for란?
2. for 반복문과 continue, break.
3. 반복문 for 예제.
1. C언어, C++ for 반복문 이란?
1-1) 반복문이 왜 필요한가
똑같은 행위 혹은 룰이 정해져있는 상태에서 반복되는 행위같은게 있으면 하나하나 작성하지 않고 반복문을 통해서 쉽게 해결할 수 있습니다.
예를 들어서 1부터 100까지 더하는 작업을 한다고 생각을하면
1 + 2 + 3 + 4 + ... + 99 + 100 을 손수 작업을 해야합니다. 심지어 계산기에 입력을해도 1, 2, 3, 4, 를 계속 입력해야하는것도 일종의 반복행위 이죠.
이런걸 우리는 반복문을 통해서 쉽게 할 수 있습니다. 매우 쉽게요.
예를 하나 더 들어볼까요. 적절하지 않을 수도 있는데 반복문을 설명하기 위해서이니 조금 양해해주시면 감사하겠습니다.
김ㅁㅁ, 서울, 100점
이ㅁㅁ, 인천, 30점
박ㅁㅁ, 부산, 55점
김ㅇㅇ, 인천, 90점
양ㄱㄱ, 서울, 50점
.....
이런식으로 학생의 점수와 이름 그리고 사는 지역이 있는 데이터가 있고 이 데이터 들이 일종의 리스트 형태로 쭈르르르륵 있다고 가정해 보겠습니다.
만약에 서울 지역에 사는 친구들의 점수의 평균을 구해야 하는 상황이라면, 어떻게 해야할까요?
이런경우에는 학생들 리스트를 하나하나 살펴보면서 서울인지 확인하고 점수 확인하고 그친구들의 점수를 더해서 인원수 만큼 나누면 되겠죠?
그 리스트를 하나하나 살피는 것을 우리가 하지 않고 반복문을 통해서 학생들 리스트를 돌게 한다음에 우리는 중간에 if(지역 == 서울) 의 if 조건문만 추가해서 작업하면 손쉽게 작업 할 수 있습니다.
참 간단하고 유용하지 않나요? 프로그래밍을 하면 이런 작업들을 매우 쉽게 작업 할 수 있습니다.
자 그럼 반복문 for는 어떻게 생겼고 어떻게 사용하는지 설명해보도록 하겠습니다.
1-2) for 반복문의 기본 구조
for(초기화 ; 조건문 ; 증가 감소식)
{
// ...
}
초기화 식에서는 for 반복문에서 반복 횟수로 사용할 변수를 초기화 합니다.
조건문 에서는 반복문을 계속할지 끝낼지를 판단할 수 있는 식을 집어 넣습니다. 이 조건문이 True이면 반복문을 계속해서 실행하고 False라면 반복문이 끝나게 됩니다.
증가 감소식은 for 반복문에서 반복 횟수로 사용할 변수를 증가 하거나 감소 시킵니다. 이 증감을 통해서 두번째에 들어간 조건문에서 True, False가 결정될 수 있습니다.
for 반복문의 순서는 아래와 같습니다.
초기화 -> 조건문 판단 -> True -> { ... } 중괄호 내에 내부 로직 수행 -> 증가 감소식 수행 -> 다시 조건문 판단 -> True -> 다시 중괄호 내부 로직 수행 -> 증가 감소식 수행 -> 조건문 판단 -> false -> for 반복문 종료.
초기화 식, 조건문, 증가 감소식은 생략이 가능합니다.
처음 보면 많이 헷갈릴텐데 예시를 보면 바로 이해가 갈 것 입니다.
for(int i =0; i<10; ++i)
{
// ..
}
위와 같이 생겼습니다.
첫번째 초기화문 에서 i 를 for 에서 선언과 동시에 초기화를 할 수 있습니다. 선언은 위에서 하고 초기화만 진행해도 무방 합니다.
두번째 조건문은 i < 10 으로 나와있는데 해당 조건문이 참인 동안만 내부 로직을 수행합니다.
세번째 증가 감소식은 for 반복문 스코프가 닫히는 시점에 즉, 내부 로직을 다 수행하고 " } " 가 오는 시점에 증가 혹은 감소할 식을 넣는 것 입니다. 여기 예제에서는 ++i를 통해서 i를 하나씩 증가시키고 있죠.
1-3) for 반복문 간단 사용 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include<stdio.h>
int main(void)
{
// for 반복문 예제1
printf("for 반복문 예제1 : ");
int i;
for (i = 0; i < 10; ++i)
{
printf("%d ", i);
}
printf("\n");
// for 반복문 예제2
printf("for 반복문 예제2 : ");
for (int j = 0; j < 5; ++j)
{
printf("%d ", j);
}
return 0;
}
|
cs |
예제 1, 2를 굳이 따로 보여드린것은 int i; 이것처럼 변수 선언을 for 반복문 밖에서 해도 상관이 없다는 것을 보여드리고 싶었습니다.
for 반복문을 만들면서 선언과 초기화를 진행해도 상관없고 그렇지 않아도 괜찮습니다.
사실 예제1과 2 둘이 다를게 없어보이지만 차이가 있습니다.
그 차이는 변수의 생명 주기의 차이 입니다.
변수 i는 main 함수 내부에 선언 되었기 때문에 main이 종료 될때 없어질 것 입니다.
반면 변수 j는 for 반복문이 끝나는 시점에 메모리에서 사라질 것 입니다.
이렇게 변수의 스코프 차이가 있습니다.
**추가적으로 for 반복문에 있는 초기화식, 조건식, 증가감소식은 생략이 가능합니다.
2. C언어, C++의 for 반복문과 continue, break.
2-1) for 반복문과 break
반복문을 중간에 뛰쳐나오고 싶을때, 혹은 반복문을 중간에 멈추고 나와야 하는 상황이 있을 수 있습니다.
그 때 사용하는 키워드가 break 입니다. 이 break를 만나면 for 반복문을 빠져나오게 됩니다.
바로 예제로 확인하시죠.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 10; ++i)
{
// i가 4보다 크면 for 문을 그만 나오너라.
if (i > 4) break;
printf("%d ", i);
}
return 0;
}
|
cs |
중간에 break 가 없었다면 해당 반복문은 0 1 2 3 4 5 6 7 8 9 까지의 숫자를 출력해야 했을 것 입니다.
하지만 if (i > 4 ) break; 문을 통해서 i가 4보다 큰 5가 되었을때 break 가 되어서 0 1 2 3 4 까지만 출력하고 반복문을 빠져나오게 된 것 입니다.
2-2) for 반복문과 continue
이 continue 라는 키워드는 반복문을 쭉쭉 진행하다가 더이상 아래 코드를 수행하지 않고 다시 맨 위로 와서 증가 감소식을 진행한 후에 조건문을 판단하고 for 반복문을 진행하는 것 입니다.
for (초기화 ; 조건문 ; 증감식)
{
// (1)
// (2) continue;
// (3)
}
이렇게 식이 있다고 치면 초기화 -> 조건문 -> (1) -> (2) continue -> 증감식 -> 조건문 -> (1) 이런식으로 (3)번은 수행하지 않고 바로 위쪽으로 올라가게 되는 흐름이 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<stdio.h>
int main(void)
{
// for 반복문 continue 예제
printf("for 반복문 continue 예제.\n");
for (int i = 0; i < 10; ++i)
{
// i를 2로 나누었을때 나머지가 0이면 continue를 타라.
if (i % 2 == 0) continue;
printf("%d ", i);
}
printf("\n");
return 0;
}
|
cs |
i가 0일때 continue가 되어서 출력이 안되고
i가 1일때는 출력이 되고
i가 2일때 다시 continue에 걸려서 for문으로 올라가게 됩니다.
i가 3이 되어서 다시 출력이 되고
... 이런식으로 continue를 이용하면 반복문 내부에서 중간에 흐름을 변경 할 수 있습니다.
3. C언어, C++ 반복문 for 예제
3-1) for 반복문으로 1~100까지 짝수의 합(1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<stdio.h>
int main(void)
{
// for 반복문 예제 : 1~100 짝수의 합
printf("1. 1~100 짝수의 합(1)\n");
int sum = 0;
for (int i = 1; i <= 100; ++i)
{
// i를 2로 나누었을때 나머지가 1이면 홀수니까 continue
if (i % 2 == 1) continue;
sum += i;
}
printf("짝수의 합은 : %d", sum);
return 0;
}
|
cs |
이렇게 continue를 이용해서 홀수일때는 더하지 못하게 for 문의 흐름을 제어했습니다.
이런식으로 for 반복문을 이용해서 1 ~ 100 까지의 짝수의 합을 구해 보았습니다.
그런데 굳이 1씩 더할 필요가 있었을까요? 아래 예제를 보면 다른식으로도 충분히 구할 수 있습니다.
3-2) for 반복문으로 1~100까지 짝수의 합(2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<stdio.h>
int main(void)
{
// for 반복문 예제 : 1~100 짝수의 합
printf("2. 1~100 짝수의 합(2)\n");
int sum = 0;
for (int i = 2; i <= 100; i += 2)
{
sum += i;
}
printf("짝수의 합은 : %d", sum);
return 0;
}
|
cs |
이번에는 다른점이 두개가 있습니다.
for(초기화 ; ; ) 부분에 초기화 하는 곳에서 애초에 시작을 i 변수를 2 부터 시작하였고
for ( ; ; 증감식) 증감식 부분에서 ++i 대신에 i를 2씩 증가시켜주는 i += 2로 작성하여 한번 for 문을 돌때마다 i를 2씩 증가시켜 주었습니다.
이로 인해서 for반복문이 100번 돌것을 50번으로 줄이게 되었고, 우리가 목적으로 하던 짝수의 합도 구할 수 있게 되었습니다. 이처럼 같은 결과를 얻더라도 숫자만 조금씩 바꾸면 여러 해답이 나올 수 있습니다.
3-3) 2중 for문으로 구구단 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<stdio.h>
int main(void)
{
// for 반복문 구구단 만들기
// 편의상 3단과 4단만 진행하겠습니다.
for (int i = 3; i < 5; ++i)
{
printf("구구단 %d 단\n", i);
for (int j = 1; j < 10; ++j)
{
printf("%d x %d : %d\n", i, j, i * j);
}
printf("\n");
}
return 0;
}
|
cs |
이렇게 중첩된 for문을 이용해서 손쉽게 구구단을 만들 수 있습니다.
이상으로 C언어 반복문, C++ 반복문 for 에 대해서 알아보았습니다.
'<개인공부> > [C언어, C++]' 카테고리의 다른 글
[C언어/C++] printf 출력 함수 정리 및 예제 (4) | 2021.01.28 |
---|---|
[C언어/C++] scanf 입력 함수 총정리 및 예제 (0) | 2021.01.25 |
[C언어/C++] C언어 bool 타입에 대해서 (C99) (2) | 2021.01.18 |
[C언어/C++] while 반복문 설명 및 예제 (0) | 2020.12.25 |
[C언어/C++] islower, isupper 대문자 소문자 확인 (0) | 2020.12.21 |
[C언어/C++] tolower, toupper 대문자 소문자 변경 (1) | 2020.12.16 |
[C언어/C++] isspace 함수 (공백, 탭, 개행을 확인하는 함수) (0) | 2020.12.10 |
[C언어/C++] isalpha 함수 (알파벳을 확인하는 함수) (1) | 2020.12.03 |