搜索
bottom↓
回复: 56
打印 上一主题 下一主题

发一个简单的C程序,大家觉得结果是什么呢

[复制链接]

出0入4汤圆

跳转到指定楼层
1
发表于 2014-8-16 19:04:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xiaoyigechaos 于 2014-8-16 19:05 编辑

int c=9,d=0;
c=(c++)%5;
d=c;
问d最后的结果是几
标准C编译器下

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

2
发表于 2014-8-16 19:06:43 | 只看该作者
是4吧     

出0入0汤圆

3
发表于 2014-8-16 19:21:50 | 只看该作者
0?4?                                                         

出0入0汤圆

4
发表于 2014-8-16 19:23:23 | 只看该作者
0               

出0入0汤圆

5
发表于 2014-8-16 19:37:21 | 只看该作者
5,c++先用c的值,再执行 c++

出0入0汤圆

6
发表于 2014-8-16 19:56:25 来自手机 | 只看该作者
谢冲 发表于 2014-8-16 19:37
5,c++先用c的值,再执行 c++

有可能吗?

出0入0汤圆

7
发表于 2014-8-16 20:03:54 | 只看该作者
0                  

出0入0汤圆

8
发表于 2014-8-16 20:06:14 | 只看该作者

有括号不是先执行括号里面的吗

出0入0汤圆

9
发表于 2014-8-16 20:07:44 | 只看该作者
0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5

出0入0汤圆

10
发表于 2014-8-16 20:10:54 | 只看该作者
这种问题没意义

出0入0汤圆

11
发表于 2014-8-16 20:11:16 | 只看该作者
是4,算了一下

出0入0汤圆

12
发表于 2014-8-16 20:11:30 | 只看该作者
http://www.dlifep.com/?p=338

出0入0汤圆

13
发表于 2014-8-16 20:12:57 | 只看该作者
上学期学计算机语言的时候 查了些资料 写了上面一篇博客 希望对楼主有帮助

出0入12汤圆

14
发表于 2014-8-16 20:29:44 | 只看该作者
问个问题,什么是“标准C编译器”?

出0入0汤圆

15
发表于 2014-8-16 20:38:22 | 只看该作者
gcc 4.9.0编译结果,编译器会警告:
  1. test3.c:6:7: 警告:‘c’上的运算结果可能是未定义的 [-Wsequence-point]
  2.      c = (c++)%5;
  3.        ^
复制代码

执行结果是4,如10L所说一样,讨论起来没有意义,可能换VS编译又是一种结果了。

出0入0汤圆

16
发表于 2014-8-16 20:40:17 | 只看该作者
根本就没有所谓的“标准C编译器”,楼主玩这个就是觉得脑细胞太闲了吧。

出0入0汤圆

17
发表于 2014-8-16 20:44:55 | 只看该作者
结果和编译器有关

出0入0汤圆

18
发表于 2014-8-16 20:44:56 | 只看该作者
本帖最后由 青春从未醒 于 2014-8-16 20:54 编辑

我用gcc4.7结果也是4

出0入4汤圆

19
 楼主| 发表于 2014-8-16 20:46:19 | 只看该作者
renpeng009 发表于 2014-8-16 20:39
我擦。。。你竟然还在纠结这个问题。。。

没有纠结,我已经理解饿了,虽然这样的语句没什么意义,但确实是知识点所在,虽然很多时候是用不上的

出0入4汤圆

20
 楼主| 发表于 2014-8-16 20:48:56 | 只看该作者
tennokoe 发表于 2014-8-16 20:44
结果和编译器有关

对  所以我说标准C  用keil编译 结果是1  没想出来是怎么玩的

出0入0汤圆

21
发表于 2014-8-16 20:53:21 | 只看该作者
想起来了
int c=9;
c=(c++)%5;
这是考察 c++ 与++c的问题,区别在于c++是i先不自加,在语句完后自加,++C先自加;
所以此时有伴部分(C++)%5就是相当于9%5,结果是4

出0入0汤圆

