重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,假如按照你函数写法的话,会有一些问题,因为这样无法知道被调函数的大小,那么这样就无法进行每一个值的索引,从而也就没法算出最大值,所以你需要把一维的大小也作为函数值进行调用,例如fun(arr,2),或者,你可以将2用字符常量表示,我这里用字符常量表示,修改为
成都创新互联公司是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:成都网站制作、做网站、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。
#include stdio.h
#define N 2
#define M 4
int fun (int a[][M])
{
int i=0,j=0; //进行二重索引
int max=a[i][j]; //用于保存最大值,初始化为第一个数
for(i=0;iN;i++) //进行循环,每一个值与max比较,大于就赋给max,这样下来max就
for(j=0;jM;j++) // 是数组中最大值
if(a[i][j]max)
max=a[i][j];
return max;
}
int main(void )
{
int arr[2][M]={5,8,3,45,76,-4,12,82} ;
void NONO ();
printf("max =%d\n", fun(arr)) ;
return 0;
}
望采纳加分,还有不懂可以追问
函数使用两个嵌套的for循环以列为顺序遍历二位数组,将其中每一个数据元素都存储进准备好的一维数组中。
因为c语言函数无法将整个数组作为返回值,故函数会返回一个指向一维数组的指针。具体代码如图:
扩展资料:
二维数组作为参数的三种传参形式:
传数组,第二维必须标明。如:
void fun(int array[][N])
传数组指针,第二维必须标明。如:
void fun(int (*array)[4])
传指针。如:
void fun(int **array)
① 自定义矩阵阶数,函数间传递数组
#include stdio.h
main()
{
int i,j,n,s;
printf("请输入矩阵阶数:");
scanf("%d",n);
int fun(int n,int a[][n]);
int a[n][n];
printf("请输入矩阵元素:\n");
for(i=0;in;i++)
for(j=0;jn;j++)
scanf("%d",a[i][j]);
s=fun(n,a);
printf("该矩阵主对角线和为:%d\n",s);
}
int fun(int n,int a[][n])
{
int s=0,i;
for(i=0;in;i++)
s+=a[i][i];
return s;
}
② 自定义矩阵阶数,函数间传递指针
#include stdio.h
main()
{
int i,j,n,s;
printf("请输入矩阵阶数:");
scanf("%d",n);
int fun(int n,int (*a)[n]);
int a[n][n];
printf("请输入矩阵元素:\n");
for(i=0;in;i++)
for(j=0;jn;j++)
scanf("%d",a[i][j]);
s=fun(n,a);
printf("该矩阵主对角线和为:%d\n",s);
}
int fun(int n,int (*a)[n])
{
int s=0,i;
for(i=0;in;i++)
s+=a[i][i];
return s;
}
③ 规定函数阶数,函数间传递数组
#include stdio.h
#define N 4
int fun(int a[][N]);
main()
{
int a[N][N],i,j,s;
printf("矩阵阶数:%d\n",N);
printf("请输入矩阵元素:\n");
for(i=0;iN;i++)
for(j=0;jN;j++)
scanf("%d",a[i][j]);
s=fun(a);
printf("该矩阵主对角线和为:%d\n",s);
}
int fun(int a[][N])
{
int s=0,i;
for(i=0;iN;i++)
s+=a[i][i];
return s;
}
④ 规定函数阶数,函数间传递指针
#include stdio.h
#define N 4
int fun(int (*a)[]);
main()
{
int a[N][N],i,j,s;
printf("矩阵阶数:%d\n",N);
printf("请输入矩阵元素:\n");
for(i=0;iN;i++)
for(j=0;jN;j++)
scanf("%d",a[i][j]);
s=fun(a);
printf("该矩阵主对角线和为:%d\n",s);
}
int fun(int (*a)[N])
{
int s=0,i;
for(i=0;iN;i++)
s+=a[i][i];
return s;
}
以4阶为例,运行结果为:
int s=1;
for(int i=0;i3;i++){
for(int j=0;j3;j++){
if(i==j){
s*=a[i][j];
}
}
}
return s;