【C++编程题】书籍排序

题目描述

编写一个完整的程序,对输入的 n ( n ≤ 100 ) n(n \le100) n(n100)本书进行排序并输出,具体要求如下:
程序输入:程序首先输入一个正整数 n n n,然后输入 n n n 本书的信息,每本书用两行输入,第一行输入书的名称(书名最长不超过 50 个字符,中间可能有空格),第二行输入价格,价格为浮点数。
程序输出:程序要求对 n n n 本书按价格从低到高排序,如果价格相同,则按书名(字符串)字典序从小到大排序。最后输出排序结果,每行输出一本书的信息,首先输出价格,然后输出书名,中间用一个英文逗号和一个空格分开。

测试举例
输入:
3
Programming in C
21.5
数据结构与算法
18.5
三体(一)
28.0
输出:
18.5, 数据结构与算法
21.5, Programming in C
28.0, 三体(一)

参考代码

#include <cstring>
#include <iostream>
using namespace std;

struct book{
    char name[64];
    float price;
};

int main()
{

    book b[128];
    int n;
    cin >> n;

    for(int i = 0; i < n; i++){
        getchar();    //跳过换行符
        cin.getline(b[i].name,64);    //书名
        cin >> b[i].price;    //书价

    }
    // 选择排序
    for(int i = 0; i < n-1; i++){
        int k = i; //标记最小位置
        for(int j = i+1; j < n; j++){
            int t = b[k].price - b[j].price;
            if(t > 0 || !t && strcmp(b[k].name, b[j].name) > 0)
                k = j;
        }
        if(k!=i){
            book t = b[k];
            b[k] = b[i];
            b[i] = t;
        }
    }
    for(int i = 0; i < n; i++){
        cout << b[i].price << "," << b[i].name << endl;
    }
    return 0;
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书信息管理系统 1. 设计目的: 为了锻炼计算机专业学生的编程能力,特别组织了这次软件实习,编程是一种抽象思维 ,必须要通过动手才能培养其能力,我们软件实习的主要目的是要求学生对所学的语言 熟练的掌握,并可以精通一门自己喜欢的编程语言,并且能把现实的问题抽象成程序, 用程序语言表现出来。 1.能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问 题,并能设计出解决问题的有效算法与程序。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正 确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高 程序设计水平。 2. 设计要求: 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试 设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作ϖ 图书信息录入功能(图书信息用文件保存)--输入ϖ 图书信息浏览功能--输出ϖ 查询和排序功能:(至少一种查询方式)--算法ϖ 按书名查询 按作者名查询 图书信息的删除与修改(可选项) 3. 流程图: 四、模块分析: (1)main()函数模块 主函数定义了一个database类的对象book2,通过这个对象调用bookdata(),主函数代码很 少,只是一个菜单首页。 int main() { database book2; cout<<endl<<endl<<"\t\t\t图 书 信 息 管 理 系 统"; cout<<endl<<endl; book2.bookdata(); return 0;} (2)添加图书信息模块 void addbook(int n,char *bn,char *an,char *ty,char *pub,char *ti,char *pr) //增加图书 { num=n; strcpy(bname,bn); //把输入的内容复制给bname strcpy(aname,an); strcpy(type,ty); strcpy(publish,pub); strcpy(time,ti); strcpy(price,pr);} 用户通过键盘输入图书基本信息(图书编号,书名,作者名,图书类型,出版日期, 出版单位,图书价格) (3)显示图书文件中所有图书信息 void show() {cout<<setw(10)<<num<<setw(9)<<bname<<setw(9)<<aname<<setw(8)<<type<<setw(6) <<publish<<setw(20)<<time<<setw(9)<<price<<setw(5)<<endl; } void show() { for (int i=0;i<=top;i++) book1[i].show(); } (4)查询图书信息模块 book *find(int id) //查找图书 {for (int i=0;i<=top;i++) if (book1[i].getnum()==id) { return &book1[i];} } 五、程序的源代码(含注释): #include"iostream" #include "iomanip" #include "string" #include "fstream" /*输入/输出文件流类*/ using namespace std; const int max=5; /*数组5,图书添加五本*/ class book { private: int num; //图书编号 char bname[20]; //书名 char aname[20]; //作者名 char type[20]; //图书类型 char publish[20]; //出版单位 char time[20]; //出版时间 char price[20];//价格 public: void query(int m){}; int getnum() { return num;} char getbname() { return bname[20];} char getaname() { return aname[20];} char gettype() { return type[20];} char getpublish() { return publish[20]; } char gettime() { return time[20];} char getprice() {return price[20];} void addbook(int n,char *bn,char *an,char *ty,char *pub,char *ti,char *pr) //增加图书 { num=n; strcpy(bna

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值