| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2817 人关注过本帖, 1 人收藏
标题:一道华为笔试题
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:1 
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);

首先可以判断C、D都是错的,因为表达式不能作为赋值运算的左值,也就是说无论a++还是++a始终是个数而不是位置,不能再存放一个数。
而A、B都可以先解析成a=a+(a++) 和a=a+(++a) ,当然括号要先算,表达式的值一个是4一个是5,但是++运算后a的值都是5.

倚天照海花无数,流水高山心自知。
2012-05-17 10:41
xiyao0206
Rank: 2
等 级:论坛游民
帖 子:25
专家分:32
注 册:2012-4-23
收藏
得分:1 
21楼的解释差不多对,但是A,B的结果应该是9和10.表达式是不能作为左值的。所以答案肯定是A,B
2012-05-17 22:16
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:1 
这东西考的是基础啊个人感觉没啥意思

[ 本帖最后由 BianChengNan 于 2012-5-18 14:24 编辑 ]

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-05-18 14:22
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:1 
我先顶一下

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-05-18 15:13
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:1 
俺来围观一下哈……
2012-05-18 16:11
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 21楼 nuciewth
对于你这种人,我真的很无语!你上机实验一下,就可以知道你自己是多么的愚蠢!

愿用余生致力编程
2012-05-18 19:53
千年小妖
Rank: 2
等 级:论坛游民
帖 子:11
专家分:17
注 册:2012-5-18
收藏
得分:1 
(A)正确,a=9;(B)正确,a=10;(C)错误;(D)正确,a=11。[A,B,C,D在VC++ 6.0中的结果,过程分析略。]学好C不仅要熟练基础知识,还要多思考,多上机练习。
2012-05-18 22:48
kakalla
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-5-20
收藏
得分:0 
学习了。。。。
2012-05-20 08:30
荡气回肠
Rank: 2
等 级:论坛游民
帖 子:33
专家分:40
注 册:2012-5-6
收藏
得分:0 
回复 楼主 婷婷99
int a = 4;    (A)a += (a++);   (B) a += (++a) ;    (C) (a++) += a;   (D) (++a) += (a++);

这道题目的知识点大致包括以下几点:
1、赋值运算符;
赋值表达式的语法格式: 变量名 = 表达式
使用赋值运算符须知:
(1)赋值运算符左侧的操作数称为“左值”,必须指明一个确定的可存储位置。
     x + y = 8, x + y 就不能确定一个可存储的位置,因此是错误的。同样对上面的题目进行分析可知 ,(C) (a++) += a;中(a++)不是一个左值,所以(C)是错误的。
   (2)赋值运算符右侧的操作数称为“右值”,可以是常量、变量、函数调用或任何合法的语言表达式。
   (3)赋值运算本身也是一个表达式,也可以是一个值,值就是左操作数的新值。
2、复合赋值运算符;
   所有复合赋值运算符的运算优先级都相同,结合方向也均为“从右到左”。
   以上问题复合赋值运算符的含义分别为:  int a = 4
   (A) a += (a++)  等价于  a = a + (a++)  等价于  9 = 5 + 4;
   (B) a += (++a)  等价于  a = a + (++a)  等价于  10 = 5 + 5;
   (C)     错误;
   (D) (++a) += (a++)  等价于  a = (  ++( (++a)  +  (a++) )  )   
       等价于  a = (  ++(6 + 4)  )    等价于  a  =  11
       a 的变化过程 (a++)4 ~ a 5 ~(++a) 6 ~ a 11.
2012-05-20 14:30
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 29楼 荡气回肠
说得真好,学习了……。
2012-05-20 21:56
快速回复:一道华为笔试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020166 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved