主题:麻烦解决几道C语言题
zlinsc
[专家分:0] 发布于 2010-07-06 15:54:00
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
2.以下常量中正确的是______
A.'abc' B.'\x123' C.3.145E-1.2 D."a"
P.S.为什么C不能选?
回复列表 (共7个回复)
沙发
拐角的认识 [专家分:0] 发布于 2010-07-06 18:22:00
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]
2.以下常量中正确的是______
A.'abc' B.'\x123' C.3.145E-1.2 D."a"
P.S.为什么C不能选?
[color=808000]e后面是整数[/color]
板凳
alweeq86 [专家分:1170] 发布于 2010-07-06 18:50:00
k=1/3*k++;
k=((1/3)*(k++));看清优先级 明白了么
3 楼
windy0will [专家分:2300] 发布于 2010-07-06 18:58:00
k=1/3*k++; 这应该不是合理的语句,至少不合标准。
我记得C标准规定在两个序列点之间不能对一个变量进行两次(含两次)以上的改变。
"k="对k改变了一次,"k++"对k改变了一次。如下面都是不合法(甚至错误)的语句:
a[++i] = b[i++] ;
a = ++b+++b;
4 楼
zlinsc [专家分:0] 发布于 2010-07-06 19:10:00
[quote]
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]
2.以下常量中正确的是______
A.'abc' B.'\x123' C.3.145E-1.2 D."a"
P.S.为什么C不能选?
[color=808000]e后面是整数[/color]
[/quote]
第一题中不是1/3*k=0,0++=1,k=1吗?
5 楼
雪光风剑 [专家分:27190] 发布于 2010-07-06 19:23:00
[quote][quote]
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]
2.以下常量中正确的是______
A.'abc' B.'\x123' C.3.145E-1.2 D."a"
P.S.为什么C不能选?
[color=808000]e后面是整数[/color]
[/quote]
第一题中不是1/3*k=0,0++=1,k=1吗?[/quote]
错,是右值的k进行了++,左值的k的结果是0*11=0
注意两边的k被编译器认为不是同一个k
6 楼
zlinsc [专家分:0] 发布于 2010-07-06 19:27:00
编译器怎么会这么识别,想不通。
7 楼
雪光风剑 [专家分:27190] 发布于 2010-07-06 20:33:00
[quote]
编译器怎么会这么识别,想不通。[/quote]
简单地来说,编译器是把右值计算完,最后一次赋给左值
所以在右值上的++就没有意义了
我来回复