学校的函数与结构体实验困惑求解
有5个学生,每个学生的数据包括学号、姓名、3 门课的成绩(100分制),从键盘输入5个学生的信息。要求:
定义表示至少包含上述学生信息的结构体,并用数组存放信息。
定义Input函数输入5个学生的数据,对输入成绩的合理性进行检查。
定义SortByScore函数,根据学生的平均成绩排序。
定义Output函数输出5个学生的数据。
定义SortByName函数,根据学生姓名排序。
main函数内依次调用Input,Output,SortByScore,Output,SortByName,Output函数,验证设计的正确性。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int num;
double sub1,sub2,sub3,ave;
char name[100];
}stu[5];
void Input()
{
int i;
printf("Please input 3 subjects' score of 5 students:\n");
for(i=0;i<5;i++)
{
printf("Number:");
scanf("%d",&stu[i].num);
if(stu[i].num<=0||stu[i].num>5)
continue;
printf("Name:");
scanf("%s",&stu[i].name);
printf("Subject1:");
scanf("%d",&stu[i].sub1);
if(stu[i].sub1<=0||stu[i].sub1>100)
continue;
printf("Subject2:");
scanf("%d",&stu[i].sub2);
if(stu[i].sub2<=0||stu[i].sub2>100)
continue;
printf("Subject3:");
scanf("%d",&stu[i].sub3);
if(stu[i].sub3<=0||stu[i].sub3>100)
continue;
printf("\n");
}
}
void SortByScore()
{
int i,j,k=0;
double temp;
for(i=0;i<5;i++)
stu[i].ave=(stu[i].sub1+stu[i].sub2+stu[i].sub3)/3;
for(i=0;i<4;i++)
{
k=i;
for(j=1;j<5;j++)
if(stu[i].ave<stu[j].ave)
k=j;
if(k!=i)
{
temp=stu[i].ave;
stu[i].ave=stu[k].ave;
stu[k].ave=temp;
}
}
}
void SortByName()
{
int i,j,k=0;
char temp[100];
for(i=0;i<4;i++)
{
for(j=1;j<5;j++)
{
k=i;
if(strcmp(stu[j].name,stu[k].name)<0)
k=j;
if(k!=i)
{
strcpy(temp,stu[i].name);
strcpy(stu[i].name,stu[k].name);
strcpy(stu[k].name,temp);
}
}
}
}
void Output()
{
int i;
printf("Valid\n");
printf(" Number Name Subject1 Subject2 subject3 average\n");
for(i=0;i<5;i++)
printf(" %d %s %d %d %d %d\n",stu[i].num,stu[i].name,stu[i].sub1,stu[i].sub2,stu[i].sub3,stu[i].ave);
printf("\n");
}
int main()
{
int i;;
Input();
SortByScore();
Output();
SortByName();
Output();
system("pause");
return 0;
}
为什么我的第二科成绩和平均分全是0???