c 6. 반복문


 c 6. 반복문


반복문 : 제시한 조건이 참인 동안에만 반복해서 수행하는 명령문




1) for 문

반복 횟수가 명확할 때 주로 사용한다.

for 문을 한 번만 사용하는 단순 for 문과 for 문 안에 for 문을 선언하는 중첩 for 문이 있다.

형식 : for (초깃값;조건식;증감값)

for(;;)처럼 모두 생략하면 반복을 끊임없이 수행하는 무한 루프가 된다.

for(printf("< 반복 수행 >), 초깃값;조건식;증감값) 와 같이 초깃값 앞에 다른 문장을 삽입해서 사용할 수도 있다. 이때 반드시 콤마(,)를 사용해야 한다.












* 예시 - 동일한 문장 10회 출력

#include <stdio.h>
int main(void) {
int count;

for (count = 1; count <= 10; count++)
printf("%d회 반복\n",count);
return 0;
}













* 예시 - 5의 배수 누적 합계 구하기

#include <stdio.h>
int main(void) {
int count, su, sum=0;

printf("어디까지 5의 배수 합계 구할지 입력 : ");
scanf_s("%d", &su);

for (count = 5; count <= su; count += 5) {
sum += count;
printf("%d까지 5의 배수합계 : %d\n", count, sum);
}
return 0;
}












* 중첩 for 문을 사용해서 * 그리기

#include <stdio.h>
int main(void) {
int cnt, star;

for (cnt = 1; cnt <= 9; cnt++) {
printf("%d 행 : ", cnt);
for (star = 1; star <= cnt; star++) {
printf("* ");
}
printf("\n");
}
return 0;
}















2) while 문

조건식이 참이면 문장을 반복 수행 하고 거진이면 반목을 멈춘다.

반복 횟수가 명확하지 않을 때 주로 사용한다.

조건식에 1을 넣으면 무한 루프가 된다. 무한 루프로 사용할 때는 'break;'를 사용해서 빠져나와야 한다.

형식 : while(조건식)














* 예시 - 한 줄에 숫자 5개 씩만 출력하기

#include <stdio.h>
int main(void) {
int cnt=1;

while (cnt <= 30) {
printf("%3d", cnt);
if (cnt % 5 == 0) {
printf("\n");
}
cnt++;
}
return 0;
}













* 예시 - 무한루프 사용해서 누적 합계가 50을 초과하면 종료하기

#include <stdio.h>

int main(void) {
int cnt=1, sum=0, value;
printf("어디까지 누적핪계를 구할 지 입력 :");
scanf_s("%d", &value);

while (cnt <= value) {
sum += cnt;
printf("%d 까지 누적 합계 : %d\n", cnt, sum);
cnt++;
if (sum > 50) {
printf("누적 합계가 50을 초과하여 프로그램 종료\n");
break; //while 빠져나오기
}
}
return 0;
}















3) do ~ while 문

명령문을 무조건 한 번은 실행한 후에 조건식을 비교한다.

for 문과 while 문은 반복되는 명령을 수행하기 전에 조건식을 비교하지만 do ~ while 문은 맨 마지막에 조건식을 비교한다.

조건식이 맨 마지막에 오며 조건식 뒤에는 반드시 세미콜론(;)를 입력해야 한다.

형식 :  do{반복할 명령어} while(조건식);



 












* 예시 - 입력 받은 구구단 출력하기

#include <stdio.h>
int main(void) {
int cnt=1, dan;

printf("출력할 구구단 입력 :");
scanf_s("%d", &dan);

do {
printf("%2d x %2d = %2d\n", dan, cnt, dan * cnt);
cnt++;
} while (cnt < 10);
return 0;
}















4) 분기문

지정된 위치로 이동시키는 제어문이다.

프로그램을 종료하거나 다른 명령문의 위치로 이동할 때 주로 사용한다.

break, continue, goto, return 등이 있다.




- break 문

반복문이나 switch 문을 빠져나갈 때 사용한다.

