プロが教えるわが家の防犯対策術!

C言語で計算が合いません(初心者)



簡単な計算のプログミングをしているのですが
計算が合わなくて困っています。

整数型変数aと実数型変数bを定義
整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b
実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b

という内容のプログラムを作ったのですが

a=7,b=2.4を代入してみた結果

----------------------------

Input a>>7
Input b>>2.4
8
7
8.400000
7.200000

----------------------------

となりました
どこが間違っているのでしょう?

答えは8.4でcが8なのは有効数字のためだと思いますが
dとeで答えが全く違う理由が分かりません。

下に私が書いたものを貼っています。



----------------------------

#include<stdio.h>

int main(void){

int a,c,d;
double b,e,f,ans;

printf("Input a>>");
scanf("%d",&a);

printf("Input b>>");
scanf("%lf",&b);


c=0.5*a*b;
printf("%d\n",c);

d=a/2*b;
printf("%d\n",d);

e=0.5*a*b;
printf("%lf\n",e);

f=a/2*b;
printf("%lf\n",f);

return 0;

}



----------------------------

よろしくお願いします。

A 回答 (4件)

型を明示して書くとこう:



#include<stdio.h>

int main( void ){

int a,c,d; double b,e,f,ans;
a = (int)7; b = (double)2.4;

c = (double)0.5 * (double)a * (double)b; printf("%d\n", (int)c );
d = (double)( (int)a / (int)2 ) * (double)b; printf("%d\n", (int)d );
e = (double)0.5 * (double)a * (double)b; printf( "%lf\n", (double)e );
f = (double)( (int)a / (int)2 )* (double)b; printf( "%lf\n", (double)f );
return 0;
}


で、これを踏まえて、整数型と浮動小数点型が混在したときどういう計算をするかを理解すればよいかと。

http://www.google.com/search?hl=ja&q=%E6%9A%97%E …
    • good
    • 0
この回答へのお礼

解答ありがとうございます

URLも参考にさせてもらいます

お礼日時:2010/10/18 23:56

d=a/2*b;


f=a/2*b;
a/2が整数演算になるので小数点以下が切り捨てられる

d=a/2.0*b;
f=a/2.0*b;
にすれば実数演算になる。

2はintに展開されるが2.0ならdoubleに展開される。
int/intはint型で計算されるがint/doubleはdouble型で計算される。
    • good
    • 0
この回答へのお礼

>int/intはint型で計算されるがint/doubleはdouble型で計算される。

これでわかりました

ありがとうございます

お礼日時:2010/10/19 19:37

>c = (int)((double)0.5 * (double)a * (double)b);



うぉっと、そのとおりです。
    • good
    • 0
この回答へのお礼

追記ありがとうございます

お礼日時:2010/10/19 19:36

ん? c の計算は


c = (int)((double)0.5 * (double)a * (double)b);
では>#1. d も同様に, 最後に int へのキャストが入る.
    • good
    • 0
この回答へのお礼

解答ありがとうございます


少し分かってきました

お礼日時:2010/10/18 23:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!