| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 390 人关注过本帖
标题:再请教C循环问题:
只看楼主 加入收藏
fanliguang
Rank: 2
等 级:论坛游民
帖 子:31
专家分:52
注 册:2012-2-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
再请教C循环问题:
   前几天发了一个:请教C循环问题,感谢有容乃大及诸位网友的热情参与。读了有容乃大以下的程序:有两点不明白。
程序代码:
#include <stdio.h>
#define N 10

int main(void)
{
    int max, min, i, j, index, a[N];

    printf("Please input 10 number:\n");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
    }
    max = min = a[0];
    for (i = 0; i < N; i++)
    {
       if (min > a[i])
          min = a[i];
    }

    for (j = 0; j < N; j++)
    {
        for (i = 0; i < N; i++)
            if (max < a[i])
            {
                max = a[i];  
                index = i;
            }      
         printf("a[%d] = %d\n", index, max);
              a[index] = min - 1;
               max = min - 1;  
    }
        return 0;
}
对最后两名a[index]=min-1;和max=min-1不明白。这应该就是有容乃大说的:“输出一个数,拿掉一个数:”请问
这两句是如何现实:输出一个数,拿掉一个数。的呢        
搜索更多相关主题的帖子: 天发 热情参与 color 
2012-03-04 21:49
新手菜鸟鸟
Rank: 2
等 级:论坛游民
帖 子:37
专家分:57
注 册:2012-1-15
收藏
得分:0 
你自己随便写10个数按照代码一步步操作试试就知道了啊
2012-03-04 22:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:20 
比如一个数组有 3 5 6 7 9这几个数, 先找到最大值和最小值9 3,那么每循环一次找一个最大值并且给他重新赋值,赋予的这个值就是最小值减去1,这样在第二次循环时就避免了这个最大数的干扰而能把次最大数找出来(相当于此次循环的最大数),循环往复直至最后一个数。

其实我这个程序有点小缺陷,如果你能找出这个缺陷说明你搞透了。

梅尚程荀
马谭杨奚







                                                       
2012-03-04 22:36
fanliguang
Rank: 2
等 级:论坛游民
帖 子:31
专家分:52
注 册:2012-2-26
收藏
得分:0 
谢谢有容乃大。明白了。让最大数比最小数还小,确实是好办法。
你说的缺陷是不是就是:这个原来的最大数仍然参与循环。只能由大到小排序,不能由小到大排?
2012-03-05 08:59
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用fanliguang在2012-3-5 08:59:55的发言:

谢谢有容乃大。明白了。让最大数比最小数还小,确实是好办法。
你说的缺陷是不是就是:这个原来的最大数仍然参与循环。只能由大到小排序,不能由小到大排?
这个缺陷是边界问题,如果32位机,int范围是-2147483648 - 2147483647 如果min等于-2147483648,min - 1就不在int范围之内,程序可能出现偏差。

只能由大到小排序,不能由小到大排?
这个不成其为问题,你可以反过来思考,先找最小数,并把他赋值为最大数加1,那么他就不会干扰下一轮的提取,但是同样存在边界问题,当最大数是2147483647时 max + 1就又不在int范围内了。

[ 本帖最后由 有容就大 于 2012-3-5 09:54 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-03-05 09:51
fanliguang
Rank: 2
等 级:论坛游民
帖 子:31
专家分:52
注 册:2012-2-26
收藏
得分:0 
其实我们可以让每轮排完序的最大数等于小数。应该也能完成正确的排序。
2012-03-05 15:51
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用fanliguang在2012-3-5 15:51:49的发言:

其实我们可以让每轮排完序的最大数等于小数。应该也能完成正确的排序。
2 9 3 1 6 4  -> 2 1 3 1 6 4 -> 2 1 3 1 1 4 -> 2 1 3 1 1 1 -> 2 1 1 1 1 1 -> 1 1 1 1 1 1 -> ?  最后这一步就在找真假孙悟空了哦。


梅尚程荀
马谭杨奚







                                                       
2012-03-05 16:49
快速回复:再请教C循环问题:
数据加载中...
 
   



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

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