C语言数组循环问题

#include<stdio.h>#include<stdlib.h>intmain(){inta[][3]={1,2,3,4,5,6};intb[3][2],i,j;p... #include<stdio.h>
#include<stdlib.h>
int main()
{
int a[][3]={1,2,3,4,5,6};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)
{printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");}
printf("array b:\n");
for(i=0;i<3;i++)
{ for(j=0;j<2;j++)
printf("%5d",b[j][i]);
printf("\n");}
system("pause");
return 0;
}
结果正常,但 b[j][i]=a[i][j];改为b[i][j]=a[j][i],b[2][0]和b[2][1]不正常,其他正常,是为什么
展开
 我来答
ice_cream106
2014-12-16 · TA获得超过177个赞
知道小有建树答主
回答量:132
采纳率:0%
帮助的人:148万
展开全部

你原来的程序就是有问题的,运行结果:

b没有正确显示


改成:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a[][3]={1,2,3,4,5,6};
    int b[3][2],i,j;
    printf("array a:\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%5d",a[i][j]);
            b[j][i]=a[i][j];
        }
        printf("\n");
    }
    printf("array b:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        //二行三列的A行列互置赋给B是三行二列,所以i是行下标,j是列下标,你弄反了 
        printf("%5d",b[i][j]);
        printf("\n");
    }
    system("pause");
    return 0;
}

b正常显示了

行列互置的时候,a[i][j]对应b[j][i],如果你发现对应的值不对了,那说明下标就是有问题。

至于你说的有些值没正常显示,那是因为你没有给他们初始化,所以显示的是个伪随机数,在你看来就是不正常的数据。

lovejoe0
2014-12-16 · 超过31用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:59.1万
展开全部
这是对矩阵进行转置操作
转置操作是通过将a[i][j]赋值给b[j][i]进行的。
改为b[i][j]=a[j][i],b[2][0]和b[2][1] 对应的矩阵行列数目不对,肯定会出现问题。a矩阵是2行3列,b[i][j]=a[j][i]这样子的话,a[j][i]是3行2列,会出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liwei198905
2014-12-16 · 超过22用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:41.4万
展开全部
这里是因为你通过转置之后,B矩阵变成了B[2][3],并且上面的赋值语句也就不对了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
炜炜ing
2014-12-16 · TA获得超过114个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:62.3万
展开全部
这样写原本就不对吧,j可以到2,那么a[2][0],a[2][1]算什么,不越界了吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式