ページ 11

C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 02:59
by トレージャー
初めまして。私、C言語入門者クラスの者です。

このC言語プログラムの平均値aveを小数点で出したいのですが、
aveに小数用のキャスト演算子かけているのに整数値で出てしまうのです…
どこに問題があるかご教授お願い頂けますでしょうか…?

OSはXP
コンパイラはAOKのC言語を始めよう!
です。

/*3つの整数値を読み込んで合計値と平均値を表示*/

#include<stdio.h>
int main(void)
{
int na,nb,nc;
int sum;/*合計値*/
double ave;/*平均値*/

puts("3つの整数を入力してください。");
printf("整数A:"); scanf("%d",&na);
printf("整数B:"); scanf("%d",&nb);
printf("整数C:"); scanf("%d",&nc);

sum=na+nb+nc;
ave= (double)sum/3; /*キャスト*/

printf("それらの合計は%5dです。\n",sum);
printf("それらの平均は%5.lfです。\n",ave);

return(0);

}

Re:C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 03:05
by 組木紙織
sum/3

sum/3.0


解説をすると
sum/3 の部分は(整数)/(整数)の計算となるので(整数)で結果が帰ってきます。
この時点で結果は整数になります。

それを実数型にキャストしたら。整数の値を持つ実数型になります。

Re:C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 03:14
by トレージャー
組木紙織さん、ご回答ありがとうございます。
大変良く分かりました。この場合キャストしても同じなのですね。
つまり参考書の誤植だったのですね…
迅速かつ的確なご回答ありがとうございましたm(__)m

Re:C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 06:33
by フリオ
 
 キャスト演算子 () は、除算演算子 / より優先度が高いので
ave= (double)sum/3;
で問題ありません。

表示が整数になるのは、
printf("それらの平均は%5.lfです。\n",ave);
の、精度が空になっているので %5.0lf と解釈されたからです。
画像

Re:C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 08:00
by たかぎ
本当に書籍に書いていたコードなのでしょうか?
だとすると、その書籍のコードは一通り疑ってかかった方がよいかもしれません。
http://www.kijineko.co.jp/tech/supersti ... ouble.html

Re:C言語での3整数の平均値の小数表示

Posted: 2010年5月11日(火) 09:10
by toyo
Lの小文字と数字の1は紛らわしいですよね
子供の教科書見たら容積を表すリットルも大文字表記になってました
ミリリットル=mL
ということで1とlの誤植かも