22
发表于 2014-8-16 20:55:56 | 只看该作者
4.这个也只能考试和面试用

出0入4汤圆

23
 楼主| 发表于 2014-8-16 20:58:50 | 只看该作者
abutter 发表于 2014-8-16 20:29
问个问题,什么是“标准C编译器”?

应该把编译器去掉,是吧。就是ANSI C

出0入0汤圆

24
发表于 2014-8-16 21:02:56 | 只看该作者
青春从未醒 发表于 2014-8-16 20:53
想起来了
int c=9;
c=(c++)%5;

问题是,它还需要再赋值到“C”,如何解释?

出0入442汤圆

25
发表于 2014-8-16 21:10:01 | 只看该作者
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支持比较完整。回头用CLang试一下。

出0入4汤圆

26
 楼主| 发表于 2014-8-16 21:18:17 | 只看该作者
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

这里的括号 有没有是不是一样的呀
先执行这个c%5=4  然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c=4
是不是这样呢
书上说,前缀和后缀形式的增值操作符都复制一份变量值得拷贝,意思好像是 这里使用的c++和c没什么关系了

出0入0汤圆

27
发表于 2014-8-16 21:19:43 | 只看该作者
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

“然后c自增”,然后呢?还有一条指令需要执行d=c,求的d值。这个真的好糊涂。
MDK仿真结果是4,它好像不理会“C自增”了。

出0入0汤圆

28
发表于 2014-8-16 21:24:42 | 只看该作者
一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也不用担心在面试或者考试中遇到这种题,遇到这种题直接骂他SB他都不敢放屁。

出0入4汤圆

29
 楼主| 发表于 2014-8-16 21:27:05 | 只看该作者
本帖最后由 xiaoyigechaos 于 2014-8-16 21:28 编辑
lcofjp 发表于 2014-8-16 21:24
一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也 ...


我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5  

出0入42汤圆

30
发表于 2014-8-16 21:30:22 | 只看该作者
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
如果这些都没有作用,那有什么意义?

不多说,上图!
attach://212802.png
attach://212803.png
attach://212804.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

31
发表于 2014-8-16 21:31:19 | 只看该作者
xiaoyigechaos 发表于 2014-8-16 21:27
我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5  
...

我只能告诉你不必在意。中国人出的书上错误百出太正常了。我看过一些二级辅导习题什么的,错误多了去了。当然我这计算机专业是不考二级的。

出0入4汤圆

32
 楼主| 发表于 2014-8-16 21:33:34 | 只看该作者
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

确实没有意义,应该避免出现这样的代码

出500入203汤圆

33
发表于 2014-8-16 21:36:05 | 只看该作者
这个例子告诉我们,以后写程序不要用这种写法

出0入0汤圆

34
发表于 2014-8-16 21:49:28 | 只看该作者
这种写法真的不好说哦,但是从软件测评和开发角度来看++这类型的运算符是不允许轻易出现的!以前的Linux系统和驱动开发都是严格受限的,不允许出现类似的运算!

出0入0汤圆

35
发表于 2014-8-16 22:05:41 | 只看该作者
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

这位大侠,满电脑都是C啊,佩服佩服。

出0入0汤圆

36
发表于 2014-8-16 23:10:51 | 只看该作者
这毫无意义, 凡是这样写代码的, 都应该开除

Keep It Simple and Stupid, KISS

出0入0汤圆

37
发表于 2014-8-16 23:31:14 | 只看该作者
看到第一眼,就想到这是序列点问题吧,结果是未定义的吧

出0入0汤圆

38
发表于 2014-8-17 12:01:06 | 只看该作者
是5,应该是不会错的。下次写程序还是要注意,最好是分开写;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

39
发表于 2014-8-17 12:32:17 | 只看该作者
本帖最后由 duanll 于 2014-8-17 12:33 编辑

楼主闲得慌啊。。。

出0入0汤圆

40
发表于 2014-8-17 18:37:34 | 只看该作者
wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...

支持!

不过看这类问题,就感觉在浪费时间,。

