| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1077 人关注过本帖
标题:关于一个赛跑问题,请问,我错在哪里了?
只看楼主 加入收藏
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
结帖率:91.67%
收藏
已结贴  问题点数:3 回复次数:17 
关于一个赛跑问题,请问,我错在哪里了?
题目如下:
问题的提出:某大学开田径运动会,现有12名选手参加100米比赛,对应的运动员号及成绩如表所示,请按照成绩排名并输出,要求每一行输出名次、运动员号及成绩。要求用冒泡法排序。
运动员号    成绩(秒)    运动员号    成绩(秒)
001          13.6            031    14.9
002          14.8            036    12.6
010          12.0            037    13.4
011          12.7            102    12.5
023          15.6            325    15.3
025          13.4            438    12.7

我写的程序如下:
#include<iostream.h>
class player
{
public:
    int number;
    double grade;
};
main()
{
    player a[12]={{001,13.6},{002,14.8},{010,12.0},{011,12.7},{023,15.6},{025,13.4},
                {031,14.9},{036,12.6},{037,13.4},{102,12.5},{325,15.3},{438,12.7}};
    player temp;
    for(int i=0; i<12; i++)   //排列12次
        for(int j=0; j<12-i; j++)
            if(a[j].grade>a[j+1].grade)
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
    for(i=0; i<12; i++)
        cout<<i+1<<" "<<a[i].number<<" "<<a[i].grade<<endl;
}


    编译后都没有错,但是运行exe文件后,不仅答案不对,而且还停止工作,说windows检查错误···
怎么错这么离谱啊??



[ 本帖最后由 carmeloyin 于 2010-8-14 17:38 编辑 ]
搜索更多相关主题的帖子: 赛跑 
2010-08-14 17:36
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
求大大解释
2010-08-14 17:59
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:1 
回复 2楼 carmeloyin
错在 赋初值时 不能写成 001 010 023之类
加前缀0就成了8进制
所以 023==19    010==8
你改正了再看看???

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 18:18
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
那么int a=2;  和int a=02; 不是一回事情?
基础没有学好··
那么十进制是怎么表示呢?
2010-08-14 18:26
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
给你些相关的资料自己学习下就明白了!!!
整数(int类型的常量)有几种书写形式,程序中的整数一般采用十进制写法。用十进制方式写出的一个整数就是普通数字字符组成的一个连续序列,其中不能有空格、换行或其他字符。C语言规定十进制表示的数字序列的第一个字符不是0,除非要写的整数本身就是0。下面是一些整数的例子:
123   304   25278   1   0   906
整数与长整数都可以采用八进制或十六进制的形式书写。
用八进制形式写出的整数(int 类型的常量)是由数字0 开始的连续数字序列,在序列中只允许0~7 这八个数字。下面是用八进制写法写出的一些整数和长整数:
0236   0527   06254   0531   0765432L
整数的十六进制形式是由0x或0X开头的数字序列。由于数字只有10 个,而在十六进制写法中需要16 个数字,C 语言采用计算机领域通行的方式,用字母a~f 或A~F 表示其余的6 个十六进制数字,其对应关系是:
字母:          a,A     b,B      c,C      d,D      e,E      f,F
表示的数字: 10     11          12          13         14         15
下面是用十六进制形式写出的一些整数和长整数:
0x2073   0xA3B5   0XABCD   0XFFFF   0XF0F00000L
请注意:八进制、十进制和十六进制只是整数的不同书写形式,提供多种写法是为了编程方便,使人可以根据需要选择适用的书写方式。无论采用八进制写法还是十六进制写法,写出的仍是某个整数类型的数,并不是新的类型。

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 18:57
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
那么我要表示001号,015号选手怎么表示?
最终输出也是001,015
而不是表示成二进制输入,结果十进制输出??
2010-08-14 19:23
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 6楼 carmeloyin
要不你把运动员编号改成字符数组好了!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 19:26
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
我修改了下程序
可是还是window错误

#include<iostream.h>
class player
{
public:
    char number[4];
    double grade;
};
main()
{
    player a[12]={{"001",13.6},{"002",14.8},{"010",12.0},{"011",12.7},{"023",15.6},{"025",13.4},
                {"031",14.9},{"036",12.6},{"037",13.4},{"102",12.5},{"325",15.3},{"438",12.7}};
    player temp;
    for(int i=0; i<12; i++)   //排列12次
        for(int j=0; j<12-i; j++)
            if(a[j].grade>a[j+1].grade)
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
    for(i=0; i<12; i++)
        cout<<i+1<<" "<<a[i].number[4]<<" "<<a[i].grade<<endl;
}

没有想明白怎么回事
2010-08-14 20:09
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 8楼 carmeloyin
你的基础也太不扎实了!!!
输出语句改一下啊!!
    for(i=0; i<12; i++)
        cout<<i+1<<" "<<a[i].number<<" "<<a[i].grade<<endl;
根本就没有number[4]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 22:40
carmeloyin
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
帖 子:161
专家分:157
注 册:2008-12-2
收藏
得分:0 
为什么用number不用number[4]??
号码有3位数字再加1个\0
对不?
而且我换成number了,也window报错啊···
我基础不好,很多知识混乱,知道有这么回事,但是往往难以对号入座,如果我问的是小儿科的问题,也请大大不要不耐烦
2010-08-15 09:48
快速回复:关于一个赛跑问题,请问,我错在哪里了?
数据加载中...
 
   



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

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