实验二:课程考核分析

假设该班有30位学生,期末考试成绩是0~100之间的实数(保留到小数点后两位),数据用例自己设计,试卷满分为100分。

要求根据30位学生该课程成绩计算出“课程考核分析与总结报告”(附件1)表格中的最高成绩、最低成绩、平均成绩、各分数段人数及所占比例,以及四项分析指标:标准差、偏态值、区分度和效度。

输入样例:

请输入学生人数:30

请输入学生分数:40 95 66 71 82 83 98 68 35 79 45 86 59 61 85 91 12 64 60 71 80 60 78 65 88 76 74 84 45 35

公式:

标准差:

由于方差是数据的平方,一般与检测值本身相差太大,人们难以直观地衡量,所以常用方差开根号(取算术平方根)换算回来。这就是我们要说的标准差。

标准差=sqrt(s^2)=sqrt([(x1-x)^2 +...(xn-x)^2]/n)

偏态值:计算公式为3*(平均成绩 - 中位数)/标准差。

区分度:区分度=(前 27%高分组的平均分-后 27%低分组的平均分)÷试卷满分

效度:效度=(前 1/3 高分组的平均分-后 1/3 低分组的平均分)÷试卷满分

代码实现:

#include<stdio.h>
#include<math.h>
int main(){
	float score[30],max=0,min=100,sum=0,biaozhuncha=0,piantaizhi,zhongweishu,ph=0,pl=0,qufendu,xiaodu,nandu;
	int n,A=0,B=0,C=0,D=0,E=0,F=0,r;
	printf("请输入学生人数:");
	scanf("%d",&n);
	printf("请输入学生分数:");
	for(int i=0;i<n;i++){
		scanf("%f",&score[i]);
		sum+=score[i];
		if(score[i]>max){
			max=score[i];
		}
		if(score[i]<min){
			min=score[i];
		}
		if(score[i]>=90&&score[i]<=100){
			A+=1;
		}else if(score[i]>=80&&score[i]<=89){
			B+=1;
		}else if(score[i]>=70&&score[i]<=79){
			C+=1;
		}else if(score[i]>=60&&score[i]<=69){
			D+=1;
		}else if(score[i]>=30&&score[i]<=59){
			E+=1;
		}else if(score[i]>=0&&score[i]<=29){
			F+=1;
		}
	}
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(score[i]>score[j]){
				int temp=score[i];
				score[i]=score[j];
				score[j]=temp;
			}
		}
	}
	r=0.27*n;
	for(int i=n-r;i<n;i++){
		ph+=score[i];
	}
	ph/=r;
	for(int i=0;i<r;i++){
		pl+=score[i];
	}
	pl/=r;
	qufendu=(ph-pl)/100;
	r=n/3,ph=0,pl=0;
	for(int i=n-r;i<n;i++){
		ph+=score[i];
	}
	for(int i=0;i<r;i++){
		pl+=score[i];
	}
	xiaodu=(ph/r-pl/r)/100;
	for(int i=0;i<n;i++){
		biaozhuncha+=pow(score[i]-sum/n,2);
	}
	biaozhuncha/=n;
	biaozhuncha=sqrt(biaozhuncha);
	if(n%2==0){
		zhongweishu=(score[n/2]+score[n/2-1])/2;
	}else{
		zhongweishu=score[n/2];
	}
	piantaizhi=3*(sum/n-zhongweishu)/biaozhuncha;
	nandu=sum/n/100;
	printf("最高分:%.2f\n",max);
	printf("最低分:%.2f\n",min);
	printf("平均成绩:%.2f\n",sum/n);
	printf("90以上:%d人,占比:%.2f%%\n",A,(float)A/n*100);
	printf("89-80 :%d人,占比:%.2f%%\n",B,(float)B/n*100);
	printf("79-70 :%d人,占比:%.2f%%\n",C,(float)C/n*100);
	printf("69-60 :%d人,占比:%.2f%%\n",D,(float)D/n*100);
	printf("59-30 :%d人,占比:%.2f%%\n",E,(float)E/n*100);
	printf("29-0  :%d人,占比:%.2f%%\n",F,(float)F/n*100);
	printf("标准差:%.2f\n",biaozhuncha);
	printf("偏态值:%.2f\n",piantaizhi);
	printf("区分度:%.1f0\n",qufendu);
	printf("效度:%.2f\n",xiaodu);
	return 0;
}

运行结果:

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值