|
연산자 우선순위 / 자료형 / 형변환 .. 등과 관련된 내용이네요
: (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
:
: 이렇게 출력되서 나옵니다.
: 따라서 첫번째 마지막번째 빼고 옳바른 결과를 산출하는거 맞나요?ㅠ
|