c语言 利用函数进行班级学生单科成绩的分析统计

问题描述

某课程考试结束后,需要对授课班级所有学生该课程成绩进行统计及分析,统计出平均分,最高分,最低分,以及个分数段人数和及格率,并对该门课程成绩进行降序排序。

      *  首先,我们来分析一下这个问题*-*

此程序有什么编写要求呢?(先自己想一想哦)

哈!

聪明的你一定想出来一点了吧*

此题目要求

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

好啦,现在快去运行一下看看会实现什么结果吧~

今天的内容就到此结束了*-*

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值