#include<string.h>
#include<stdlib.h>
#define N 50
#define M 3
char name[N][11]
char *p
double score[N][M+1]
void sortbytotal(int n)
{ int i,j,k
double temp=score[0][0]
for(i=0i<ni++)
{ for(j=0j<nj++)
if(score[i][0]<score[j][0])
{for(k=0k<=Mk++)
{ temp=score[i][k]
score[j][k]=score[i][k]
score[j][k]=temp}
p = (char *)malloc(strlen(name[i])+1)
//加上上面这句
strcpy(p,name[i]) //这里你没给p分配内存
strcpy(name[i],name[j])
strcpy(name[j],p)
}
}
}
void display(int n)
{ int i,k
printf("name,maths,English,C,total:\n")
for(i=0i<ni++)
{ printf("%10s\n",name[i])
for(k=1k<=Mk++)
printf("%.1lf",score[i][k])
printf("%.2lf",score[i][0])}
}
void input(int n)
{ int i,k
for(i=0i<ni++)
{ printf("input DI(%d)Ge student's name:",i+1)
scanf("%s",&name[i])
printf("input the score of <%s>:\n",name[i])
for(k=1k<=Mk++) // 这个循环不对
{ scanf("%lf",&score[i][k])
score[i][0]=0 //你每次都清0,前面的白加了
score[i][0]+=score[i][k]}
}
改为:
score[i][0]=0 //加之前清0
for(k=1k<=Mk++)
{ scanf("%lf",&score[i][k])
score[i][0]+=score[i][k]}
}
调整了一下格式,你的代码应该没有什么问题的
#include <stdio.h>#include<math.h>
int main (void)
{
int count,i,n
float total,grade //题目已强调输入肯定在整型范围内
count=0
scanf ("%d",&n)
if(n<0) //关于if的使用,如果分支较多,建议干脆一种情况一个if
//不然,几个else if 或者else就把自己给绕晕了
{
printf ("Invalid Value!")
}
if(n>0)
{
for (i=1i<=ni++)
{
scanf ("%f",&grade)
total+=grade
if (grade>=60)//
{
count++
}
}
printf ("average = %.1f\n",total/n)
printf ("count = %d",count)
}
if (n==0)
{
printf ("average = 0.0\n")
printf ("count = 0")
}
return 0
}