반복문을 여러 개 중첩해서 사용한 경우 가장 가까운 반복문이나 switch문에서만 빠져나온다.



* 예시 - 누적 합계가 100을 초과하면 종료하는 프로그램

#include <stdio.h>
int main(void) {
int cnt = 1, sum = 0, value;

printf("어디까지 누적핪계를 구할 지 입력 :");
scanf_s("%d", &value);

while (cnt <= value) {
sum += cnt;
printf("%d 까지 누적 합계 : %d\n", cnt, sum);
cnt++;
if (sum > 100) {
printf("누적 합계가 100을 초과하여 프로그램 종료\n");
break;// 분기문 break 사용
}
}
return 0;
}
















- continue 문

조건문이나 반복문 안에서 주로 사용하며 continue 문 다음에 오는 명령문을 모두 무시하고 반복문의 처음으로 이동한다.



* 예시 - 짝수의 누적 합계 구하는 프로그램

#include <stdio.h>
int main(void) {
int cnt = 1, sum = 0, value;

printf("짝수들의 누적합계 구하기\n");
printf("어디까지 누적핪계를 구할 지 입력 : ");
scanf_s("%d", &value);

while (cnt <= value) {
if (cnt % 2 == 1){
cnt++;
continue; //홀수인 경우 건너뛰기
}
else {
sum += cnt;
printf("%d 까지 누적 합계 : %d\n", cnt, sum);
cnt++;
}
}
return 0;
}












- goto 문

지정된 라벨(label)로 무조건 이동시킨다.

라벨의 이름은 변수와 동일하게 예약어를 제외한 알파벳이나 단어를 사용해 임의로 정할 수 있다.

라벨을 선언할 때는 뒤에 반드시 콜론(:)을 붙여야 한다.

goto 문을 많이 사용하면 프로그램이 복잡해지기 때문에 최대한 적게 사용하는 것을 권장한다.



* 예시 - 알파벳 대문자 입력받기

#include <stdio.h>
int main(void) {
char alp;

reset:
printf("알파벳 대문자 입력 : ");
scanf_s("%c", &alp, sizeof(alp));

if (alp >= 'A' && alp <= 'Z') {
printf("%c는 대문자가 맞습니다.\n", alp);
}
else {
printf("%c는 대문자가 아닙니다\n",alp);
getchar();
goto reset; //reseat으로 이동해서 다시 입력받기
}
return 0;
}











- return 문

현재 수행 중인 함수를 종료하고 해당 함수를 호출했던 곳으로 돌아가도록 한다.

return 문 다음에 오는 명령문은 실행되지 않으니 return 문은 반드시 함수의 가장 마지막에 선언해야 한다.

조건문에 사용해서 특정 조건일 때만 종료하도록 사용할 수 있다.

사용자 정의 함수에서 해당 함수를 종료하고 반환값을 설정할 때 사용한다.



* 예시 - 사용자 정의 함수

#include <stdio.h>
int Sum() {
int a = 7, b = 5, result;

result = a + b;
return result; //함수 종료하고 반환값 설정
}

int main(void) {
int sum;

printf("Sum 함수 실행\n");
sum = Sum();
printf("a = 7, b = 5일때 결과는");
printf(" %d\n",sum);
return 0;
}









* 예시 - 입력한 수 까지 누적 곱셈값 구하기

#include <stdio.h>
int main(void) {
int cnt = 1, result = 1, value;

printf("어디까지 누적 곱셈값 구할 지 입력 : ");
scanf_s("%d", &value);

while (1) {
result *= cnt;
printf("%d 까지 누적 곱셈값 : %d\n", cnt, result);
cnt++;
if (cnt > value) {
return 0; // while 종료
}
}
return 0;
}














댓글

이 블로그의 인기 게시물

Spring Boot 6. 계시판 프로젝트

Spring Boot 2. Maria 데이터베이스 & Spring Data JPA

Django 10. DB 연동