#define _CRT_SECURE_NO_WARNINGS //Visual Studio에서만 사용
#include <stdio.h>
int main(void)
{
int num, sum = 0;
//누적하는변수 sum은 반드시초기화
printf("1번째 수를 입력하세요=");
scanf("%d", &num);
sum = sum + num;
printf("2번째 수를 입력하세요=");
scanf("%d", &num);
sum = sum + num;
printf("3번째 수를 입력하세요=");
scanf("%d", &num);
sum = sum + num;
printf("합:%d,평균:%lf \n", sum, sum / 3.0);
return 0;
}
#for문 사용안함
#define _CRT_SECURE_NO_WARNINGS //Visual Studio에서만 사용
#include <stdio.h>
int main(void)
{
int num, sum = 0;
//누적하는변수 sum은 반드시초기화
for (int i = 1; i <= 3; i++) {
printf("%d번째 수를 입력하세요=", i);
scanf("%d", &num);
sum = sum + num;
}
printf("합:%d,평균:%lf \n", sum, sum / 3.0);
return 0;
}
#for문 사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int i, num, sum = 0, total; //누적하는 변수 sum은 반드시 초기화
printf("임의 개수의 수 평균을 구하는 프로그램입니다.\n");
printf("계산하려는 수는 몇 개입니까==");
scanf("%d", &total);
for (i = 1; i <= total; i++) {
printf("%d번째 수를 입력하세요=", i);
scanf("%d", &num);
sum += num;
}
printf("합은 %d, 평균은 %lf입니다.\n", sum, (double)sum / total);
return 0;
}
점점 느리게 출력
#include <stdio.h>
int main(void)
{
int n, m;
for (n = 1; n <= 1000; n++){
printf("%d ", n);
for (m = 1; m <= n * 10000; m++);//점점 느리게 하는 부분
}
return 0;
}
- 9행이 없으면 그냥 1부터 1000까지 같은 속도로 순식간에 출력
- 9행은 m이 1부터 n*10000까지 반복하는 반복문이 없는 for문이므로 n이 커질수록 루프를 더 많이 돌게 되어 내부적으로 시간을 지연시켜주는 역할만 함
- 그래서 뒤로 갈수록 출력이 점점 느리게 됨. n*10000값은 int형이므로 21억을 넘지 않도록 주의
#include <stdio.h>
int main(void)
{
int n, m;
puts("작업을 시작합니다.");
for (n = 1; n <= 100; n++) {
printf("%d%%\b\b\b\b", n);
for (m = 1; m <= n * 1000000; m++);
}
puts("작업이 완료되었습니다.");
return 0;
}
2중 for문 사용 방법
for(제어 변수 초기식1; 조건식1; 증감식1) //바깥 for문
{
for(제어 변수 초기식2; 조건식2; 증감식2) //안쪽 for문
{
반복 실행될 문장;
}
}
바깥 for문이 1번 돌때마다 안쪽 for문 전부 반복
구구단을 출력하는 예
- for문 2개가 dan만 다르지 반복되고 있음
- 9단까지 출력한다면 8번 반복될 것이므로 비효율적
- dan을 2부터 9까지 1씩 증가시키는 for문을 만들어 현재 있는 for문을 감싸면 해결할 수 있음
#include <stdio.h>
int main(void)
{
int dan, gop;
for (dan = 2; dan <= 9; dan++) { //단
for (gop = 1; gop <= 9; gop++) { //곱
printf("%dx%d=%2d ", dan, gop, dan * gop);
}
printf("\n");//매 단의 끝에서 개행
}
return 0;
}
for문 주의 사항
1. #include <stdio.h>
2. int main(void)
3. {
4. int n, sum = 0;
5.
6. for (n = 1; n <= 100; n++);
7. sum = sum + n; //이 문장은 for문과 상관없는 문장. 한번만 실행됨
8. printf("%d\n", sum);
9. return 0;
10. }
6 : for문 마지막에 실수로 ";"을 찍음. for문에 걸리는 반복 실행문이 없으므로 for문은 n이 1부터 100까지 100번 돌고 n이 101일 때 for문을 빠져 나옴
7 : sum에 n값인 101만 누적됨(sum=0+101;)
반복문 : while 문
while문은 미리 반복 횟수를 알 수 없고 조건에 따라서 반복하는 경우에 사용
while(조건식){
반복 실행될 문장;
}
조건식이 참이면 루프 안에 반복 실행될 문장을 실행하고 거짓이면 루프를 벗어남

while문을 이용한 무한 루프
조건식에 참인 값을 씀
0 이외의 어떠한 값도 가능하지만 보통 1을 씀
while(1){
반복 실행될 문장;
}
최대 공약수를 구하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b, r;
printf("두 정수를 입력하시오:");
scanf("%d %d", &a, &b);
while (b != 0) { // b가 0이 아닐 때까지
r = a % b;
a = b;
b = r;
printf("r=%d a=%d b=%d\n", r, a, b);
}
printf("최대공약수 : %d\n", a);
return 0;
}
2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면, a와 b와의 최대공약수는 b와 r과의 최대공약수와 같음 (유클리드 호제법) 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수 a가 a와 b와의 최대공약수임
반복문 : do~while문
do~while문은 while문처럼 미리 반복 횟수를 알 수 없고, 최소한 한번은 반복 문장을 실행할 경우에 많이 사용
do{
반복 실행될 문장;
}while(조건식);
일단 반복 실행될 문장을 한번 실행하고 while의 조건식을 검사
조건이 참이면 루프 안에 반복 실행될 문장을 계속 실행하고 거짓이면 루프를 벗어남
while(조건식) 다음에 세미콜론 (;)을 붙여야 하는 것을 조심

!= && != == || ==
같다
do~while문을 이용한 무한 루프
조건식에 참인 값을 씀
0 이외의 어떠한 값도 가능하지만 보통 1을 씀
do{
반복 실행될 문장;
}while(1);
분기문 : break 문
반복문(for, while, do~while)이나 switch~case문에서 안쪽 루프를 하나 벗어나는데 사용
무한 루프에는 특별한 조건에서 루프를 탈출 하도록 반드시 break문을 작성
분기문 : continue문
for, while, do~while문에서 루프의 조건식을 검사하는 부분으로 다시 되돌아감
break문처럼 루프를 빠져나가는 것이 아니라 돌던 루프의 continue 아래 부분을 실행하지 않고 다시 조건을 검사하는 부분으로 감
분기문 : goto문
goto문은 무조건 해당 레이블로 분기
goto label;
:
label : 문장;
#include <stdio.h>
int main(void)
{
int n = 1;
LOOP:
printf("%d\t", n++);
goto LOOP;
return 0;
}
goto문은 프로그램 어느 곳이라도 레이블을 만들어 바로 이동할 수 있는 편리함이 있지만 프로그램을 이해하기 어렵게 하므로 사용하지 않는 것이 좋음
루프가 다중으로 중첩되어 있는 경우 break문을 사용하더라도 루프 밖으로 완전히 빠져 나올 수 없는데 goto문을 사용하면 한 번에 다중 루프를 빠져 나올 수 있음