建立一个对象数组,内放5个学生的数据(学号,成绩),用指向对象的指针做函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。

在别的博客看见这道题,要不是晦涩难懂,要不是算法有缺陷。故在此重写


#include <iostream>

using namespace std;
class Student
{
public :
Student (int x,int c):xueHao(x),chengJi(c){}
void selectMax(Student *);//直接在此处声明为friend下面的定义前面的void Student::可省去
private :
int xueHao;
int chengJi;
};
void Student::selectMax(Student *p)
{
for (int i=0;i<5;i++)
{
int k=0;
for (int j=0;j<5;j++)
{
if((p+i)->chengJi>=(p+j)->chengJi)
k++;
if(k==5)
{
cout<<"最高成绩为:"<<(p+i)->chengJi<<endl;
cout<<"学生学号为:"<<(p+i)->xueHao;
break;
}
}
if(k==5) break;
}
}
int main()
{
Student a[5]={
Student(1,90),
Student(2,80),
Student(3,100),
Student(4,60),
Student(5,70)};
a->selectMax(a);
return 0;

}

可以把selectMax部分使用冒泡排序,不管感觉时间复杂度差不多。

void selectMax(Student *p)
{
for ( int i=0;i<5-1;i++)
{
for (int j=0;j<5-i-1;j++) 
if((p+j)->chengJi>(p+j+1)->chengJi)
{
int k;
k=(p+j)->chengJi;
(p+j)->chengJi=(p+j+1)->chengJi;
(p+j+1)->chengJi=k;
/*
因为成绩排序的变化,学号也要跟着变化,不然答案错误 
*/
k=(p+j)->xueHao;
(p+j)->xueHao=(p+j+1)->xueHao;
(p+j+1)->xueHao=k;
}
}
cout<<"最高成绩为:"<<(p+4)->chengJi<<endl;
cout<<"学生学号为:"<<(p+4)->xueHao;
}

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/79748285