- ベストアンサー
C言語の計算が合わない!初心者の悩み解決方法
- 簡単な計算のプログラミングをしているが、計算が合わないと困っている初心者のための解決方法を紹介します。
- プログラム内で整数型変数と実数型変数を定義し、計算を行っていますが、正しい結果が得られていないようです。
- プログラムのロジックに問題があり、整数型変数を実数型変数で割る際に誤った計算になってしまっている可能性があります。
- みんなの回答 (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%E9%BB%99%E3%81%AE%E5%9E%8B%E5%A4%89%E6%8F%9B&aq=0r&aqi=g-r6g-mr4&aql=&oq=%E3%81%82%E3%82%93%E3%82%82%E3%81%8F%E3%81%AE%E3%81%8B%E3%81%9F&gs_rfai=
その他の回答 (3)
- BuriBuri4
- ベストアンサー率28% (150/525)
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型で計算される。
お礼
>int/intはint型で計算されるがint/doubleはdouble型で計算される。 これでわかりました ありがとうございます
- osamuy
- ベストアンサー率42% (1231/2878)
>c = (int)((double)0.5 * (double)a * (double)b); うぉっと、そのとおりです。
お礼
追記ありがとうございます
- Tacosan
- ベストアンサー率23% (3656/15482)
ん? c の計算は c = (int)((double)0.5 * (double)a * (double)b); では>#1. d も同様に, 最後に int へのキャストが入る.
お礼
解答ありがとうございます 少し分かってきました
お礼
解答ありがとうございます URLも参考にさせてもらいます