有以下程序:
#include <stdio.h>
main()
int a[4][4]=1, 4, 3, 2, (8, 6, 5, 7), 3, 7, 2, 5, 4, 8, 6, 1, i, j, k, t;
for(i=0; i<4; i++)
for (j=0; j<3; j++)
for(k-j+1; k<4; k++)
if (a[j][i]>a[k][i])
t=a[j][i]; a[j][i]=a[k][i]; a[k][i]=t; /* 按列排序 */
for (i=0; i<4; i++)
printf("%d, ", a[i][i]);
程序运行后的输出结果是()。
A) 1, 6, 5, 7, B) 8, 7, 3, 1, C) 4, 7, 5, 2, D) 1, 6, 2, 1,
参考答案:A
解析: 题目中首先定义了一个二维数组a,并初始化为:
|1 4 3 2|
|8 6 5 7|
|3 7 2 5|
|4 8 6 1|
然后通过三重循环对数组a实行按列排序。从if(a[j][i]>a[k][i]“当前面的元素大于后面的”则交换可以看出,排序是从小到大的,所以排序结束后,数组a的内容应该是:
|1 4 2 1|小
|3 6 3 2| |
|4 7 5 5|↓
|8 8 6 7|大
最后通过一个for循环,依次输出a[0][0],a[1][1],a[2][2],a[3][3]的值,即输出1,6,5,7。