アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++の配列について教えてください。
なぜ平均のところだけ少数以下がすべて0になってしまうのでしょうか。
ご教授お願いします。

//--- ソース ---
#include "stdafx.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
int no[100],ten1[100],ten2[100],ten3[100],i,n;
double a[100];

scanf("%d", &n);
for(i=0; i<n; i++) scanf("%d%d%d%d", &no[i], &ten1[i], &ten2[i], &ten3[i]);

for (i=0; i<n; i++)
{
a[i] = (ten1[i] + ten2[i] + ten3[i]) / 3;
}
printf("番号 地理 歴史 日本史 平均\n");

for(i=0; i<n; i++) printf("%2d%8d%5d%4d%7.1f\n", no[i], ten1[i], ten2[i], ten3[i], a[i]);

return 0;
}

//--- 実行結果 ---
10
1 35 57 45
2 57 69 67
3 74 65 84
4 45 67 39
5 26 67 29
6 86 77 57
7 13 26 67
8 98 85 58
9 54 50 34
10 45 63 19
番号 地理 歴史 日本史 平均
1 35 57 45 45.0
2 57 69 67 64.0
3 74 65 84 74.0
4 45 67 39 50.0
5 26 67 29 40.0
6 86 77 57 73.0
7 13 26 67 35.0
8 98 85 58 80.0
9 54 50 34 46.0
10 45 63 19 42.0
3.14159
3.14159

A 回答 (1件)

コンパイラの仕様として、整数/整数の結果は、整数として扱う。


と言うような項目があったように記憶しています。

演算結果が整数値であり、その結果をdubleの変数に格納しているので「??.0」という結果になるのでは無いでしょうか?

一旦、点の1,2,3の合計値をduble変数に格納してから、3で除算してみては如何か!
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事小数点以下が正常に出力されました。
コンパイラはVisual C++ 2008でした。

キャストを忘れていたようです。
しかしこれで1時間近く悩むとは・・・><;

参考までに修正したプログラム↓


for (i=0; i<n; i++)
{
a[i] = (double)(ten1[i] + ten2[i] + ten3[i]) / 3;
}

お礼日時:2010/07/10 20:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!