C++의 반복문(while,do-while문)

강상은·2023년 12월 28일

C++

목록 보기
4/5

while

1. 형식

주어진 조건이 만족되는 동안 문장들을 반복 실행한다.

2. 동작 원리

※ if문과 while 문의 비교

3. 예제

3-1. 구구단 출력

#include<stdio.h>
int main(void) {
	int n;
	int i = 1;
    
    printf("출력하고 싶은 단:");
    scanf("%d", &n);
    
    while(i<=9) {
    	printf("%d*%d=%d\n",n,i,n*i);
        i++;
    }
    return 0;
 }

결과

3-2. 1부터 n까지의 합

#include<stdio.h>
int main(void) {
	int i,n,sum;
    
    printf("정수를 입력하시오:");
    scanf("%d", &n);
    
    i=1;
    sum =0;
    
    while(i<=n) {
    	sum += i;
    	i=i+3; // i+3을 다시 i에 저장시켜줘야 함
    }
    
    printf("1부터 %d까지의 2씩 증가하는 숫자의 합: %d\n",n,sum);
    return 0;
 }

결과

5. 무한루프를 위한 while문

  • 조건식이 무조건 참이여야 함
  • for(;;)와 동일한 역할
  • while(1)로 표현

6. 센티널 예제

6-1. 성적의 평균 계산

센티널 : 입력되는 데이터의 끝을 알리는 특수한 값

먼저 성적의 평균을 구한다

  1. 필요한 변수들을 초기화한다.
  2. 성적을 입력받아서 합계를 구하고 성적의 개수를 센다
  3. 평균을 계산하고 화면에 출력한다.

1. 필요한 변수들을 초기화한다.

  1. sum을 0으로 초기화한다.
  2. n을 0으로 초기화한다.
  3. grade를 0으로 초기화한다.

2. 성적을 입력받아서 합계를 구하고 성적의 개수를 센다

  1. 사용자로부터 성적을 읽어서 grade에 저장한다.
  2. sum에 이 점수를 누적한다.
  3. n을 하나 증가한다.

3. 평균을 계산하고 화면에 출력한다.

  1. sum을 n으로 나누어서 average에 저장한다.
  2. average를 화면에 출력한다.
#include<stdio.h>
int main(void) {
	int grade, n;
	float sum,average;
	
	n = 0; sum = 0; grade = 0;
	
	printf("종료 시 음수 입력\n");
	
	while(grade >= 0) {
		
		printf("성적을 입력하시오 :");
		scanf("%d", &grade);
		sum += grade;
		n++;
	}
	
	sum = sum - grade;
	n--; //마지막 데이터를 제거한다
	average = sum/n;
	printf("성적의 평균은 %f입니다.\n",average);
	 
    return 0;
 }
 

결과

중요한 점은 while 루프 내부에서 사용자로부터 성적을 입력받은 후, 그 값을 sum에 더하고 n을 증가시키는 부분. 그러나 프로그램이 음수가 입력되어 루프를 빠져나올 때, 마지막으로 입력된 음수 성적도 sum에 더해진 상태

그래서 sum에서 마지막으로 입력된 음수 성적을 빼고, 그 성적이 있었던 것으로 간주하여 n을 감소시키는 부분이 중요.

코드에서 sum = sum - grade;는 마지막으로 입력된 성적을 합산에서 제외시키고, n--;는 성적의 개수를 감소시켜서 마지막 성적을 무시하고 성적의 평균을 구함

6-2. 최소값 구하기

#include<stdio.h>
#include <limits.h>

int main(void) {
	int number, min_value = INT_MAX;
	
	printf("정수를 입력하시오\n 종료는 Ctrl+z\n");
	while(scanf("%d", &number)!= EOF) {
    //Ctrl+z (EOF, End of File)를 입력하면 입력이 종료되고 최소값이 출력
		if(number<min_value)
			min_value = number;
	}
	
	printf("최소값은 %d", min_value);
	return 0;

 }

결과

limits.h 헤더 파일은 C 언어에서 정수 데이터 유형의 크기와 한계에 관련된 여러 상수를 정의

