|
|
|
|
移动端

1.2 表达式

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

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

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

1.2 表达式

【真题 6】定义有 a=1, b=2, c=3, d=4,那么表达式 a<b ? a:c < d ? a:d的值是()。

答案:1。

条件表达式的一般形式为:

x=<表达式 1>?<表达式 2>:<表达式 3>

其意义是:先求解表达式 1,若返回值为真,则求解表达式 2,将表达式 2的值赋给 x。若返回值为假,则求解表达式 3,将表达式 3的值赋给 x。

对于本题而言:表达式 a<b ? a:c < d ? a:d等价于 a<b ? a:(c < d ? a:d)。如果满足条件 a<b,那么运算结果为 a,否则,运算结果为 c < d ? a:d。在本题中,由于 a<b,所以,这个表达式的运算结果为 a=1。如果将这道题目中 a的值改为 5,由于 a<b不成立,因此,表达式的运算结果实际上为 c < d ? a:d,由于 c<d,所以,运算结果为 a=5。

【真题 7】已知 double d = 3.2,int n = 3,那么下列表达式中,不合法的是()。

A.d<<2 B.d/n C.!d && (n-3) D.(d-0.2)|n 答案:A、D。按位运算只适用于字符型和整数型变量以及它们的变体,对其他数据类型不适用。本题中,由于 d

是 double类型的变量,所以,它不适用于移位操作。所以,选项 A与选项 D错误。对于选项 B,在算术运算式中,低类型能够转换为高类型,因此,在计算 d/n的时候,会首先把 int类型的 n隐式转换为 double类型,然后参与计算。所以,选项 B正确。对于选项 C,&&是对 bool表达式求与运算。在选项 C中,0代表 false,非 0代表 true,!d && (n-3)=false&&fase=false。所以,选项 C正确。

【真题 8】有如下代码:

  1. #include<stdio.h> 
  2. int main()  
  3. {  
  4. unsigned int a = 6;  
  5. int b = -20;  
  6. (a + b > 6) ? printf(">6") : printf("<=6");  
  7. return 0;  

程序的输出结果是()。

答案:>6。

隐式类型转换分为三种,即算术转换、赋值转换和输出转换。对于其中的算术转换,指的是如果参与运算的数字有不同的类型,那么在运算的过程中,总会把低精度的类型自动转换为高精度的类型进行运算。对于本题而言,当执行 unsigned int a=6; int b=-20语句后,在计算表达式 a+b结果的时候,首先会把 int型变量 b转换为 unsigned int(无符号 int)类型(无符号 int的值域是[0,4294967295])的值,转换后的值为 4294967276,因此, a+b的结果为 4294967282,该值显然大于 6,因此,输出结果为: >6。

【真题 9】计算表达式 x^6+4x^4+2x^3+x+1昀少需要做()次乘法。

A.3B.4C.5D.6

答案:A。

本题中,要想知道表达式需要做多少次乘法运算,就需要知道如何将这个表达式进行拆分,而表达式的拆分涉及因式分解,这又回归到了数学问题。本题中, x^2表示的是 x*x,x^3是由 3个 x相乘得到,可以用 x^2*x表示,x^4是由 4个 x相乘得到,可以用 x^2*x^2表示, x^6是由 6个 x相乘得到,可以用 x^4*x^2来表示,所以,原式 =x^3 * (x^3+ 4 * x + 2) + x + 1= x^3 * (x^3+ x+x+x+x+ 2) + x + 1, x^3需要两次乘法,再与括号内的值相乘又需要一次乘法,所以,需要 3次乘法。所以,选项 A正确。

【真题 10】有如下代码:

  1. int a=5b=4c=3d=2;  
  2. if(a>b>c)  
  3. printf(“%d\n”,d);  
  4. else if((c-1>=d)==1)  
  5. printf(“%d\n”, d+1);  
  6. else  
  7. printf(“%d\n”, d+1); 

上述代码的输出结果为()。

A.2 B.3 C.4 D.编译错误答案:B。本题中,在第一个 if 语句中,内容为连续的比较判定,根据比较运算符 >的运算优先级顺序可知,

首先执行变量 a与变量 b的比较判断,由于变量 a的值为 5,变量 b的值为 4,此时满足 a>b的判断条件,所以,返回值为 true,即为 1,而变量 c的值为 3,显然, 1<3,所以,a>b>c这一判断条件不成立,此时 if中语句不执行,继续后续的判断。

当执行到第二个 if判断时,首先执行 c-1与 d值的判断,由于 c-1的值为 2,d的值为 2,二者相等,正好满足条件 c-1>=d,所以,此时,表达式 c-1>=d的返回值为 true,即为 1,正好满足整个条件判断,所以,if语句的条件为 true,此时,执行 printf(“%d/n”, d+1);语句,d的值为 2,d+1的值为 3,所以,程序的输出结果为 3,选项 B正确。

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

51CTO读书频道二维码


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

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

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

读 书 +更多

ASP网络编程从入门到精通

本书是为那些对Web开发感兴趣的读者而编写的。ASP(Active Server Pages)是微软公司在Web领域的又一次突破,它打破了以往只能由专业人员来...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