일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 | 31 |
- 함수
- list
- 42
- 패킹
- 42Seoul
- cout
- phpmyadmin
- nginx
- Double
- libft
- 42서울
- else if
- float
- While
- 포인터
- Class
- 2차원배열
- iF
- for
- vs코드 단축키
- docker
- python
- ft_server
- 동적할당
- C언어
- 자료형
- jupyter 단축키
- 구조체
- C++
- 42cursus
- Today
- Total
Developer
14.(C언어) 반복문_for,while 본문
반복문은 같은 코드를 여러번 수행하기위해 사용한다.
for
for(초기식; 조건식; 변화식)
{
코드
}
for(초기식;조건식;변화식) 부분을 루프 선언문이라 하고
중괄호 부분을 루프 본체라고 부른다. 만약 반복할 코드가 한 줄이라면 괄호는 생략 가능하다.
for 반복문이 반복을 수행하는 동작 절차는 다음과 같다.
1.초기식과 조건식을 비교
2.참이라면 코드 실행 / 거짓이라면 루프 본체 아래의 코드 진행
3.변화식 적용
4.조건식 비교 2번 으로 돌아감
#include<stdio.h>
int main(){
int i;
for(i=0;i<100;i++){
printf("%d ",i);
}
return 0;
}
코드1의 루프 선언문을 보자 미리 선언된 변수 i에 0을 할당한다는데 이 부분이 초기식이다. i<100; 부분이 조건식이고 i++부분이 변화식 이다. 말로 풀어서 쓰면 i가 0부터 100보다 작을 때까지 반복하며 한 번의 반복마다 i는 1씩 증가시키는 것이다. 반복할 코드는 i값을 출력 하는 코드이다. i가 0부터 99까지 반복되며 출력되는 것을 볼 수 있다.
#include<stdio.h>
int main(){
int i;
int input;
scanf("%d",&input);
for(i=input;i>0;i--){
printf("%d ",i);
}
}
코드 2와 같이 i를 입력받은 값부터 시작할 수도있고,초기값을 감소시키며 반복할 수도있다. 다만 조건식을 항상 신경써서 작성하여야 한다. 만약 i가 줄어드는 방향으로 반복할 때 조건식이 i<100 처럼 되어있으면 input이 100미만 이라면 항상 조건식이 참이기 때문에 계속 줄어들며 반복할 것이다.
for반복문에서 꼭 i를 사용하지 않아도 되고, 초기식을 작성하지 않아도 된다. 하지만 초기식을 작성하지 않아도 세미콜론은 작성해 줘야한다.
#include<stdio.h>
int main(){
int input;
scanf("%d",&input);
for(;input>0;input--){
printf("%d ",input);
}
return 0;
}
외부에서 입력으로 input값을 받고 for 루프 선언문에 초기식은 작성하지 않았다.
입력받은 input부터 1씩 줄여가며 input이 0보다 클 때까지 반복하는 것이다.
또한 하나의 루프 선언문에 여러 개의 변수를 작성할 수 있다.
int i,j;
for(i=0, j=1; i<50; i++,j*=2)
루프 선언문이 위와 같이 작성되었다면 i는 0부터 1씩 증가하고 j는 1부터 2배씩 증가하게 된다. 그리고 i가 50보다 작을 동안만 반복하는 것이다.
또 for(;;) 와 같이 모두 생략한다면 코드를 무한히 반복시킬 수 있다. 이러한 루프를 무한 루프라고 하며 프로그램이 종료되지 않는다. 이러한 경우 CTRL+C 키를 눌러 프로그램을 종료시킬 수 있다.
for반복문에 반복시킬 코드로 다시 for 반복문을 작성할 수 있다.
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<10;i++){
for(j=1;j<10;j++){
printf("%d * %d = %d\n",i,j,i*j);
}
printf("\n");
}
return 0;
}
바로 위와 같이 코드를 작성할 수 있다. 위의 코드는 구구단 1단부터 9단까지 출력해주는 프로그램이다. 외부의 for문이 한번 반복 될때마다 내부의 for문이 j가 1부터 9까지 반복되는 것이다.
풀어서 말하면
i가 1일때 j가 1~9까지 반복하고
i가 2일때 j가 1~9까지 반복하고
......
i가 9일때 j가 1~9까지 반복하고
i가 10이되면 외부의 for문 조건식이 거짓이 되므로 종료된다.
while
while 반복문은 for 반복문과 매우 유사하다.
초기식
while(조건식)
{
코드
변화식
}
동작 절차 또한 for문과 마찬가지로 우선 초기식과 조건식을 비교해 참이라면 중괄호 내부의 코드를 실행한다(이때 변화식도 수행). 그 후 다시 조건식과 비교를 하며 결과가 참이면 계속 반복을 한다.
#include<stdio.h>
int main(){
int i=0;
while(i<5){
printf("%d ",i);
i++;
}
return 0;
}
코드5 에서 초기식은 int i=0;이고 조건식은 i<5, 변화식은 i++이다.
정수형 변수 i를 선언 및 0으로 초기화 한 후 while을 만나면 조건식을 확인한다.
조건식이 참이면 while문의 코드를 실행시키고 다시 조건식을 확인한다.
위에 처럼 변화식을 while문 내부에 넣을수도 있지만 조건식 부분을 잘 처리하면 변화식을 내부에 작성하지 않아도 된다.
#include<stdio.h>
int main(){
int i=5;
while(i--){
printf("%d ",i);
}
return 0;
}
i는 5로 초기화 되어있고 조건식은 i--로 되어있다. C는 0이면 거짓 0이 아니면 참 인걸 생각하면 왜 이렇게 동작하는지 유추할 수 있다. 처음 while을 만났을때 i--가 참인지 확인한다. 후위 연산자 이므로 우선 5를 보고 참인것을 파악한다. 그후 후위 연산자가 수행되어 i는 1감소되고 4가 출력된다.
....(반복)
1까지 출력이 되었다고 생각해보자! 방금 1이 출력되었으므로 i에는 1이 들어있다.
i--가 참인지 확인을 한다. 역시 후위 연산자 이므로 값을 줄이기전에 i값이 1이기 때문에 조건식 결과는 참이다. 그 후 후위 연산자가 실행되어 i는 0이되고 while문 내부의 printf함수를 통해 0이 출력된다.
그후 i는 0인 상태로 참인지 파악한다 0은 거짓이므로 반복을 그만두고 종료한다.
while문 또한 무한 루프를 만들 수 있다.while(1)과 같이 조건식으로 항상 참인 값을 넣어주면된다.
while문은 조건식이 거짓이라면 한번도 반복을 안할 수 있다.
반면에 이번에 나오는 do while문은 최소 한번은 반복을 수행한다.
초기식
do
{
코드
변화식
}while(조건식);
#include<stdio.h>
int main(){
int i=5;
do{
printf("%d ",i);
}while(i--);
return 0;
}
do while문의 경우 처음 조건식을 확인하지 않고 내부 코드를 우선 한번 수행한다.
그런 후 조건식을 확인하여 반복을 결정하게된다. 최초 조건식 확인없이 한번을 수행하는것과 while뒤에 ;(세미콜론)을 붙혀주는것만 빼면 while문과 동일 하다.
break, continue
break와 continue를 통해 조건문을 중간에 빠져나갈 수 있고, 중간을 생략할 수 있다.
#include<stdio.h>
int main(){
int i;
for(i=0;i<50;i++){
if(i==20)break;
printf("%d ",i);
}
return 0;
}
for문은 i가 0부터 50보다 작을때까지 반복하도록 작성되어 있다. 하지만 수행 결과는 0~19까지만 출력되었다. i가 20일때 break를 통해 반복문을 빠져나왔기 때문이다. 반복문은 중괄호 내부의 모든 코드를 반복 수행하므로 매 반복마다 i가 20인지 if문을 통해 비교한다. 그리고 i가 20인 순간에 break를 만나 더 이상 반복하지 않고 반복문을 빠져나가는 것이다.
#include<stdio.h>
int main(){
int i;
for(i=0;i<50;i++){
if(i%2==0)continue;
printf("%d ",i);
}
return 0;
}
마찬가지로 for문은 i가 50보다 작을때 까지 반복하도록 되어있다.
그럼 매 반복마다
if(i%2==0) continue;
printf("%d ",i);
가 수행되는 것이다.
i%2는 i를 2로 나누었을때 나머지를 말하고 이 값이 0과 같은경우라면 2의 배수일때 즉 짝수일때 if문 조건식이 참이된다. 따라서 i가 짝수면 continue;를 수행하게된다.
continue는 continue 이래의 코드는 수행하지 않고 다음 반복으로 넘어 가라는 뜻이다.
'Programming Language > C' 카테고리의 다른 글
16.(C언어) 배열 (0) | 2020.08.01 |
---|---|
15.(C언어) 포인터 (0) | 2020.08.01 |
13.(C언어) 조건문_if,switch (0) | 2020.08.01 |
12.(C언어) 논리 연산자,비트 연산자 (0) | 2020.08.01 |
11.(C언어) 형 변환 (0) | 2020.08.01 |