给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空
白字符的非空字符串)和成绩([0,100]区间内的整数),输出最高分的学生信息。
函数接口定义:
struct Student max(struct Student stud[],int n);
void print(struct Student stud);
输入样例:
在这里给出一组输入。例如:
5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60
输出样例:
在这里给出相应的输出。例如:
10001 li 100
写这篇题解的原因是,期末考试的时候不让用sort排序(c++),~_~,然后就只能用常规的方法去写,刚好巩固一下之前的知识,就是这么随意^_^
先说一下思路,就是普通的结构体排序,抓住他的排序规则(本题说的是按分数高低来排序),然后就用基础排序(选择排序,冒泡排序)大一上半期学的c语言知识点,然后没有了
#include"stdio.h"
struct Student
{
char xuehao[60],name[20];
int fen;
};
struct Student stud[500];
struct Student max(struct Student stud[],int n)
{
struct Student t;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(stud[j].fen<stud[j+1].fen)//本题的排序规则
{
t=stud[j];//记得交换的不是分数,而是那个“人”(学号,姓名,分数)的全部信息
stud[j]=stud[j+1];
stud[j+1]=t;
}
}
}
t=stud[0];//本题让输出的是分数最高那个人的全部信息,排完顺序了,最高就是stud[0];
return t;
}
void print(struct Student stud)
{
printf("%s %s %d",stud.xuehao,stud.name,stud.fen);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s%s%d",&stud[i].xuehao,&stud[i].name,&stud[i].fen);
struct Student a;
a=max(stud,n);
print(a);
return 0;
}
别的没啥注意得了,OK,goodbyeQwQ