出0入0汤圆

41
发表于 2014-8-17 20:07:45 | 只看该作者
weijia 发表于 2014-8-16 20:07
0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5

怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;
d=c;

出0入0汤圆

42
发表于 2014-8-17 20:53:16 | 只看该作者
iquer 发表于 2014-8-17 20:07
怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;

wshtyr大侠不是把三种编译环境的结果都贴出来了吗?为什么不不劳而获呢?

出0入442汤圆

43
发表于 2014-8-18 12:37:42 | 只看该作者
xiaoyigechaos 发表于 2014-8-16 21:18
这里的括号 有没有是不是一样的呀
先执行这个c%5=4  然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c ...

C标准中,++操作符是在当前语句中执行完毕之后再执行的,不是在一开始执行的。

出0入0汤圆

44
发表于 2014-8-18 12:40:33 | 只看该作者
4。c++中的++在赋值之前发生。可以看一下汇编。

出0入442汤圆

45
发表于 2014-8-18 12:42:06 | 只看该作者
wshtyr 发表于 2014-8-16 21:30
这个问题没有意义

这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?

呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一样,最后无语,不改了。

出0入0汤圆

46
发表于 2014-8-18 13:53:18 | 只看该作者
答案应该是4

出0入0汤圆

47
发表于 2014-8-18 14:19:05 | 只看该作者
TC执行结果:5
C++两边括号去掉,结果一样

出0入4汤圆

48
 楼主| 发表于 2014-8-18 18:19:12 | 只看该作者
C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

49
发表于 2014-8-18 18:35:58 | 只看该作者
有意思

出0入0汤圆

50
发表于 2014-8-18 19:34:20 | 只看该作者
xiaoyigechaos 发表于 2014-8-18 18:19
C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器  ...

lcofjp大侠不是告诉你了吧,可以骂面试者神经病。
不过楼主以权威文档表述了这个命题为无解。
哈哈,可惜没人面试我,否则我也可以充满自信地骂他脑袋进水!

出0入0汤圆

51
发表于 2014-8-18 19:54:26 | 只看该作者
结果应当为4,但是大多数程序员不这么使用,程序会比较不好阅读,还不如多写一行,看起来也直观,但是有些公司面试就会考这些偏的东西,如运算符的优先级等等。

出0入50汤圆

52
发表于 2014-8-18 20:14:44 | 只看该作者
楼主的答案其实不重要,按照标准C的语法书对照看下即可明白。

重要的是总是写这种可读性很差的代码,除了炫耀自己的语言功力以外,对代码的后续维护和差错等应用,一点好处都没有,那是给自己和后继者挖坑的节奏

出0入4汤圆

53
 楼主| 发表于 2014-8-18 21:55:44 | 只看该作者
csmjmcc 发表于 2014-8-18 19:34
lcofjp大侠不是告诉你了吧,可以骂面试者神经病。
不过楼主以权威文档表述了这个命题为无解。
哈 ...

之前看书没那么认真,这道面试题让我重新注意了一下书里面的细节。算是有所收获
如果提前把这个细节注意到了,在笔试题上注明一下书里面是这么给出的答案,不知道会是什么结果

出0入0汤圆

54
发表于 2014-8-18 22:23:24 | 只看该作者
感觉是1

出0入42汤圆

55
发表于 2014-10-12 07:41:50 | 只看该作者
wye11083 发表于 2014-8-18 12:42
呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一 ...

牵一发不明原因的动全身,换个编译器就不一样,我这种有点强迫症的是不能忍的

对于这种情况,首先我会尝试看懂算法,然后把那个纠结的部分用正常的语言替换掉;如果实在看不懂,反汇编也要知道它是按照什么顺序算的。何必呢,要效率就直接汇编,这么整给后人留坑

出0入0汤圆

56
发表于 2014-10-12 09:27:55 | 只看该作者
C缺陷与陷阱

出0入0汤圆

57
发表于 2014-10-12 09:41:07 | 只看该作者
受教了 很少有人这么写吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 23:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表