Chinaunix首页 | 论坛 | 博客
  • 博客访问: 233459
  • 博文数量: 69
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 570
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 16:57
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(5)

2009年(63)

我的朋友

分类: C/C++

2009-04-27 16:51:22

问题的提出:某大学开田径运动会,现有12名选手参加100米比赛,对应的运动员号及成绩如表所示,请按照成绩排名并输出,要求每一行输出名次、运动员号及成绩。要求用冒泡法排序。

运动员号

成绩(秒)

运动员号

成绩(秒)

001

136

031

149

002

148

036

126

010

120

037

134

011

127

102

125

023

156

325

153

025

134

438

127

把数据写入a.txt中。

然后从a.txt中输出数据 ,进行排序,然后写入b.txt中。

///////////////a.txt/////////////////

/////////////////////////////////

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

//////////order.h/////////

/////////////////////////////

#include
#include
using namespace std;
struct Player
{
char num[3];
float score;
};
class Order
{
protected:
    Player *player;
    FILE *fp1,*fp2;
    int i,j;
    
public:
    Order(FILE *f1,FILE *f2);
    Order(const Order& s);
    Order& operator=(Order& s);
    void write(FILE *);
    void bubble();
    ~Order()
    {
        delete [] player;
        player=NULL;
    }
};


/////////order.cpp//////////
//////////////////////////////////////////
#include"order.h"
Order::Order(FILE *f1,FILE *f2):i(0),j(0)
{   
    fp1=f1;
    fp2=f2;
    player=new Player[12];
    while(fscanf(f1,"%s %f\n",&((player+i)->num),&((player+i)->score))!=EOF)
    {i++;}

   
}
Order::Order(const Order& s):j(0)
{
fp1=s.fp1;
fp2=s.fp2;
i=s.i;
player=new Player[12];
if(player)
{
memcpy(player,s.player,12*sizeof(Player));
}   
}
void Order::bubble()
{
    Player temp;
    for(int line=i;line>1;line--)
    for(int j=0;j    {
        if(((player+j)->score)>((player+j+1)->score))
            {
                memcpy(&temp,player+j,sizeof(Player));
                memcpy(player+j,&player[j+1],sizeof(Player));
                memcpy(player+j+1,&temp,sizeof(Player));
               
            }
    }
}
void Order::write(FILE *p)
{
/*for(int k=0;k    {
       
   
        cout<<(*(player+k)).num<<' '<<(*(player+k)).score<    }
    */
for(j;j{
fprintf(p,"%s %.1f\n",(player+j)->num,(player+j)->score);
}
}
Order& Order::operator=(Order& s)
{
if(this == &s)return s;
delete [] player;
player=new Player[12];
if(player)
{
memcpy(player,s.player,12*sizeof(Player));
}
return *this;
}

//////////paiming.cpp/////////
////////////////////////////////////////////
#include"order.h"
int main(int argc,char* argv[])
{FILE *f1,*f2;
if((f1=fopen(argv[1],"r"))==NULL)
    {
        cout<<"can not open"<<' '<       
    }
    if((f2=fopen("b.txt","w")) == NULL)
    {
        cout<<"can not open b.txt"<    }
Order a(f1,f2);
Order b=a;
b.bubble();
b.write(f2);
fclose(f1);
fclose(f2);
}

///////////////////Makefile///////////////
////////////////////////////////////////
CC=g++
paiming:paiming.o order.o
order.o: order.h
paiming.o:order.h
    $(CC) -c paiming.cpp
.PHONY:clean
clean:
    -rm -f paiming *.o


/////////////运行结果:b.txt/////////////
/////////////////////////
010 12.0
102 12.5
036 12.6
011 12.7
438 12.7
025 13.4
037 13.4
001 13.6
002 14.8
031 14.9
325 15.3
023 15.6


感谢赵启先生的指导!


阅读(1416) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~