C语言3*3二维数组行和列互换

#include<stdio.h>intmain(){inta[3][3];inti,j,t;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(... # include <stdio.h>
int main ()
{
int a[3][3];
int i,j,t;

for (i=0; i<3; i++)
for (j=0; j<3; j++)
scanf ("%d",&a[i][j]);

for (i=0; i<3; i++)
for (j=0; j<3; j++)
if ((i+j) == 1 || (i+j) == 2 || (i+j) == 3 )
{ t = a[i][j];
a[i][j]= a[j][i];
a[j][i]= t;
}
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
printf ("%d",a[j][i]); //这句为什么是a[j][i],而不是a[i][j];
if (j == 2)
printf ("\n");
}

return 0;
}

我的问题是最后输出的时候,“printf ("%d",a[j][i]); //这句为什么是a[j][i],而不是a[i][j];”
展开
 我来答
gujunxiguerer
2013-04-07 · 超过14用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:41.9万
展开全部
首先,你的程序逻辑有问题,在交换的时候,所有以对角线为中心的对称元素交换了两次,相当于没有交换;所以如果换成a[i][j]输出的话,结果与没有交换前的一样。即使,你把中间交换元素的那部分代码删去,最后用a[j][i],输出的结果感觉是交换了,其实在内存中(数组中)其实并没有交换。
我帮你改正后的代码如下,改正过的地方前边已做注释:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int a[3][3];
int i,j,t;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
scanf ("%d",&a[i][j]);
for (i=0; i<3; i++)
//fixed: j = i + 1
for (j=i+1; j<3; j++)
//fixed: delete if
{ t = a[i][j];
a[i][j]= a[j][i];
a[j][i]= t;
}
for (i=0; i<3; i++)
for (j=0; j<3; j++)
{
//fixed: used a[i][j]
printf ("%d ",a[i][j]); //这句为什么是a[j][i],而不是a[i][j];
if (j == 2)
printf ("\n");
}
system("pause");
return 0;
}
cpucash
2013-04-08 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:971万
展开全部
for (i=0; i<3; i++)
for (j=0; j<i; j++)
在交换的地方,其他的代码不用管

你问的可能是两种方式在一个程序中了
上面是交换行了,下面是直接打印的时候的效果
打印的时候,不需要if判断打印回车符,因为循环完了,j就是2打印回车符即可
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式