首先输入一个大于2且小于10的整数m 和n,然后定义一个二维整形数组(m*n),初始化该数组,将该数组中最大元素所在的行和最小元素所在行对调。
要求:
(1)m*n数组元素的值由scanf函数从键盘输入(假定最大值和最小值不在同一行),然后输出该数组;
1.查找最大值最小值所在行,将两行元素对调后输出新的数组;
2.为直观起见,数组按照m行n列的方式输出;
3.假设最大值最小最出现在同一行上,请修改程序。
Void main()(部分参考代码)
{int martix[9][9],min,max,temp;
int i,j,m,n,nMax=0,nMin=0;
printf(“please input m and n of martix:\n”);
scanf(......);
......}
源程序:
#include<stdio.h>
int main()
{
int m, n, i, j, z, max, min, nmax, nmin,zhongjian;
printf("请输入两个大于2且小于10的整数\n");
scanf_s("%d%d", &m, &n);
z = m * n;
printf("请输入%d个整数\n", z);
int a[9][9];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf_s("%d", &a[i][j]);
}
}
printf("该数组为:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
max = a[0][0], min = a[0][0];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (max <= a[i][j])
{
max = a[i][j];
nmax = i + 1;
}
if (min >= a[i][j])
{
min = a[i][j];
nmin = i + 1;
}
}
}
printf("该数组的最大值在第%d行\n最小值在第%d行\n", nmax, nmin);
nmax = nmax - 1;
nmin = nmin - 1;
for (j = 0; j < n; j++)
{
zhongjian = a[nmax][j];
a[nmax][j] = a[nmin][j];
a[nmin][j] = zhongjian;
}
printf("最大值所在行与最小值所在行对调后的数组为:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
return 0;
}
实验结果:
对于第三个小问题的程序修改如下
#include<stdio.h>
int main()
{
int m, n, i, j, z, max, min, nmax;
printf("请输入两个大于2且小于10的整数\n");
scanf_s("%d%d", &m, &n);
z = m * n;
printf("请输入%d个整数,注意最大值和最小值应该在同一行\n", z);
int a[9][9];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf_s("%d", &a[i][j]);
}
}
printf("该数组为:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
max = a[0][0];
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (max <= a[i][j])
{
max = a[i][j];
nmax = i + 1;
}
}
}
printf("最大值和最小值都在第%d行", nmax);
return 0;
}
实验结果: