#include <stdio.h> main( ) { int x, y; for(x=30, y=0; x>=10, y<10; x--, y++) x/=2, y+=2; printf(“x=%d,y=%d\n”,x,y); }
运行结果为:
x=0, y=12
x=6,y=6
x=6,y=7
x=0,y=12
本题考查逗号运算符。
逗号表达式中用逗号分开的表达式分别求值,以最后一个表达式的值作为整个表达式的值。
6,6
7 4
x=7,y=5
//x 15-1=14 14/2=7-1=6 6/2=3-1=2 2/2=1-1=0 //y 2+1=3 3+2+1=6 6+2+1=9 9+2=11+1=12
x=0, y=12
在 for 循环中,循环条件是 x>=10, y<10。这个条件中有两个表达式,使用逗号分隔,但实际上只有最后一个表达式 y<10 影响循环的执行。
for
x>=10, y<10
y<10
x=7,y=4
30 0 29 1 14 3 13 4 6 6 5 7 2 9 1 10 0 12
里面那个是逗号表达式,看后面的判断语句
15 2
7 5
x=0,y=12(当x>=10或者y<10 其中一个成立,循环就执行)
x=6,7=0
15 2 14 3
7 5 6 6
3 8 2 9
1 11 0 12
6 6
X=7,y=5
moonya 回复 moonya: x=0,y=12
7,11
useryang 回复 useryang: 跑了一下,0 12
X=0,y=12
x=0,y=10
山药男孩 回复 山药男孩: y=12
0 12
0,12
X=6,y=6
x=0,y=12
x=7,y=9
30/2=15-1=14 0+2=2+1=3
14/2=7-1=6 3+2=5+1=6
6/2=3-1=2 6+2=8+1=9
2/2=1-1=0 9+2=11+1=12 终止for循环
结果为X=0,Y=12
wwwwww 回复 wwwwww: 0 12
x=7,y=5
炀炀 回复 炀炀: x=0,y=12
先判断。 首先逗号运算标准是最右边 即用y<10 再/2 或者+2 然后 x-=1 y++
wlt 回复 wlt: x=0,y=12
x=1,y=10
15 2 7 3
x=6,y=6
x = 0, y = 12
0,12
原来只要有一个符合条件就继续运行啊,学到了
6 4
第一次:执行前x=30,y=0,满足循环条件;运算结束x=15,y=2;循环结束x=14,y=3
第二次:执行前x=14,y=3,满足循环条件;运算结束x=7,y=5;循环结束x=6,y=6
第三次:执行前x=6,y=6,虽然x<10不满足条件,但是y满足循环条件,继续执行循环体内的运算;运算结束x=3,y=8;循环结束x=2,y=9
第四次:执行前x=2,y=9,继续执行;运算技术,x=1,y=11;循环结束x=0,y=12
第五次:执行前x=0,y=12,不满足循环条件,循环结束。
最终结果:x=0,y=12。
0,12 for(; 条件1,条件2;)存在逗号条件2优先级高
0 10
x=20,y=9
AvidLex 回复 AvidLex: 晕了,忘记计算了
逗号运算符在所有运算符中优先级最低,且具有左结合性。因此会依次计算其后的各个表达式的值,最后计算出的表达式的值作为整个逗号表达式的值。所以for循环结束的条件是y<10,x>=10其实没有起作用
for (;表达式1,表达式2); 则以条件2为主。 for (;表达式1&表达式2); 则以先达到条件的表达式为主。 for (;表达式1|表达式2); 则以后达到条件的表达式为主。
for(a=0,b=0;a<6,b<4;a++,b++) { }
printf("a = %d,b =%d",a,b); 结果为4。 for(a=0,b=0;a<6&b<4;a++,b++) { } printf("a = %d,b =%d",a,b); 结果为4。 for(a=0,b=0;a<6|b<4;a++,b++) { } printf("a = %d,b =%d",a,b); 结果为6。
本题
x=30,y=0
1 x=15,y=2;x-1=14,y+1=3
2 x=7,y=5;x-1=6,y+1=6
3 x=3,y=8;x-1=4,y+1=9
4 x=0,y=11;y不满足y<10的条件,结束循环。
13245372484 回复 13245372484: 本题 x=30,y=0 1 x=15,y=2;x-1=14,y+1=3 2 x=7,y=5;x-1=6,y+1=6 3 x=3,y=8;x-1=2,y+1=9 4 x=1,y=11;x-1=0,y+1=12 此时y不满足y<10的条件,结束循环。 输出x=0,y=12。
X=0,Y=12
过程
x=15,y=2
x=14,y=3
x=3,y=8
x=2,y=9
x=1,y=11
6 12
x=0 y=12
for( ;表达式1,表达式2;)这个东西是以表达式二为主的
for( ;表达式1&表达式2;)是以先到的为主
for( ;表达式1|表达式2;)是以后到的为主
x=30 y=0
do1 x=15 y=2
d02 x=7 y=5
do3 x=3 y=8
d04 x=0 y=11
x=10,y=12
szL_123 回复 szL_123: x=0,y=12
x=0,y=12以第二个条件为主
用户登录可进行刷题及查看答案
登录后提交答案