![21天学通C++(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/312/31186312/b_31186312.jpg)
4.6 习题
1.C++程序中有如下语句:
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_77.jpg?sign=1738934701-9KKnOfA9rocNM635paAxmq6hKOeC76qw-0-8355d95e97d99fb6f25a4be885f4fff7)
该语句是否是合法的?如果合法,运行结束后n和i的值分别为多少?
【解答】该习题考查逗号运算符和赋值语句。上述表达式语句是合法的,其总体上是一个赋值语句,赋值号右边是一个逗号表达式,逗号表达式先计算第一个表达式,最终结果为括号中最后一个表达式的值。因此运行结束后i的值为3,而运行n=3语句后,n的值也为3。
2.编写一个C++程序,要求接收用户输入的一个包含5位小数的浮点数,通过精度控制输出该浮点数有效数字为3位、4位和5位时的数值。例如,输入一个浮点数15.41532,运行程序后将分别显示如图4-26所示结果。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_78.jpg?sign=1738934701-jU3ozIujtQNL30uquPqfduUHgaxwA4uP-0-4f1b9daaf0c228fa593659bad54aea56)
图4-26 控制输出精度
【解答】该习题主要考查使用cout输出流控制精度。程序要求接收用户输入,因此需声明一个浮点型变量,输出指定的有效位数,只需使用cout输出流的精度控制成员函数setprecision即可。需要注意的是,输出有效位数时,对最后一位有效位数要进行四舍五入操作。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_79.jpg?sign=1738934701-oSdtceVgy6J2s4slpkMB2pcu4xoSXBla-0-09f766ac23302399c23855e96d8f3ccf)
3.已知int x=10,y=20,z=30,以下语句执行后x,y,z的值将分别是多少?
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_80.jpg?sign=1738934701-IcdcVaqmY4TqhleKu4OsppZ3lWqeor0H-0-2058a54f0309a15b51490c6154163713)
【解答】该习题主要考查if语句。在上述语句中,首先判断关系条件x>y的值是否为true,此处将x和y的值分别代入:x=10,y=20,因此x>y是不成立的,因此if语句下面的第一条语句不会执行,即语句z=x不会执行,而其后的两条语句x=y和y=z语句将会被执行。因此,执行该语句段后,x、y和z的值分别为20,30和30。
4.编写一个C++程序,从键盘输入三角形的三边长,判断出这三边能否构成三角形。例如,输入三边分别为2,3,4,其返回结果如图4-27所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_81.jpg?sign=1738934701-PgA3pBaOkaPndw0vL6o8AwcQqAyLq9uU-0-f0dd91378f7e5a036571e9efd4b030a0)
图4-27 判断是否能构成三角形
【解答】该习题主要考查if…else语句。判断三边是否能够构成三角形,需要满足如下条件:即任意两边的和要大于另一边,即a+b>c,同时a+c>b,同时b+c>a。根据该定理,这三个条件要同时成立,因此其关系为与关系。在if语句后的条件表达式要表示为:(a+b>c) && (a+c)>b)&& (b+c)>a,满足该条件即可构成三角形,否则不能构成。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_82.jpg?sign=1738934701-gRbmAcbYPUx1P41TDTTtPSysMDx35yVy-0-a10d8f577deba73c2d6edde280f3cdba)
5.符号函数的实现在许多程序中是常见的,用多种选择语句编程实现符号函数。当x <0时sgn(x)=-1;当x >0时sgn(x)=+1;当x=0时sgn(x)=0。例如,当用户输入x的值为10时,输出结果为1;输入x的值为-10时,输出结果为-1;输入x的值为0时,输出结果为0,如图4-28所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_83.jpg?sign=1738934701-QhSlSe2Wgd7YlsqhwhNlFDz3PQggRk3M-0-662a201f80667e6e4c2cffc00a454808)
图4-28 符号函数的实现
【解答】该习题主要考查if…else if…else语句的应用。读者可以看到,上述程序有3种可能情况,即输入的x有大于0、小于0和等于0这3种情况。此处需要使用if…else if…else语句判断这三种情况,并输出对应的值。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_84.jpg?sign=1738934701-Hw5pa0bBNNJP3yEb7PPbU9ndNqKI3Wlu-0-1cdc9c256107167a35a0bcfc107d9948)
6.当执行以下程序时,循环体将被执行多少次?
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_86.jpg?sign=1738934701-HLiDvNaawSUMI5iUZLz7PS5vatS3Tphy-0-a6148911092420d240264652ab06c168)
【解答】该习题主要考查do…while语句的执行情况。do…while语句不管循环条件是否满足,都至少会执行一次循环体,执行一次后判断循环条件是否成立。此处k的初值为1,执行完语句k=k*k;后,k的值仍然为1。因此,循环条件!k的值为false,该循环不会再继续下去,从而退出循环。因此,该循环体被执行了一次。
7.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?编写一个程序输出所有无重复数字的三位数。
【解答】该题目主要考查嵌套循环和多个表达式的逻辑判断。为了方便理解,分析题目要求:
(1)由于是三位数,所以假设百位数、十位数、个位数依次为x、y和z。
(2)由于从1、2、3和4选取,所以1<=x<=4、1<=y<=4和1<=z<=4。
(3)由于互不重复,所以x!=y,且y!=z,且z!=x。
所以,只需要让x、y和z依次取值,然后判断条件,只要满足条件就可以。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_87.jpg?sign=1738934701-2I9fb50yhtKCNP4T7LU5cam0ZQy2WJ4i-0-c7ab476189ad49a25c4dd32f1730fb9c)
8.编写一个程序,求12+22+32+42+…+202的值。
【解答】该题目考查的是读者的归纳能力和循环语句使用能力。首先分析该表达式的特点。该表达式是计算数十个数字的和。为了方便读者找出规律,我们将所有的数字都列出来,如表4-2所示。
表4-2 所有累加的值
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_88.jpg?sign=1738934701-CuzlIsYVgVqX5khJJWWBCh6MMk2FHlvi-0-8a71a3896cb958ea5a6c6c856228594e)
从这些数字中可以看出并总结出以下规范:每个数字都比前一个数字大10;这些数字个数为20。所以,第一个数字可以表示为a1=2+10=12;第二个数字可以表示为a2=a1+10=22;第三个数字可以表示为a3=a2+10=32…ai=ai-1+10…a20=a19+10=202。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_89.jpg?sign=1738934701-GgLsS7Ex4UgRewYe9t51Go0bP7Oz7Rlu-0-cf3cdc66a2ab46412de71150ebdfec7e)
9.编写一个C++程序,找出200内能被7整除的所有自然数,并将其输出到用户屏幕。
【解答】该习题主要考查continue语句的应用。continue语句用于结束本次循环,跳到下一次循环。在该习题中,通过一个循环在1~200之间依次进行查找,能够被7整除则输出,否则使用continue语句结束本次循环,继续查找。其简要代码如下所示。
![](https://epubservercos.yuewen.com/E623DA/16896237004359006/epubprivate/OEBPS/Images/txt005_90.jpg?sign=1738934701-GLRRkT4BnZ8uMS7xFqbya1QGFxXHwTlg-0-587abd6fc966e3fe6cf5dbeab4bbed8a)