C++自定义数据类型单元习题(二)

C++自定义数据类型单元习题(二)

题目一:
定义学生结构体,结构体成员包括学号、姓名、成绩(高数,英语,计算机)、平均分。
编程实现:
(1):键盘输入10个学生的信息
(2)计算每个学生的平均成绩,并且将学生数据按平均成绩从高到低排序。
(3):统计各科不及格的人数。
代码如下:

/*
   13周C++作业 
学生成绩管理
刘易行 2020年11月24日 
*/
#include<iostream>
#include<iomanip>
using namespace std;
struct Student
{
	int number;
	char name[24];
	int MathScore;  //高数 
	int ComputerScore; //C++ 
	int EnglishScore;  //英语 
	float AverageScore;
};
const int N=10;
void Output(Student a[N]) //输出函数
{
	cout<<"\n            学生数据表\n\n";
	cout<<"    学号        姓名  计算机  英语    高数    平均成绩\n";
	cout.precision(4);
	for(int i=0;i<N;++i)
	{
		cout<<a[i].number;
		cout.width(10);
		cout<<a[i].name;
		cout<<setw(8)<<a[i].ComputerScore
		    <<setw(8)<<a[i].EnglishScore
	        <<setw(8)<<a[i].MathScore
	        <<setw(8)<<a[i].AverageScore<<endl;
	}
 } 
void UnpassNum(Student a[N])
 {
 	int upComputer,upEnglish,upMath;
 	upComputer=0;
 	upEnglish=0;
 	upMath=0;
 	for(int i=0;i<N;++i)
 	{
 		if(a[i].ComputerScore<60) upComputer+=1;
 		if(a[i].MathScore<60) upMath+=1;
 		if(a[i].EnglishScore<60)  upEnglish+=1;
	 }
	 cout<<"高数挂科的有"<<upMath<<"人"<<endl;
	 cout<<"计算机挂科的有"<<upComputer<<"人"<<endl;
	 cout<<"英语挂科的有"<<upEnglish<<"人"<<endl;
 }
int main()
{
	int i,j,k;
	Student stu[10]={};
	Student temp;  //交换变量 
	for(int i=0;i<10;++i)  //学生信息录入模块 
	{
		cout<<"请输入第"<<i+1<<"位学生的学号"<<endl;
		cin>>stu[i].number ;
		cout<<"请输入第"<<i+1<<"位学生的姓名"<<endl;
		cin>>stu[i].name ;
		cout<<"请输入第"<<i+1<<"位学生的高数成绩"<<endl;
		cin>>stu[i].MathScore ;
		cout<<"请输入第"<<i+1<<"位学生的C++成绩"<<endl;
		cin>>stu[i].ComputerScore ;
		cout<<"请输入第"<<i+1<<"位学生的英语成绩"<<endl;
		cin>>stu[i].EnglishScore ;
	}
	for(int i=0;i<10;++i)   //计算每个学生的平均分 
	{
		stu[i].AverageScore+=float(stu[i].ComputerScore+stu[i].EnglishScore+stu[i].MathScore)/3.0;
	}
	for(i=0;i<9;++i)    //实现排序功能 
	{
		k=i;
		for(j=i+1;j<N;++j)
		    if(stu[k].AverageScore<stu[j].AverageScore) k=j;
		if(k!=i)
		{
			temp=stu[i];   //结构体可以直接整体交换 
			stu[i]=stu[k];
			stu[k]=temp;
		}    
	}
	Output(stu);  //实参为结构体数组名
	UnpassNum(stu);
	return 0; 
}

题目二:
定义学生结构体,结构体成员包括:学号、姓名、性别、生源地,输入某班n个同学的信息,实现以下功能:
(1):按学号对学生进行排序。
(2):分别统计男女生人数。

/*
学籍管理
刘易行 2020年11月24日 
*/ 
#include<iostream>
#include<iomanip>
using namespace std;
struct Student  //学生结构体 
{
    int Num;
	char name[20];  //姓名 
	int xb;  //性别 
	char syd[45];  //生源地 
};
void sex(Student a[],int n)  //男女人数统计 
{
	int boys,girls;
	for(int i=0;i<n;++i)
	{
		if(a[i].xb==2)  boys+=1;
		else girls+=1;
	}
	cout<<"女生一共有"<<girls<<"人"<<endl;
	cout<<"男生一共有"<<boys<<"人"<<endl;
}
void Output(Student a[],int n)
{
	cout<<"\n            学生数据表\n\n";
	cout<<"    学号        姓名  性别  生源地\n";
	cout.precision(4);
	for(int i=n;i>0;--i)
	{
		cout<<a[i].Num;
		cout.width(10);
		cout<<a[i].name;
		cout<<setw(8)<<a[i].xb
	        <<setw(8)<<a[i].syd<<endl;
	}
}
int main()
{
	Student stu[100];
	Student temp;
	int n,i,k,j;
	cout<<"请输入班级总人数"<<endl;
	cin>>n;
	for(int i=0;i<n;++i)   //信息录入 
	{
		cout<<"请输入第"<<i+1<<"个学生的信息"<<endl;
		cout<<"请输入学号"<<endl;
		cin>>stu[i].Num;
		cout<<"请输入姓名"<<endl;
		cin>>stu[i].name;
		cout<<"请输入性别 1为女 2为男"<<endl;
		cin>>stu[i].xb;
		cout<<"请输入生源地"<<endl;
		cin>>stu[i].syd; 
	}
	for(int i=0;i<n-1;++i)
	{
		k=i;
		for(j=i+1;j<n;++j)
		    if(stu[k].Num<stu[j].Num) k=j;
        if(k!=i)
        {
        	temp=stu[i];
        	stu[i]=stu[k];
        	stu[k]=temp;
		}
	}
	Output(stu,n);
	sex(stu,n);
	return 0;
} 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值