题目详情

定义结构体struct stu,编写成绩排名函数:void sort(struct stu *ps,int n),对结构体数组按成绩排名。程序功能为读入整数N(N<100),再读入N个学生的学号(整型)和成绩(实数)。按样例输出排名。


文章目录 

  • 一、输入样例
  • 二、输出样例
  • 三、代码展示
  • 四、难点记录


一、输入样例

首先输入n(n<100),其次输入n个学生的学号(整型)与成绩(实数)。

5
101 99
102 100
103 50
104 80
105 99

二、输出样例

第一列输出名字(注意并列情况),第二列是学号,第三列是成绩(保留两位小数)。

1 102 100.00
2 101 99.00
2 105 99.00
4 104 80.00
5 103 50.00

三、代码展示

#include<stdio.h>
struct student{
	int num;
	double score;
};    
//定义结构体
int main()
{
	int i,n,index,j,z;    
    //定义变量
	scanf("%d",&n);    
    //输入需要记录的学生人数
	struct student stu[n],max;    
    //定义结构体变量
	for(i=0;i<n;i++){
		scanf("%d %lf",&stu[i].num,&stu[i].score);
	}//输入n个学生的学号与成绩
    for(i=0;i<n-1;i++){
		index=i;
		for(j=i+1;j<n;j++){
			if(stu[index].score<stu[j].score){
				index=j;
			}
		}max=stu[index];
		stu[index]=stu[i];
		stu[i]=max;
	}//对n个学生的成绩进行排名(由大到小)
    for(i=0,z=0;i<n;i++){
		if(stu[i].score==stu[i-1].score)printf("%d %d %.2lf",z,stu[i].num,stu[i].score);
		else{
			printf("%d %d %.2lf",i+1,stu[i].num,stu[i].score);
			z=i+1;
		}//输出n个学生的排名情况
        if(i<n-1)printf("\n");
	}
}

四、难点记录

本题难点在于当有相同的成绩时,要进行排名并列;

更多推荐

C语言-成绩排名(结构)