函数的应用
第五个函数体不知道哪里错了?这个程序是要求输出各科平均分,并且排名的。
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
struct stud
{int num;
char name[10];
float score[3];
}student[3];
/*定义结构体*/
void main()
{float average1[30];int i;
struct stud student[3];struct stud input();
void use2(struct stud *);
void use3(struct stud *);
void use4(float average1[]);
void use5(struct stud student);
/*调用结构体的声明*/
int a;
printf("请对数据包进行操作\n");
printf("1:输入 2:求平均值1 3:求平均值2 4:排序 5:输出\n");
printf("输入数字:\n");
scanf("%d",&a);
/*输入要进行的操作的代号*/
while(a!=6)
{
switch(a)
{
case 1:{for(i=0;i<3;i++) student[i]=input();}printf("恭喜已完成操作\n");break;
case 2:use2(&student[0]);printf("恭喜已完成操作\n");break;
case 3:use3(&student[0]);printf("恭喜已完成操作\n");break;
case 4:use4(average1);printf("恭喜已完成操作\n");break;
case 5:{for(i=0;i<3;i++) use5(student[i]);};printf("恭喜已完成操作\n");break;
default:printf("error\n");
}
printf("请继续输入要进行的操作的代号\n");
scanf("%d",&a);
}
}
/*主程序结束*/
struct stud input()
{printf("输入一个学生的数据:学号、姓名、三次成绩\n");
int i;
struct stud student;
scanf("%d",&student.num);
gets(student.name);
for(i=0;i<3;i++)
scanf("%f",&student.score[i]);
return student;
}
/*第一个调用结构体的内容*/
void use2(struct stud *)
{int i;float average1[3],sum1;
for(i=0;i<3;i++)
{ sum1=0;
sum1=student[i].score[0]+student[i].score[2]+student[i].score[3];
average1[i]=sum1/3;
}
}
/*第二个调用结构体的内容*/
void use3(struct stud *)
{
int i;float average2[3],sum2;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[1];
}
average2[0]=sum2/3;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[2];
}
average2[0]=sum2/3;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[3];
}
average2[0]=sum2/3;
}
/*第三个调用结构体的内容*/
void use4(float average1[])
{int i,j;float t;
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{ if(average1[i]>average1[j])
t=average1[i];
average1[i]=average1[j];
average1[j]=t;
}
}
/*第四个调用结构体的内容*/
void use5(student)
{printf("%s",student[1].name);
}
/*第五个调用结构体的内容*/
[解决办法]
# include <stdio.h># include <stdlib.h># include <string.h>struct stud{ int num; char name[10]; float score[3];}student[3];/*定义结构体*/void main(){ float average1[30];int i; struct stud student[3]; struct stud input(); void use2(struct stud *); void use3(struct stud *); void use4(float average1[]); void use5(struct stud student); /*调用结构体的声明*/ int a; printf("请对数据包进行操作\n"); printf("1:输入 2:求平均值1 3:求平均值2 4:排序 5:输出\n"); printf("输入数字:\n"); scanf("%d",&a); /*输入要进行的操作的代号*/ while(a!=6) { switch(a) { case 1: { for(i=0;i<3;i++) student[i]=input(); } printf("恭喜已完成操作\n"); break; case 2: use2(&student[0]); printf("恭喜已完成操作\n");break; case 3:use3(&student[0]);printf("恭喜已完成操作\n"); break; case 4:use4(average1); printf("恭喜已完成操作\n"); break; case 5: { for(i=0;i<3;i++) use5(student[i]); }; printf("恭喜已完成操作\n"); break; default:printf("error\n"); } printf("请继续输入要进行的操作的代号\n"); scanf("%d",&a); }}/*主程序结束*/struct stud input(){ printf("输入一个学生的数据:学号、姓名、三次成绩\n"); int i; struct stud student; scanf("%d",&student.num); fflush(stdin); gets(student.name); for(i=0;i<3;i++) scanf("%f",&student.score[i]); return student;}/*第一个调用结构体的内容*/void use2(struct stud *){ int i;float average1[3],sum1=0; for(i=0;i<3;i++) { sum1=student[i].score[0]+student[i].score[2]+student[i].score[3]; } average1[i]=sum1/3;}/*第二个调用结构体的内容*/void use3(struct stud *){ int i; float average2[3],sum2; sum2=0; for(i=0;i<3;i++) { sum2=sum2+student[i].score[1]; } average2[0]=sum2/3; sum2=0; for(i=0;i<3;i++) { sum2=sum2+student[i].score[2]; } average2[1]=sum2/3; sum2=0; for(i=0;i<3;i++) { sum2=sum2+student[i].score[3]; } average2[2]=sum2/3;}/*第三个调用结构体的内容*/void use4(float average1[]){ int i,j;float t; for(i=0;i<3;i++) for(j=i+1;j<3;j++) { if(average1[i]>average1[j]) t=average1[i]; average1[i]=average1[j]; average1[j]=t; }}/*第四个调用结构体的内容*/void use5(struct stud studen){ printf("%s\n",studen.name);}/*第五个调用结构体的内容*///程序本身没错了 但是逻辑就不晓得了