首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何改才能让这个程序能实现按平均成绩降序排序!求解决

2012-03-31 
怎么改才能让这个程序能实现按平均成绩降序排序!求解决[size24px][/size]#includeiomanip#includeiost

怎么改才能让这个程序能实现按平均成绩降序排序!求解决
[size=24px][/size]
#include<iomanip>
 #include<iostream>
 using namespace std;
 #include<string>
 class student{
 public:
  void getinfo();
  void display();
  void sort(student *p);
 private:
  char name[9];
  int english,computer,mathematics;
  double average;
 };
 void student::getinfo ()
 {
  cout<<"姓名";cin>>name;
  cout<<"英语成绩";cin>>english;
  cout<<"计算机成绩";cin>>computer;
  cout<<"数学成绩";cin>>mathematics;
  average=(english+computer+mathematics)/3.0;
 }
 void student::display ()
 { cout<<setw(8)<<name<<":英语="<<setw(3)<<english<<",计算机="
  <<setw(3)<<computer<<",数学="<<setw(3)<<mathematics
  <<"平均成绩="<<setw(5)<<setprecision(4)<<average<<endl;
 }
 void student::sort (student *p)
 {
  int tmp;
  double temp;
  char tname[9];
  if(average>p->average )
  {
  strcpy(tname,name);strcpy(name,p->name );strcpy(p->name ,tname);
  tmp=english;english=p->english ;p->english =tmp;
  tmp=computer;computer=p->computer ;p->computer=tmp;
  tmp=mathematics;mathematics=p->mathematics ;p->mathematics =tmp;
  temp=average;average=p->average ;p->average=temp;
  }
 }
 const int n=3;
 void main()
 { 
  student *ST[n];
  for(int i=0;i<n;i++)
  {
  ST[i]=new student;
  cout<<"学生"<<i+1<<endl;
  ST[i]->getinfo();
  }
  int j;
  for(j=0;j<n-1;j++)
  for(i<0;i<n-1-j;i++)
  ST[i]->sort(ST[i+1]);
  cout<<"\n排序结果\n";
  for(i=0;i<n;i++)
  {ST[i]->display();delete ST[i];}
 }
 
怎么改才能让这个程序能实现按平均成绩降序排序!


[解决办法]
你没实现效果是 因为你for(i<0;i<n-1-j;i++)应写为 for(i=0;i<n-1-j;i++),在你得到学生信息时,i已经变为了3,所以根本就不会调用你的排序函数.
[解决办法]
楼主顺手结帖吧 即是对别人答案的认可 也帮助了自己

C/C++ code
#include<iomanip>#include<iostream>#include<string>using namespace std;class student{public:    void getinfo();    void display();    void sort(student *p);private:    void swap(student *p)    {        int tmp;        double temp;        char tname[9];        strcpy(tname,name);strcpy(name,p->name );strcpy(p->name ,tname);        tmp=english;english=p->english ;p->english =tmp;        tmp=computer;computer=p->computer ;p->computer=tmp;        tmp=mathematics;mathematics=p->mathematics ;p->mathematics =tmp;        temp=average;average=p->average ;p->average=temp;    }private:    char name[9];    int english,computer,mathematics;    double average;};void student::getinfo (){    cout<<"姓名";cin>>name;    cout<<"英语成绩";cin>>english;    cout<<"计算机成绩";cin>>computer;    cout<<"数学成绩";cin>>mathematics;    average=(english+computer+mathematics)/3.0;}void student::display (){    cout<<setw(8)<<name<<":英语="<<setw(3)<<english<<",计算机="    <<setw(3)<<computer<<",数学="<<setw(3)<<mathematics    <<"平均成绩="<<setw(5)<<setprecision(4)<<average<<endl;}void student::sort (student *p){    /*    int tmp;    double temp;    char tname[9];    */    //要降序改下这里就可以了    if(average < p->average )    {        /*这样的代码最好专门交给一个swap函数去处理 或者重载赋值操作符         strcpy(tname,name);strcpy(name,p->name );strcpy(p->name ,tname);        tmp=english;english=p->english ;p->english =tmp;        tmp=computer;computer=p->computer ;p->computer=tmp;        tmp=mathematics;mathematics=p->mathematics ;p->mathematics =tmp;        temp=average;average=p->average ;p->average=temp;        */        //p->swap(this);        swap(p);    }}const int n=3;int main(){      student *ST[n];    int i= 0;    //for(int i=0;i<n;i++)    for(i=0;i<n;i++)    {        ST[i]=new student;        cout<<"学生"<<i+1<<endl;        ST[i]->getinfo();    }    int j;    for(j=0;j<n-1;j++)    {        //楼主这个i<0害人不浅        for(i = 0;i<n-1-j;i++)            ST[i]->sort(ST[i+1]);    }    cout<<"\n排序结果\n";    //i 无声明  上面的i在for循环结束后就死亡了    for(i=0;i<n;i++)    {        ST[i]->display();        delete ST[i];    }    system("pause");    return 0;} 

热点排行