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