《C++ Primer》第五版课后习题解答_第二章(5)(39-42)

来源:互联网 发布:淘宝单主持怎样找商家 编辑:程序博客网 时间:2024/06/07 10:56

系统环境: windows 10 1703

编译环境:Visual studio 2017


2.39



2.40

struct Sales_data {    std::string bookID;    unsigned sum_sold;    float unit_price;    float revenue;};

2.41

#include <iostream>#include <string>// 1.5.1节三个练习大同小异,故只编写了1.22的程序//创建 Sales_data 类struct Sales_data {    std::string bookID;    unsigned sum_sold = 0;    float price = 0.0;    float revenue = 0.0;};int main(){    Sales_data sum, book;    while (std::cin >> book.bookID >> book.sum_sold >> book.price)    {        book.revenue = book.sum_sold * book.price;        if (empty(sum.bookID)) //检查此时输入的数据是否为第一个(通过检查 sum 中的 bookID 是否为空字符串)        {            //若 sum 中 bookID 为空字符串,则把第一个输入的数据赋给 sum            sum.bookID = book.bookID;            sum.price = book.price;            sum.sum_sold = book.sum_sold;            sum.revenue = book.revenue;        }        else         {            if (sum.bookID == book.bookID) //如果次数输入的数据不是第一个,继续检查输入数据的 ISBN 是否和之前输入的 ISBN 相同            {                // 若相同,则执行相加步骤                sum.sum_sold += book.sum_sold;                sum.revenue += book.revenue;            }                        else            {                // 若不同,则输出错误                std::cerr << "You must enter same book ISBN !!!" << std::endl;                return -1;            }        }            }    std::cout << sum.bookID << " " << sum.sum_sold << " " << sum.revenue << std::endl;    return 0;}
input: 

0-201-88954-4 2 15.00
0-201-88954-4 5 12.00
0-201-88954-4 7 12.00
0-201-88954-4 2 12.00

output:

0-201-88954-4 16 198


#include <iostream>#include <string>// 1.5.2 (同时也是1.6,实现相同的功能)//创建 Sales_data 类struct Sales_data {    std::string bookID;    unsigned sum_sold = 0;    float price = 0.0;    float revenue = 0.0;};int main(){    Sales_data trans, book;    int cnt = 1;    if (std::cin >> book.bookID >> book.sum_sold >> book.price) //读取第一条数据    {        book.revenue = book.sum_sold * book.price;        while (std::cin >> trans.bookID >> trans.sum_sold >> trans.price) //读取剩余的数据        {            trans.revenue = trans.sum_sold * trans.price;            if (trans.bookID == book.bookID) //判断此数据的 ISBN 和 book 保存的 ISBN 是否相同            {                cnt += 1;                book.sum_sold += trans.sum_sold;                book.revenue += trans.revenue;            }            else            {                std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;                book.bookID = trans.bookID;                book.sum_sold = trans.sum_sold;                book.revenue = trans.revenue;                cnt = 1;            }        }        std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;    }    return 0;}
//程序运行过程如下

0-201-70353-X 4 24.99
0-201-82470-1 4 45.39
1 0-201-70353-X 4 99.96
0-201-88954-4 2 15.00
1 0-201-82470-1 4 181.56
0-201-88954-4 5 12.00
0-201-88954-4 7 12.00
0-201-88954-4 2 12.00
0-399-82477-1 2 45.39
4 0-201-88954-4 16 198
0-399-82477-1 3 45.39
0-201-78345-X 3 20.00
2 0-399-82477-1 5 226.95
0-201-78345-X 2 25.00
^Z
2 0-201-78345-X 5 110


2.42

//头文件#ifndef SALES_DATA_H#define SALES_DATA_H#include <string>struct Sales_data {    std::string bookID;    unsigned sum_sold = 0;    float price = 0.0;    float revenue = 0.0;};#endif // !SALES_DATA_H

//1.51节练习#include <iostream>#include <string>#include "Sales_data .h"int main(){    Sales_data sum, book;    while (std::cin >> book.bookID >> book.sum_sold >> book.price)    {        book.revenue = book.sum_sold * book.price;        if (empty(sum.bookID)) //检查此时输入的数据是否为第一个(通过检查 sum 中的 bookID 是否为空字符串)        {            //若 sum 中 bookID 为空字符串,则把第一个输入的数据赋给 sum            sum.bookID = book.bookID;            sum.price = book.price;            sum.sum_sold = book.sum_sold;            sum.revenue = book.revenue;        }        else        {            if (sum.bookID == book.bookID) //如果次数输入的数据不是第一个,继续检查输入数据的 ISBN 是否和之前输入的 ISBN 相同            {                // 若相同,则执行相加步骤                sum.sum_sold += book.sum_sold;                sum.revenue += book.revenue;            }            else            {                // 若不同,则输出错误                std::cerr << "You must enter same book ISBN !!!" << std::endl;                return -1;            }        }    }    std::cout << sum.bookID << " " << sum.sum_sold << " " << sum.revenue << std::endl;    return 0;}

//1.52节和1.6节练习#include <iostream>#include <string>#include "Sales_data .h"int main(){    Sales_data trans, book;    int cnt = 1;    if (std::cin >> book.bookID >> book.sum_sold >> book.price) //读取第一条数据    {        book.revenue = book.sum_sold * book.price;        while (std::cin >> trans.bookID >> trans.sum_sold >> trans.price) //读取剩余的数据        {            trans.revenue = trans.sum_sold * trans.price;            if (trans.bookID == book.bookID) //判断此数据的 ISBN 和 book 保存的 ISBN 是否相同            {                cnt += 1;                book.sum_sold += trans.sum_sold;                book.revenue += trans.revenue;            }            else            {                std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;                book.bookID = trans.bookID;                book.sum_sold = trans.sum_sold;                book.revenue = trans.revenue;                cnt = 1;            }        }        std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;    }    return 0;}

阅读全文
0 0
原创粉丝点击