C言語 小数点以下の表示

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

C言語 小数点以下の表示

#1

投稿記事 by みるるん » 7年前

このコードだと、少数点以下がすべて0になってしまうのですが、どうしてでしょうか?

コード:

 
#include <stdio.h>
int main(void) {
	int ten[5][3], i, j;
	double ave;

	for (i = 0; i < 5; i++) {
		printf("学生%dの3科目の得点を入力して下さい-->", i + 1);
		scanf("%d %d %d", &ten[i][0], &ten[i][1], &ten[i][2]);
	}

	printf("\n");
	
	printf(" 学生 国語 数学 英語 平均 評価\n");
		for (i = 0; i < 5; i++) {
			ave = (ten[i][0] + ten[i][1] + ten[i][2]) / 3;
			if (ave >= 90) {
				printf("学生%d  %3d  %3d  %3d  %3.1f   S\n", i + 1, ten[i][0], ten[i][1], ten[i][2], ave);
			}
			if (ave >= 80 && ave < 90) {
				printf("学生%d  %3d  %3d  %3d  %3.1f   A\n", i + 1, ten[i][0], ten[i][1], ten[i][2], ave);
			}
			if (ave >= 70 && ave < 80) {
				printf("学生%d  %3d  %3d  %3d  %3.1f   B\n", i + 1, ten[i][0], ten[i][1], ten[i][2], ave);
			}
			if (ave >= 60 && ave < 70) {
				printf("学生%d  %3d  %3d  %3d  %3.1f   C\n", i + 1, ten[i][0], ten[i][1], ten[i][2], ave);
			}
			if (ave < 60) {
				printf("学生%d  %3d  %3d  %3d  %3.1f   E\n", i + 1, ten[i][0], ten[i][1], ten[i][2], ave);
			}
			
		}

	return 0;
  

box
記事: 2002
登録日時: 13年前

Re: C言語 小数点以下の表示

#2

投稿記事 by box » 7年前

みるるん さんが書きました:このコードだと、少数点以下がすべて0になってしまうのですが、どうしてでしょうか?

コード:

			ave = (ten[i][0] + ten[i][1] + ten[i][2]) / 3;
右辺において、整数 / 整数 という演算を行なっています。
このため、結果は整数になります。小数点以下を切り捨てて、なかったことにしてしまいます。
それをdouble型の変数に代入していますので、そのdouble型の変数の小数点以下は0になります。

問題を解決するには、例えば

コード:

    ave = (ten[i][0] + ten[i][1] + ten[i][2]) / 3.0;
としたり、

コード:

    ave = (double) (ten[i][0] + ten[i][1] + ten[i][2]) / 3;
としたり、

コード:

    ave = (double) (ten[i][0] + ten[i][1] + ten[i][2]) / 3.0;
としたりします。要するに、右辺の割り算で、
割られる数と割る数の少なくとも一方を浮動小数点数にします。
3.0 は、3. と書いてもかまいません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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