学生的记录由学号、姓名、C语言成绩、排名组成,根据班级人数,将学生记录存放在结构体数组中。请编程求出学生排名,放到结构体数组的排名成员中,输出所有学生的完整记录。要求:班级人数、学生记录均由键盘输入。
参考:
#include "stdio.h"
#define N 100
struct student{
int id;
char name[20];
int kaoqun;
int biaoxian;
int zuoye;
int biji;
int sum;
}stud[N],t;
int main()
{
int i,j;
for(i=0;i<N;i++){
printf("请输入第%d个学生信息\n",i+1);
scanf("%d %s",&stud[i].id,&stud[i].name);
fflush(stdin);
scanf("%d %d %d %d",&stud[i].kaoqun,&stud[i].biaoxian,&stud[i].zuoye,&stud[i].biji);
stud[i].sum = stud[i].kaoqun+stud[i].biaoxian+stud[i].zuoye+stud[i].biji;
}
//排序
for (i = 0; i < N - 1; i++){
for (j = 0; j < N - 1 - i; j++){ //按成绩对学生信息进行排序
if (stud[j].sum > stud[j + 1].sum){ //整型数字的比较
t = stud[j];
stud[j] = stud[j + 1];
stud[j + 1] = t;
}
}
}
//打印
printf("学号\t姓名\t考勤\t表现\t作业\t笔记\t总分\t\n");
for (i = 0; i < N; i++){
printf("%d\t", stud[i].id);
printf("%s\t", stud[i].name);
printf("%d\t", stud[i].kaoqun);
printf("%d\t", stud[i].biaoxian);
printf("%d\t", stud[i].zuoye);
printf("%d\t", stud[i].biji);
printf("%d \n", stud[i].sum);
}
return 1;
}
代码如下:
#include <stdio.h>
#define MAXNMB 100
struct Student
{
int id;
char name[20];
int score;
int rank;
};
int main()
{
struct Student stu[MAXNMB],tmp;
int nmb,i,j;
printf("请输入学生人数:");
scanf("%d",&nmb);
for (i=0;i<nmb;i++)
{
printf("请输入学生%d的学号:",i+1);
scanf("%d",&stu[i].id);
printf("请输入学生%d的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入学生%d的C语言成绩:",i+1);
scanf("%d",&stu[i].score);
stu[i].rank = 0;
}
//按照成绩排序,从高到第排序
for (i=0;i<nmb-1;i++)
{
for (j=0;j<nmb-1-i;j++)
{
if (stu[j].score < stu[j+1].score)
{
tmp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = tmp;
}
}
}
//计算排名
stu[0].rank = 1;
for (i=1;i<nmb;i++)
{
if (stu[i].score == stu[i-1].score)
{
stu[i].rank = stu[i-1].rank;
}else
stu[i].rank = stu[i-1].rank + 1;
}
//显示学生信息及排名
printf("排名 学 号 姓 名 成绩\n");
for (i=0;i<nmb;i++)
{
printf("%4d %-10d %-20s %-4d\n",stu[i].rank,stu[i].id,stu[i].name,stu[i].score);
}
return 0;
}