C/C++/예제2015.02.24 11:17


C 예제.

정수 끼리의 나눗셈의 결과를 소수로 나오게 해보자!!


정수 / 정수 연산을 통해 결과가 소수점이 존재할 때 출력을 해보면

내가 생각하기엔 당연히 소수점 이하의 값도 출력이 될거라 생각했지만..

5 / 2 의 결과 값은 2가 나옵니다..

컴퓨터는 정수/정수 의 연산을 할 경우 결과가 소수점이 있다해도 정수/정수 이므로

소수점 아래 값은 그냥 제거해 버리기 때문에 이런 현상이 나오게 됩니다 ㅠ_ㅠ


내가 원하는 소수값을 출력하게 하기 위한 형변환 및 꼼수를

예제 소스를 통해 알려드리도록 하겠습니다.


예제 소스.

#include <stdio.h>

int main()
{
    int n1 = 0, n2 = 0;
    double ave = 0;

    printf("두개의 정수를 입력 하세요 : ");
    scanf("%d %d", &n1, &n2);

    // 정수/정수
    ave = (n1+n2)/2;
    printf("입력받은 두수의 평균 : %.2lf\n\n", ave);

    // 형변환을 통한 소수/정수
    ave = 0;
    ave = (double)(n1+n2)/2;
    printf("입력받은 두수의 평균 : %.2lf\n\n", ave);

    // 꼼수를 이용한 정수/소수
    ave = 0;
    ave = (n1+n2)/2.0;
    printf("입력받은 두수의 평균 : %.2lf\n\n", ave);

    return 0;
}


결과.


위의 결과를 보시면 (n1+n2) / 2 연산을 하고 출력한 첫번째 결과는 더블형의 변수 ave를 이용해

소수점 두번째 자리까지 출력을 했지만 2.00 이라는 결과가 나오고 있습니다.

형변환을 통해 (n1+n2) 의 값을 double 형으로 형변환을 해주고 똑같이 2 로 나눠주면

결과가 2.50 으로 정상적으로 나오게 됩니다.

세번째 결과도 n1 + n2 의 값을 2.0 이라는 소수로 나눠준다고 명시해주니

두번째와 마찬가지로 2.50 이라는 정상적인 결과를 출력해 줍니다.


이런 결과가 나오는건 정수 / 정수 의 나눗셈에선 절대 소수가 나오지 않기 때문입니다!!

그러니 정수와 정수를 나눠 결과값이 소수여야 한다면

둘중에 하나라도 형변환을 통해 소수로 변경 하거나 상수뒤에 .0 을 붙여서 소수라고 명시해 준다면

손쉽게 원하는 결과를 얻을수 있습니다.


혹시 궁금하신 사항이 있다면 ~ 댓글 주세요 ^^



Posted by 야채군단

댓글을 달아 주세요