C++ Primer第五版_第四章习题答案(21~30)
创始人
2025-06-01 05:50:41
0

文章目录

      • 练习4.21
      • 练习4.22
      • 练习4.23
      • 练习4.24
      • 练习4.25
      • 练习4.26
      • 练习4.27
      • 练习4.28
      • 练习4.29
      • 练习4.30

练习4.21

编写一段程序,使用条件运算符从 vector 中找到哪些元素的值是奇数,然后将这些奇数值翻倍。

#include 
#include using std::cout;
using std::endl;
using std::vector;int main()
{vector ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };for (auto i : ivec){cout << ((i & 0x1) ? i * 2 : i) << " ";}cout << endl;return 0;
}

练习4.22

本节的示例程序将成绩划分为high pass、pass 和 fial 三种,扩展该程序使其进一步将 60 分到 75 分之间的成绩设定为 low pass。要求程序包含两个版本:一个版本只使用条件运算符;另一个版本使用1个或多个if语句。哪个版本的程序更容易理解呢?为什么?

#include 
using std::cout; using std::cin; using std::endl;int main()
{for (unsigned g; cin >> g;){auto result = g > 90 ? "high pass" : g < 60 ? "fail" : g < 75 ? "low pass" : "pass";cout << result << endl;// -------------------------if (g > 90)         cout << "high pass";else if (g < 60)    cout << "fail";else if (g < 75)    cout << "low pass";else                cout << "pass";cout << endl;}return 0;
}

第二个版本容易理解。当条件运算符嵌套层数变多之后,代码的可读性急剧下降。而if else 的逻辑很清晰。这个表达式等于 i != (j < k)。首先得到 j < k 的结果为 true 或 false,转换为整数值是 1 和 0,然后判断 i 不等于 1 和 0 ,最终的结果为 bool 值。

练习4.23

因为运算符的优先级问题,下面这条表达式无法通过编译。根据4.12节中的表指出它的问题在哪里?应该如何修改?

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

加法运算符的优先级高于条件运算符。因此要改为:

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

练习4.24

本节的示例程序将成绩划分为 high pass、pass、和fail三种,它的依据是条件运算符满足右结合律。假如条件运算符满足的是左结合律,求值的过程将是怎样的?

如果条件运算符满足的是左结合律。那么

finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";

等同于

finalgrade = ((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass";

假如此时 grade > 90 ,第一个条件表达式的结果是 “high pass” ,而字符串字面值的类型是 const char *,非空所以为真。因此第二个条件表达式的结果是 “fail”。这样就出现了自相矛盾的逻辑。

练习4.25

如果一台机器上 int 占 32 位、char 占8位,用的是 Latin-1 字符集,其中字符’q’ 的二进制形式是 01110001,那么表达式’q’ << 6的值是什么?

首先将char类型提升为int 类型,等同于 00000000 00000000 00000000 01110001 << 6,结果是 00000000 00000000 00011100 01000000,转换是十进制是7232。

练习4.26

在本节关于测验成绩的例子中,如果使用unsigned int 作为quiz1 的类型会发生什么情况?

在有的机器上,unsigned int 类型可能只有 16 位,因此结果是未定义的。

练习4.27

下列表达式的结果是什么?

unsigned long ul1 = 3, ul2 = 7;
(a) ul1 & ul2 
(b) ul1 | ul2 
(c) ul1 && ul2
(d) ul1 || ul2 
  • (a) 3
  • (b) 7
  • © true
  • (d) ture

练习4.28

编写一段程序,输出每一种内置类型所占空间的大小。

#include  using namespace std;int main()
{cout << "bool:\t\t" << sizeof(bool) << " bytes" << endl << endl;cout << "char:\t\t" << sizeof(char) << " bytes" << endl;cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << endl;cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << endl;cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << endl << endl;cout << "short:\t\t" << sizeof(short) << " bytes" << endl;cout << "int:\t\t" << sizeof(int) << " bytes" << endl;cout << "long:\t\t" << sizeof(long) << " bytes" << endl;cout << "long long:\t" << sizeof(long long) << " bytes" << endl << endl;cout << "float:\t\t" << sizeof(float) << " bytes" << endl;cout << "double:\t\t" << sizeof(double) << " bytes" << endl;cout << "long double:\t" << sizeof(long double) << " bytes" << endl << endl;return 0;
}

练习4.29

推断下面代码的输出结果并说明理由。实际运行这段程序,结果和你想象的一样吗?如不一样,为什么?

int x[10];   int *p = x;
cout << sizeof(x)/sizeof(*x) << endl;
cout << sizeof(p)/sizeof(*p) << endl;

第一个输出结果是 10。第二个结果是未定义。

练习4.30

根据4.12节中的表,在下述表达式的适当位置加上括号,使得加上括号之后的表达式的含义与原来的含义相同。

(a) sizeof x + y      
(b) sizeof p->mem[i]  
(c) sizeof a < b     
(d) sizeof f()  
  • (a) (sizeof x) + y
  • (b) sizeof(p->mem[i])
  • © sizeof(a) < b
  • (d) sizeof(f())

相关内容

热门资讯

“强实名”仍一票难求?遏制技术... 暑期来临,演唱会、音乐节、话剧等演出活动热度飙升。无论手速多快,总是一票难求,让众多消费者叫苦不迭。...
上证红利回报指数上涨0.83%... 金融界7月21日消息,上证指数高开高走,上证红利回报指数 (上红回报,H50019)上涨0.83%,...
为啥股票与基金的走势相反? 虚位以待! 平姐姐摄于毛里求斯网红酒店 昨天的文章,标题就很明确,那就是《准备出击》,在半年报不少上...
美加密货币相关法案落地引发三连... 当地时间7月18日,美国总统特朗普在白宫正式签署《指导与建立美国稳定币国家创新法案》(简称《天才法案...
股市必读:湖南黄金(00215... 截至2025年7月21日收盘,湖南黄金(002155)报收于18.33元,上涨2.57%,换手率3....
四川发布六大红色旅游新线路 四川发布六大红色旅游新线路 “锦绣天府·安逸四川”之红色旅游央地媒体联动采访启动 “锦绣天府·安...
北交所上市公司中航泰达大宗交易... 每经讯,2025年7月21日,北交所上市公司中航泰达(836263,收盘价:16.11元)发生一笔大...
金价突然猛拉,重回3400美元... 记者丨叶麦穗 编辑丨曾芳 金珊 7月21日晚,现货黄金突然猛拉大涨,截至22:40,涨超1.5%,站...
嘉实港股互联网产业核心资产混合... AI基金嘉实港股互联网产业核心资产混合A(011924)披露2025年二季报,第二季度基金利润532...
中信证券:特朗普“唱白脸”+贝... 来源:市场资讯 中信证券研究 文|李翀 崔嵘 韦昕澄 贾天楚 当地时间7月14日,美国总统特朗普表示...
机器人ETF易方达(15953... 截至收盘,国证机器人产业指数上涨2.1%,中证装备产业指数上涨1.9%,中证军工指数上涨0.9%,中...
北京工商大学教授吕来明:整治“... 今年以来,治理“内卷式”竞争引发高度关注。从水泥、光伏、汽车到电商,多个领域吹响“反内卷”的号角。 ...
民航局:加快新兴市场布局,提升... 7月21日,在国新办举行的“高质量完成‘十四五’规划”系列主题新闻发布会上,中国民航局局长宋志勇介绍...
二季度券商北交所、新三板业务执... 头部券商优势地位保持稳固,多家中小券商排名大幅跃升 本报记者 于宏 7月18日晚间,北交所、全国股转...
股票行情快报:美新科技(301... 证券之星消息,截至2025年7月21日收盘,美新科技(301588)报收于19.0元,上涨1.39%...
破解中小企业融资难!产业数字金... “中国经济的核心在于产业经济,产业经济离不开金融,产业经济、产业金融都离不开数字技术的赋能,中小企业...
京东美团“暗战”具身智能,战火... 在科技赛道的激烈角逐中,具身智能正成为巨头们争夺的新焦点。王兴之后,刘强东也在具身智能领域强势出击。...
“未来已来”指数涨跌不一,关注... 截至收盘,国证机器人产业指数上涨2.1%,中证新能源指数上涨1.5%,中证人工智能主题指数下跌0.0...
“未来能源”指数上涨,关注新能... 截至收盘,中证上海环交所碳中和指数上涨1.9%,中证光伏产业指数上涨1.6%,中证新能源指数上涨1....