|
너무 감사합니다.
자세한 답변 너무 감사드립니다.
장성호 님이 쓰신 글 :
: 연산자 우선순위 / 자료형 / 형변환 .. 등과 관련된 내용이네요
:
: : (1) vol = 4/3*r*r*r
: : (2) vol = 4*r*r*r/3
: : (3) vol = 4.0/3.0*r*r*r
: : (4) vol = 4/3.0*r*r*r
: : (5) vol = (double)4/3*r*r*r
: : (6) vol = (double)(4/3*r*r*r)
:
: 1. 두수의 연산에서
: 정수 , 정수 연산은 결과는 정수가 되고,
: 하나라도 실수가 포함되면 결과는 실수가 됩니다.
:
: - 수식1 에서 4/3 은 정수/정수 이므로 결과가 1 입니다. 1* r^3 = r^3 이 나오게 되는것이죠
: - 수식6도 수식1과 마찬가지구요
:
: 2.
: - 수식5는 4를 double형으로 형변환을 먼저 한후에 계산한것이므로 (double)4/3 = 4.0 / 3 이 됩니다.
: 즉 나눗셈(/) 연산을 하기 전에먼저 형변환 (double)이 된것이죠
:
: - 수식6은 계산을 모두 마친후에 결과를 double형으로 변환하므로 결과가 1번과 같게 된것입니다.
:
:
: 지금 공부하시는 내용은 별것 아닌것 같지만 나중에 실무할때 수학식이 좀 들어 프로그램을 하게 되면
: 반드시 숙지하고 있어야 할 내용입니다.
: 코딩에 에러없고 , 수식에 문제없는것 같지만
: 쩜(.)을 찍고 안찍고 차이에서 결과가 전혀 엉뚱하게 나오곤 하죠
: 이런경우 문제점를 찾는것도 한참 걸리죠
:
: 그럼..
:
:
: 조영준 님이 쓰신 글 :
: : 2.10
: : 반지름이 r인 구의 부피는 4/3r세제곱이다.
: : 구의 부피에 대한 다음 수식들중 옳은 결과를 산출하는것을 모두 고르시오.
: : (r과 vol은 더블형 변수이다.)
: : (1) vol = 4/3*r*r*r
: : (2) vol = 4*r*r*r/3
: : (3) vol = 4.0/3.0*r*r*r
: : (4) vol = 4/3.0*r*r*r
: : (5) vol = (double)4/3*r*r*r
: : (6) vol = (double)(4/3*r*r*r)
: :
: : 문제가 이건데요.
: : 제가 작성해본건
: :
: : #include <stdio.h>
: :
: : int main(void)
: : {
: : double r;
: : r=3;
: :
: : printf("%f\n", 4/3*r*r*r);
: : printf("%f\n", 4*r*r*r/3);
: : printf("%f\n", 4.0/3.0*r*r*r);
: : printf("%f\n", 4/3.0*r*r*r);
: : printf("%f\n", (double)4/3*r*r*r);
: : printf("%f\n", (double)(4/3*r*r*r));
: :
: : return 0;
: : }
: :
: : 이렇게 한건데
: :
: : 27.000000
: : 36.000000
: : 36.000000
: : 36.000000
: : 36.000000
: : 27.000000
: :
: : 이렇게 출력되서 나옵니다.
: : 따라서 첫번째 마지막번째 빼고 옳바른 결과를 산출하는거 맞나요?ㅠ
|