问题描述:
某课程考试结束后,需要对授课班级所有学生该课程成绩进行统计及分析,统计出平均分,最高分,最低分,以及个分数段人数和及格率,并对该门课程成绩进行降序排序。
* 首先,我们来分析一下这个问题*-*
此程序有什么编写要求呢?(先自己想一想哦)
哈!
聪明的你一定想出来一点了吧*
此题目要求
1.要读入N名学生的成绩;
2.要求平均分,最高分,最低分;
3.统计各分数段人数和及格率;
4.对学生成绩进行降序排序;
5.使用菜单完成各功能;
(1)数据结构设计:
要将N个数据存入计算机中,需要定义一个包含N个元素的一维数组 score[N],可将数组定义为局部变量。
(2)总体设计:
此题可划分成函数实现:
input函数用于实现N个数据输入,定义首部如下:
input(float s[],int n);
avemaxmin函数用于求N名学生的平均分,最高分和最低分;
avemaxmin(float score[],int n,float *average,float *max,float *min);
count函数用于统计个分数段的人数和及格率;
要统计各分数段人数和及格率 ,我们需在该函数中定义一个包含十个元素的数组,用来存放10个分数段,例如定义cn[10],
当分数是0~9时,cn[0]++;
当分数是10~19时,cn[1]++;
当分数是20~29时,cn[2]++;
...
...
当分数是90~100时,cn[10]++;
不及格人数就是对cn[0]~cn[5]求和,及格率就是几个人数/总人数乘以100%。函数定义首部如下:
count(float score[],int n);
sort函数用于实现N名学生成绩的排序;
sort(float b[],int n);
main函数用于完成系统集成。通过菜单方式调用这些函数。
好了!现在我们就可以编写程序辣!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
//输入学生信息
void input(float s[],int n)
{
int i;
printf("请输入%d名学生成绩\n",n);
for(i=0;i<n;i++)
scanf("%f",&s[i]);
}
//统计各分数段人数和及格率
count(float score[],int n)
{
int i,j,cn[10]={0};
float failure=0;
for(i=0;i<n;i++)
{
j=score[i]/10;
cn[j]++;
}
for(i=0;i<=5;i++)
failure+=cn[i];
printf("0~9,10~19,20~29,30~39,40~49,50~59,60~69,70~79,80~89,90~100\n");
for(i=0;i<10;i++)
printf(" %-4d",cn[i]);
printf("\n及格率:%.2f%%\n",(n-failure)/n*100);
}
//求平均值,最大值和最小值
avemaxmin(float score[],int n,float *average,float *max,float *min)
{
int i;
float sum=0;
for(i=0;i<n;i++)
sum+=score[i];
*average=sum/n;
*max=score[0];*min=score[0];
for(i=0;i<n;i++)
{
if(score[i]>*max)
*max=score[i];
if(score[i]<*min)
*min=score[i];
}
}
//对成绩进行排序
void sort(float b[],int n)
{
int i,j;
float t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(b[j]<b[j+1]) //b[j]和b[j+1]交换
{
t=b[j];b[j]=b[j+1];b[j+1]=t;
}
}
//输出排序后的学生成绩
void output(float b[],int n)
{
int i;
printf("排序后的成绩为:\n");
for(i=0;i<n;i++)
printf("%.2f ",b[i]);
printf("\n");
}
main()
{
float score[N],ave,max,min;
int choice;
int n;
do
{
printf("1.输入N名学生成绩(必须先输入成绩)\n");
printf("2.求平均分,最高分,最低分\n");
printf("3.分段统计人数和及格率\n");
printf("4,排序\n");
printf("0,退出系统");
printf("请选择(0~4):") ;
printf("请输入选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:printf("请输入学生人数:");
scanf("%d",&n);
input(score,n);
break;
case 2:avemaxmin(score,n,&ave,&max,&min);
printf("平均分=%.2f,最高分=%.2f,最低分=%.2f\n",ave,max,min);break;
case 3:count(score,n); break;
case 4:sort(score,n);output(score,n);break;
case 0:break;
}
}while(choice!=0);
}
好啦,现在快去运行一下看看会实现什么结果吧~
今天的内容就到此结束了*-*