数学部分第二章 变量和基本类型

上传人:woxinch****an2018 文档编号:39308153 上传时间:2018-05-14 格式:DOC 页数:9 大小:55KB
返回 下载 相关 举报
数学部分第二章 变量和基本类型_第1页
第1页 / 共9页
数学部分第二章 变量和基本类型_第2页
第2页 / 共9页
数学部分第二章 变量和基本类型_第3页
第3页 / 共9页
数学部分第二章 变量和基本类型_第4页
第4页 / 共9页
数学部分第二章 变量和基本类型_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《数学部分第二章 变量和基本类型》由会员分享,可在线阅读,更多相关《数学部分第二章 变量和基本类型(9页珍藏版)》请在金锄头文库上搜索。

1、第二章 变量和基本类型习题 2.1int、long 和 short 类型之间有什么差别?【解答】它们的最小存储空间不同,分别为 16 位、32 位和 16 位。一般而言,short 类型为半个机器字(word)长,int 类型为一个机器字长,而 long 类型为一个或两个机器字长(在 32 位机器中,int 类型和 long 类型的字长通常是相同的) 。因此,它们的表示范围不同。习题 2.2unsigned 和 signed 类型有什么差别?【解答】前者为无符号类型,只能表示大于或等于 0 的数。后者为带符号类型,可以表示正数、负数和 0。习题 2.3如果在某机器上 short 类型占 16

2、位,那么可以赋给 short 类型的最大数是什么?unsigned short 类型的最大数又是什么?【解答】若在某机器上 short 类型占 16 位,那么可以赋给 short 类型的最大数是 215-1,即 32767;而 unsigned short 类型的最大数为 216-1,即 65535。习题 2.4当给 16 位的 unsigned short 对象赋值 100000 时,赋的值是什么?【解答】34464。100000 超过了 16 位的 unsigned short 类型的表示范围,编译器对其二进制表示截取低 16 位,相当于对 65536 求余(求模,%) ,得 34464。

3、习题 2.5float 类型和 double 类型有什么差别?【解答】二者的存储位数不同(一般而言,float 类型为 32 个二进制位,double 类型为 64 个二进制位) ,因而取值范围不同,精度也不同(float 类型只能保证 6 位有效数字,而 double 类型至少能保证 10 位有效数字) 。习题 2.6要计算抵押贷款的偿还金额,利率、本金和付款额应分别选用哪种类型?解释你选择的理由。【解答】利率可以选择 float 类型,因为利率通常为百分之几。一般只保留到小数点后两位,所以 6 位有效数字就足以表示了。本金可以选择 long 类型,因为本金通常为整数。long 类型可表示的

4、最大整数一般为 231-1(即 2147483647) ,应该足以表示了。付款额一般为实数,可以选择 double 类型,因为 float 类型的 6 位有效数字可能不足以表示。习题 2.7解释下列字面值常量的不同之处。(a) a,La,“a“,L“a“(b) 10,10u,10L,10uL,012,0xC(c) 3.14,3.14f,3.14L【解答】(a) a,La,“a“,L“a“a为 char 型字面值,La为 wchar_t 型字面值,“a“为字符串字面值,L“a“为宽字符串字面值。(b) 10,10u,10L,10uL,012,0xC10 为 int 型字面值,10u 为 unsi

5、gned 型字面值,10L 为 long 型字面值,10uL 为 unsigned long 型字面值,012 为八进制表示的 int 型字面值,0xC 为十六进制表示的 int 型字面值。(c) 3.14,3.14f,3.14L3.14 为 double 型字面值,3.14f 为 float 型字面值,3.14L 为 long double 型字面值。习题 2.8确定下列字面值常量的类型:(a) 10 (b) -10u (c) -10. (d) -10e-2【解答】(a) int 型(b) unsigned int 型(c) double 型(d) double 型习题 2.9下列哪些(如果

6、有)是非法的?(a) “Who goes with F145rgus?012“(b) 3.14e1L (c) “two“ L“some“(d) 1024f (e) 3.14UL(f) “multiple linecomment“【解答】(c) 非法。因为字符串字面值与宽字符串字面值的连接是未定义的。(d) 非法。因为整数 1024 后面不能带后缀 f。(e) 非法。因为浮点字面值不能带后缀 U。(f) 非法。因为分两行书写的字符串字面值必须在第一行的末尾加上反斜线。习题 2.10使用转义字符编写一段程序,输出 2M,然后换行。修改程序,输出 2,跟着一个制表符,然后是 M,最后是换行符。【解答

