输入n名学生的名字和成绩。输出学生的名字,成绩与名次相关信息。
注:若有学生的成绩相同时则他们名次并列。
本题采用的是结构体+选择排序算法进行编写。
#include<stdio.h>
//定义学生相关信息结构体
struct node{
/* data */
char name[10];//名字
int score,rank;//成绩与名次
}student[100],s;
//名次函数
void rank(int n)
{
student[0].rank=1;//当只有一个学生的时候,该学生就是第一名
int rank=1;
for (int i = 1; i < n; i++)
{
/* code */
if (student[i].score==student[i-1].score)//成绩一样的排名一样
{
/* code */
student[i].rank=student[i-1].rank;
}else{
student[i].rank=rank+1;//学生名次加1
rank++;
}
}
}
//成绩排序------选择排序算法
void Sort(int n)
{
//使用选择排序的算法将成绩进行排序
int idex;
for (int i = 0; i < n-1; i++)
{
/* code */
idex=i;
for (int j = i+1; j < n; j++)
{
/* code */
if (student[j].score>student[idex].score)
{
/* code */
idex=j;
}
}
s=student[i];
student[i]=student[idex];
student[idex]=s;
}
rank(n); //调用名次函数进行排名
}
int main()
{
int n;
// struct student[100];
printf("请输入学生的人数:");
scanf("%d",&n);
//输入n个学生的成绩
for (int i = 0; i < n; i++)
{
/* code */
printf("请输入第%d个学生的名字与成绩:",i+1);
scanf("%s%d",&student[i].name,&student[i].score);
}
Sort(n);//调用成绩排序算法函数进行排序
//输出学生的名字,成绩,名次相关信息
for (int i = 0; i < n; i++)
{
/* code */
printf("%s的成绩为:%d,名次为:%d\n",student[i].name,student[i].score,student[i].rank);
}
return 0;
}
运行结果: