c语言编程,给了学生结构和初始学生成绩,以其平均成绩为主键进行降序排序。然后可以循环地

2025-06-20 22:23:02
推荐回答(2个)
回答1:

/*完全按照你的题目要求写的程序*/
/*经测试,完全正确运行*/

#include
#include

struct student
{
char name[10]; /*学生的姓名*/
int score ; /*学生的平均成绩*/
int rank;/*学生按成绩的排名名次*/
};

struct student stu[]= {"liming", 89 ,0,"zhanghua" , 78,0,"anli" , 95, 0, "wangqi",90, 0, "zhaoping" ,88,0 , "guolin",71,0 };

void sort()
{
int i,j;
struct student temp;
for(i=0;i<5;i++)
for(j=i+1;j<6;j++)
if(stu[i].score {
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
for(i=0;i<6;i++)
stu[i].rank=i+1;
}

int search(char *nm)
{
int i;
for(i=0; i<6; i++)
if(strcmp(stu[i].name,nm)==0)
return i;
return -1;
}

void show(int i)
{
printf("姓名:%s\n平均成绩:%d\n名次:%d\n",stu[i].name,stu[i].score,stu[i].rank);
}

int main()
{
char nm[10];
int rec;
sort();
puts("请输入要查找的姓名:");
gets(nm);
while(strcmp(nm,"")!=0)
{
rec=search(nm);
if(rec!=-1)
show(rec);
else puts("不存在该生记录");
puts("请输入要查找的姓名:");
gets(nm);
}

return 0;
}

回答2:

#include
#include

typedef struct node
{
int sno; /*这里分别是学号(便于最后列表时统计),四门课的分数,总分,平均分*/
int yuwen;
int shunxue;
}student;

void main()
{
int i,j;
student st[10],temp;
for(i=0;i<9;i++) /*进行成绩输入*/
{
st[i].sno=i+1;
printf("Please input the %dth student's yuwen:",i+1);
scanf("%d",&st[i].yuwen);
printf("Please input the %dth student's shuxue:",i+1);
scanf("%d",&st[i].shuxue);
st[i].course=st[i].yuwen+st[i].shuxue;
}
for(i=0;i<9;i++) /*计算总分和平均分*/
{
printf("The %dth student's total-course is:%d\n",i+1,st[i].course);
}
for(i=0;i<8;i++) /*进行冒泡排序*/
for(j=i+1;j<9;j++)
if(st[i].aver {
temp=st[i];
st[i]=st[j];
st[j]=temp;
}
printf("The list of the student's course:\n");
printf("==========\n"); /*列表公布成绩*/
for(i=0;i<9;i++)
{
printf("%d.",i+1);
printf("%dth student:%d\n",st[i].sno,st[i].course);
}

}