论坛: 编程破解 标题: SOS,这题怎么解. 复制本贴地址    
作者: liwei1006 [liwei1006]    论坛用户   登录
main()
{
int a,b,c;
a=b=c=1;
printf("%d",++a||++b&&++c):
pinrtf("%d",a);
printf("%d",b);
printf("%d",c):
}

地主 发表时间: 04/19 21:33

回复: group [group]   论坛用户   登录
你去编译一下不就知道了

B1层 发表时间: 04/19 21:54

回复: dizi0774 [dizi0774]   论坛用户   登录
我也没有上机调试.看着这个程序我就想,答案应该是1211吧,因为a,b,c首先都赋初值1,然后执行printf("%d",++a||++b&&++c);这时只执行++a,因为OR语句中只要碰到一个表达式的值为非0,那么后面的表达式就不会被程序执行。后面几个printf语句就很简单了,应该可以理解了吧?
还有就是在每个语句都是以“;”做为结束标志,而不是“:”号。



[此贴被 迪仔0774(dizi0774) 在 4月19日22时54分 编辑过]

B2层 发表时间: 4/19 22:16

回复: cimsxiyang [cimsxiyang]   版主   登录
呵呵

这样的题目就SOS了也未必有点???
[友情提醒]
找本基本一点的书看看,看完了,这样的题目看一眼也就知道肯定是1211了。
罗嗦了一点,别见怪。




[此贴被 夕阳(cimsxiyang) 在 4月19日22时14分 编辑过]

B3层 发表时间: 4/19 22:31

回复: none [onizuka]   论坛用户   登录
写的有点语法问题,是不是写错了?我想答案是2111吧。++a||++b&&++c表示只要++a不是非0,就递增。我说的没错吧。


B4层 发表时间: 04/20 09:11

回复: tucd [tucd]   论坛用户   登录
答案为:1211 (本人上机试过)。
发现一个有趣的事情:
将上述一句:printf("%d",++a||++b&&++c);改为:
printf("%d",a++||b++&&c++);
答案也为:1211
在经典的教程里:++a,为其值先加1,然后再输出但在这里为什么体现不出来呢?


B5层 发表时间: 04/20 19:29

回复: group [group]   论坛用户   登录
不同的编译器解释的都不一样啦,你用什么编译器

B6层 发表时间: 04/21 00:56

回复: dizi0774 [dizi0774]   论坛用户   登录
第一个输出为1,不会因为a++或是++a而改变,为什么?因为第一个输出是个逻辑表达式呗.

B7层 发表时间: 04/21 20:39

回复: tucd [tucd]   论坛用户   登录
我用linux下的gcc.

B8层 发表时间: 04/21 23:32

回复: liuandy207 [liuandy207]   论坛用户   登录
应该是1212吧!

B9层 发表时间: 04/23 15:25

回复: xiaojun [xiaojun]   剑客   登录
是1211了…

B10层 发表时间: 04/24 11:28

回复: aaron [aaron]   论坛用户   登录
迪仔0774说的太对了!


[此贴被 aaron(aaron) 在 4月26日22时17分 编辑过]

B11层 发表时间: 4/26 22:7

回复: 54183710 [hcz]   论坛用户   登录
a=2 b=1 c=1
因为a||b只要有一个不为0就不在往后运算了
所以只算++a,后面的就不在计算了

B12层 发表时间: 04/30 16:33

回复: zzzzhb [zzzzhb]   论坛用户   登录
由于c的版本不同,编译后结果也不一样。关键在于a先加1输出,还是先输出后加1

B13层 发表时间: 05/03 22:08

回复: top [top]   论坛用户   登录
什么时候为0的怎么在1211的时候就不加了呢?

我是菜菜,别扔我!

还有。我觉得应该先加1才正确!

B14层 发表时间: 05/10 08:36

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号