C语言按考试成绩排名次
期末考试结束后要对同学们的考试成绩进行排序,张老师已经计算好了每一位同学的总成绩。请编写程序,输入每位同学的总成绩并输出一个按成绩高低排列的名次表。
该问题中,在成绩排序的同时,需要相应的学号和姓名一起随之变化。因此,我们可以使用结构体,学号、姓名、成绩以及名次作为结构体成员。通过对结构体对象成员(总成绩)的大小判断,实现把结构体对象作为一个整体进行排序操作。
我们定义一个结构体对象的数组 stu 用来存放多个学生信息,每一个数组元素都是一个结构体对象:
判断两个数组元素 stu[i] 和 stu[j] 中的结构体对象成员 stu[i].score 和 stu[j].score 的大小,从而决定是否交换数组元素 stu[i] 和 stu[j] 的值:
C语言代码清单 1:输入学生成绩并排列名次
运行结果为:
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
该问题中,在成绩排序的同时,需要相应的学号和姓名一起随之变化。因此,我们可以使用结构体,学号、姓名、成绩以及名次作为结构体成员。通过对结构体对象成员(总成绩)的大小判断,实现把结构体对象作为一个整体进行排序操作。
我们定义一个结构体对象的数组 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
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。