大家看看 怎么编
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;
}