匿名用户
1级
2018-05-17 回答
#include "stdio.h"
int main()
{
int a[4][4]={0};
int i = 0;
int j = 0;
int m = 0;
int b[16] = {0};
printf("请输入一个4X4的二维数组:\n");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
scanf("%d",&a[i][j]);
}
}
printf("输出该二维数组:\n");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
printf("%-10d ",a[i][j]);
}
printf("\n");
}
printf("逆序输出:\n");
for(i=3; i>=0; i--)
{
for(j=3; j>=0; j--)
{
printf("%-10d ",a[i][j]);
}
printf("\n");
}
printf("从大到小输出:\n");
//先将矩阵拷贝到一个数组中 这样后面的冒泡的编码会比较好写一点
for (i=0; i<4; i++)
{
for (j=0; j<4; j++)
{
b[m++] = a[i][j];
}
}
//开始冒泡 从小到大排列
for (i=0; i<16; i++)
{
for (j=i+1; j<16; j++)
{
if (b[i] > b[j])
{
m = b[j];
b[j] = b[i];
b[i] = m;
}
}
}
//开始输出 这里直接通过b输出 也可以拷贝到a中再输出
for(i=15; i>=0; i--)
{
printf("%-10d ",b[i]);
if (0 == i%4)//逢4换行
{
printf("\n");
}
}
}
追问:
请问m 与b 是给什么赋值?
追答:
这里的m写的有点不好,第一次的m++和后面的m作为临时变量赋值是两个意思,一个是作为数组下标,另一个是作为临时变量。第一个m++可以换成一个新的变量比如n++,单独做为数组下标。
//开始冒泡 从小到大排列
for (i=0; i<16; i++)
{
for (j=i+1; j<16; j++)
{
if (b[i] > b[j])
{
m = b[j];
b[j] = b[i];
b[i] = m;
}
}
}上面这块代码,m和b[]的赋值是一个典型的冒泡排序算法。
说实话,我觉得这个一维数组的冒泡你看不懂,竟然能看得懂下面二维数组的算法... 难以理解