【C++ Primer Plus】编程练习答案——第6章
1 void ch6_1() {
2 using namespace std;
3 char ch;
4 while ((ch = cin.get()) != '@') {
5 if (isdigit(ch))
6 continue;
7 else if (islower(ch))
8 ch = toupper(ch);
9 else if (isupper(ch))
10 ch = tolower(ch);
11 cout << ch;
12 }
13 }
14
15 void ch6_2() {
16 using namespace std;
17 const unsigned int ArrSize = 10;
18 double donations[ArrSize]{0};
19 double average{0};
20 unsigned int overcount{0};
21 cout << "enter 10 donations in double: " << endl;
22 for (int i = 0; i < ArrSize; ++ i) {
23 while (!(cin >> donations[i])) {
24 cin.clear();
25 while (cin.get() != '\n')
26 continue;
27 cout << "must enter a double: ";
28 }
29 }
30 for (int i = 0; i < ArrSize; ++ i)
31 average += donations[i];
32 average /= ArrSize;
33 for (int i = 0; i < ArrSize; ++ i)
34 if (donations[i] > average)
35 ++ overcount;
36 cout << "average donation: " << average << endl;
37 cout << overcount << " donations above average" << endl;
38 }
39
40 void ch6_3() {
41 using namespace std;
42 char ch;
43 cout << "Please enter one of the following choices: " << endl;
44 cout << "c) carnivore \t p) pianist" << endl;
45 cout << "t) tree \t g) game" << endl;
46 bool loop = true;
47 while (loop) {
48 cin >> ch;
49 switch (ch) {
50 case 'c':
51 cout << "carnivore" << endl;
52 loop = false;
53 break;
54 case 'p':
55 cout << "pianist" << endl;
56 loop = false;
57 break;
58 case 't':
59 cout << "tree" << endl;
60 loop = false;
61 break;
62 case 'g':
63 cout << "game" << endl;
64 loop = false;
65 break;
66 default:
67 cout << "Please enter a c, p, t, or g: ";
68 break;
69 }
70 }
71 }
72
73 void ch6_4() {
74 using namespace std;
75 const int strsize = 100;
76 struct bop {
77 char fullname[strsize];
78 char title[strsize];
79 char bopname[strsize];
80 int preference; // 0 = fullname, 1 = title, 2 = bopname
81 };
82 const int ArSize = 3;
83 bop member[ArSize] = {
84 {"fullname1", "title1", "bopname1", 3},
85 {"fullname2", "title2", "bopname2", 2},
86 {"fullname3", "title3", "bopname3", 1}
87 };
88 bool loop = true;
89 char ch;
90 cout << "Benevolent Order of Programmers Report" << endl
91 << "a. display by name \t b. display by title" << endl
92 << "c. display by bopname \t b. display by preference" << endl
93 << "q. quit" << endl;
94 while (loop) {
95 cout << "Enter your choice: ";
96 cin >> ch;
97 switch (ch) {
98 case 'a':
99 for (int i = 0; i < ArSize; ++ i)
100 cout << member[i].fullname << endl;
101 break;
102 case 'b':
103 for (int i = 0; i < ArSize; ++ i)
104 cout << member[i].title << endl;
105 break;
106 case 'c':
107 for (int i = 0; i < ArSize; ++ i)
108 cout << member[i].bopname << endl;
109 break;
110 case 'd':
111 for (int i = 0; i < ArSize; ++ i) {
112 if (member[i].preference == 1)
113 cout << member[i].fullname << endl;
114 else if (member[i].preference == 2)
115 cout << member[i].title << endl;
116 else
117 cout << member[i].bopname << endl;
118 }
119 break;
120 case 'q':
121 loop = false;
122 default:
123 cout << "enter a, b, c, d, or q: ";
124 break;
125 }
126 }
127 }
128
129 void ch6_5() {
130 using namespace std;
131 unsigned int salary{0};
132 double tax{0};
133 while (true) {
134 cout << "enter your salary: ";
135 if (!(cin >> salary)) {
136 cout << "invalid input!" << endl;
137 break;
138 }
139 if (salary <= 5000)
140 tax = 0;
141 else if (salary > 5000 && salary <= 15000)
142 tax = (salary - 5000) * 0.1;
143 else if (salary > 15000 && salary <= 35000)
144 tax = 10000 * 0.1 + (salary - 15000) * 0.15;
145 else
146 tax = 10000 * 0.1 + 20000 * 0.15 + (salary - 35000) * 0.2;
147 cout << "tax: " << tax << endl;
148 }
149
150 }
151
152 void ch6_6() {
153 using namespace std;
154 struct donator {
155 string name;
156 double amount;
157 };
158 unsigned int donum{0};
159 cout << "enter number of donators: ";
160 while (!(cin >> donum)) {
161 cin.clear();
162 while (cin.get() != '\n')
163 continue;
164 cout << "enter a number: ";
165 }
166 cin.get();
167 donator * donator_arr = new donator[donum];
168 cout << "enter name and amount for each donator" << endl;
169 for (int i = 0; i < donum; ++ i) {
170 cout << "#" << i + 1 << " name: ";
171 getline(cin, donator_arr[i].name);
172 cout << "#" << i + 1 << " amount: ";
173 while (!(cin >> donator_arr[i].amount)) {
174 cin.clear();
175 while (cin.get() != '\n')
176 continue;
177 cout << "enter a number: ";
178 }
179 cin.get();
180 }
181 bool grand{false}, normal{false};
182 cout << endl << "Grand Patrons: " << endl;
183 for (int i = 0; i < donum; ++ i)
184 if (donator_arr[i].amount >= 10000) {
185 grand = true;
186 cout << donator_arr[i].name << ": " << donator_arr[i].amount << endl;
187 }
188 if (!grand)
189 cout << "None!" << endl;
190 cout << endl << "Other Patrons: " << endl;
191 for (int i = 0; i < donum; ++ i)
192 if (donator_arr[i].amount < 10000) {
193 normal = true;
194 cout << donator_arr[i].name << ": " << donator_arr[i].amount << endl;
195 }
196 if (!normal)
197 cout << "None!" << endl;
198 }
199
200 void ch6_7() {
201 using namespace std;
202 string word;
203 int vowels{0}, consonant{0}, other{0};
204 cout << "Enter words (q to quit): " << endl;
205 cin >> word;
206 while (word != "q") {
207 if (isalpha(word[0])) {
208 switch (word[0]) {
209 case 'a':
210 case 'e':
211 case 'i':
212 case 'o':
213 case 'u':
214 ++ vowels;
215 break;
216 default:
217 ++ consonant;
218 break;
219 }
220 }
221 else
222 ++ other;
223 cin >> word;
224 }
225 cout << vowels << " words beginning with vowels" << endl
226 << consonant << " words beginning with consonants" << endl
227 << other << " others" << endl;
228 }
229
230 void ch6_8() {
231 using namespace std;
232 const string FILENAME = "../C++PrimerPlus/testfiles/test.txt";
233 ifstream InFile;
234 InFile.open(FILENAME);
235 if (!InFile.is_open()) {
236 cout << "file not found" << endl;
237 return;
238 }
239 unsigned int count{0};
240 char ch;
241 while ((ch = InFile.get()) != EOF)
242 ++ count;
243 InFile.close();
244 cout << count << " chars in this file" << endl;
245 }
246
247 void ch6_9() {
248 using namespace std;
249 struct donator {
250 string name;
251 double amount;
252 };
253 const string FILENAME = "../C++PrimerPlus/testfiles/patrons.txt";
254 ifstream InFile;
255 InFile.open(FILENAME);
256 if (!InFile.is_open()) {
257 cout << "file not found" << endl;
258 return;
259 }
260 unsigned int donum{0};
261 InFile >> donum; InFile.get();
262 donator * donator_arr = new donator[donum];
263 for (int i = 0; i < donum; ++ i) {
264 getline(InFile, donator_arr[i].name);
265 InFile >> donator_arr[i].amount;
266 InFile.get();
267 }
268 InFile.close();
269 bool grand{false}, normal{false};
270 cout << endl << "Grand Patrons: " << endl;
271 for (int i = 0; i < donum; ++ i)
272 if (donator_arr[i].amount >= 10000) {
273 grand = true;
274 cout << donator_arr[i].name << ": " << donator_arr[i].amount << endl;
275 }
276 if (!grand)
277 cout << "None!" << endl;
278 cout << endl << "Other Patrons: " << endl;
279 for (int i = 0; i < donum; ++ i)
280 if (donator_arr[i].amount < 10000) {
281 normal = true;
282 cout << donator_arr[i].name << ": " << donator_arr[i].amount << endl;
283 }
284 if (!normal)
285 cout << "None!" << endl;
286 }
【C++ Primer Plus】编程练习答案——第6章的更多相关文章
- 【C++ Primer Plus】编程练习答案——第12章
1 // chapter12_1_cow.h 2 3 4 #ifndef LEARN_CPP_CHAPTER12_1_COW_H 5 #define LEARN_CPP_CHAPTER12_1_COW ...
- 【C++ Primer Plus】编程练习答案——第11章 (待更新)
最近开学,事情较多,过两天更新...
- 【C++ Primer Plus】编程练习答案——第10章
1 // chapter10_1_account.h 2 3 #ifndef LEARN_CPP_CHAPTER10_1_ACCOUNT_H 4 #define LEARN_CPP_CHAPTER10 ...
- 【C++ Primer Plus】编程练习答案——第9章
1 // chapter09_golf.h 2 3 #ifndef LEARN_CPP_CHAPTER09_GOLF_H 4 #define LEARN_CPP_CHAPTER09_GOLF_H 5 ...
- 【C++ Primer Plus】编程练习答案——第8章
1 void ch8_1_print(const std::string & str, int n = 0 ) { 2 using namespace std; 3 static int fl ...
- 【C++ Primer Plus】编程练习答案——第7章
1 double ch7_1_harmonicaverage(double a, double b) { 2 return 2 / (1 / a + 1 / b); 3 } 4 5 void ch7_ ...
- 【C++ Primer Plus】编程练习答案——第5章
1 void ch5_1() { 2 using namespace std; 3 int small, big, sum{0}; 4 cout << "enter small ...
- 【C++ Primer Plus】编程练习答案——第4章
1 void ch4_1() { 2 using namespace std; 3 string fname, lname; 4 char grade; 5 unsigned int age; 6 c ...
- 【C++ Primer Plus】编程练习答案——第3章
1 void ch3_1() { 2 using namespace std; 3 unsigned int factor = 12; 4 unsigned int inch, feet; 5 cou ...
随机推荐
- Alibaba cloud 3 安装docker
最近因为公司买阿里服务器装的 Alibaba cloud Linux 系统,在部署环境的时候也是遇到各种坑,网上教程大多都是其他系统的,今天就来分享一下自己安装Docker的步骤,同时也是给自己记录一 ...
- PC微信多开
1.桌面上面新建一个 多开.txt . 2.将下面的内容拷贝进去 TASKKILL /F /IM wechat.exestart "" "E:\wechat\WeCha ...
- kubebuilder实战之七:webhook
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化。
一.基础原理 Base64是一种用64个Ascii字符来表示任意二进制数据的方法.主要用于将不可打印的字符转换成可打印字符,或者简单的说是将二进制数据编码成Ascii字符.Base64也是网络 ...
- Mybatis笔记(1)
一.Mabits简介 1.1 原始JDBC的分析 问题 ①数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,s ...
- Git使用教程六
冲突的产生与解决 案例:模拟产生冲突. ①同事在下班之后修改了线上仓库的代码 注意:此时我本地仓库的内容与线上不一致的. 2.第二天上班的时候,我没有做git pull操作,而是直接修改了本地的对应文 ...
- Python实现Thrift Server
近期在项目中存在跨编程语言协作的需求,使用到了Thrift.本文将记录用python实现Thrift服务端的方法. 环境准备 根据自身实际情况下载对应的Thrift编译器,比如我在Windows系统上 ...
- 痞子衡嵌入式:MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法. 前段时间痞子衡写了一篇 <在IAR开发环境下将关键函数重 ...
- Intel® QAT加速卡之性能简介
Intel QuickAssist Adapter 8950 设备简介 支持英特尔QuickAssist技术的英特尔QuickAssist适配器提供加密加速和压缩加速服务. 1. Key featur ...
- Linux原始套接字抓取底层报文
1.原始套接字使用场景 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据.收到的数据往往只包括应用层数据,原有的头部信息在传递 ...