编程语言基础 C语言 数组与指针 函数调用

[1] 以下に示すように、キーボードから整数型変数nの値を読み込み、log(1), log(2), , log(n)の値を表示するプログラムを作成した。空欄を埋めなさい。

#include <stdio.h>
#_____(1)_____
main(){
    int n,x;
    printf("Input n \n"); scanf(_____(2)_____);
    for(_____(3)_____){
        printf(" x --> %d : log(x) --> %lf\n",x,_____(4)_____);
    }
}

[2] n行n列の行列成分の最大値と最小値を求めるために、main関数とminmax関数からなるプログラムを作成した。main関数は2次元配列aの各次元のサイズnと要素の値をminmax関数に渡し、minmax関数からは配列要素の最大値maxと最小値minを受け取って、それらを画面に表示する。一方、minmax関数は2次元配列aの各次元のサイズnと要素の値をmain関数から受け取り、要素の最大値と最小値を求めてmain関数に戻す。2次元配列aの各次元のサイズは最大NMAXで、nはNMAX以下である。以下の設問に答えなさい。

#include <stdio.h>
#define NMAX 10
void minmax(int n, int a[][NMAX], int *max, int *min);_____(1)
main(){
    int a[][NMAX]={{1,2,3},{-10,-5,-1},{0,20,-5}};_____(2)
    int max,min;
    minmax(_____(3)_____);
    printf(" Max --> %d\n Min --> %d\n",max,min);
}

1)(1),(2)を付記した下線付き構文について解説しなさい。
2)(3)の空欄を埋めなさい。
3)minmax関数を作成しなさい。


解答:

[1]

[2]
1)
(1):関数 minmax のプロトタイプ宣言。コンパイラに対して関数の引数の型と戻り値の型を事前に通知する。
(2):2次元配列 a の定義および初期化。第一次元(行数)のサイズは省略されているが、右辺の初期化リストの要素数から自動的に と決定される。

2)

3)

void minmax(int n, int a[][NMAX], int *max, int *min) {
    int i, j;
    *max = a[0][0];
    *min = a[0][0];
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if (a[i][j] > *max) *max = a[i][j];
            if (a[i][j] < *min) *min = a[i][j];
        }
    }
}