| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:求助,为什么循环似乎没有跑完?
只看楼主 加入收藏
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
结帖率:100%
收藏
 问题点数:0 回复次数:10 
求助,为什么循环似乎没有跑完?
main()
{
 int a[3][4]={3,16,87,65,4,32,11,108,10,25,12,37};
 int b[3];
 int i=0,j=0,max;
 max=a[0][0];
 for(i=0;i<=2;i++)
  { for(j=0;j<=3;j++)
    {
      if(a[i][j]>max)
      max=a[i][j];
    }
      b[i]=max;
  }

  for(i=0;i<=2;i++)
  printf("%d ",b[i]);
}
以上程序是要找出二维数组a里每行的最大值,放到数组b即结果应该是87,108,37
但我以上的代码只能跑出87,108,108。
比较奇怪,各位能否告诉错误的原因?
搜索更多相关主题的帖子: max 
2010-04-17 14:13
wylzjcw
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:185
专家分:174
注 册:2009-1-4
收藏
得分:0 
回复 楼主 account
for(i=0;i<=2;i++)
{
    max=a[i][0];
    for(j=0;j<=3;j++)
    {
        if(a[i][j]>max)
        max=a[i][j];
    }
    b[i]=max;
  }

勾股定理用相似三角形证明最合理
2010-04-17 14:20
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
回复 2楼 wylzjcw
谢谢,书上的解法确实如此,但我主要想知道,我这个写法逻辑错在哪?
我希望我能清楚我所犯的每一个错的原因,呵呵,想把基础扎实些
2010-04-17 14:29
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
请大家多多帮忙!
2010-04-17 14:33
wylzjcw
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:185
专家分:174
注 册:2009-1-4
收藏
得分:0 
举个极端的例子,如果a[0][0]是数组最大值。

勾股定理用相似三角形证明最合理
2010-04-17 14:37
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
回复 5楼 wylzjcw
我的本意也是想寻找每行最大值,即使a[0][0]是数组最大值,那么按照每行行值下标自增循环也只会成为第一行的最大值啊,这是我设想的
2010-04-17 14:44
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
问题已经找到了,谢谢大家!是因为最内层循环MAX没有清零的缘故,原因已经明白了。修改后代码如下,和我一样的新手可以参照避免此类错误。
main()
{
 int a[3][4]={3,16,87,65,4,32,11,108,10,25,12,37};
 int b[3];
 int i=0,j=0,max;
 max=a[0][0];
 for(i=0;i<=2;i++)
  { for(j=0;j<=3;j++)
    {
      if(a[i][j]>max)
      max=a[i][j];
    }
      b[i]=max;
      max=0;
  }

  for(i=0;i<=2;i++)
  printf("%d ",b[i]);
}
2010-04-17 15:07
invention
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-23
收藏
得分:0 
你这写法还是有bug
如果某一行都是负数呢?
2010-04-17 18:22
langren2526
Rank: 2
等 级:论坛游民
帖 子:46
专家分:37
注 册:2010-3-12
收藏
得分:0 
循环“跑”完了,呵呵~~
你把 b[i]=max; 下面再加一句 max=0;
看看运行结果, 再对比着想想。。。
2010-04-17 19:10
account
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:107
注 册:2010-4-12
收藏
得分:0 
以下是引用invention在2010-4-17 18:22:50的发言:

你这写法还是有bug
如果某一行都是负数呢?
你说得很对,假设第三行都是负数,按照max只清零的话,那么输出的第三个值就会为零.
这样改呢?不过思路又回到了书上的思路,就是设定每行第一个数为MAX初值,哎。。。
main()
{
 int a[3][4]={-3,-16,-87,-65,4,32,11,108,-10,-25,-12,-37};
 int b[3];
 int i=0,j=0,max;
 max=a[0][0];
 for(i=0;i<=2;i++)
  { for(j=0;j<=3;j++)
    {
      if(a[i][j]>max)
      max=a[i][j];
    }
      b[i]=max;
      max=a[i+1][0];
  }
  for(i=0;i<=2;i++)
  printf("%d ",b[i]);
}
谢谢你的指出,今后还是要仔细分析问题,否则疏漏太多
2010-04-17 19:31
快速回复:求助,为什么循环似乎没有跑完?
数据加载中...
 
   



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

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