CHAR_BIT: char 데이터 유형의 비트 수.
SCHAR_MIN: signed char의 최소값.
SCHAR_MAX: signed char의 최대값.
UCHAR_MAX: unsigned char의 최대값.
SHRT_MIN: short int의 최소값.
SHRT_MAX: short int의 최대값.
USHRT_MAX: unsigned short int의 최대값.
INT_MIN: int의 최소값.
INT_MAX: int의 최대값.
UINT_MAX: unsigned int의 최대값.
LONG_MIN: long int의 최소값.
LONG_MAX: long int의 최대값.
ULONG_MAX: unsigned long int의 최대값.

do~while

1. 형식

적어도 한번은 반복 문장을 실행한다

2. do~while과 while의 차이

  • do~while문은 조건식을 확인하기 전에
    반복할 문장을 수행하므로 무조건 한 번은 실행됨
  • 형식은 while문과 동일하지만 do~while문은 조건식이 아래 위치

3. 실행순서

4. 예제

4-1. 사용자가 0을 입력할 때까지 숫자 더하기

#include<stdio.h>

int main(void) {
	int number,sum = 0;
	
	do {
		printf("정수를 입력하시오:");
		scanf("%d", &number);
		
		sum+= number;
		
	}while(number!=0);
	
	printf("숫자들의 합 = %d\n", sum);
	
	return 0;

 }

결과

4-2. 1~3값으로 입력 받기

#include<stdio.h>

int main(void) {
	int i = 0;
	
	do {
		printf("1---새로만들기\n");
		printf("2---파일열기\n");
		printf("3---파일닫기\n");
		printf("하나를 선택하세요\n");
		scanf("%d", &i);
		
		
	}while(i<1 || i>3);
	
	printf("선택된 메뉴=%d\n", i);
	
	return 0;

 }
 

기타 분기문

1. 분기문

  1. 프로그램을 수행할 때 지정된 위치로 이동시키는 제어 명령문
  1. 코드 블록 내에서 프로그램의 실행을 종료하거나 다른 명령문 위치로 이동할 때 주로 사용
  1. C 언어에서 제공하는 분기문
break문, continue문, goto문, return문

2. 반복문을 탈출하는 break문

  • for,while,do~while과 같은 반복문을 탈출할 때 사용
  • if문과 결합하여 무한 루프 안에 사용
  • 무한 루프를 돌다 특정 조건을 만족하면
    프로그램을 종료하는 역할

2-1. 예제

break문 예제

#include<stdio.h>
#define SEED_MONEY 1000000

int main(void) {
	int year = 0, money = SEED_MONEY;
	
	while(1){
		year++;
		money += money*0.30;
		if(money>10*SEED_MONEY)
		break;
	}
	printf("%d",year);
	return 0;

 }
 

3.반복문으로 다시 돌아가는 continue문

  • continue문을 만나면 블록의 남은 부분을 건너뛰고 다시 반복문을 처음부터 다시 수행

  • 현재의 반복을 중단하고 다음 반복을 시작하게 한다.

  • for문에서 continue문을 사용하면 증감값으로 강제 분기

3-1. 예제

break문과 continue문 예제

#include<stdio.h>

int main(void) {
	char letter;
	
	while(1) {
		
		printf("소문자를 입력하시오:");
		scanf("%c", &letter);
		
		if(letter =='Q') break;
		if(letter < 'a' || letter >'z') continue;
		
		letter -= 32;
		printf("변환된 대문자는 %c입니다.\n",letter);
	}
		return 0;
 }
 

4. goto문

  • 지정된 레이블(lable)로 무조건 이동하라는 강제 명령의 성격을 지닌 분기문
  • 레이블 이름은 변수를 선언하는 형식과 동일
  • 레이블 이름 뒤에는 세미콜론(;)이 아닌 콜론(:)입력

4-1. 예제

#include<stdio.h>

int main(void) {
	
	int x,y;
	
	for(y=1; y<10000; y++){
		for(x=1; x<50; x++){
			if(_kbhit()) goto OUT;
			printf("*")
		}
		printf("\n");
	}
OUT:
	
	return 0;
 }
 

5. 현재 함수를 불렀던 곳으로 돌아가는 return문

  • 현재 실행하는 함수를 끝내고 해당 함수를 호출한 곳으로 돌아가게 함
  • return문을 만나면 프로그램이 종료되는 효과

0개의 댓글