C언어 기초: 반복 (1)

김영채 (Kevin)·2020년 3월 9일
0
post-thumbnail

1. 반복 개요와 while문

반복문의 종류:

  1. while (Pre-Test Loop)
  2. do...while (Post-Test Loop)
  3. for (Pre-Test Loop)

기본 형식

while( 반복 조건 ){
	loop body;
};

do{
	loop body;
}; while(반복 조건)

for(초기화,반복조건,증감){
	loop body;
};

2. do while 문과 for 문

do while문

do{
	printf("양의 정수 또는 0(종료)을 입력: ");
	scanf("%d", &input);

	...

} while (input!=0);

do while 문의 종료를 나타내는 세미콜론은 반드시 있어야 한다.

언제 사용하는가?

  • 반복횟수를 미리 알 수 없고 특별한 값에 따라 종료될 때 유용
  • 센티널 값(sentinel value; 반복의 종료를 알리는 특정한 값) 검사에 유용
  • 처리하는 자료값과 달리 잘 발생하지 않는 값으로 정함

0을 입력하면 종료되는 예제:

int main()
{
    int num; 
    
    do{
        printf("정수 또는 0을 입력하시오: ");
        scanf("%d", &num);
        
    }while(num!=0);
    
    printf("종료합니다");

    return 0;
}

1~5까지 출력하는 예제:

int main()
{
    int n = 1;  //제어변수 n을 사용
    
    do{
        printf("%d\n", n);
        n++;
        
    }while(n!=6);

    return 0;
}

정수의 각 자릿수 출력 예제:

int main(){

	int num;

	printf("양의 정수[100~900] 입력: ");
	scanf("%d", &num);

	do{

	printf("100단위 출력: %d", num/100);
	num = num%100;
	printf("10단위 출력: %d", num/10);
	num = num%10;
	printf("1단위 출력: %d", num);

	}while(num!=0);
}

for문

기본 형식

for (init;cond;inc)
	stmt;

next;

//

for(int i=1;i<=10;i++)
	printf("%3d: " i);
  • 초기화 문장은 단 한 번만 실행된다
  • i++ 부분은 ++i, i=i+1,i+=1 모두 가능하다.

섭씨→화씨 예제:

//변환 공식 (0°C × 9/5) + 32 = 32°F
int main()
{
	int celsius;

	printf("섭씨(C)  화씨(F)\n");
	printf("----------------\n");
	
	for(int i=0;i<3;i++){
	    printf(" "); scanf("%d", &celsius); printf("    %d\n", (celsius*9/5)+32);
	}
	
    return 0;
}

for와 while간의 변환

pre
for(A;B;C){
	body
}

pre
A
while(B){
	body
	C
}

//변환 예시
sum=0;
for(int i=1;i<=MAX;i++){
	sum+=i;
}

sum=0;
i=1;
while(i<=MAX){
	sum+=i;
	i++;
}

누적합 예시:

int main(){
	
	int num;
	int sum=0;
	
	printf("1에서부터 정수까지의 합을 구할 양의 정수 하나 입력: ");
	scanf("%d", &num);

	for(int i=0;i<=num;i++){ //num까지 계산해야 하니 <= 로 해야함.
		sum+=i;
	}
	
	sum=0; //sum을 초기화해줘야한다.

	int i=0;
	while(i<=num){
		sum+=i;
		i++;
	}

	printf("for문: ", sum);
	printf("while문: ", sum);

	return 0;
}
profile
맛있는 iOS 프로그래밍

0개의 댓글