假设该班有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;
}
运行结果: