《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; }