do~while문은 while문과 달리 반복 조건을 뒷부분에서 검사한다. 이 때문에 do~while문은 반복 영역을 최소한 한 번은 실행한다.

 

#include <stdio.h>

int main(void)
{
    int total = 0, num = 0;

    do
    {
        printf("input int(0 to quit) : ");
        scanf("%d", &num);
        total += num;
    } while (num != 0);
    printf("Total : %d\n", total);
    return 0;
}

위 코드는 반복해서 사용자 숫자입력을 받고, 입력받은 숫자가 0 이면 입력받은 숫자들의 합을 출력하는 코드이다. 위  코드와 같이 반복 영역을 최소한 한 번은 무조건 실행해야 하는 경우에는 do~while문을 사용하는 것이 적절하다. 

'Language > C, C++' 카테고리의 다른 글

[C] 조건적 실행  (0) 2020.12.05
[C] for  (0) 2020.11.29
[C] while  (0) 2020.11.27
[C] 자료형 변환  (0) 2020.11.27
[C] const  (0) 2020.11.25

프로그래밍을 할 때 반복적인 행위를 하는 코드의 양을 줄이고, 효율적으로 명령하기 위해서 반복문을 이용한다.

C에서는 크게 다음과 같이 3개의 반목문을 제공하고 있다. while문, do~while문, for문

 

whule문은 특정 조건을 주고 그 조건을 만족하는 동안 특정 영역을 계속 반복하는 구조이다.

#include <stdio.h>

int main(void){
    int num = 0;

    while (num<5)
    {
        printf("hello world %d \n", num);
        num ++;
    }
    return 0;    
}

위 코드를 보면 변수 num의 크기가 5보다 작을 때 까지 while 밑의 중괄호 안의 코드를 계속 반복 수행하도록 하는 코드이다. 만약 위 코드에서 num ++; 라는 코드가 없다면 반복의 조건이 무너지지 않아서 반복이 멈추지 않는 무한 루프 현상이 발생한다. 반복문의 구성에 있어서 중요한 것 중 하나는 반복의 조건을 무너뜨리기 위한 최소한의 연산이다.

 

반복의 대상이 다음과 같이 하나의 문장이라면 중괄호는 생략하고 들여쓰기 만으로 표현할 수 있다.

while(num<5)
	printf("hello world %d\n", num++);

 

while문에 처음 진입하면 반복의 조건인 비교 연산을 진행하고 참일 경우 반복 영역을 실행후 다시 반복 조건 검사하는 곳으로 돌아온다. 조건이 성립하지 않을 경우(비교 연산 진행 결과 거짓일 경우) 반복문을 종료한다.

 

while문은 조건이 거짓이 되면 반복문을 종료한다. 다음과 같이 조건을 항상 참으로 만들어주면 의도적으로 무한루프 반복문을 만들 수있다.

while(1)
{
	int num = 0;
	printf("%d\n", num);
    num ++
}

1은 참을 의미하는 대표적인 숫자이므로 반복문의 조건은 항상 참이 된다.

 

while문은 while문 안에 여러번 중첩하여 사용할 수 있다.

'Language > C, C++' 카테고리의 다른 글

[C] for  (0) 2020.11.29
[C] do~while  (0) 2020.11.28
[C] 자료형 변환  (0) 2020.11.27
[C] const  (0) 2020.11.25
[C] 문자 표현  (0) 2020.11.25

char형으로 표현된 데이터의 표현방식을 int형으로 바꾸는 것 처럼 데이터의 표현 방식을 변환하는것을 자료형 변환 이라고 한다.

자료형 변환은 자동으로 발생하는 자동 형 변환과 프로그래머가 형 변환을 명시해서 강제로 변환이 일어나게 하는 강제 형 변환이 있다.

double num1 = 245;	// int형 정수 245를 double형으로 자동 형 변환 / 245.0
int num2 = 3.14		// double형 실수 3.14를 int형 정수로 자동 형 변환 / 3

위 코드와 같이 실수형 데이터를 정수형 데이터로 변환하는 과정에서는 소수부의 손실이 발생한다.

int형 정수 129를 char형 정수로 형 변환하는 경우에는 char형의 바이트 크기에 맞춰 상위 바이트를 소멸시킨다. 또한 이러한 과정으로 부호가 바뀔 수도 있다.

#include <stdio.h>

int main(void){
    double num1 = 234;
    int num2 = 3.14;
    int num3 = 129;
    char ch = num3;

    printf("int 245 to double : %f\n", num1);
    printf("double 3.14 to int : %d \n", num2);
    printf("big int 129 to small int : %d \n", ch);
    return 0;
}
/* output : 
int 245 to double : 234.000000
double 3.14 to int : 3
big int 129 to small int : -127
*/

 

double num1 = 5.15 + 19; 와 같이 실수형 데이터와 정수형 데이터의 연산을 하는 경우 실수형 데이터가 정수형으로 형변환 하게 되면 소수부의 손실이 발생한다. C는 연산시 자료형이 일치하지 않아 자동 형 변환을 해야 하는 경우 형 변환은 데이터의 손실을 최소화 하는 방향으로 진행된다.

 

#include <stdio.h>

int main(void){
    int num1 = 3, num2 = 4;
    double divResult;
    divResult = num1 / num2;
    printf("result div : %f\n", divResult);
    return 0;
}
// output : result div : 0.000000

위 코드에서 3 / 4 의 결과는 0.75이지만 num1과 num2가 int형이기 때문에 나눗셈의 결과는 0이 된다. C에서는 강제적인 형 변환을 명령할 때 소괄호를 사용한다. 연산을 진행하는 코드를 divResult = (double)num1 / num2; 와 같은 식으로 수정하면 0.75의 결과를 얻을 수 있다.

'Language > C, C++' 카테고리의 다른 글

[C] do~while  (0) 2020.11.28
[C] while  (0) 2020.11.27
[C] const  (0) 2020.11.25
[C] 문자 표현  (0) 2020.11.25
[C] unsigned  (0) 2020.11.25

+ Recent posts