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

系统环境: 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;
}

posted @ 2017-08-23 14:10  Adam_fei  阅读(144)  评论(0编辑  收藏  举报