C言語 勉強始めた所で、まだ良く解りません、教えてください!
このプログラムを実行すると、5,5と表示されると思うのですが?
/*****************************************************************************/
#include <stdio.h>
int average( int *data, int count )
{
int i, sum=0;
for( i=0; i<count; i++ ) sum+=data[i];
return sum/count;
}
int main(void)
{
int numbers [] = { 2, 3, 5, 7, 9, 11, 13, 15, 17,19 };
printf("%d\n",average(numbers,5));
return 0;
}
/*******************************************************************************/
5、だけしか表示されません、これでよいのでしょうか?
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
トレースモードの真似事です。
計算の途中経過はタブブレで一段落として出力されますので、計算の流れをつかんでください。--- 計算出力内容 ---
sum + data[0] = 0 + 2 = 2
sum + data[1] = 2 + 3 = 5
sum + data[2] = 5 + 5 = 10
sum + data[3] = 10 + 7 = 17
sum + data[4] = 17 + 9 = 26
return sum/count (26/5 = 5)
5
--- ここまで ---
「5」だけが表示されます。要は、int型の計算においては、少数は切り捨てられることを示しています。そしてあなたは「 printf("%d\n", ... 」のように、1つの整数値を出力するようにプログラムした。
...当然の結果です。↓のプログラムを起動して、確認してみてください。
/* A sample program by gcc on Mac OSX
* file name: racc.c
* compile: gcc racc.c
* execution: ./a.out
*/
#include <stdio.h>
int average( int *data, int count )
{
int i, sum=0;
for( i=0; i<count; i++ ) {
printf("\tsum + data[%d] = %d + %d", i, sum, data[i]); //トレース追加
sum+=data[i];
printf("\t = %d\n", sum); //トレース追加
}
printf("\treturn sum/count (%d/%d = %d)\n", sum, count, sum/count); //トレース追加
return sum/count;
}
int main(void)
{
int numbers [] = { 2, 3, 5, 7, 9, 11, 13, 15, 17,19 };
printf("%d\n",average(numbers,5));
return 0;
}
No.6
- 回答日時:
平均値をaとして、平均値を取った数値の個数をnとすると
n, s
または
s, n
のように出力したい
ということでしょうか?
だとすると
printf("%d, %d\n",5,average(numbers,5));
または
printf("%d, %d\n",average(numbers,5),5);
のようにしなければなりませんが…。
No.4
- 回答日時:
> 5、だけしか表示されません、これでよいのでしょうか?
はい。
プログラムに記述された通りの「正しい」動作です。
1)int型同士の四則演算はint型になります。
int / int = int です。小数点以下は切り捨てになります。
2)関数averageの戻り値がint型です。(小数を扱える)double型等であってもint型に変換して返します。
3)printfの書式「%d」は(int型の)整数表示専用です。
小数以下まで表示したいのなら、浮動小数点型にする必要があります。
floatとdoubleがあります(コンパイラによってはlong doubleとかもあります)が、現在ではdoubleを使うのが一般的です。
1) キュスト(型変換)でint→doubleの変換をしてdouble型の演算にする
2) 戻り値をdoubleにする
3) double型に対応した小数点以下のできる書式設定にする。
実際のコードは前の方のを参照のこと
>このプログラムを実行すると、5,5と表示されると思うのですが?
(2+3+5+7+9)/5 = 26/5 = 5.2 ですが。
No.3
- 回答日時:
intは整数型ですので、小数点以下は切り捨てになってしまいます。
小数点以下を残したいのであれば、double型を使うようにしてください。
あと、処理系不明なので正確なことはいえませんが...
> 5,5と表示されると思うのですが?
全角で出力したいのであれば、自分で変換処理を書かなければなりません。
半角でよい場合でも、小数点をピリオドではなくコンマにしたいのであれば、ドイツ語ロケールに設定するなどの対応が必要です。
ちなみに、printfでdoubleの値を出力するための書式は、%lfではなく%fです。ただし、お使いの処理系がC99であれば、%lfでもOKです。
No.2
- 回答日時:
あ、違う。
double average( int *data, int count )
{
/* 中略 */
return (double)sum/count; /* return sum/count;の代わり*/
}
も追加で
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
比較回数と交換回数表示について
-
複数桁10進数の*桁目だけを抽出...
-
nCmの関数
-
構造体の勉強中です 合計点の高...
-
C言語 配列と関数の練習問題
-
[C言語] 関数を利用する計算
-
実数の整数部,小数部の取得
-
C言語での引数の省略方法
-
数字列を3桁ごとにカンマで区切...
-
アスタリスクでダイヤ型を作る
-
覆面算のプログラムが分かりません
-
C言語の基礎 . 2乗値の差につ...
-
c言語
-
プログラミング
-
【C++】関数ポインタの使い方
-
毎回違う乱数を生成するにはど...
-
if と配列の組み合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報