匿名用户
1级
2013-11-22 回答
1. if ( a>b ) if ( c>b ) if ( c
可以看作一个条件语句:if ( a>b ) ...,后面的语句if ( c>b ) if ( cb条件成立时被执行;由于a>b条件成立,执行if ( c>b ) if ( cb ) ...,当c>b不成立时,不会去执行if ( c
if ( a>b ) { if ( c>b ) { if ( c
2. if ( a>b ) if ( b>c ) x=1; else x=2;这句要分析x=1和x=2的条件。
x=1:如果a>b成立且b>c成立,(a>b如果不成立后面的if语句就不会被执行导致x不会被赋值)
x=2:如果a>b成立且b<=c成立。
同理分析A~D中的条件,即可得到结论。
A.是这个条件语句的正确变形,等价于原语句(原语句因为条件a>b成立后只执行一个if语句所以省略了这个大括号)
B.if ( a<=b ) ; else if ( b>c ) x=1; else x=2;相当于原语句的
if ( a>b ) { if ( b>c ) x=1; else x=2; } else ;逻辑改写,这个也是等价的,如果感觉复杂,可以从x=1和x=2的条件来分析。
C.由于x=2的情况比原语句多了,所以不等价,原语句a<=b时什么也不做,现在语句都归入else的情况了。
D.从x=1和x=2的条件来判断,与原语句相同。
【例5】while ( --x>6 ) printf("*");相当于while ( x--,x>6 ) printf("*");
x=8,x--=7,x>6成立,累计输出: *
x=7,x--=6,x>6不成立,累计输出: *,结束循环,这题就是要搞清判断--x>6等同于先将x--执行了再进行判断x>6是否成立
【例6】同理for ( k=2;++k<4;k++ ) ++k;可写为:for ( k=2;k++,k<4;k++ ) k++;
3. for ( k=4;k>0;k-- ) { break; --k; }大括号表示其中的内容属于for语句的循环体
相当于:
k=4;
LOOP: if ( k>0 )
{ break; //相当于 goto OUTLOOP;
--k;
goto LOOP;
}
OUTLOOP:
先执行的是赋值语句k=4;然后判断k>0,成立执行大括号中的第1语句break;是为跳出for语句,结果是循环体中后面语句不会被执行,k--;也不会被执行而结束循环。k=4