初学C语言,请各位大神看看有什么问题!!可以运行但结果错误,谁帮我修改一下
学校举办配音大赛,一共有10位同学报名参加。大赛中有3位评委,每位评委将会对10个作品进行打分。打分的形式不限,可以让一个评委一次打完10个人的分数然后轮到下一位评委打分直到结束,也可以让三个评委轮流给作品打分,打完第一同学的分再轮流给第二位同学打分,以此类推直到结束(打分方式见下表的例子)打分方式一
打分方式二
例:1号评委,请您按顺序给10位选手打分,按回车键分隔。2号评委,请您按顺序给10位选手打分,按回车键分隔。3号评委,请您按顺序给10位选手打分,按回车键分隔。
例:1号选手表演结束,请三位评委录入您的分数,按回车键分隔。2号选手表演结束,请三位评委录入您的分数,按回车键分隔。
……
10号选手表演结束,请三位评委录入您的分数,按回车键分隔。
序号
1请你利用C语言中的数组编写一个程序,要求能够统计并显示每位参赛选手的平均得分是多少。
2求出平均成绩最高的前三名同学的序号。
3在程序开始运行时让用户自由决定有几位参赛学生,几位评委。
4在程序开始运行时确定评委评分的方式:可选择5分制、10分制或者100分制。甄别用户输入的数字,对于不合理的输入,如:评委在5分制输入了大于5或者小于1,程序能够自动提示错误,并马上让评委再次输入。
5见案例描述中说明了两种打分方式。程序要能实现两种打分模式,并在程序开始运行时让用户选择以哪种方式打分。
程序!!!!!!
#define M 100
#include<stdio.h>
void main()
{
void Fox(int *p,int k);
int x,y,z,m,n,w,i,j,a[M][M],sum=a[0][0];float max1=0.0,max2=0.0,max3=0.0,b[M];
printf("请输入评委数:");
scanf("%d",&x);
printf("请输入参赛人数:");
scanf("%d",&y);
printf("请输入打分方式1or2:");
scanf("%d",&z);
printf("请选择5分制、10分制或者100分制:");
scanf("%d",&m);
if(z==1)
{
for(i=0;i<x;i++)
{
printf("请您按顺序给所有选手打分:");
for(j=0;j<y;j++)
{
scanf("%d",&a[i][j]);
Fox(&a[i][j],m);
}
}
for(j=0;j<y;j++)
{
for(i=0;i<x;i++)
{
sum+=a[i][j];
b[j]=sum/(float)x;
sum=a[0][i+1];
}
printf("学生平均成绩b[j]=%f\n",b[j]);
}
for(j=0;j<y;j++)
{
while(max1<b[j])
{
max1=b[j];n=j;
printf("最高分序号:%d\n",n);
}
while(max2<b[j]&&j!=n)
{
max2=b[j];w=j;
printf("第二高分序号:%d\n",w);
}
while(max3<b[j]&&j!=n&&j!=w)
{
max3=b[j];
printf("第三高分序号:%d\n",j);
}
}
}
else
{
for(i=0;i<y;i++)
{
printf("请几位评委录入您的分数:");
for(j=0;j<x;j++)
{
scanf("%d",&a[j][i]);
Fox(&a[j][i],m);
}
}
for(j=0;j<y;j++)
{
b[j]=(a[0][j]+a[1][j]+a[2][j])/3.0;
printf("学生平均成绩b[j]=%f\n",b[j]);
}
}
}
void Fox(int *p,int k)
{
if(k==5)
{
if(*p<1||*p>5)
{
printf("输入格式错误,请检查后再次输入:");
scanf("%d",p);
}
}
else if(k==10)
{
if(*p<1||*p>10)
{
printf("输入错误,请再次输入:");
scanf("%d",p);
}
}
else if(k==100)
{
if(*p<1||*p>100)
{
printf("输入格式错误,请检查后再次输入:");
scanf("%d",p);
}
}
}