ページ 11

昨日はじめました。

Posted: 2006年12月11日(月) 22:12
by 大介
基本的だと思いますが教えてください。

#include <stdio.h>

int main(void)
{
int na, nb:

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

printf("それらの平均は%fです。\n,(na+nb)/2.0);

return(0);
}
これでintの形で最後のprintfが%fなのですがintは%dとなるはずなのですがこれは2。0という実数値で割るから答えは実数値になりますよ。という意味で%fとしたのでしょうか?確かにこうしないと正しい値がでてこないのです。教えてください。

Re:昨日はじめました。

Posted: 2006年12月11日(月) 22:30
by box
おっしゃるとおりです。
なお、アップロードされたソースにはいくつか問題があって、
コンパイルできないです。

次回からは、コンパイルできたソースをコピー&ペーストしてください。
その際、字下げを活かすために、ソースの前後を<pre>と</pre>タグで
はさんでください。便宜上ここでは<と>を全角で書いていますが、
実際は半角です。

Re:昨日はじめました。

Posted: 2006年12月11日(月) 22:47
by 大介
ミスありましたこれです。
#include <stdio.h>

int main(void)
{
int na, nb;

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

printf("それらの平均は%fです。\n",(na + nb)/2.0);

return(0);
}

Re:昨日はじめました。

Posted: 2006年12月12日(火) 00:42
by たろう
整数A,Bの合計が奇数の時、平均の値は小数点になるから%fを使うと思う。

ちなみに%.1fとかにしとけばOK!

Re:昨日はじめました。

Posted: 2006年12月13日(水) 09:00
by なぎ
> 2。0という実数値で割るから答えは実数値になりますよ。という意味で%fとしたのでしょうか?

その理解で間違いではありません。

C/C++の計算規則では、
・int と int の計算結果は int
・int と double の計算結果は double
という規則があります。

さらに、
・小数点を伴わない数値定数は int
・小数点を伴う数値定数は double
という規則があります。

これを適用して、

(na + nb) の 結果は int
(na + nb) / 2 の結果は int (小数点無し)
(na + nb) / 2.0 の結果は double (小数点有り。 int / double の計算)
となります。

Re:昨日はじめました。

Posted: 2006年12月13日(水) 16:22
by 管理人
たろうさんのご回答

>ちなみに%.1fとかにしとけばOK!

を補足させて頂くとすると、
%f と %.1f との違いは小数点何位まで表示するかの違いです。

%fのままでは大量に不必要な小数まで表示されていると思います。
しかし%.nfのnの部分に数字を入れることで、小数点第n位まで表示することが出来ます。

小数点の無い表示の時も、これは結構使えます。
#include <stdio.h>
int main() {
	printf("%5d\n",1234);
	printf("%5d\n",12);
	printf("%5d\n",123);
	return 0;
}
これを実行してみてください。
綺麗にそろってひょうじされるはずです。
これは5スペース分の領域を使って表示するという意味なので、値がすくなくても5スペース分で表示されるので
値に関係なく綺麗にそろって表示されるのです。
色々試してみてください。