| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 863 人关注过本帖
标题:C初学者求助
只看楼主 加入收藏
南国迦叶
Rank: 2
等 级:论坛游民
帖 子:46
专家分:20
注 册:2010-7-9
结帖率:88.24%
收藏
已结贴  问题点数:20 回复次数:10 
C初学者求助
例1,设a=5,b=6,c=7,d=8,执行(m=a>b)&&(n=c>d)后n的值为
A.1
B.2
C.3
D.4
我的分析是:(m=a>b)&&(n=c>d)相当于(m=0)&&(n=0),两个为假的逻辑值的逻辑与值应该为0
所以,我自己的最后结果是0。但是没有结果为0的选项,请各位大侠分析

例2,下列程序段执行后,变量k、x、y、z的值依次为
int k,x,y,z;
x=y=z=1;
k=x++&&y++||z++;
A.1、2、2、1
B.1、2、2、2
C.0、2、2、1
D.0、2、2、2
首先,怀疑自己对自增自减运算符“++”和“--”在变量前和变量后的运用理解还是不透
我的理解是,z++表示先使用z,然后再使其值加1;++z表示先将z的值加1,然后再使用z
所以k=x++&&y++||z++等价于k=2&&2||2,等价于k=1||2,即结果为1(值为真),所以答案是B
由于没有参考答案,所以不确定自己的答案。
我想知道的是如果B是正确答案的话,那么k=x++&&y++||z++可以分解为  k=x&&y||z
                                                                x=x+1
                                                                y=y+1
                                                                z=z+1
不是说“++”和“--”的优先级高于“&&”和“||”吗,那就应该分解为
                                                                x=x+1
                                                                y=y+1
                                                                z=z+1
                                                                k=x&&y||z
实际上应该是那一种理解,我矛盾啊,都弄糊涂了......
2010-07-22 15:31
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:4 
第一道 选A 理由是n为非0值。
第二道 选A 理由 看k=1,无可厚非,程序忽略z++,因为出现短路,z++成为什么都不重要,z=1,根据排除法 选A

[ 本帖最后由 do8do8do8 于 2010-7-22 15:42 编辑 ]

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-22 15:40
jinchats
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-6-5
收藏
得分:4 
看来楼主对 && 运算符还是不太了解。
&& 和 || 运算符都有短路功能,如:(表达式1)&&(表达式2),如果表达式1为假,则表达式2不执行。
2010-07-22 15:51
南国迦叶
Rank: 2
等 级:论坛游民
帖 子:46
专家分:20
注 册:2010-7-9
收藏
得分:0 
回复 2楼 do8do8do8
不明白,c>d为假,所以c>d的值就是0啊,同理a>b的值也是0啊,再将两个0分别付给m和n,之后再求他们 的逻辑与值。
不是这样的吗?
2010-07-22 16:03
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
只有一种可能 m 和 n 要么等于0 要么等于1 既然 出现短路 我的意思是说:(m=a>b)&&(n=c>d)
a>b为假那么m等于0 而又遇到了&& 那么后面就不用算了 直接跳出 程序没算到c>d这一步,n如果没初始化,那么它是个非0值
而非0值 在逻辑领域里就是1
所以n可以被当1看待 就这么解释 如果不是这样 那么题错了 把出题的那个人找出来痛扁上万次

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-22 16:08
c手指
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2010-7-21
收藏
得分:4 
顶5楼。我决的差不多要不没答案
2010-07-22 17:18
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:4 
呵呵,这两题都选A,让我来帮你解释一下吧:
例1,设a=5,b=6,c=7,d=8,执行(m=a>b)&&(n=c>d)后n的值为
A.1
B.2
C.3
D.4
你看看哦(m=a>b)&&(n=c>d)a是否大于b呢?显然不是,那么值就为0,应为逻辑运算符是&&,所以后面的就不用比较了,和||相反,但是还没有算到后面的表达式,所以n是个不确定的值,也正如5楼所讲的,如果还是不懂你可以将这个表达式放到程序里调试
例二:还是选A,我的观点和2楼是一样的,看他的解释吧!

希望对LZ有所帮助哦

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-22 17:35
南国迦叶
Rank: 2
等 级:论坛游民
帖 子:46
专家分:20
注 册:2010-7-9
收藏
得分:0 
回复5楼 sunyh1999
我明白了5楼对例1的分析,顺便问一下是不是凡是没有初始化的值都为非0啊?

另外,大家能帮我分析下2楼的为什么一来就说k的值为显然为1啊,是如何那么快判断的?因为k后面是赋值运算符,运算级别低于后面的自增自减运算符级别,我的理解是k的值至少应该在确定x++后才能定吧
真的不理解,高手能详细解释一下例2吗,不胜感激!
2010-07-22 22:29
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
收藏
得分:4 
对于 例二 k=x++&&y++||z++;  由于想,x,y,z,或者x++,y++,z++都不为0,所以k显然是1;
对例一  我也奇怪, 数据类型不同,没有初始化的值就不同
如 auto型数据  未初始化 时 其值 随机;
   extern型数据 ,statice型数据  未初始化 时 其值为0;
再说 为什么n的值 非0 就是 1  ;奇怪之极!!!
                  
2010-07-23 14:37
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
收藏
得分:0 
喂 LZ  还没解决呢?怎么就结了?
2010-07-23 21:26
快速回复:C初学者求助
数据加载中...
 
   



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

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