题目如下:编写函数,由实参传来一个矩阵A[M][N],按列输出它每一列上最大值和最小值的差。 当我用这个函数的时候,一直显示错误,我并没有使用指针,报错内容里面却有指针内容是怎么回事?应该怎么修改这一行呢?(就是
cha(a,m,n)那一行报错
#include <stdio.h>
int main()
{int m,n,a[m][n],i,j;
void cha(int b[10][10],int m,int n);
printf("请输入行列数m和n");
scanf("%d%d",&m,&n);
printf("请输入数:");
{
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
cha(a,m,n);}
return 0;
}
void cha(int b[10][10],int m,int n)
{int max,min,i,j;
for(j=0;j<n;j++)
{max=b[0][j];
min=b[0][j];
for(i=0;i<m;i++)
{if(max<b[i][j])
max=b[i][j];
if(min>b[i][j])
min=b[i][j];
}
printf("第%d列最大值与最小值的差为:%d",j+1,max-min);
}
}
以下回答参考GPT并且由Bony-整理:
在主函数中定义二维数组a时,使用了变量m和n,但是m和n并没有初始化,这样定义数组是不正确的,应该先输入m和n,再定义数组a。另外,在主函数中调用cha函数时,应该传递已经定义并初始化好的二维数组a作为参数,而不是定义一个没有初始化的二维数组c作为参数。
以下是修改后的代码:
#include <stdio.h>
void cha(int b[10][10],int m,int n);
int main()
{
int m,n,i,j;
printf("请输入行列数m和n:");
scanf("%d%d",&m,&n);
int a[m][n];
printf("请输入数:");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
cha(a,m,n);
return 0;
}
void cha(int b[10][10],int m,int n)
{
int max,min,i,j;
for(j=0;j<n;j++)
{
max=b[0][j];
min=b[0][j];
for(i=0;i<m;i++)
{
if(max<b[i][j])
max=b[i][j];
if(min>b[i][j])
min=b[i][j];
}
printf("第%d列最大值与最小值的差为:%d\n",j+1,max-min);
}
}