| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 285 人关注过本帖
标题:为什么比较的顺序不同结果不同???
只看楼主 加入收藏
新手714
Rank: 1
等 级:新手上路
帖 子:48
专家分:3
注 册:2020-4-25
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:12 
为什么比较的顺序不同结果不同???
#include<stdio.h>
struct student
{
    int number;
    char name[7];
    float score;
};
int main()
{
    struct student stu[5] = { {01,"GY",97},{02,"Yoo",87},{03,"Gong",87.7},{04,"shacha",97.7},{05,"erzi",77} };
    struct student t;
    int i, j, k;
    for (i = 3; i >=0; i--)                                                  //
    {
        k = i;                                                            这
        for (j = i + 1; j >0; j--)
        {
            if (stu[k].score < stu[j].score)                          部
                k = j;
            t = stu[i]; stu[i] = stu[k]; stu[k] = t;                  分
        }                                                      
    }                                                                         //
    for (i = 0; i < 5; i++)
        printf("%6d %8s %6.2f\n", stu[i].number, stu[i].name, stu[i].score);
    return 0;
}
而下面这样就不同了

for (i = 0; i <4; i++)
    {
        k = i;
        for (j = i + 1; j <5; j++)
        {
            if (stu[k].score < stu[j].score)
                k = j;
            t = stu[i]; stu[i] = stu[k]; stu[k] = t;
        }
    }




或者以下两种,为什么结果不同???
for (i = 0; i <4; i++)
    {
        k = i;
        for (j = i + 1; j <5; j++)
        {
            if (stu[j].score >stu[k].score)
                k = j;
            t = stu[i]; stu[i] = stu[k]; stu[k] = t;
        }
    }

for (i = 0; i <4; i++)
    {
        k = i;
        for (j = i + 1; j <5; j++)
        {
            if (stu[k].score < stu[j].score)
                k = j;
            t = stu[i]; stu[i] = stu[k]; stu[k] = t;
        }
    }
搜索更多相关主题的帖子: for 不同 结果 score stu 
2020-05-22 12:12
fulltimelink
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:5
帖 子:104
专家分:407
注 册:2020-4-1
收藏
得分:10 
把交换拿到内循环的外面
程序代码:
for (i = 0; i < 4; i++)
    {
        k = i;
        for (j = i + 1; j < 5; j++)
        {
            if (stu[k].score < stu[j].score)
                k = j;
            
        }
        t = stu[i]; stu[i] = stu[k]; stu[k] = t;
    }

没有必要每次都交换, 况且你的交换无论if啥结果 都交换。。。
2020-05-22 14:25
新手714
Rank: 1
等 级:新手上路
帖 子:48
专家分:3
注 册:2020-4-25
收藏
得分:0 
回复 2楼 fulltimelink
为什么要k=i??
2020-05-22 16:53
fulltimelink
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:5
帖 子:104
专家分:407
注 册:2020-4-1
收藏
得分:0 
回复 3楼 新手714
因为0-i的已经是按从小到大的顺序排列了,所以k从i开始标识出来目前剩下的哪个是最小的,然后和i交换
2020-05-22 17:44
新手714
Rank: 1
等 级:新手上路
帖 子:48
专家分:3
注 册:2020-4-25
收藏
得分:0 
回复 4楼 fulltimelink
不赋值的话为什么不行
2020-05-22 18:06
fulltimelink
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:5
帖 子:104
专家分:407
注 册:2020-4-1
收藏
得分:0 
回复 5楼 新手714
因为你下面使用了,所以你得先赋值。。。。你去银行存钱,银行不从你余额(初始值)而是从0元上给你加钱,你也不愿意不是?
2020-05-22 18:40
新手714
Rank: 1
等 级:新手上路
帖 子:48
专家分:3
注 册:2020-4-25
收藏
得分:0 
回复 6楼 fulltimelink
不是。
为什么
    for (i = 3; i >=0; i--)
    {
        for (j = i + 1; j >0; j--)
            if (stu[i].score < stu[j].score)
            {
                t = stu[i]; stu[i] = stu[j]; stu[j] = t;
            }
    }
这样不行?
2020-05-22 20:08
fulltimelink
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:5
帖 子:104
专家分:407
注 册:2020-4-1
收藏
得分:0 
回复 7楼 新手714
因为不能保证stu[4]是最大的,比如97      87       87.7       96     88
2020-05-22 22:41
新手714
Rank: 1
等 级:新手上路
帖 子:48
专家分:3
注 册:2020-4-25
收藏
得分:0 
回复 8楼 fulltimelink
不对,发错了
for (i = 4; i >=0; i--)
    {
        for (j = i -1; j >0; j--)
            if (stu[i].score >stu[j].score)
            {
                t = stu[i]; stu[i] = stu[j]; stu[j] = t;
            }
    }
我就拿你写的例子写了一遍下来是没问题,但是电脑不行
         j i
   5 1 3 4 2
(1)5 1 3 4 2
(2)5 2 3 4 1
(3)5 2 4 3 1
(4)5 3 4 2 1
(5)5 4 3 2 1
2020-05-22 23:04
wmf2014
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:201
帖 子:1993
专家分:11068
注 册:2014-12-6
收藏
得分:10 
回复 9楼 新手714
这样写,当i=1时,j=i-1=0,不满足内循环条件,最前面的两个数未参与比较,修改如下可行:
程序代码:
    for (i = 4; i > 0; i--)
    {
        for (j = i - 1; j >= 0; j--)
            if (stu[i].score > stu[j].score)
            {
                t = stu[i]; stu[i] = stu[j]; stu[j] = t;
            }
    }

能编个毛线衣吗?
2020-05-22 23:15
快速回复:为什么比较的顺序不同结果不同???
数据加载中...
 
   



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

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