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

本文介绍了一个C++程序,该程序通过定义一个学生类并实现选择最大成绩的方法来展示面向对象编程和简单排序算法的应用。代码中还提供了一种使用冒泡排序改进的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#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;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值