C言語から質問です。
C言語から質問です。
/*
main関数の中で初期化した配列
data[10]={60,30,70,25,20,9,92,55,20,10};
を関数 keisan() に引数として渡して、関数keisan()内で
平均値、最大値,最小値
を求め、その結果をmain関数に戻し、main関数内で
平均値、最大値,最小値を表示させるプログラムを作成せよ。
int keisan(const int data[], int data_kosuu, double answer[])
{
return 0;
}
とする。
(注)
プロトタイプ宣言を用いよ。
ヒント:平均値,最大値,最小値の3つの値を
main関数に戻すやり方として、配列answer[]を使うとよい。
data_kosuu は、配列の要素数を与えるものです。
ヒント: (int型の変数)/(int型の変数)=int型の値です。
int型同士の割り算の答えANSWERをdoubleにしたい場合は、
ANSWER=(double)(int型の変数)/(int型の変数);
と(double) キャストという操作をする必要がある
*/
#include <stdio.h>
int keisan(const int data[], int data_kosuu, double answer[]);
int main(void)
{
int i;
int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください
double ans[3];
keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */
for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]);
printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]);
return 0;
}
/* 合計・最大値・最小値を求める関数 */
int keisan(const int data[], int data_kosuu, double answer[])
{
int i;
int sum;
int min,max;
min=10; /* min の初期化 */
max=10; /* max の初期化 */
sum=0; /* 合計値の初期化 */
for (i=0; i<10 ; i++){
sum = sum+data[i];
if(data[i] > max) max=data[i];
if(data[i] < min) min=data[i];
}
sum=sum/10;
answer[0]=sum;
answer[1]=min;
answer[2]=max;
}
エラー
error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。
とでて先に進めません。
教科書などを見ても間違いがわかりません;
虫食いになってるところを自分なりにやってみたため、
根本的に間違ってるかもしれませんが、
どうかアドバイスや指摘などをお願いします。
お礼
MSZ006様: アドバイスありがとうございます。 仰る通り、ループ外でSUM_Areaを計算するようにしたところ 上手く行きました。 Area[i]の計算まではforで回して計算しています。 また、私の稚拙な文章から仕様を読み取って頂きありがとうございます。 上手く言葉では言えないのですが、Riseは都度0に初期化されます。 (ラインカメラの仕様上) for(i=1;i<Rise;i++){ Captime[i]=Captime_rise[i+1]-Captime_down[i]; Area[i] += Captime[i]; //面積計算 -> Area = Area+ Captime[1] } Calc_area(); void Calc_area(void){ if(Rise==2) SUM_Area=Area[1]; else if(Rise==3) SUM_Area=Area[1]+Area[2]; /*以下 Rise==64まで分岐*/ } 一応ここに全文があります。 (決して「見て頂きたい」という厚かましいお願いではございません。) http://anasys.blog.fc2.com/blog-entry-15.html
補足
関係の無いことなのですが、MSZ006様はガンダムがお好きなのでしょうか。ファーストのご世代なのでしょうか。(Zの形式番号な為そう推測しました。)