杂题串讲:结构体+sort ()+ 文件操作
结构体:是学习树、图以及高级数据结构必备知识,也常常用来存储一条信息记录(学生成绩等)。
sort():灵活运用大大缩短因排序开支的代码。
文件操作:是每个信竞生考试必备技能。
例题:文件输入n(n<=100)个学生信息(姓名、数学成绩、语文成绩),要求安照(总成绩)由高——>低排序 按照每行输出最终信息。【此题没有总分相同情况】
输入样例:
3
zhangsan 100 80.5
lisi 64 21
wangwu 96 99.5
输出样例(下图红框中是 输出):

#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int n; struct stu{ string s; double chinese; double math; double sum; }student[101]; bool cmp(const stu &a,const stu &b){ return a.sum>b.sum; //确定由大—小 排序 } int main(){ freopen("stu.in","r",stdin); freopen("std.out","w",stdout); cin>>n; for(int i=1;i<=n;i++){ cin>>student[i].s>>student[i].math>>student[i].chinese; student[i].sum=student[i].math+student[i].chinese; } sort(student+1,student+n+1,cmp); for(int i=1;i<=n;i++) cout<<student[i].sum<<" "<<student[i].s<<" "<<student[i].math<<" "<<student[i].chinese<<endl; return 0; }
例题改进:
改进例题:文件输入n(n<=100)个学生信息(姓名、数学成绩、语文成绩),要求安照(总成绩)由高——>低排序 按照每行输出最终信息。
说明【如果总分相同,按照姓名字典序排列:a,b,c,d...】
输入样例:
3
zhangsan 100 80.5
lisi 80.5 100
wangwu 96 99.5
输出样例:【下图红框中是输出】
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int n; struct stu{ string s; double chinese; double math; double sum; }student[1000010]; bool cmp(const stu &a,const stu &b){ if(a.sum==b.sum) //只需要在cmd中增加词句 如果成绩相同,按照a.s小于输出。 return a.s<b.s; return a.sum>b.sum; } int main(){ //freopen("stu.in","r",stdin); //freopen("std.out","w",stdout); cin>>n; for(int i=1;i<=n;i++){ cin>>student[i].s>>student[i].math>>student[i].chinese; student[i].sum=student[i].math+student[i].chinese; } sort(student+1,student+n+1,cmp); for(int i=1;i<=n;i++) cout<<student[i].sum<<" "<<student[i].s<<" "<<student[i].math<<" "<<student[i].chinese<<endl; return 0; }
最后:本题文件操作图例: