| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 375 人关注过本帖
标题:C语言关于循环的疑惑,很急!
只看楼主 加入收藏
xzuok
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2009-10-16
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:3 
C语言关于循环的疑惑,很急!
看下面这个程序:
这个程序时我辅导书上的一题,我在turbo上运行过,没问题,但我觉得其中有个地方错了
这个程序是矩阵的转置矩阵,程序如下,程序中我有一个不明白的问题
main()
{int i,j,t,a[4][4]={35,73,65,50,33,47,66,28,42,19,25,60,30,72,54,26};
printf("The original matrex is:\n");
for(i=0;i<4;i++)
 {for(j=0;j<4;j++)
   printf("%5d",a[i][j]);
   printf("\n");
 }
for(i=0;i<4;i++)
 for(j=0;j<i;j++)        这个地方为什么是j<i啊,这里i是0啊,难道0<0?我认为这里应该是j<4而不是j<i
 {t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
 printf("The transfer matrix is:\n");
 for(i=0;i<4;i++)
  {for(j=0;j<4;j++)         
   printf("%5d",a[i][j]);
    printf("\n");
  }
}


运行结果是35 73 65 50     变为35 33 42 42
          33 47 66 28         73 47 19 19
          42 19 25 60         65 66 25 25
          42 19 25 60         50 28 60 60
高手帮忙解决一下
搜索更多相关主题的帖子: C语言 
2009-10-18 14:05
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:5 
for(i=0;i<4;i++)   /* i为0时,下层for循环没执行,i为1下层循环才开始执行。 */
  for(j=0;j<i;j++)    /* 用j<i做这层循环的条件是正确的。 */   
    {t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}


[ 本帖最后由 UserYuH 于 2009-10-18 14:23 编辑 ]

努力—前进—变老—退休—入土
2009-10-18 14:22
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:15 
for(i=0;i<4;i++)
for(j=0;j<i;j++)      
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
这个语句没有错误。
刚开始的时候i=0;j=0;不满足j<i的条件,所以不执行互换,其实就是如此,矩阵中第一个数是不换的。
当其他情况,你只是把主对角线上面的数与对角线以下相应位置的数互换,到i==j的时候就停下来,(主对角线元素不用换);如果你循环条件是j<4;那么你就相当于把矩阵转置了两次,就又变回了原来的样子。
2009-10-18 14:27
xzuok
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2009-10-16
收藏
得分:0 
回复 3楼 m456m654
谢谢你的答案,你点醒了我,这里程序要从实际的运行环境来考虑,第一行的第一个数不需要互换,所以第二个for循环刚开始不需要执行,经典啊!
谢谢
2009-10-18 14:40
快速回复:C语言关于循环的疑惑,很急!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018219 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved