質問: 配列中の実数値をsize個分先頭から順番に出力する手続き、またその配列の要素を10個入力し、その配列の要素と配列中の最大値を表示するプログラムを書きたいのですが、下記に示すプログラムではそれができませんでした。 どこが間違っているのかもよくわからないので、わかる方がいましたら、回答よろしくお願いします。 ``` /* size個 の入力された実数データを 配列の先頭から順番に格納する */ void readDoubleArray(int a[], int size) { int i; for(i=0;i<size;i=i+1) { printf("%d 番目? ", i+1); scanf("%lf", &a[i]); } } /* size個 の実数データが入っている配列を 配列の先頭から順に出力する */ void printDoubleArray(int a[], int size) { int i; for(i=0;i<size;i=i+1) { printf("%f ", a[i]); } printf("\n"); } //要素数size の実数をもつ配列 a の中の最大値を返す. int maxDoubleArray(int a[], int size) { int i,max; max=a[0]; for(i=1;i<size;i=i+1) { if (a[i]>max){ max=a[i]; } } return max; } int main(void) { double data[1024]; readDoubleArray(data, 10); printf("順番に出力:"); printDoubleArray(data, 10); printf("最大値:%f\n", maxDoubleArray(data,10)); return 0; } ```
回答: `double[]` の中から最大値を探す関数は `int maxDoubleArray(int a[], int size)` ではうまくいかない(コンパイルエラーになる)でしょう。だってこの関数は `int[]` は受け取れるけど `double[]` は受け取れませんから。 関数や変数のネーミングはとても大事かつセンスがいります。名前見ただけで関数名と引数が矛盾していると思うようになれればいいですね。 ``` double maxDoubleArray(double a[], int size) { ... } ``` のように書き換えるとうまくいくはず(未テスト) # ツッコミどころは他にもいくつかあるんですけど本筋に関係なさそうなので略