一、实验目的
1.复习数组,结构体和函数的相关知识;
2.掌握利用数组存储数据和进行编程的方法;
3.进一步掌握函数的编写。
二、实验内容
1.学生成绩统计
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
注:将成绩分为六个分数段,60分以下为第0段,60~69为第1段,70~79为第2段,80~89为第3段,90~99为第4段,100分为第5段。
编程要求:
1.较好的用户输入输出提示信息
2.使用子函数来实现上述各个功能,并且要使用结构体数组来实现,该结构体中包括学生学号和成绩
3.最好不要使用全局变量
源代码如下:
#include <iostream>
using namespace std;
struct Student
{
long num;
float score;
};
int ReadScore(Student stu[])
{
int n=0;
do
{
cin>>stu[n].num;
cin>>stu[n].score;
n++;
}while(stu[n-1].score>=0);
n--;
cout<<"总人数为: "<<n<<endl;
return n;
}
int GetFail(Student stu[], int n)
{cout<<"不及格的名单:"<<endl;
int fallnum=0;
for(int a=0;a<n;a++)
{
if(stu[a].score<60)
{
cout<<stu[a].num<<" "<<stu[a].score<<endl;
fallnum++;
}
}
return fallnum;
}
float GetAver(Student stu[], int n)
{
float sum=0;
for(int a=0;a<=n;a++)
{
sum=sum+stu[a].score;
}
float aver=sum/n;
return aver;
}
int GetAboveAver(Student stu[], int n)
{
int AboveAvernum=0;
float sum=0;
for(int a=0;a<=n;a++)
{
sum=sum+stu[a].score;
}
float aver=sum/n;
for(int b=0;b<n;b++)
{
if(stu[b].score>=aver)
{
cout<<stu[b].num<<" "<<stu[b].score<<endl;
AboveAvernum++;
}
}
return AboveAvernum;
}
void GetDetail(Student stu[], int n)
{
float n1=0;
float n2=0;
float n3=0;
float n4=0;
float n5=0;
float n6=0;
for(int a=0;a<=n;a++)
{
if(stu[a].score<60)
n1++;
if(60<=stu[a].score&&stu[a].score<=69)
n2++;
if(70<=stu[a].score&&stu[a].score<=79)
n3++;
if(80<=stu[a].score&&stu[a].score<=89)
n4++;
if(90<=stu[a].score&&stu[a].score<=99)
n5++;
if(stu[a].score==100)
n6++;
}
cout<<"60分以下的百分比为:"<<n1/n<<endl;
cout<<"60~69的百分比为:"<<n2/n<<endl;
cout<<"70~79的百分比为:"<<n3/n<<endl;
cout<<"80~89的百分比为:"<<n4/n<<endl;
cout<<"90~99的百分比为:"<<n5/n<<endl;
cout<<"100的百分比为:"<<n6/n<<endl;
}
void main()
{
Student s[30];
cout<<"请输入学号和成绩,输入为负值的时候输入结束:"<<endl;
int num=ReadScore(s);
int unpassnum=GetFail(s,num);
cout<<"不及格的人数为:"<<unpassnum<<endl;
float aver=GetAver(s, num);
cout<<"平均分是: "<<aver<<endl;
cout<<"成绩在平均分之上的名单为: "<<endl;
GetAboveAver(s,num);
cout<<"成绩在平均分之上的人数:"<<GetAboveAver(s,num)<<endl;
cout<<"各个分数段所占的百分比为: "<<endl;
GetDetail(s,num);
}