炫意html5
最早CSS3和HTML5移动技术网站之一

C语言结构体 -C语言按考试成绩排名次

期末考试结束后要对同学们的考试成绩进行排序,张老师已经计算好了每一位同学的总成绩。请编写程序,输入每位同学的总成绩并输出一个按成绩高低排列的名次表。

该问题中,在成绩排序的同时,需要相应的学号和姓名一起随之变化。因此,我们可以使用结构体,学号、姓名、成绩以及名次作为结构体成员。通过对结构体对象成员(总成绩)的大小判断,实现把结构体对象作为一个整体进行排序操作。

我们定义一个结构体对象的数组 stu 用来存放多个学生信息,每一个数组元素都是一个结构体对象:

struct student{
char id[5];      //学号
char name[40];   //姓名
float score;     //期末总成绩
int num;         //名次
}stu[100];           //定义一个结构体对象的数组stu

判断两个数组元素 stu[i] 和 stu[j] 中的结构体对象成员 stu[i].score 和 stu[j].score 的大小,从而决定是否交换数组元素 stu[i] 和 stu[j] 的值:

if(stu[i].score < stu[j].score){
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}

C语言代码清单 1:输入学生成绩并排列名次

#include <stdio.h>
#include <stdlib.h>
int main( )
{
struct student       //声明结构体 student
{
char id[5];      //学生学号(四位)
char name[40];   //学生姓名
float score;     //期末总成绩
int num;         //名次
}stu[100],temp;      //定义结构体对象数组 stu 和临时对象 temp
int i,j,n;
printf("输入学生人数(1~100):");
scanf("%d",&n);
printf("-----------------------\n");
for(i=0;i<n;i++){  //输入学生成绩
printf("学号输入9999则停止输入!\n");
printf("学号(9999):"); scanf("%s",&stu[i].id);
if(strcmp(stu[i].id,"9999")==0){
n=i;
break;
}
printf("姓名:"); scanf("%s",&stu[i].name);
printf("总成绩:"); scanf("%f",&stu[i].score);
printf("-----------------------\n");
}
for(i=0;i<n;i++){  //按成绩排序(冒泡法)
for(j=i+1;j<n;j++)
if(stu[i].score<stu[j].score){
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}  //结构体变量整体交换
stu[i].num = i+1;
}
printf("----------------------------------\n");
printf("  学号       姓名       成绩  名次\n");
for(i=0;i<n;i++){   //输出名次
printf("%+6s",stu[i].id);
printf("%+12s",stu[i].name);
printf("%10.2f",stu[i].score);
printf("%4d\n",stu[i].num);
}
system("pause");
return 0;
}

运行结果为:

输入学生人数(1~100):3
———————–
学号输入9999则停止输入!
学号(9999):1
姓名:lyy
总成绩:600
———————–
学号输入9999则停止输入!
学号(9999):2
姓名:syq
总成绩:605
———————–
学号输入9999则停止输入!
学号(9999):3
姓名:gmm
总成绩:550
———————–
———————————-
  学号       姓名       成绩  名次
     2         syq    605.00   1
     1         lyy    600.00   2
     3         gmm    550.00   3

炫意HTML5 » C语言结构体 -C语言按考试成绩排名次

Java基础教程Android基础教程