这个代码编译没问题,但运行时无法执行sort后面的函数
#include<stdio.h>struct Student//定义一个结构体
{
int num;
char name[20];
float score[3];
float total;
} stu[5];
int main()
{
void input(struct Student stu[]);//输入信息的函数
void average(struct Student stu[]);//求平均值的函数
struct Student *sort(struct Student *p1);
void print(struct Student *p2);//输出信息的函数
struct Student *p;
p=stu;
input(p);
int g;
for(g=0;g<5;g++) //计算各位学生的总成绩
{
(*(p+g)).total=(*(p+g)).score[0]+(*(p+g)).score[1]+(*(p+g)).score[2];
}
average(p);
print(p);
p=sort(p);
print(p);
return 0;
}
void input(struct Student stu[])
{
int i,j;
printf("请输入学生信息\n");
printf("姓名 学号 课程一 课程二 课程三 \n");
for(i=0;i<5;i++)
{
scanf("%s",stu[i].name);//输入名字
scanf("%d",&stu[i].num);//输入学号
for(j=0;j<3;j++)
{
scanf("%f", &stu[i].score[j]);//输入三门课的成绩
}
}
}
void average(struct Student stu[])
{
int z;
float course1,course2,course3;//定义三个课程成绩
for(z=0;z<5;z++)
{
course1+=stu[z].score[0];
course2+=stu[z].score[1];
course3+=stu[z].score[2];//求出三门课的总分
}
course1/=5.0;
course2=course2/5.0;
course3=course3/5.0;
printf("课程一的平均成绩:%5.1f\n",course1);
printf("课程二的平均成绩:%5.1f\n",course2);
printf("课程三的平均成绩:%5.1f\n",course3);//求出平均值
}
void print(struct Student *p2)
{
int t3;
for(t3=0;t3<5;t3++)
{
printf("学号:%d 姓名:%s 成绩1:%f 成绩2:%f 成绩3:%f 总分:%f",(*(p2+t3)).num,(*(p2+t3)).name,(*(p2+t3)).score[0],(*(p2+t3)).score[1],(*(p2+t3)).score[2],(*(p2+t3)).total);
printf("\n");
}
}
struct Student *sort(struct Student *p1)
{
int t1,t2;
struct Student *term;
for(t1=0;t1<5;t1++)//计算各位学生的总成绩
{
(*(p1+t1)).total=(*(p1+t1)).score[0]+(*(p1+t1)).score[1]+(*(p1+t1)).score[2];
}
for(t1=0;t1<5-1;t1++)//对五位学生的总成绩进行排序
{
for(t2=0;t2<5-1-t1;t2++)
{
if((*(p1+t2)).total<(*(p1+t2+1)).total)
{
*term=*(p1+t2);
*(p1+t2)=*(p1+t2+1);
*(p1+t2+1)=*term;
}
}
}
return p1;
}