(1)编写函数fun,其功能是先找出M行N列数组中各行值的最大数,再在选出的M个数中选出最小数

(1)编写函数fun,其功能是先找出M行N列数组中各行值的最大数,再在选出的M个数中选出最小数,并将其返回到main函数。
(2)编写main函数,在main函数中,输入M行N列的二维数组a,调用fun函数,并将a作为实参传给fun函数,最后输出找出的最小数。
# include <stdio.h>
# define M 3
# define N 4
void main()
{
int matrix[3][4];
int i,j,n;
int fun(int a[M][N]);
printf("Please inputthe elements of the matrix(3*4) row by row :\n");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&matrix[i][j]);
n=fun(matrix);
printf("result=%d\n", n);
}
int fun(int a[][N])
{
int i,j,max[M],min;
for(i=0;i<M;i++)
{
max[i]=a[i][0];
for(j=1;j<N;j++)
if(max[i]<a[i][j])
max[i]=a[i][j];
}
min=max[0];
for(i=1;i<M;i++)
if(min>max[i])
min=max[i];
return(min);
}
求大神解答该程序的运行方式,详细点

#include <stdio.h>
#define M 3
#define N 4

void main() {
int matrix[3][4];
int i,j,n;
int fun(int a[M][N]);
printf("Please input the elements of the matrix(3*4) row by row :\n");
for(i = 0; i < M; i++)
for(j = 0; j < N; j++)
scanf("%d",&matrix[i][j]);
n = fun(matrix);
printf("result = %d\n", n);
}

int fun(int a[][N]) {
int i,j,max[M],min; // max[]存放每行中的最大元素
for(i = 0; i < M; i++) {
max[i] = a[i][0]; // 假定a[i][0]最大
for(j = 1; j < N; j++)  // 与该行的每列进行比较
if(max[i] < a[i][j]) // 若还有更大的
max[i] = a[i][j]; // 把更大的数存入max[i]
}
min = max[0]; // 假定max[0]最小
for(i = 1;i < M;i++) // 与其他每个数进行比较
if(min > max[i]) // 若有更小的
min = max[i]; // 把更小值存入min
return(min); // 返回最小的
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-12
fun就是求各行值的最大数,再在选出的M个数中选出最小数的功能模块

main就是把原材料做好,fun基于参数(原材料)加工并返回产出
第2个回答  2014-04-12
应该是纯C语言的题吧,先问问你能不能大概了解函数fun是怎么在mian函数中工作的,知不知道什么是实参,实参怎么传递的。追问

fun函数不太懂

追答

那好。我先写一点你先看看啊
这个程序大概看了一下 应该是能直接跑的,开头的#define能懂吧,就不多说了,这个程序的工作方式你可以这么理解:开始运行之后先寻找到主函数,主函数定义了一些int型变量。然后在主函数声明了fun函数,之后程序会看看fun()能干啥。
我们进入fun()中看一下,fun()他需要一个2维数组作为参数,也就是说fun()要使用一下这个二维数组,fun()先定义了一些int,这些int他一会要用,然后fun()执行了第一次for 循环//for(i=0;i<m;++i),这个循环做了如下功能 :第一遍先把a数组的第[0]行的第[0]个元素赋值给M[0],然后进入第一个for循环//for(i=0;i<m;++i)内嵌套的一个for循环内,这个嵌套的for循环要做的是:(此时还在第一遍执行的条件下)不断的取用M[0](也就是a数组第一行的第一个元素)去和a数组第一行的其他元素比较,如果发现更大的,就用新的这个更大的值去取代刚才记录的M[0],这样一直比较知道a数组第一行全比较完,这样就找出来了这一行的最大值,并记录在M[0]中,然后这个嵌套的for循环就结束了。此时回到上一次的for循环中去执行第二遍循环。
第二次开始M记录的值为M[1],是把a[1][0]也就是a数组第二行的第一个元素给了他,原理同上,找出第二行的最大值。能懂了吧,这样一直做,只到找出每一行的最大值,第一行的存在m[0]中,第二行的存在m[1]中等等等等。找出每行的最大值的工作就完成了。
接下来呢,fun函数中第一个for循环就完成了,接下来要做的事是找出这些每行的最大值中的最小值。
原理与刚才找每一行最大值的过程类似。M数组不是已经存储了所以单行最大值了吗,第二个for循环做的就是把M数组的第一个元素拿出来,与之后的元素比较,如果发现更小的,就改拿这个最小的值来与其他的值比较,只到所有的值都比较过了,那么当前M[0]中存储的就是这些单行最大值中得最小值了。
然后fun()就吧这个M[0]返回到主函数中,返回值被n=fun(matrix);这句话赋值给了变量N,然后把N一输出就结束了。
好了 贴了3次都贴完了,看么看懂告诉我一声。

追问

懂了,谢谢大神

本回答被提问者采纳