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

首先输入一个大于2且小于10的整数n,然后定义一个二维整形数组(n*n),初始化该数组,将数组中最大元素所在的行和最小元素所在的行对调。
要求:
1)n*n数组元素的值由scanf函数从键盘输入(假定最大值与最小值不在同一行上),然后输出该数组。
2)查找最大值与最小值所在行,将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组
3)为直观起见,数组按n行n列的方式输出
4)修改程序,对最大值与最小值可能出现在一行中的情况进行处理
T P soft 回答
我晕,这是老师留的作业

#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];
line_min=i;
}
}
}
printf("最大值所在的行是%d,最小值所在的行是%d\n",line_max,line_min);
for(int k=0;k<n;k++)
{
temp=a[line_max][k];
a[line_max][k]=a[line_min][k];
a[line_min][k]=temp;
}
printf("调换后的数组是:\n");
ShowArr(a,n);

}

int main()
{
int **a;
int n=0,i=0,j;
printf("请输入行数n:");
scanf("%d",&n);
/*下面定义动态二维数组*/
a=(int **)malloc( n*sizeof(int *));//申请第一列
for(int i=0;i<n;i++)
{
a[i]=(int *)malloc(n*sizeof(int ));//申请行空间
}
//输入二维数组
for(i=0;i<n;i++)
{
printf("请输入第%d行\n",i+1);
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
printf("\n您输入的是:\n");
ShowArr(a,n);
Change_Find(a,n);
fflush(stdin);
getchar();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-10
#include <stdio.h>
#include <malloc.h>

void main()
{
int n,i,a,b;
printf("请输入n:");
scanf("%d",&n);

int** p;
p = (int **)malloc(sizeof(int)*n); //申请一个二维动态数组空间
for(i=0; i<n; i++)
p[i] = (int*) malloc(sizeof(int)*n);

printf("请输入n*n数阵:"); //输入n*n数阵
for(a=0; a<n; a++)
for(b=0; b<n; b++)
scanf("%d",p[a]+b);

for(a=0; a<n; a++) //显示数阵
{
for(b=0; b<n; b++)
printf("%d ",*(p[a]+b));
printf("\n");
}
printf("==============\n对调之后:\n");

int max = p[0][0]; //记录最大值
int min = p[0][0]; //记录最小值
int j,temp;
i = 0; //i表示最大值所在的行号
j = 0; //j表示最小值所在的行号
for(a=0; a<n; a++)
for(b=0; b<n; b++)
{
if(p[a][b] > max) //如果有数比最大值大,则记录下来
i = a;
if(p[a][b] < min) //如果有数比最小值小,则记录下来
j = a;
}

if(i == j) //最大最小值同行情况
printf("通知!\n最大值和最小值位于同一行!");
else
{
for(b=0; b<n; b++) //交换
{
temp = p[i][b];
p[i][b] = p[j][b];
p[j][b] = temp;
}
for(a=0; a<n; a++) //输出交换后新的数阵
{
for(b=0; b<n; b++)
printf("%d ",p[a][b]);
printf("\n");
}
}
}
本来想定义函数进行模块化操作的,但二维指针传递出了问题,写得没什么条理,但可以正确运行出结果
第2个回答  2010-12-10
数组好像不能用变量定义,我觉得无法输入n定义数组。本回答被网友采纳
相似回答