📄 习题5.1.html
字号:
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>i = d = 3.5;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>赋值语句d=i=3.5;完成后,i和d的值均为3。因为赋值操作具有右结合性,所以首先将3.5赋给i(此时发生隐式类型转换,将double型字面值3.5转换为int型值3,赋给i),然后将表达式i=3.5的值(即赋值后i所具有的值3)赋给d。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>赋值语句i=d=3.5;完成后,d的值为3.5,i的值为3。因为先将字面值3.5赋给d,然后将表达式d=3.5的值(即赋值后d所具有的值3.5)赋给i(这时也同样发生隐式类型转换)。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:2.2pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.12 </p>
</div>
<p class=XT>解释每个if条件判断产生什么结果?</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>if ( 42 = i ) // ...</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>if ( i = 42 ) // ...</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>前者发生语法错误,因为其条件表达式42=i是一个赋值表达式,赋值操作符的左操作数必须为一个左值,而字面值42不能作为左值使用。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>后者代码合法,但其条件表达式i=42是一个永真式(即其逻辑值在任何情况下都为true),因为该赋值表达式的值为赋值操作完成后的i值(42),而42为非零值,解释为逻辑值true。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:2.2pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.13 </p>
</div>
<p class=XT>下列赋值操作是不合法的,为什么?怎样改正?</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>double dval; int ival; int *pi;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>dval = ival = pi = 0;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>该赋值语句不合法,因为该语句首先将0值赋给pi,然后将pi的值赋给ival,再将ival的值赋给dval。pi、ival和dval的类型各不相同,因此要完成赋值必须进行隐式类型转换,但系统无法将int型指针pi的值隐式转换为ival所需的int型值。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>可改正如下:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>double dval; int ival; int *pi;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>dval = ival = 0; </p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>pi = 0;</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.14 </p>
</div>
<p class=MsoBodyTextIndent2 style='margin-top:5.6pt'>虽然下列表达式都是合法的,但并不是程序员期望的操作,为什么?怎样修改这些表达式以使其能反映程序员的意图?</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
if ( ptr = retrieve_pointer() != 0 )</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(b)
if ( ival = 1024 )</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
ival += ival + 1;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>对于表达式(a),程序员的意图应该是将retrieve_pointer()的值赋给ptr,然后判断ptr的值是否为0,但因为操作符“=”的优先级比“!=”低,所以该表达式实际上是将retrieve_pointer()是否为0的判断结果true或false赋给ptr,因此不是程序员期望的操作。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:18.6pt;
text-autospace:none'>对于表达式(b),程序员的意图应该是判断ival的值是否与1024相等,但误用了赋值操作符。 </p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>对于表达式(c),程序员的意图应该是使ival的值增加1,但误用了操作符“+=”。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>各表达式可修改如下:</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
if ( (ptr = retrieve_pointer()) != 0 )</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(b)
if ( ival == 1024 )</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
ival += 1; 或 ival++; 或 ++ival;</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.15 </p>
</div>
<p class=XT>解释前自增操作和后自增操作的差别。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>前自增操作和后自增操作都使其操作数加1,二者的差别在于:前自增操作将修改后操作数的值作为表达式的结果值;而后自增操作将操作数原来的、未修改的值作为表达式的结果值。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.16 </p>
</div>
<p class=XT>你认为为什么C++不叫作++C?</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal>C++之名是Rick Mascitti在1983年夏天定名的(参见<i>The C++ Programming Language(Special Edition) </i>1.4节),C说明它本质上是从C语言演化而来的,“++”是C语言的自增操作符。C++语言是C语言的超集,是在C语言基础上进行的扩展(引入了new、delete等C语言中没有的操作符,增加了对面向对象程序设计的直接支持,等等),是先有C语言,再进行++。根据自增操作符前、后置形式的差别(参见习题5.15的解答),C++表示对C语言进行扩展之后,还可以使用C语言的内容;而写成++C则表示无法再使用C的原始值了,也就是说C++不能向下兼容C了,这与实际情况不符。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题5.17 </p>
</div>
<p class=XT>如果输出vector内容的while循环使用前自增操作符,那会怎么样?</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>将导致错误的结果:ivec的第一个元素没有输出,并企图对一个多余的元素进行解引用。</p>
</div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="/bookfiles/216/10021610313.shtml">上一页</a> <a href="/bookfiles/216/index.html">首页</a> <a href="/bookfiles/216/10021610315.shtml">下一页</a>
</div>
<div class="content" style="text-align: right;width:99%;">
【<a target=_blank href="http://remark2.csdn.net/r/decfe161e911484e989ccbd8c4c563f4216.ashx">查看所有评论</a>(<span id="remark_count">0</span>)条】
<!--引用评论开始-->
<script>
/*
配置评论相关的参数
*/
remark_para_SiteId = 'decfe161-e911-484e-989c-cbd8c4c563f4';
remark_para_PCId = 216;
//remark_para_PId = '00000000-0000-0000-0000-000000000003';
remark_para_Title = escape('C++ Primer(第4版)习题解答');
remark_para_Tags =escape('');
remark_para_IframeHeight = '350px';
remark_para_IframeWidth = '100%';
remark_para_Charset = "gb2312";;
remark_para_CountElemId = "remark_count";
remark_para_PostAreaId = "Ian_PostRemarkArea";
remark_para_List_PanelId = "Ian_RemarkList";
remark_para_Top_Id = "Ian_RemarkTop";
remark_para_PostAreaRandomImageWidth = "90";//"120";
remark_para_PostAreaRandomImageHeight = "25";//"30";
remark_para_PostAreaRandomImageFontSize = "15";//"15";
remark_para_PostAreaStyle = 'http://remark2.csdn.net/demo/csdnbook/rview.css';
remark_para_List_PageSize =5;
</script>
<!--呈现评论列表的容器-->
<div class="leftTitle"><h2 class="cDRed"> 最近评论</h2></div>
<br /><br />
<div id="Ian_RemarkList" class="pkzone_list_sty">正在载入评论列表...</div>
<div style="clear:both"></div>
<!--呈现评论列表的容器-->
<!--评论列表需要的样式-->
<link rel="stylesheet" type="text/css" href="/css/rviewli.css" />
<style>
.pkzone_list_sty dl{width:99%}
.pkzone_list_sty dl dt{width:100%}
.replay{width:100%}
</style>
<!--评论列表需要的样式-->
<!--呈现发表评论区域的容器-->
<div id="Ian_PostRemarkArea"></div>
<!--呈现发表评论区域的容器-->
<h6>热点评论</h6>
<ul id="Ian_RemarkTop"></ul>
<script src="http://remark2.csdn.net/App_Themes/Default/Script/IanRemarkIframe.js" ></script>
<!--引用评论结束-->
</div>
<div style="margin: 0px auto; width: 600px; border: solid 1px #0b5f98;float:left;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 570px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='http://book.csdn.net/bookfiles/216/10021610314.shtml'><font color='red'>习题5.1—习题5.18</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='http://book.csdn.net/bookfiles/216/10021610311.shtml'>习题3.15—习题3.24</a></div><div style='float:right;width:49%'>·<a href='http://book.csdn.net/bookfiles/216/10021610312.shtml'>习题4.1—习题4.16</a></div><div style='float:left;width:49%'>·<a href='http://book.csdn.net/bookfiles/216/10021610313.shtml'>习题4.17—习题4.36</a></div><div style='float:right;width:49%'>·<a href='http://book.csdn.net/bookfiles/216/10021610315.shtml'>习题5.19—习题5.33</a></div></div>
</div>
</div>
<div class="clear">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -