首先输入一个大于2且小于10的整数n,然后定义一个二维整形数组(n*n),初始化该数组,将数组中最大元素

首先输入一个大于2且小于10的整数n,然后定义一个二维整形数组(n*n),初始化该数组,将数组中最大元素所在的行和最小元素所在的行对调。
要求:
1)n*n数组元素的值由scanf函数从键盘输入(假定最大值与最小值不在同一行上),然后输出该数组。
2)查找最大值与最小值所在行,将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组
3)为直观起见,数组按n行n列的方式输出
4)修改程序,对最大值与最小值可能出现在一行中的情况进行处理
#include<stdio.h>
main()
{
int i,j,n,max=0,min=0,a[10][10],nmax,nmin,t[10];
printf("\n请输入数组的阶数:");
scanf("%d",&n);
printf("\n初始化数组的元素\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
max=min=a[0][0];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
nmax=i;
}
if(a[i][j]<min)
{
min=a[i][j];
nmin=i;
}
}
}
if(nmax==nmin)
printf("最大值和最小值在同一行");
else
{
for(j=0;j<n;j++)
{
t[j]=a[nmax][j];
a[nmax][j]=a[nmin][j];
a[nmin][j]=t[j];
}
printf("\n对调后的数组为: \n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
}
这是我写的,为什么每次运行就会出错,输出的最后一行总是一行胡乱的数字,而且最大和最小一行也没有对调,求大神解答,麻烦在我的基础上修改,不然我永远都不知道错在哪

还是编程经验太少了
max=min=a[0][0]; 这样的初始赋值是不对的
像这样的题一般我们设置的max为一个很小的数 min设置为一个很大的数
你改成max = -10000,min = 10000;就可以了

请采纳为最佳答案~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-23
#include<stdio.h>
#include<malloc.h>

void ShowArr(int **a,int n)//输出数组
{
for(int i=0;i<n;i++)
{
printf("第%d的数据",i+1);
for(int j=0;j<n;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
void Change_Find(int **a,int n)
{
int tmax=-1,tmin=1000;
int line_max=-1,line_min=-1,temp;
for(int i=0;i<n;i++)//查找最大值和最小值
{
for(int j=0;j<n;j++)
{
if(a[i][j]>tmax)
{
tmax=a[i][j];
line_max=i;
}
if(a[i][j]<tmin)
{
tmin=a[i][j];
第2个回答  2017-07-23
#include#includevoidShowArr(int**a,intn)//输出数组{for(inti=0;itmax){tmax=a[i][j];line_max=i;}if(a[i][j]
相似回答