发布网友 发布时间:2022-05-06 13:44
共3个回答
热心网友 时间:2022-06-30 19:35
if ( a>b ) if ( c>b ) if ( c<x ) x=2; else x=3;
可以看作一个条件语句:if ( a>b ) ...,后面的语句if ( c>b ) if ( c<x ) x=2; else x=3;仅在a>b条件成立时被执行;由于a>b条件成立,执行if ( c>b ) if ( c<x ) x=2; else x=3;部分,你也可以看成这是一个条件语句即if ( c>b ) ...,当c>b不成立时,不会去执行if ( c<x ) ...; else ...;这个语句。对你来说这不是逻辑问题而是条件语句的问题,搞清楚层次关系就好办了:
if ( a>b ) { if ( c>b ) { if ( c<x ) x=2; else x=3; } }
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++;
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
热心网友 时间:2022-06-30 19:35
一、可以写成这样,走到第二个if的时候条件不成立所在x值不会变
热心网友 时间:2022-06-30 19:36
问题一,其实就是一个格式的问题,如果写成这样应该更便于理解