题目要求输出第k名,所以我们在输入后需要对学生进行成绩排名。又要求以%g输出。(%g是double类型的更简洁输出,能够自动选择最短输出宽度的方式打印浮点数)
首先定义一个结构体数组,用于存放输入的数据,然后写排序代码qsort,接收两个void指针,分别指向待比较的两个Student结构体,进行比较。最后按要求输出即可
#include<iostream> #include<cstdlib> #include<cstring> using namespace std; struct Student{//定义学生结构体 char stuNum[10];//学号 float score;//分数 }; int cmp_by_score(const void*a,const void*b){//排序 Student*stuA = (Student*)a; Student*stuB = (Student*)b; return (stuA -> score < stuB -> score) - (stuA -> score > stuB -> score); } int main(){ // freopen("in.txt","r",stdin); int n,k; cin >> n >> k; struct Student s[n]; for(int i=0;i<n;i++){ cin >> s[i].stuNum >> s[i].score; } qsort(s,n,sizeof(Student),cmp_by_score); printf("%s %g\n",s[k-1].stuNum,s[k-1].score); return 0; }