|
|
|
|
移动端

1.10.1 常规运算(2)

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍常规运算。

作者:猿媛之家来源:机械工业出版社|2017-12-06 17:10

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


1.10.1 常规运算(2)

程序的运行结果为:

  1. 2  

所以,选项 C不正确。对于选项 D,d1是(x&y)|z,而 d2是 x|(y&z),该运算不满足结合律,因此,不一定相等。程序示例如下:

  1. #include<iostream> 
  2. using namespace std;  
  3. int main()  
  4. {  
  5. int x = 1;  
  6. int y = 2;  
  7. int z = 4;  
  8. int d1 = x & y | z;  
  9. int d2 = x | z & y;  
  10. cout << d1 << endl; // 4  
  11. cout << d2 << endl; // 1  
  12. return 0;  

程序的运行结果为:

  1. 4  

所以,选项 D不正确。

【真题 125】有以下程序:

  1. void main(void)  
  2. {  
  3. int a, b, d = 26;  
  4. a = d / 10 % 9;  
  5. b = a && (-1);  
  6. printf("%d, %d\n", a, b);  

程序运行后的输出结果是()。

A.6,1B.2,1 C.6,0D.2,0 答案:B。本题中,整型变量 d的值为 26,当计算表达式 a=d/10%9的值时,由于除号 /与取余符 %的优先级是

一样的,所以,运算顺序是从左向右,先执行 d/10,其运算结果为 2,然后执行 2%9,其运算结果为 2,即 a的值为 2。&&为逻辑与运算符,当进行与运算时,只要参与运算的数不是 0,都认为是 true(1),参与运算的数是 0则认为是 false(0),2和-1都是非 0值,都被认为真,所以,昀后结果为真,对 bool型变量 true进行强制整型转换,其结果即为 1。所以,选项 B正确。

【真题 126】以下程序运行后的输出结果是 10,20,0。()。

  1. void main(void)  
  2. {  
  3. int a, b, c;  
  4. a = 10;  
  5. b = 20;  
  6. c = (a%b<1) || (a / b>1);  
  7. printf("%d %d %d\n", a, b, c);  

答案:正确。

变量 a和变量 b的值在初始化后就没有被修改过,它们的值分别为 10和 20。对于变量 c,由于 a%b=10,所以,a%b<1不满足,结果为 false,表达式 a/b的值 0,因此,表达式 a/b>1的值也为 false,所以, (a%b<1) || (a/b>1)的值为 false。在 C/C++语言中, false表示 0,true表示 1,因此, c的值为 0。

【真题 127】 unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c);输出结果是什么?

答案:4294967285, -128。

本题中,变量 A是一个 unsigned short类型的变量,值为 10,由于~A=0xfffffff5,所以,~A对应

的 int值为-11,但输出的是 uint,所以,输出 4294967285。由于 c=0x80,输出的是 int,昀高位为 1,是负数,所以,它的值就是 0x00的补码,也就是 128,所以,输出-128。

【真题 128】有如下代码:

  1. #include<iostream.h> 
  2. using namespace std;  
  3. void main()  
  4. {  
  5. int a = 2;  
  6. int b = ++a;  
  7. cout << a / 6 << endl;  

程序的输出结果是( )。

A.0.5  B.0  C.0.7  D.0.6666666

答案:B。

本题中,首先初始化变量 a的值为 2,然后执行 ++a运算,此时 a的值变为 3,紧接着执行 a/6运算,由于变量 a是 int 类型,因此, 3/6的结果会被四舍五入,昀终输出结果为 0。所以,选项 B正确。

【真题 129】有如下代码:

  1. int i, n = 0;  
  2. float x = 1y1 = 2.1 / 1.9, y2 = 1.9 / 2.1;  
  3. for (i = 1; i < 22; i++)  
  4. xx = x * y1;  
  5. while (x != 1.0)  
  6. {  
  7. xx = x * y2;  
  8. n++;  
  9. }  
  10. printf("%d\n", n); 

程序的运行结果是( )。

A.21  B.22  C.无限循环  D.程序崩溃

答案:C。

本题中,首先对浮点型变量 x的值进行了迭代计算,然后判断 x的值与浮点数 1.0是否相等,可是

此时却忽略了一个事实,即对于浮点数的运算中不允许出现 ==或者!=。为什么会是这样的结果呢?其实,这与浮点数在内存中的存储有关。浮点数指的是小数点在数据中的位置可以左右移动的数据。它通常被表示成如下形式: N=M*RE。

其中,M(Mantissa)被称为浮点数的尾数, R(Radix)被称为阶的基数(底), E(Exponent)被称为阶码。计算机中一般规定 R为 2、8或 16,它是一个确定的常数,不需要在浮点数中明确表示出来。因此,如果要表示一个浮点数,一是要给出尾数 M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。二是要给出阶码,通常用整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。浮点数也要有符号位。在计算机中,浮点数通常被表示成如下格式:

其中,Ms表示浮点数是正数还是负数,安排在昀高一位, 0表示正数, 1表示负数。

E 表示的是阶码,紧跟在符号位之后,占用 m位,含阶码的一位符号。类似于科学计数法中的 M*10^N中的 N。

M 表示的是尾数,在低位部分,占用 n位。

在计算机中,浮点数其实是一种不精确的表示,它存在舍入( rounding)误差。因为表示方法限制了浮点数的范围和精度,浮点运算只能近似地表示实数运算,而判等运算符 ==表示的是在计算机中的内存表示完全一样,显然,浮点数无法在内存中表示完全一样,所以,不能使用 ==或者!=来表示两个浮点数是否相等。

既然如此,是否还存在其他的方法来比较浮点数是否相等呢?答案是肯定的。判断两个浮点数是否相等可以通过下面的方法来实现。

  1. const float EPSINON = 0.000001;  
  2. if (fabs(a-b)< EPSINON)(其中,a 与b 表示待比较的两个浮点数) 

本题中,由于变量 x的值几乎永远无法与 1.0相等,循环条件几乎永远成立,程序会进入无限循环。

所以,选项 C正确。

【真题 130】在 16位机器上,运行下列 foo函数的结果是()。

  1. void foo()  
  2. {  
  3. int i = 65536;  
  4. cout << i <<",";  
  5. i = 65535;  
  6. cout << i;  

A.-1,65535 B.0,-1 C.-1,-1 D.0,65535 答案:B。在 16位的机器上, int型数据的取值范围为 [-32768, 32767],由于 65536的十六进制表示为 0x10000,

此时会发生溢出,溢出后会发生数据截断,取其后的 0x0000为值,对应的十进制表示为 0。而 65535的十六进制表示为 0xFFFF,昀高位为符号位,由于在计算机中负数使用二进制补码表示,此时对该值取反加 1,昀终结果为-1。所以,选项 B正确。

如果是在 32 位的机器上,由于不存在数据溢出的情况,程序的输出就变为 65536和 65535了。

【真题 131】假设 x = 5,y = 6,则 x < y和 x >= y的逻辑值分别为()和()。

答案:true,false。

本题中,由于 x=5,y=6,所以, x<y是成立的,因此,逻辑值为 true,而 x >= y不成立,因此,逻

辑值为 false。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Microsoft SQL Server 2005 技术内幕:T-SQL查询

本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。它提供了使用Tra...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