ページ 1 / 1
2次元配列 平均値
Posted: 2013年10月20日(日) 19:56
by x最強
コード:
#include "stdio.h"
#include "stdlib.h"
//関数のプロトタイプ宣言
void f_init( int, int, int [][5] );
void f_pout( int, int, int [][5] );
void f_max( int , int , int [][5] );
void f_min( int, int, int [][5] );
void f_ave( int , int , int [][5] );
int main()
{
int row = 3, col = 5;
int data1[3][5];
f_init( row, col, data1 );
f_pout( row, col, data1 );
printf("\n");
f_max( row, col, data1 );
f_min( row, col, data1 );
f_ave( row, col, data1 );
return 1;
}
void f_init( int row, int col, int dat[][5] )
{
int i, j;
for( i = 0; i < row; i++ )
{
for( j = 0; j < col; j++ )
{
dat[i][j] = rand() % 100;
}
}
}
void f_pout( int row, int col, int dat[][5] )
{
int i, j;
for( i = 0; i < row; i++ )
{ for( j = 0; j < col; j++ )
{
printf( "%4d", dat[i][j] );
}
printf( "\n" );
}
}
void f_max( int row, int col, int dat[][5] )
{
int i, j, k;
int Amax[5], max[5];
for( i = 0; i < row; i++ ){
for( j = 0; j < col; j++ ){
if( dat[i][j] > max[j] ){
max[j] = dat[i][j];
Amax[j] = max[j];
}
}
}
for( k = 0; k < col; k++ ){
printf("%4d", Amax[k]);
}
printf("\n");
}
void f_min( int row, int col, int dat[][5] )
{
int i, j, k;
int Amin[5], min[5] = {99,99,99,99,99} ;
for( i = 0; i < row; i++ ){
for( j = 0; j < col; j++ ){
if( dat[i][j] < min[j] ){
min[j] = dat[i][j];
Amin[j] = min[j];
}
}
}
for( k = 0; k < col; k++ ){
printf("%4d", Amin[k]);
}
printf("\n");
}
void f_ave( int row, int col, int dat[][5] )
{
int i, j;
int sum = 0;
int Asum[5];
for( i = 0; i < row; i++ ){
for( j = 0; j < col; j++ ){
sum = dat[i][j];
Asum[j] = (double)sum / 3;
printf("%4d", Asum[j]);
}
printf("\n");
}
}
}
実行結果
/*2次元配列*/
41 67 34 0 69
24 78 58 62 64
5 45 81 27 61
/*max値*/
41 78 81 62 69
/*min値*/
5 45 34 0 61
/*平均値???*/
13 22 11 0 23
8 26 19 20 21
1 15 27 9 20
この平均値がうまくいきません
この表示3つ足してなおかつdouble型で表示がしたいんですが、、、
ご教授願えませんでしょうか
お願いします
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:21
by 初級者
平均値の前に、最大値と最小値は
思ったとおりの結果が
出ているのでしょうか。
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:23
by x最強
こちらでは一応出てますが、、、
なにか問題あったでしょうか?
コード:
void f_ave( int row, int col, int dat[][5] )
{
int i, j;
int sum = 0;
double Asum[5];
for( i = 0; i < row; i++ ){
for( j = 0; j < col; j++ ){
sum += dat[i][j];
Asum[j] = (double)sum / 3;
printf("\t%.1lf", Asum[j]);
}
printf("\n");
}
}
少々書き換えしました
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:24
by みけCAT
f_ave関数のrowとcolのループの順番を逆にし、1行ずつ処理するといいと思います。
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:25
by みけCAT
さらに、入れ替えたあとのrowのループが始まる直前で、sumを0に初期化してください。
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:31
by x最強
あれ、こういうことじゃないですよね?
う~ん、わかりません
コード:
void f_ave( int row, int col, int dat[][5] )
{
int i, j;
int sum;
double Asum[5];
for( j = 0; j < col; j++ ){
sum = 0;
for( i = 0; i < row; i++ ){
sum = dat[i][j];
Asum[j] = (double)sum / 3;
printf("\t%.1lf", Asum[j]);
}
printf("\n");
}
}
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:36
by みけCAT
惜しいです。
sum = dat
[j]; ではなく、sum += dat[j];ですね。
ついでに、割る数も3固定ではなく、rowを使うといいですね。
オフトピック
本当に求められている仕様がこれでいいのか確定しませんが
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:38
by x最強
お?手探りでやったらできましたよぉ~!
こういうことでおkでしょうか?
コード:
void f_ave( int row, int col, int dat[][5] )
{
int i, j;
int sum;
for( j = 0; j < col; j++ ){
sum = 0;
for( i = 0; i < row; i++ ){
sum += dat[i][j];
}
printf( " %lf",(double)sum/row );
}
}
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:41
by みけCAT
現代のコンパイラでは、printfでdouble型のデータを表示するときは%lfではなく%fを使用します。
苦C さんが書きました:double型の表示に使うのは、%fが正解です。
そもそも出力変換指定子には、%lfは存在していません。
しかし、現在では%lfでもほとんどのコンパイラで通ります。
http://9cguide.appspot.com/r_mark.html
あとの解釈はあっています。おkかどうかは、自分でテストしてみてください。
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:57
by x最強
なるほど、そうだったんですね~
親切に教えていただき、ありがとうございます。
実はですね、この課題の進化系みたいなのもあるんですが、、、
それは後日分からなければ、質問させていただきます
その時はよろしくお願いしてもよろしいでしょうか?
本日は本当にありがとうございました~!
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 21:59
by みけCAT
x最強 さんが書きました:実はですね、この課題の進化系みたいなのもあるんですが、、、
それは後日分からなければ、質問させていただきます
その時はよろしくお願いしてもよろしいでしょうか?
フォーラムルールを守っていただけるなら、もちろんいいと思います。
解決したようでしたら、解決チェックをお願いします。
Re: 2次元配列 平均値
Posted: 2013年10月20日(日) 22:01
by x最強
スッキリ! = 解決!
いいサイトです!!!