学生成绩统计(高级版)

/*学生成绩统计
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
#define M 30
int ReadScore(Student stu[]);
int GetFail(Student stu[],int n);
float GetAver(Student stu[],int n);
int GetAboveAver(Student stu[],int n);
void GetDetail(Student stu[],int n);

typedef struct Student
{
long num;//学生学号
float score;//学生分数
}Stu[M];

void main()
{
int n;
char sel;

printf(" <***学生成绩统计***>\n\n");

n=ReadScore(Student stu[]);
printf("学生人数为:%d",n);

printf("\n\n");
while(1)
{
do
{
printf("1.统计不及格人数并打印不及格学生名单。\n");
printf("2.统计成绩在全班平均分之上的学生人数,并打印这些学生的名单 。\n");
printf("3.统计各分数段的学生人数及所占的百分比。\n\n");
choice1:
printf("请选择: ");

fflush(stdin); //必须要!
scanf("%c",&sel);
if(sel=='1')
{
printf("不及格人数=%d\n",GetFail(Student stu[],n););
break;
}
else if(sel=='2')
{
printf("\n平均分=%.2f\n",GetAver(Student stu[],n);//计算平均分
printf("\n");
printf("\n平均分以上人数=%d\n",GetAboveAver(Student stu[],n); //统计平均分以上人数
break;
}

else if(sel=='3')
{
GetDetail(Student stu[],n);//各分数段人数
break;
}
else
{
printf("输入错误,请重新输入。\n");
goto choice1;
}

}
while(sel=='1'||sel=='2'||sel=='3');

printf("\n\n你想继续还是结束?继续请输入Y,结束请输入N: \n");

choice2:
fflush(stdin); //如果choice2放在fflush(stdin)后面,会出现两次“输入错误,请重新输入。”
scanf("%c",&sel);
if(sel=='Y')
;
else if(sel=='N')
break;
else
{
printf("输入错误,请重新输入。\n");
goto choice2;
}

}
}

/*****************************************************************************************************************/

int ReadScore(Student stu[]);
{
int i=0,co

unt=0;
char ch;

printf("请依次输入学生的学号和成绩:\n");
printf("学号 成绩\n");
while(1)
{
scanf("%ld",&stu[i].num);
scanf("%f",&stu[i].score);
if(stu[i].score<0)
break;
count++;
i++;
}
return count;
}

/*****************************************************************************************************************/

int GetFail(Student stu[],int n);
{
int i,count=0;
printf("\n不及格学生名单:\n");
for(i=0;i{
if(stu[i].score>0&&stu[i].score<60)
{
count++;
printf(" 学号:%ld 成绩:%.1f \n",stu[i].num,stu[i].score);
}
}
printf("\n");
return count;
}

/*****************************************************************************************************************/

float GetAver(Student stu[],int n)
{
float sum=0;
int i;

for(i=0;i{
sum=sum+stu[i].score;
}
(float) n;
sum=sum/n;
return sum;
}


/*****************************************************************************************************************/


int GetAboveAver(Student stu[],int n)

{

int i;
int count=0;
float sum=0;

for(i=0;i{
sum+=stu[i].score;
}
printf("平均分以上学生:\n");
for(i=0;i{
if(score[i]>(sum/n))
{
count++;
printf(" 学号:%ld 成绩:%.1f \n",stu[i].num,stu[i].score);
}
}
printf("\n");
return count;
}

/*****************************************************************************************************************/



void GetDetail(Student stu[],int n)
{
float num[M];
int stu[6]={0};
int i;

for(i=0;i{
if(stu[i].score>0&&stu[i].score<60)
{
stu[0]++;

}
else if(stu[i].score>=60&&stu[i].score<=69)
{
stu[1]++;

}
else if(stu[i].score>=70&&stu[i].score<=79)
{
stu[2]++;
}

else if(stu[i].score>=80&&stu[i].score<=89)
{
stu[3]++;

}
else if(stu[i].score>=90&&stu[i].score<100)
{
stu[4]++;

}
else if(stu[i].score==100)
{
stu[5]++;

}

}
(double) n;

printf("第0段(0 - 60分):人数=%d,百分比为%d%c 。\n",stu[0],stu[0]*100/n,37);
printf("第1段(60- 69分):人数=%d,百分比为%d%c 。\n",stu[1],stu[1]*100/n,37);
printf("第2段(70- 79分):人数=%d,百分比为%d%c 。\n",stu[2],stu[2]*100/n,37);
printf("第3段(80- 89分):人数=%d,百分比为%d%c 。\n",stu[3],stu[3]*100/n,37);
printf("第4段(90- 99分):人数=%d,百分比为%d%c 。\n",stu[4],stu[4]*100/n,37);
printf("第5段( 100 分):人数=%d,百分比为%d%c 。\n\n",stu[5],stu[5]*100/n,37);
}
/*****************************************************************************************************************/

相关文档
最新文档