7、】输出 2M、然后换行的程序段:/ 输出“2M“和换行字符std:cout int main()/ 局部对象int base, exponent;long result=1;/ 读入底数(base)和指数(exponent)std:cout base exponent;if (exponent 0) / 计算底数的指数次方for (int cnt = 1; cnt int input_value;(d) double salary = wage = 9999.99;(e) double calc = calc();【解答】(a) 非法:auto 是关键字,不能用作变量名。使用另一变量名,如 a

8、ut 即可更正。(c) 非法:运算符后面不能进行变量定义。改为:int input_value;std:cin input_value;(d) 非法:同一定义语句中不同变量的初始化应分别进行。改为:double salary = 9999.99, wage = 9999.99;注意,(b)虽然语法上没有错误,但这个初始化没有实际意义,ival 仍是未初始化的。习题 2.17下列变量的初始值(如果有)是什么?std:string global_str;int global_int;int main()int local_int;std:string local_str;/ .return 0;【

9、解答】global_str 和 local_str 的初始值均为空字符串,global_int 的初始值为 0,local_int 没有初始值。习题 2.18解释下列例子中 name 的意义:extern std:string name;std:string name(“exercise 3.5a“);extern std:string name(“exercise 3.5a“);【解答】第一条语句是一个声明,说明 std:string 变量 name 在程序的其他地方定义。第二条语句是一个定义,定义了 std:string 变量 name,并将 name 初始化为“exercise 3.5a

10、“。第三条语句也是一个定义,定义了 std:string 变量 name,并将 name 初始化为“exercise 3.5a“,但这个语句只能出现在函数外部(即,name 是一个全局变量) 。习题 2.19下列程序中 j 的值是多少?int i = 42;int main()int i = 100;int j = i;/ .【解答】j 的值是 100。j 的赋值所使用到的 i 应该是 main 函数中定义的局部变量 i,因为局部变量的定义会屏蔽全局变量的定义。习题 2.20下列程序段将会输出什么?int i = 100, sum = 0;for (int i = 0; i != 10; +i

11、)sum += i;std:cout i “ “ sum std:endl;【解答】输出为:100 45for 语句中定义的变量 i,其作用域仅限于 for 语句内部。输出的 i 值是 for 语句之前所定义的变量 i 的值。习题 2.21下列程序合法吗?int sum = 0;for (int i = 0; i != 10; +i)sum += i;std:cout “Sum from 0 to “ i “ is “ sum std:endl;【解答】不合法。因为变量 i 具有语句作用域,只能在 for 语句中使用,输出语句中使用 i 属非法。习题 2.22下列程序段虽然合法,但是风格很糟糕

12、。有什么问题呢?怎样改善?for (int i = 0; i 100; +i)/ process i【解答】问题主要在于使用了具体值 100 作为循环上界:100 的意义在上下文中没有体现出来,导致程序的可读性差;若 100 这个值在程序中出现多次,则当程序的需求发生变化(如将 100 改变为 200)时,对程序代码的修改复杂且易出错,导致程序的可维护性差。改善方法:设置一个 const 变量(常量)取代 100 作为循环上界使用,并为该变量选择有意义的名字。习题 2.23下列哪些语句合法?对于那些不合法的使用,解释原因。(a) const int buf;(b) int cnt = 0;co

13、nst int sz = cnt;(c) cnt+; sz+;【解答】(a) 不合法。因为定义 const 变量(常量)时必须进行初始化,而 buf 没有初始化。(b) 合法。(c) 不合法。因为修改了 const 变量 sz 的值。习题 2.24下列哪些定义是非法的?为什么?如何改正?(a) int ival = 1.01; (b) int (c) int (d) const int 【解答】(b)非法。因为 rval1 是一个非 const 引用,非 const 引用不能绑定到右值,而 1.01 是一个右值。可改正为:int (假设 ival 是一个已定义的 int 变量) 。习题 2.2

14、5在习题 2.24 给出的定义下,下列哪些赋值是非法的?如果赋值合法,解释赋值的作用。(a) rval2 = 3.14159; (b) rval2 = rval3;(c) ival = rval3; (d) rval3 = ival;【解答】(d)非法。因为 rval3 是一个 const 引用,不能进行赋值。合法赋值的作用:(a)将一个 double 型字面值赋给 int 型变量 ival,发生隐式类型转换,ival 得到的值为 3。(b)将 int 值 1 赋给变量 ival。(c)将 int 值 1 赋给变量 ival。习题 2.26(a)中的定义和(b)中的赋值存在哪些不同?哪些是非法

15、的?(a) int ival = 0; (b) ival = ri;const int ri = ival;【解答】int ival = 0; 定义 ival 为 int 变量,并将其初始化为 0。const int 定义 ri 为 const 引用,并将其绑定到右值 0。ival = ri; 将 0 值赋给 ival。ri = ival; 试图对 ri 赋值,这是非法的,因为 ri 是 const 引用,不能赋值。习题 2.27下列代码输出什么?int i, i = 5; ri =10;std:cout i “ “ ri std:endl;【解答】输出:10 10ri 是 i 的引用,对 r

16、i 进行赋值,实际上相当于对 i 进行赋值,所以输出 i 和 ri 的值均为 10。习题 2.28编译以下程序,确定你的编译器是否会警告遗漏了类定义后面的分号。class Foo / empty / Note: no semicolonint main()return 0;如果编译器的诊断结果难以理解,记住这些信息以备后用。【解答】在笔者所用的编译器中编译上述程序,编译器会给出如下错误信息:error C2628: Foo followed by int is illegal (did you forget a ;?)(第 4 行)warning C4326: return type of main should be int or void instead ofFoo (第 5 行)error C2440: return : c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号