二次元配列で、各配列の平均と最大の値を求めたいのですが上手くいきません。
どこをどのように直せば良いのでしょうか?
#include <stdio.h>
int main(void){
int i;
float sum1,sum2,sum3,sum4;
float max1,max2,max3,max4;
float a[4][3]={{76.51,78.25,76.99},{78.71,78.16,77.12},{79.14,80.59,78.88},{73.31,73.35,74.95}};
for(i=0;i<3;i++){
sum1=a[0][i]+sum1;
sum2=a[1][i]+sum2;
sum3=a[2][i]+sum3;
sum4=a[3][i]+sum4;
}
max1=a[0][1];
if(max1<a[0][2]){
max1=a[0][2];
}
if(max1<a[0][3]){
max1=a[0][3];
}
max2=a[1][1];
if(max2<a[1][2]){
max2=a[1][2];
}
if(max2<a[1][3]){
max2=a[1][3];
}
max3=a[2][1];
if(max3<a[2][2]){
max3=a[2][2];
}
if(max3<a[3][3]){
max3=a[3][3];
}
max4=a[4][1];
if(max4<a[4][2]){
max4=a[4][2];
}
if(max4<a[4][3]){
max4=a[4][3];
}
printf("<選手番号1>平均距離:%.2f,最大距離:%.2f\n",sum1/3,max1);
printf("<選手番号2>平均距離:%.2f,最大距離:%.2f\n",sum2/3,max2);
printf("<選手番号3>平均距離:%.2f,最大距離:%.2f\n",sum3/3,max3);
printf("<選手番号4>平均距離:%.2f,最大距離:%.2f\n",sum4/3,max4);
return 0;
}
No.3ベストアンサー
- 回答日時:
> ありがとうございます。
参考にさせていただきます。ほい、頑張って。
どこまで勉強進んでるか分からんけど、大きく言うと、
☆ 何でもかんでもmain関数内で処理しない
多分配列やってる辺りだともう関数を習ってる筈なんですが。
この問題のように、
> 各配列の平均と最大の値を求めたい
と言う場合、すぐ「平均と最大の値を同時に求めよう」としない。
そうじゃなくって、平均なら平均、最大なら最大を求める、と。
プログラムをする際に機能を最小限に抑える。そして「それらを組み合わせる」。
そのために「関数がある」のです。一つの機能を実装する為に。
大きく「全部いきなりやろう」としない事。全部いきなりやろうとすると、貴方のように混乱するんです。
小さいものを書く。そして小さいもの同士を「組み合わせていく」。結局それで目的のモノを作り上げるのです。
No.2
- 回答日時:
#include <stdio.h>
#include <float.h>
float average(int n, float a[]){
int acc = 0;
for (int i = 0; i < n; i++) {
acc += a[i];
}
return acc/n;
}
float max(int n, float a[]) {
float min = -FLT_MAX;
for (int i = 0; i < n; i++) {
if (a[i] > min) {
min = a[i];
}
}
return min;
}
int main(void) {
float a[4][3] = {{76.51, 78.25, 76.99},
{78.71, 78.16, 77.12},
{79.14, 80.59, 78.88},
{73.31, 73.35, 74.95}};
for (int i = 0; i < 4; i++) {
printf("<選手番号%d>平均距離:%.2f, 最大距離:%.2f\n", i + 1, average(3, a[i]), max(3, a[i]));
}
return 0;
}
No.1
- 回答日時:
> for(i=0;i<3;i++){
> sum1=a[0][i]+sum1;
いきなり足し合わせる前に、sum1~sum4を0.0に初期化した方が良いのでは。
変数宣言すると0に初期化してくれるコンパイラとか処理系もあるけど、Cの仕様では中身の保証は無かったハズ。
改行無くすと、
max1=a[0][1];if(max1<a[0][2]){max1=a[0][2];}if(max1<a[0][3]){max1=a[0][3];}
max2=a[1][1];if(max2<a[1][2]){max2=a[1][2];}if(max2<a[1][3]){max2=a[1][3];}
max3=a[2][1];if(max3<a[2][2]){max3=a[2][2];}if(max3<a[3][3]){max3=a[3][3];}
max4=a[4][1];if(max4<a[4][2]){max4=a[4][2];}if(max4<a[4][3]){max4=a[4][3];}
配列の添え字が変じゃね?0,1,2,4とか。0,1,3,4とか。
課題の意図としては、最初に数値設定して以降の4回とか3回似たような事書いてる所は、繰り返し処理にまとめて欲しかったんだと思うけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 数学 場合の数、確率 45 (浜松医科大学) 1 2023/07/29 13:52
- 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言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- 数学 ハイネボレルの被覆定理、内田伏一著 「集合と位相」定理22.1 1 2022/07/07 10:49
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
構造体のextern方法
-
配列の要素数に変数を入れたい...
-
[C++]const int と配列
-
define で 配列
-
コンボボックスでデフォルト値...
-
構造体の配列 char *' 型は 'ch...
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
C言語の配列のコピーについて
-
C言語で質問です
-
c言語の自分で数字を入力してサ...
-
AfxBeginThread の引数について
-
.NET C++で、構造体の配列をnew...
-
C#でのフィボナッチ数列
-
構造体の動的確保について
-
C言語で重複組合せを全列挙
-
配列のアドレス部
-
構造体をポインターに入れたい
-
int i, int i[1];
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
C言語において、 配列要素をひ...
-
配列の要素数に変数を入れたい...
-
構造体のextern方法
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
C言語の2次元配列 容量が大き...
-
c言語 構造体
-
C言語 ファイルの指定された行...
-
C言語についてです 5人のテスト...
-
int i, int i[1];
-
fclose()でセグメンテーション違反
-
char型配列をint型に代入するには
-
C言語から質問です。
-
Cのエラー
-
コンボボックスでデフォルト値...
-
C言語の課題が出たのですが自力...
-
MFCのCArrayを使った二次元配列
-
[C++]const int と配列
おすすめ情報