C++Primer第五版——习题答案详解(三)


习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html

第4章 表达式


练习4.10

while(cin>>i&&i!=42)

练习4.11

a>b && b>c && c>d

练习4.12

<的优先级大于!=,所以先判断j<k,返回bool类型,再比较返回值和i是否相等

练习4.13

i=3 d=3

i=3 d=3.5

练习4.14

非法、if判断为真

练习4.15

非法,指针指向的是地址,不能赋值,把pi改为*pi

练习4.19

a.指针ptr不为空,且所指的值不为0

b.判断ival和ival的值是否为0,执行完if后ival才加1

c.判断vec[ival]是否小于等于vec[ival],同上

练习4.20

a.合法,对iter解引用,再自增

b.不合法,*iter为字符串,不能自增

c.不合法,没有empty()成员

d.合法,iter所指向的值是否为空

e.不合法,字符串不能自增

f.合法,先判断是否为空再自增

练习4.21

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
vector<int> vec = { 1,2,3,4,5,6,7 };
for (auto i = 0;i < vec.size();i++) {
vec[i] = vec[i] % 2 ? vec[i] * 2 : vec[i];
}
for (auto i : vec) {
cout << i << " ";
}
system("pause");
return 0;
}

练习4.22

if语句更合适,层次分明。

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
int grade;
while (cin >> grade) {
string finalgrade = (grade >= 90) ? "high pass" : (grade >= 75) ? "pass" : (grade >= 60) ? "low pass" : "fail";
cout << finalgrade << endl;
}
system("pause");
return 0;
}
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
int grade;
while (cin >> grade) {
if (grade >= 90) cout << "high pass" << endl;
else if (grade >= 75) cout << "pass" << endl;
else if (grade >= 60)cout << "low pass" << endl;
else cout << "fail" << endl;
}
system("pause");
return 0;
}

练习4.23

改为

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

练习4.29

前者为整个数组所占空间的大小除以每个元素所占空间大小40/4=10;

后者为指针所占大小除以每个元素所占空间大小4/4=1;

练习4.30

a.(sizeof x) +y

b.sizeof(p->mem[i])

c.(sizeof a) <b

d.sizeof(f())

练习4.31

后置版本需要将值先保存下来后再自增。


不断学习中,欢迎交流!

上一篇:Hash值破解工具Hashcat使用


下一篇:【转】asp.net导出数据到Excel的三种方法