教育信息处理实验4
教
育
信
息
处
理
实
验
报
告
四
实验四
一.实验题目:S-P表分析软件设计
二.实验要求:要求自定数据(50人参加10个题目的考试),按照S-P表的原理进行排序,分别计算出此次测试的差异系数、每个人的注意系数和每个问题的注意系数。
三.实验原理: 利用数组存储数据,在用循环根据公式计算出此次测量的参数
四.算法与流程图:
五.程序原代码:
#include
#include
main()
{
int i,j,m,n;
int a[6][5],b[6][5],c[6][5];
float d=0.0,D=0.0,r=0.0,p=0.0,q=0.0,
p0=0.0,p1=0.0,pa=0.0,cs=0.0,
s0=0.0,s1=0.0,sa=0.0,cp=0.0;
printf(
for(i=0;i
{
for(j=0;j
scanf(
}
//输入原始数据(5个学生分别回答4个问题的情况)
for(i=0;i
{
a[i][4]=0;
}
for(j=0;j
{
a[5][j]=0;
}
//在原始数据组成的数组的边界增加一行一列(统计每个学生的得 分、每个问题的答对数,方便排序)
for(i=0;i
{
for(j=0;j
{ if(a[i][j]==1)
{ a[i][4]=a[i][4]+1;
a[5][j]=a[5][j]+1;
a[5][4]=a[5][0]+a[5][1]+a[5][2]+a[5][3];
}
}
}
//统计每个学生总得分和每个问题的答对人数
for(m=1;m
{
for(i=0;i
{
if(a[i][4]
for(j=0;j
{
b[i][j]=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=b[i][j];
}
}
}
//按照每个学生得分高低行排序(数组最后一列元素的大小)
for(n=1;n
{
for(j=0;j
{
if(a[5][j]
for(i=0;i
{
c[i][j]=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=c[i][j];
}
}
} //按照每个问题的答对人数列排序(数组最后一行元素的大小)
printf(
for(i=0;i
{
for(j=0;j
printf(
printf(
}
printf(
//输出SP表
for(i=0;i
{
for(j=0;j
b[i][j]=0; //建立另外一个初始值全为0的数组 }
for(i=0;i
{
for(j=0;j
b[i][j]=1; // 根据每个学生的得分判断每行前几列为1 }
for(j=0;j
{
for(i=0;i
b[i][j]=2; // 根据每个问题的正答数判断每列前几行为2
}
for(i=0;i
{
for(j=0;j
if(a[i][j]==1)
p=p+a[i][j]; //统计所有学生回答所有问题的正答数(a[5][4])
}
for(i=0;i
{
for(j=0;j
if(b[i][j]==1)
q=q+b[i][j]; //数组b中的元素有1有2,先统计此时1的个数
}
for(i=0;i
{
for(j=0;j
b[i][j]=1; //重新对数组b按照学生得分赋值1(为了统计不重叠的2的个数)
}
for(i=0;i
{
for(j=0;j
if(b[i][j]==2)
q=q+1; //在统计1的个数基础之上加不重叠的2的个数(实现SP所包含的元素的个数)
}
r=p/(5*4); //所有问题的平均正答率
D=q/(5*4); //差异量
d=0.7*D/(r*(1-r)); //差异系数
printf(
for(i=0;i
{
p0=0.0;p1=0.0;pa=0.0;
{
for(j=0;j
if(a[i][j]==0)
p0=p0+a[5][j]; //根据学生i的总得分为临界点 求S线左侧0的个数P0
}
{
for(j=a[i][4];j
if(a[i][j]==1)
p1=p1+a[5][j]; //根据学生i的总得分为临界点 求S线左侧1的个数P1
}
{
for(j=0;j
pa=pa+a[5][j]; //根据学生i的总得分为临界点 求S线左侧所有问题的答对总数Pa
}
cs=(p0-p1)/(pa-a[i][4]*p/4); //每个学生的注意系数计算公式
printf(
}
printf(
for(j=0;j
{
s0=0.0;s1=0.0;sa=0.0;
{
for(i=0;i
if(a[i][j]==0)
s0=s0+a[i][4];
}
//根据J问题的答对人数为临界点 求P线上方0的个数S0
{
for(i=a[5][j];i
if(a[i][j]==1)
s1=s1+a[i][4];
} //根据J问题的答对人数为临界点 求P线上方1的个数S1
{
for(i=0;i
sa=sa+a[i][4];
} //P曲线上方所有学生的得分之和Sa
cp=(s0-s1)/(sa-a[5][j]*p/5); //每个问题的注意系数计算公式
printf(
}
}
六. 运行结果: