题目:
学生成绩统计
从键盘输入一个班(全班最多不超过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>
#include<iomanip>
using namespace std;
void printList(float score[],float aver,int num); //打印不及格和平均分以上的名单,统计两名单人数
void percent(float score[],int num); //统计各分段人数百分比
int main()
{
int num,i;
float score[30],aver=0;
cout<<"请输入一个班学生的成绩(输入负数时结束输入):"<<endl;
for(i=0;i<30;i++)
{
cout<<i+1<<"号:";
cin>>score[i];
if(score[i]<0)
break;
}
num=i;
for(i=0;i<num;i++)
aver=aver+score[i];
aver=aver/num; //计算平均分
printList(score,aver,num); //调用函数
percent(score,num);
}
void printList(float score[],float aver,int num) //打印不及格和平均分以上的名单,统计两名单人数
{
int failName[30],upName[30];
int j,m=0,n=0,failNum=0,upNum=0;
for(j=0;j<num;j++)
{
if(score[j]<60) //不及格
{
failName[m]=j+1;
m++;
failNum++;
}
if(score[j]>=aver) //等于或高于平均分
{
upName[n]=j+1;
n++;
upNum++;
}
}
cout<<"不及格人数有"<<failNum<<"人"<<endl;
cout<<"不及格名单:";
for(j=0;j<m;j++)
cout<<failName[j]<<"号 ";
cout<<endl;
cout<<"成绩在全班平均分及平均分之上的学生人数有"<<upNum<<"人"<<endl;
cout<<"名单:";
for(j=0;j<n;j++)
cout<<upName[j]<<"号 ";
cout<<endl;
}
void percent(float score[],int num) //统计各分段人数百分比
{
int i;
float percent[6];
for(i=0;i<num;i++)
{
if(score[i]<60)
(percent[0])++;
if((60<=score[i])&&(score[i]<70))
(percent[1])++;
if((70<=score[i])&&(score[i]<80))
(percent[2])++;
if((80<=score[i])&&(score[i]<90))
(percent[3])++;
if((90<=score[i])&&(score[i]<100))
(percent[4])++;
if(score[i]==100)
(percent[5])++;
}
for(i=0;i<6;i++)
{
percent[i]=(percent[i]/num)*100;
}
cout<<"各个分段的人数:"<<endl;
for(i=0;i<6;i++)
{
cout<<"第"<<i<<"段:"<<fixed<<setprecision(2)<<percent[i]<<"%"<<endl;
}
}