昨日はじめました。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大介

昨日はじめました。

#1

投稿記事 by 大介 » 18年前

基本的だと思いますが教えてください。

#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としたのでしょうか?確かにこうしないと正しい値がでてこないのです。教えてください。

box

Re:昨日はじめました。

#2

投稿記事 by box » 18年前

おっしゃるとおりです。
なお、アップロードされたソースにはいくつか問題があって、
コンパイルできないです。

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

大介

Re:昨日はじめました。

#3

投稿記事 by 大介 » 18年前

ミスありましたこれです。
#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:昨日はじめました。

#4

投稿記事 by たろう » 18年前

整数A,Bの合計が奇数の時、平均の値は小数点になるから%fを使うと思う。

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

なぎ

Re:昨日はじめました。

#5

投稿記事 by なぎ » 18年前

> 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:昨日はじめました。

#6

投稿記事 by 管理人 » 18年前

たろうさんのご回答

>ちなみに%.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スペース分で表示されるので
値に関係なく綺麗にそろって表示されるのです。
色々試してみてください。

閉鎖

“C言語何でも質問掲示板” へ戻る