
配列と関数を使って教科ごとの平均点を求める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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
int16_t の _t は何?
-
read関数をノンブロッキングで...
-
アスタリスクで正方形
-
【C++】関数ポインタの使い方
-
(int *)の意味
-
未解決の外部シンボル _printf...
-
C++でRPGを作成する際のステー...
-
acceptをalarmでタイムアウトさ...
-
C言語でDxlibを使って3x3の奇数...
-
C言語初心者です、、、お助けく...
-
c言語の問題です
-
C言語で秒単位の数値をコンソー...
-
VBからのDLL呼び出しでエラー発生
-
エラー 添字が付けられた値が、...
-
式は定数値が必要です」という...
-
C言語 エラーの原因がわからな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報