表达式计算易错题

1.设整型变量m,n,a,b,c,d均为1,执行“( m=a>b)&&(n=a>b)”后m,n的值是( )

  ①0,0      ②0,1    ③1,0 ④1 ,1

  「」表达式(m=a >b)&&(n=a >b)是一个逻辑表达式,它的计算过程是先计算逻辑与的左分量(m=a>b,其中又是先计算a>b.因a>b不成立,结果为0,将0赋给变量m,最后逻辑与的左分量结果为0.由于逻辑运算采用特别的优化计算规则,当逻辑与的左分量结果为0时,不再计算逻辑与的右分量,而直接以0为逻辑与的结果。所以,上述表达式计算使m的值变为0,而n的值没有变,依旧为l.所以解答是②。

      『错误原因』没注意逻辑运算采用的是优化计算规则。在逻辑与中如果左分量为0时,将不再计算逻辑与的右分量

2.设整型变量i的值为3,则计算表达式i—s—i后表达式的值为()

  ①0 ②1 ③2 ④表达式出错

  「」有些运算符只有一个字符,也有许多运算符由两个字符组成。特别是有些字符既可是单个字符的运算符,又能组成双字符的运算符。编译系统在识别源程序时,通常是尽量多地读八字符,能组成多字符单词的先尽量组成多字符单词。所以表达式i——i,被编译器理解为(i——)-i.另外,当表达式中某变量有后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算。同样地,当表达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式。按这个约定,求表达式(i——)-i是计算i-i的值为0,然后再对i作自减运算。这样,表达式(i——)-i的值为0.所以解答是①。

  『错误原因』不清楚编译系统的这种处理方式:编译系统在识别源程序时,通常是尽量多地读八字符,能组成多字符单词的先尽量组成多字符单词。所以表达式i——i,被编译器理解为(i——)-i

3.若已定义 x和 y为double类型,则表达式: x=l, y=x+3/2结果是( )

  ①l ②2 ③2.0 ④2.5

  「解」由于变量x和y都是double类型,表达式 x=l, y=x+3/2是先计算 x=1,由于 1是整型的,x是double类型的,该计算先将整数1转换成double类型的1.0,并将1.0赋给变量x.计算 y=X+3/2是先求 3/2的值,因是两整数相除,结果是整型值 1,然后在计算 X+1时,也先将 1转换成 1.0,然后求得 X+l的值为2.0,最后将该值赋给变量 y,并得到整个表达式的值为2.0.所以解答是③。

  『错误原因』认为x和y均为double类型 则表达式y=x+3/2中3/2等于1.5 .应制定 3和2均为整数则相除时为整数结果1

 

原文地址:https://www.cnblogs.com/howDo/p/1767097.html