c++ primer 4.7节练习答案

练习4.21

 1 int main()
 2 {
 3     int num;
 4     vector<int> a_num;
 5     while (cin >> num)
 6         a_num.push_back(num);
 7     for (auto &c : a_num)
 8     {
 9         (c % 2 != 0) ? (c = c * 2) : (c = c);
10     }
11     for (auto it = a_num.begin(); it != a_num.end(); ++it)
12         cout << *it << endl;
13     system("pause");
14     return 0;
15 }

练习4.22

版本1

 1 int main()
 2 {
 3     vector<int> grades{ 2,12,22,32,42,52,62,72,82,92 };
 4     for (auto c : grades)
 5     {
 6         string str = (c > 90) ? "high pass" : (c > 60) ? ((c < 75) ? "low pass" : "pass") : "fail";
 7         cout << str << endl;
 8     }
 9     system("pause");
10     return 0;
11 }

版本2

 1 int main()
 2 {
 3     vector<int> grades{ 2,12,22,32,42,52,62,72,82,92 };
 4     for (auto c : grades)
 5     {
 6         if (c < 60)
 7             cout << "fail" << endl;
 8         else if (c < 75)
 9             cout << "low pass" << endl;
10         else if (c < 90)
11             cout << "pass" << endl;
12         else
13             cout << "high" << endl;
14     }
15     system("pause");
16     return 0;
17 }

可以很清楚的看到,版本2比版本1更加容易理解,在程序的易读性上更加好,随着条件运算嵌套层数的增加,代码的可读性急剧的下降,因此,条件运算的嵌套最好别超过两到三层。

练习4.23

+运算符的优先级大于==和?:

故这句话被理解为

string p1 = (s + s[s.size() - 1] == ‘s‘) ? "" : "s";此时因为string类型不可与char类型进行比较从而编译不了;

可更改为

1 string p1 = s + (s[s.size() - 1] == ‘s‘ ? "" : "s");

练习4.24

求值的过程应该跟下面的表达式相同

1     finalgrade = (grade < 60) ? "file" : (grade > 90) ? "high pass" : "pass";
时间: 2024-10-09 22:33:25

c++ primer 4.7节练习答案的相关文章

c++ primer 4.6节练习答案

练习4.20 a) 合法,解引用iter,先输出iter所指向的对象的值,再把iter所指的位置向前移动一: b) 不合法,*iter得到的是一个字符串,字符串不能自增: c)不合法,解引用的优先级低于点运算符,故empty()函数先与iter结合,iter是一个指向对象的指针,他是没有empty()函数的,应该是(*iter).empty(); d)合法,输出跟上面一题一样的值 e)合法,等价于++(*iter) f)合法,等价于((iter++)).empty().返回(iter).empt

c++ primer 4.8节练习答案

练习4.25 ~优先级大于<< 开始时    :0000000 00000000 00000000 01110001 按位取反:11111111 11111111 11111111 10001110 左移六位:11111111 11111111 11100011 10000000 练习4.26 unsigned int无法保证在任何一台机器上都拥有32位,所以无法保证quiz1能够储存所有同学的成绩 练习4.27 ul1 = 3 :00000000  00000000  00000000  0

c++ primer 4.2节练习答案

练习4.4 (12 / 3 * 4) + (5 * 15) + (24 % 4 / 2) = 91 练习4.5 a. -86 b. -18 c. 0 d. -2 练习4.6 bool (a % 2 == 0) 真为偶数,假为奇数 练习4.7 溢出:当计算的结果超出该类型所能表示的范围时就会产生溢出 short short_value = 32767: short_value += 1; cout << "short_value: " << short_value

c++ primer 4.3节练习答案

练习4.8 优先级排序(从高到低) : 相等性运算符.逻辑与.逻辑或 练习4.9 cp是一个指向字符数组的指针,因为cp是指向字符数组,cp存储的是字符数组的地址,肯定不为空,故逻辑与左边的值为真,逻辑与右边*cp表示的是字符数组的首字符'H',也为真,故整个表达式的值为真. 练习4.10 1 int main() 2 { 3 int i; //好久不用vector和范围for循环,复习一下 4 vector<int> num; 5 while (cin >> i &&am

c++ primer 6.5.1节练习答案

练习6.40 a)正确 b)错误,一旦某个形参被赋予了默认值,他后面的所有形参都必须有默认值. 练习6.41 a)错误,ht没有默认实参,而a的实参列表里也没有给出实参: b)合法,调用init(24 ,10 ,' '): c)虽然合法,但是与程序猿的设计初衷不符,*会转换成十进制的数43,相当于调用init(14, 43, ' '): 练习6.42 1 string make_plural(size_t ctr, const string &word, const string &end

c++ primer 5.1.1节练习答案

练习5.20 1 int main() 2 { 3 vector<string> str; 4 string str1; 5 while (cin >> str1) 6 { 7 auto last = str.end(); 8 if (str.size() != 0 && str1 == (*(last-1))) 9 { 10 cout << str1 << endl; 11 break; 12 } 13 else 14 str.push_b

c++ primer 5.5.3节练习答案

练习5.22 1 int main() 2 { 3 int sz = get_size(); 4 while (sz <= 0) 5 { 6 sz = get_size(); 7 continue; 8 } 9 system("pause"); 10 return 0; 11 }

c++ primer 5.5.2节练习答案

练习5.21 1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 int main() 7 { 8 vector<string> str; 9 string str1; 10 while (cin >> str1) 11 { 12 auto last = str.end()

c++ primer 6.5.2节练习答案

练习6.43 a)放在头文件,因为内联函数和constexpr函数一般写在头文件中 b)函数的定义一般写在源文件,而声明放在头文件 练习6.44 1 inline bool isShorter(const string &s1, const string &s2) 2 { 3 return s1.size() < s2.size(); 4 } 练习6.45 内联函数一般用于优化规模小.流程直接.频繁调用的函数. 练习6.46 不行,isShorter函数如果定义成constexpr函