大家看看 怎么编
2个学生 4门课 用函数调用 (结构体数组变量体类型)1.从键盘上输入(学号,姓名,4门课成绩),计算每人的平均成绩
2.根据平均成绩排名,安名次输出所有的数据(学号,姓名,4门课的成绩,平均成绩及名次)
/*-------------------------------------------------------- 你所定义的几个函数都是不需要返回值的,所以帮你改回来了,全是 void 型的函数。 另外排序函数应该是输出函数的前面,不然得加上函数声明,也 帮你改过来了。 -------------------------------------------------------*/ #include <stdio.h> #define stnum 2 #define scnum 4 typedef struct { /*char* name; char* ID; 这里不应该是这样子定义滴,这里应该是数组,不是指针*/ char name[30]; char ID[20]; int score[scnum]; float avg; }stinfo; void sort(stinfo* stu) { stinfo temp; int i,j; for(i = 0;i < scnum;i++) { /*for(j = 0;j < i;j++) { if(stu[j].avg < stu[j+1].avg) { temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } 改为 */ for(j = i+1;j<scnum;++j) if(stu[i].avg<stu[j].avg) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } /* return 0; */ } void input (stinfo* stu) { int i = 0; int j ; float sum; while(i<stnum) /* 此处i值未改变,死循环 */ { sum = 0; printf("Name:\n"); scanf("%s",stu[i].name); printf("\nID\n"); scanf("%s",stu[i].ID); printf("input score[]\n");/* 此处是什么意思?为你加上点语句吧 */ for(j=0;j<scnum;j++) { scanf("%d",&stu[i].score[j]); sum = sum +stu[i].score[j]; } stu[i].avg = sum/scnum; i++; /* 加上自加语句 */ } /*return 0; why??? */ } void output(stinfo* stu) { int i,j; printf("\n"); for(i = 0;i<stnum;i++) { printf("%s\t",stu[i].name); printf("%s\t",stu[i].ID); for(j = 0;j<scnum;j++) { printf("%d ",stu[i].score/* 少了变量值 j */[j]); } printf("\t"); printf("%3f",stu[i].avg); printf("\n"); } /* return 0; */ } int main(void) { stinfo stu[stnum]; input(stu); sort(stu); output(stu); getchar(); return 0; }