调试不出来啊 有谁能解答下吗
#include "stdio.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define N 1000
#define M 30
void input();
void asfun();
void tasfun();
void sortfun();
void output();
int n,m;
struct stt
{
int num;
char*name;
float score[M];
} sta[N];
char sname[M][16];
float avs1[M],svs1[M];
float total[N],avs2[N],svs2;
int sort[N];
void main()/*主控函数*/
{
input();
asfun();
tasfun();
sortfun();
output();
}
void input()/*获取数据*/
{
char ch ;
int i,j;
char *ps;
FILE*fps;
printf("请选择数据源(K-键盘输入 F-磁盘文件读取): \n");
ch=getch();
switch (ch)
{
case'K':/*数据源从键盘输入*/
case 'k':
{printf("请输入实际学生人数:");
scanf("%d",&n);
printf("请输入实际课程门数:");
scanf("%d",&m);
if(n<=0||n>1000||m<=0||m>30)
{printf("数据无效!");
exit(0);
}
printf("请输入%d门课程名称:",m);
for(j=0;j<m;j++)
scanf("%s",sname[j]);
for(i=0;i<n;i++)
{printf("请输入第%d个学生学号,姓名,%d门课程成绩:",i+1,m);
scanf("%d%s",&sta[i].num,sta[i].name);
for(j=0;j<m;j++)
scanf("%f",&sta[i].score[j]);
}
ps="SCORE.DAT";/*送磁盘文件保存*/
if((fps=fopen(ps,"wb"))==NULL)
{ printf("文件建立错误!");
exit(0);
}
fwrite(&n,2,1,fps);
fwrite(&m,2,1,fps);
fwrite(sname,16,m,fps);
fwrite(sta,sizeof(struct stt),n,fps);
fclose(fps);
break;
}
case'F':/*数据从磁盘文件读取*/
case'f':
{printf("请输入数据文件名:");
scanf("%s",&ps);
if((fps=fopen(ps,"rb"))==NULL)
{printf("文件打开错误!");
exit(0);
}
fread(&n,2,1,fps);
fread(&m,2,1,fps);
fread(sname,16,m,fps);
fread(sta,sizeof(struct stt),n,fps);
fclose(fps);
break;
}
default:
{printf("数据源选择错误!");
exit(0);
}
}
}
void asfun()/*计算每门课程的平均分和方差*/
{ int i,j;
float t [M],ts[M];
for(j=0;j<m;j++)
{t[j]=0;ts[j]=0;
for(i=0;i<n;i++)
{t[j]+=sta[i].score[j];
ts[j]+=sta[i].score[j]*sta[i].score[j];
}
avs1[j]=t[j]/n;
svs1[j]=ts[j]/n-avs1[j]*avs1[j];
}
}
void tasfun()/*计算每个学生的总分、平均分和方差*/
{ int i,j;
float ta=0,ts=0;
for(i=0;i<n;i++)
{total[i]=0;
for(j=0;j<m;j++)
total[i]+=sta[i].score[j];
avs2[i]=total[i]/n;
ta+=avs2[i]; ts+=avs2[i]*avs2[i];
}
svs2=ts/n-(ta/n)*(ta/n);
}
void sortfun()/*按总分排序*/
{ int i,j,k;
for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<m;j++)
if(total[j]>total[k]) k=j;
sort[i]=k+1;
}
}
void output()/*输出数据*/
{int i,l,j;
int is;
char*pt;
FILE*fpt;
system("cls");/*输出数据送屏幕*/
printf("%d个学生%d门课程成绩数据如下:\n");
printf(" 学号 姓名 ");
for(j=0;j<m;j++)
printf("%16s",sname[j]);
printf("| 总分 平均分 名次\n");
for(i=0;i<n;i++)
{for(l=0;l<n;l++)
if(sort[l]==i+1) is=1;
printf("%8d%12s",sta[is].num,sta[is].name);
for(j=0;j<m;j++)
printf("%16.2f",sta[is].score[j]);
printf("|%8.2f%8.2f%6d\n",total[is],avs2[is],sort[is]);
}
printf(" 课程平均分 ");
for(j=0;j<m;j++)
printf("%16.2f",avs1[j]);
printf("\n");
printf(" 方差 ");
for(j=0;j<m;j++)
printf("%16.2f",svs1[j]);
printf("%16.2\n",svs2);
pt="STUDENT.DAT";/*输出数据送磁盘*/
if((fpt=fopen(pt,"wb"))==NULL)
{printf("文件建立错误!");
exit(0);
}
fwrite(&n,2,1,fpt);
fwrite(&m,2,1,fpt);
fwrite(sname,16,m,fpt);
for(i=0;i<n;i++)
{fwrite(&sta[i],sizeof(struct stt),1,fpt);
fwrite(&total[i],4,1,fpt);
fwrite(&avs2[i],4,1,fpt);
fwrite(&sort[i],2,1,fpt);
}
fwrite(avs1,4,m,fpt);
fwrite(&svs2,4,1,fpt);
fclose(fpt);
}