配列と関数を使って教科ごとの平均点を求めるC言語のプログラムを
作りました。しかし、結果がおかしくいろいろ考えてみたのですが、
よくわからないので質問に出すことにしました。
作ったものは以下です。どうすればよいでしょうか?
#include <stdio.h>
#define NUMBER3
/*--- 要素数noの配列の平均値を求める ---*/
double ave_of(int vb[], int no)
{
int i, sum, ave;
for (i=1;i<no; i++)
sum+=vb[i];
ave=(double)sum/NUMBER;
return(ave);
}
int main(void)
{
int i;
int a[NUMBER];
int b[NUMBER];
int c[NUMBER];
double ave_a, ave_b, ave_c;
printf("%d人の点数を入力してください。\n",NUMBER);
for(i=0;i<NUMBER; i++){
printf("[%d番]理科:",i+1);scanf("%d",&a[i]);
printf(" 数学:");scanf("%d",&b[i]);
printf(" 社会:");scanf("%d",&c[i]);
}
ave_a=ave_of(a, NUMBER);
ave_b=ave_of(b, NUMBER);
ave_c=ave_of(c, NUMBER);
printf("【理科】平均点:%.1f\n", ave_a);
printf("【数学】平均点:%.1f\n", ave_b);
printf("【社会】平均点:%.1f\n", ave_c);
return(0);
}
結果は例えば45.2 というような感じで出したいです。
No.4ベストアンサー
- 回答日時:
>しかし、結果がおかしく、いろいろ考えてみたのですが、よくわからないので質問に出すことにしました。
・sum を初期化していない「警告」は出ませんでしたか。
・「結果」が「小さい」、と気づきませんでしたか。
・「結果」が、小数点以下は0固定ではなかったですか。
等々、なぞなぞを解く感覚で考えてみるのも楽しいかと・・。
☆今回に限らず、この様(プログラムは動くが、結果がおかしい)な場合、
1人目は1桁点、2人目は2桁点、3人目は3桁点などのように、いろいろ試行すると、気づくのが早いかも・・。
(前の2つは、他の回答者さんが答えています)
残る1つは、
☆平均の計算(右辺◆)は double なのに、int 変数に代入すると・・・。
小数点以下は、省かれます。
45 ← 45.2 で、45.0 が「返り値」となります。
+++++++++++++++++++++++++++++++++++++++++++++
修正してみました。
double ave_of( int vb[], int no )
{
int i, sum = 0; // 初期化
double ave; // 関数の型に!
for( i = 0; i < no; i++ ) sum += vb[i]; // 全員集計
ave = (double)sum / NUMBER;// ◆
return( ave );
}
回答ありがとうございます。
詳しい説明でとても分かりやすかったです。
結果が小数点以下が0だったのは気になっていました。sumを初期化
してなくてもエラーは出ませんでした。
No.5
- 回答日時:
int i, sum, ave;
↓
int i, sum = 0;
double ave;
for (i=1;i<no; i++)
↓
for (i=0;i<no; i++)
ave=(double)sum/NUMBER;
↓
ave=(double)sum/(double)no;
No.3
- 回答日時:
平均を求める際には合計を求めていますが、合計が初期化されていません。
足しこむ場合は0で初期化してください。
配列の添字は0で始まりますので、for文は0から始めてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# (C言語・配列)date[i]の分散を計算する場合 2 2022/07/24 15:06
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
最早開始時間と最遅完了時刻を...
-
ラップ関数とはどんなものですか?
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
足して100になるような乱数のア...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
C言語 プログラミング
-
read関数をノンブロッキングで...
-
実数の整数部,小数部の取得
-
Win32APIで作るコンボボックス...
-
入力を待たずにstdinの監視をし...
-
剰余演算を論理演算と加減算に...
-
(int *)の意味
-
部分行列の抜き出し(C言語)
-
C++の関数をCで呼ぶには??
-
C言語で、数値の桁数を求めるに...
-
シェルピンスキーのギャスケット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
実数の整数部,小数部の取得
-
acceptをalarmでタイムアウトさ...
-
C言語
-
std::set<int> で、ある値が何...
-
因数分解を行うプログラムについて
-
数字列を3桁ごとにカンマで区切...
-
(マルチスレッド)_beginthrea...
-
比較回数と交換回数表示について
-
式は定数値が必要です」という...
-
int型の変数値をバイト列として...
-
c言語の配列を使ってサイコロを...
おすすめ情報