求c语言大神帮我看一下我这个程序的错误,以及更改方法

2024-11-29 04:03:18
推荐回答(2个)
回答(1):

/*大的问题没有,主要错误我想应该是getchar()这个函数的用法,你不知道是干嘛用的,或不是特别理解,这个getchar是为了你上一次scanf输入的时候,最后你会敲一个回判喊车(enter)键,但没有读出来给变量,而是放在输入流里了,所以如果你不用getchar把它读出来,下一次你再用scanf时,它就会不让你输入
还有你定义变量时一定要初始化,不然系统会不确定的分配一个值,会带了意想不到的后果*/
#include
float averages(char name[10],float grade[10][5]);
float averagec(char name[10],float grade[10][5]);
float max(char name[10],float grade[10][5]);
float sqr(char name[10],float grade[10][5]);
int main()
{
float grade[2][5],aves,avec,h,s;
int i,j;
char name[10];
for(i=0;i<2;i++)
{
printf("please input no.%d student's name:",i+1);
scanf("%c",&name[i]);
getchar();//scanf后用于把enter读出模段
for(j=0;j<5;j++)
{
printf("please input no.%d subject of %c:",j+1,name[i]);
scanf("%f",&grade[i][j]);
getchar();//scanf后用于把enter读出
}
}
aves=averages(name,grade);
avec=averagec(name,grade);
h=max(name,grade);
s=sqr(name,grade);
return 0;
}
float averages(char name[10],float grade[10][5])
{
int i,j;
float total = 0,a = 0;//记住要初始化,后面一样
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{total=total+grade[i][j];}
a=total/5;
printf("the average 旦冲誉score of %c is %f:\n",name[i],a);
}
return 0;
}
float averagec(char name[10],float grade[10][5])
{
int i,j;
float total = 0,a = 0;
for(j=0;j<5;j++)
{
for(i=0;i<10;i++)
{
total=total+grade[i][j];
}
a=total/10;
printf("the average score of %d is%.5f:\n",j+1,a);
}
return 0;
}
float max(char name[10],float grade[10][5])
{
int i,j,i1,j1;
float k;
k=grade[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(grade[i][j]>k)
{
k=grade[i][j];
i1=i;j1=j;
}
printf("the highest score is %.2f, the student is %c, the subjuct is no.%d\n",k,name[i1],j1+1);
return 0;
}
float sqr(char name[10],float grade[10][5])
{
int i,j;
float total = 0,k = 0,as[10],ss = 0;
for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{total=total+grade[i][j];}
as[i]=total/5;
}
for(i=0;i<10;i++)
{k=k+as[i];}
ss=(1/5)*k*k-(k/5)*(k/5);
printf("the variance of the average score is:%.5f\n",ss);
return 0;
}

回答(2):

先写上注释,不写注释怎么看