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 这道程序是怎么运行的

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]);

先是对矩阵的每列按从小到大排序(应该是选择排序法),然后输出对角元

需要具体解释吗??追问

你一步一步的解释吧

追答

前三个for语句加一个if语句就是选择排序的主体,最后一个for语句输出对角元

追问

再具体点

追答

前三个for语句加一个if语句就是选择排序的主体,最后一个for语句输出对角元
要不聊天吧,讲的详细点

追问

输出1,6,5,7
5和7是怎么得到的

追答

第三列3526,排序后2356,所以第三行第三列是5,同理可得7

对矩阵a(j)(i)
第一句for是选择要排序的列i(0-3),
第二句是确定一个要放置的位置j(0-2,因为最后一个元素不需要在排序了),
第三句for与后面的if语句是将它与后面的元素逐个比较并将最小的元素放在这个位置

然后,循环结束,最后一个for语句再打印对角线上的元素。
应该够详细了吧~~~

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-29
对二维数组各列分别进行大小排序
for(i=0;i<4;i++)选择0...3列中的一列
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;}
相似回答