[C언어] 6. 반복문
반복문
반복문은 반복되는 작업을 수행시키는 명령문 입니다.
프로그램은 보통 반복적인 작업이 많기에, 반복문은 여러 프로그램에서 다양하게 활용됩니다
printf("%d\n", 1);
printf("%d\n", 2);
printf("%d\n", 3);
...
printf("%d\n", 100);
예시로 1부터 100까지 출력하는 코드를 작성했습니다.
반복문을 사용하지 않고는 1부터 100까지 출력하기 위해 출력 함수를 100번 작성해야 합니다.
하지만 반복문을 활용한다면, 100줄을 모두 작성할 필요가 없습니다.
for(int i = 1 ; i <= 100; i++) {
printf("%d\n", i);
}
이 3줄의 코드는 위 100줄의 코드와 같은 역할을 하는 것이죠.
이렇게 반복적인 작업을 수행할때, 반복문을 활용합니다.
반복문을 사용할때, 중괄호 내부에서 변수가 선언되었다면 중괄호가 끝난 이후 변수는 다시 사용할 수 없습니다.
변수의 범위(scope) 때문인데(자세하게는 이후에 설명하겠습니다.) 지금은 중괄호 내부에서만 활용 가능하다고 알고 있으시면 되겠습니다.
while
조건이 true
인 경우 반복하는 반복문입니다.
명령문이 실행될 때, 조건을 검사하고 줄괄호 블럭을 실행합니다.
중괄호 블럭이 끝났을 때, 다시 조건을 검사하고 true
인 경우 다시 반복합니다.
위 구조로 계속하여 반복하는 구조를 가지고 있습니다.
int number = 1;
while(number <= 100) {
number++;
printf("%d\n",number);
}
1부터 100까지 출력하는 코드입니다.
변수number
가 숫자가 출력되기 전에 1씩 더해지는 구조로, number
가 101에 도달하면 조건이 false
가 되어 반복이 종료 됩니다.
do while
조건을 실행블럭이 실행된 이후 검사하는 반복문입니다.
while
과 달리, 조건이 false
인 경우에도 한 번은 실행이 되기 때문에, 한번 이상 실행되어야 하는 반복문에서 활용할 수 있습니다.
char i;
do {
printf("'y'를 입력하세요\n");
scanf("%c", &i);
} while(i != 'y');
y를 입력받을때까지 반복하는 반복문입니다.
최소 한 번은 실행하는 구조이기에, 실행블럭이 실행되어 입력받기 위해 문자열을 출력하고 문자 입력을 받습니다.
for
변수를 생성하고 활용할 수 있는 반복문입니다.
for(int i = 0; i < 100; i++) {
}
반복문이 실행될 때, 변수를 생성하고 조건을 검사합니다.
변수를 생성할 수 있는 구조이기 때문에, 일정 횟수를 반복하는 경우에 효과적으로 활용할 수 있습니다.
조건 여부에 따라 실행블럭을 실행한 이후, 괄호 가장 오른쪽에 작성된 코드를 실행합니다.
이곳에 주로 변수의 증감을 활요합니다.
만약 괄호안에 세미콜론(;)
이 2개가 아닌 경우엔 에러가 발생합니다.
for (; i < 100;){
}
만약 변수와 행동이 필요없다면, 비워둘 수 있습니다.
for(int i = 1 ; i <= 100; i++) {
printf("%d\n", i);
}
처음 반복문을 설명할때 사용했던 1부터 100까지 출력하는 코드 입니다.
다른 반복문과 다르게 변수생성, 실행 이후 행동을 할 수 있어 다양하게 활용할 수 있습니다.
for(int i = 1; i <= 100; printf("%d\n", i++)) {}
주로 활용되는 방식은 아니지만, 예시로 사용했습니다.
실행블럭을 작성하지 않았지만, 위 코드와 같은 코드입니다.
반복문의 제어문
continue
for (int i = 0 ; i< 100; i++) {
if(i == 0) {
continue;
}
...
}
한 번의 반복 사이클을 종료하는 제어문입니다.
사이클이 종료되기 때문에, continue
이후의 코드는 무시되고 다시 반복을 시작합니다.
조건을 검사하고 for
반복문의 경우 행동도 같이 실행됩니다.
예시
for (int i = 1; i <= 100>; i++) {
if(i % 2 == 1) {
continue;
}
printf("%d\n", i);
}
1부터 100까지 정수중, 짝수만 출력하는 코드입니다.
조건문if(i % 2 == 1)
에서 홀수는 continue
을 실행하게 되어 출력함수에 도달하지 못하기 때문에, 짝수만 출력됩니다.
break
for (int i = 0 ; i< 100; i++) {
if(i == 37) {
break;
}
...
}
조건문 switch
에서도 사용했던 제어문입니다.
break
는 반복문을 종료하는 제어문입니다.
continue
와 동일하게 이후 코드는 모두 무시되지만, 반복문이 종료된다는 차이점이 있습니다.
한 블럭을 종료하는 제어문이기 때문에, switch
문과 반복문을 같이 활용하여도 해당 블럭만 종료됩니다.
무한 반복문
while(1) {
...
}
for(;;) {
...
}
do {
...
} while(1);
반복문의 조건이 항상 true
인 경우, 이를 무한 반복문(무한루프)이라 합니다.
반복의 끝이 없을때 활용할 수 있는 코드입니다.
위에서 설명한 break
제어문을 활용하면 유연한 프로그램을 작성할 수 있습니다.
하지만, 잘못 사용되면 프로그램이 과부화될 수 있어 주의해야 합니다.
만약 반복 종료 조건이 없는 경우 무한 반복문보다 아래에 코드를 작성하면 그 코드는 절대 실행되지 않습니다.
이중 반복문
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
...
}
}
반복문 내부에 반복문이 있는 경우, 이를 이중 반복문이라 합니다.
적절하게 사용하면 프로그램을 유연하게 작성할 수 있지만, 비효율적인 코드가 될 수 있어 주의해야 합니다.
예시
for(int i = 1; i < 10; i++) {
for(int k = 1; k <10; k++) {
printf("%d * %d = %d\n", i, j, i * j);
}
}
구구단을 출력하는 코드 입니다.
한 번의 사이클에 반복문이 존재하여 i
단이 출력되고,
그 다음 사이클에서 i + 1
단이 출력되는 구조를 가지고 있습니다.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < (i + 1); j++){
printf("*");
}
printf("\n");
}
구구단과 함께 주로 활용되는 계단을 출력하는 코드 입니다.
각 층 + 1번 *
를 출력하며 계단 모양을 만드는 구조 입니다.
💡 지적 환영합니다
Comments