#include /******************** サブ関数群のプロトタイプ宣言 *****************/ /* 行列をスキャンする関数. 行列のサイズは値を受け取るのでポインタで指定 */ void scanMatrix(int mat[100][100], int *sizeP); /* 行列をプリントする*/ void printMatrix(int mat[100][100], int size); /* 課題4 : start より右下の部分行列において,最大値をもつ行と列の番号を見つける. 番号は,値を受け取るのでポインタで指定する.*/ void findMax(int mat[100][100], int size, int start, int *rowP, int *colP); /*************** メイン関数 **********************************/ int main(){ int n; /* 行列のサイズ */ int A[100][100]; /* 行列 */ int row, col; /* 行と列の値を受け取る変数 */ /* スキャン */ scanMatrix(A, &n); /* 入力を確認 */ printf("\nInput matrix: \n"); printMatrix(A, n); /* 行列全体の最大値 */ findMax(A, n, 0, &row, &col); printf("\nMax. : A(%d,%d)=%d\n", row, col, A[row][col]); /* 真ん中より右下の最大値 */ findMax(A, n, n/2, &row, &col); printf("\nMax. below (%d, %d) : A(%d,%d)=%d\n", n/2, n/2, row, col, A[row][col]); return 0; } /******************* 以下はサブ関数群の中身 ***********************/ /* 行列をスキャンする関数. 行列のサイズは値を受け取るのでポインタで指定 */ void scanMatrix(int mat[100][100], int *sizeP){ int i, j; printf("Size ?\n"); /*sizePはポインタなので & は不要. もちろん,&(*sizeP) でもOK. */ scanf("%d", sizeP); for(j=0; j<*sizeP; j++){ printf("Row %d:\n", j); for(i=0; i<*sizeP; i++){ scanf("%d", &(mat[j][i])); } } } /* 行列をプリントする*/ void printMatrix(int mat[100][100], int size){ int i, j; for(j=0; j mat[*rowP][*colP]){ *rowP = j; *colP = i; } } } }