if语句的一个问题

(1)当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是
A)k%2 B)k%2==1 C)(k%2)!=0 D)!k%2==1
(2)设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是
A)k=k>=k B)-k++ C)k%int(f) D)k>=f>=m
请详细解答下、、帮帮忙、、谢谢了

A)k%2: 当k=2*n时 为0 为2*n+1时 为1
B)k%2==1: k%2 当k=2*n时 为0 所以k%2==1 还是为0;为2*n+1时 k%2 为1
所以 k%2==1 成立 为1;

C)(k%2)!=0 k%2 当k=2*n时 为0 所以(k%2)!=0 还是为0;为2*n+1时 k%2 为1
所以(k%2)!=0 成立 为1;
所以上面的三个都是相同的
D)!k%2==1
k=0时 成立 为1 否则 为0 因为非零是 !k为0

第二题中 C中k%int(f);%一定要是 int型的 所以也是对的;A K=K=>K 等效于K=(K=>K),也是没有问题的。
B a=-k++的话,最后a=-1,k=2。也没问题。D不能这么写 编译器会出问题的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-09
(1),不管k为奇数还是偶数ABC的真值都相同(比如K为偶数,真值都为0)。故选D
(2),
A中k>=k是个布尔表达式,值为1,然后赋值给k
B中先K++运算,然后取相反数
C中先将f转换为int类型然后求模
D中先求布尔表达式K>=f的值,为0.然后再求布尔表达式0>=m的值。
在VS中各表达式都可以通过编译,但D中">="的操作数为布尔类型会不安全,有些编译器就通不过。
故选D
第2个回答  2010-08-09
(1)选D
前三个都是k为偶数的时候表达式值为0, k为奇数的时候表达式值为1。 D选项!的优先级最高,所以先算!k,k为0时表达式的值为0,k为1时表达式的值为1
(2)选D
把逻辑值和整型数比较大小没有意义,这样写虽然编译能通过,但没有达到三个数连续比较大小的目的,应该写为k>=f&&f>=m
第3个回答  2010-08-09
D)!k%2==1

A)k=k>=k
相似回答