#include <stdio.h> #include <stdlib.h> int FindMax(int *p, int m, int n, int *pRow, int *pCol); main() { int *pScore, i, j, m, n, maxScore, row, col; printf("Please enter array size m,n:"); scanf("%d,%d", &m, &n); /*输入班级数m和学生数n*/ /*申请m*n个sizeof(int)字节的存储空间*/ pScore = (int *) calloc(m*n, sizeof (int)); if (pScore == NULL) { printf("No enough memory!\n"); exit(0); } printf("Please enter the score:\n"); for (i = 0; i<m; i++) { for (j = 0; j<n; j++) { scanf("%d", &pScore [i*n+j]); /*输入学生成绩*/ } } maxScore = FindMax(pScore, 3, 4, &row, &col); /*调用函数FindMax*/ /*输出最高分max及其所在的班级和学号*/ printf("maxScore = %d, class = %d, number = %d\n", maxScore, row+1, col+1); free(pScore); /*释放向系统申请的存储空间*/ } /* 函数功能: 计算任意m行n列的二维数组中的最大值,并指出其所在行列下标值 函数入口参数:整型指针变量p,指向一个二维整型数组的第0行第0列 整型变量m,二维整型数组的行数 整型变量n,二维整型数组的列数 函数出口参数:整型指针变量pRow,指向数组最大值所在的行 整型指针变量pCol,指向数组最大值所在的列 函数返回值: 数组元素的最大值 */ int FindMax(int *p, int m, int n, int *pRow, int *pCol) { int i, j, max; max = p[0]; /*置初值,假设第一个元素值最大*/ *pRow = 0; *pCol = 0; for (i = 0; i<m; i++) { for (j = 0; j<n; j++) { if (p[i*n+j] > max) { max = p[i*n+j]; /*记录当前最大值*/ *pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } /*if结束*/ } /*内层for结束*/ } /*外层for结束*/ return (max); /*返回最大值*/ } |