第14周课后习题
运动成绩排名
设置输出宽度使用setw函数。
头文件:
//iomanip
例子:
cout<<setw(5)<<n<<setw(8)<<m<<endl;
这道题用两种方法写了函数,一个是头地址,一个是指针
法一:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Sport
{
public:
Sport() { }
Sport(string n,double g)
{
num=n;
grade=g;
}
string num;
double grade;
};
void gjh(Sport*s,int n)
{
Sport * i,*j; //用于排序(地址的方法)
string index;
double tempt;
for(i=s;i<s+n-1;i++)
{
for(j=i+1;j<s+n;j++)
{
if(i->grade>j->grade)
{
tempt=i->grade;
i->grade=j->grade;
j->grade=tempt; //成绩交换
index=i->num;
i->num=j->num;
j->num=index; //编号交换
}
}
}
int ID =1;
for(i=s;i<s+n;i++,ID++)
{
cout<<setw(6)<<ID<<setw(6)<<i->num<<setw(6)<<i->grade<<endl;
}
}
法二:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Sport
{
public:
Sport() { }
Sport(string n,double g)
{
num=n;
grade=g;
}
string num;
double grade;
};
void gjh(Sport*s,int n)
{
string index;
double tempt;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(s[i].grade>s[j].grade)
{
tempt=s[i].grade;
s[i].grade=s[j].grade;
s[j].grade=tempt;
index=s[i].num;
s[i].num=s[j].num;
s[j].num=index;
}
}
}
int ID=1;
for(i=0;i<n;i++,ID++)
cout<<setw(6)<<ID<<setw(6)<<s[i].num<<setw(6)<<s[i].grade<<endl;
}
int main ()
{
Sport players[20] =
{
Sport("001", 13.6), Sport("002", 14.8), Sport("010", 12.0),
Sport("011", 12.7), Sport("023", 15.6), Sport("025", 13.4),
Sport("031", 14.9), Sport("036", 12.6), Sport("037", 13.4),
Sport("102", 12.5), Sport("325", 15.3), Sport("438", 12.7)
};
Sport*s=&players[0];
int n=12;
gjh(s,n);
return 0;
}