(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);
}
求大神解答该程序的运行方式,详细点
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次都贴完了,看么看懂告诉我一声。
懂了,谢谢大神
本回答被提问者采纳