3.main() { int x1,x2,x3,x4;
7 z( l. J( a0 } I+ [/ f+ j8 ?' v x1=x2=x3=x4=1;8 m% E4 d3 N$ b
switch(x1)
& V) r* J5 s/ Q, m4 D { case 1:switch(x2)7 _1 o3 e* W# v7 y
{ case 0:x3++;break;9 ~) X. u, h: u7 \" T
case 1:x4--;4 ]9 b5 U5 s) v$ U! s
}
4 s. ?7 d- F5 a7 G" K case 2:x3++,x4--;
) h. S4 N" U5 E, o7 ^6 Y2 e, V0 H }
6 R3 a8 `! v5 y3 X4 n printf("%d%d",x3,x4);
9 V5 M( r6 ?4 `. f. o9 ] }$ j C# x" Y5 M/ U7 O0 Z; w3 f
【解析】本题的关键是嵌套的多分支语句switch。注意在执行switch语句前,变量x1、x2、x3、x4已经赋值,他们的值均为1。执行外层switch语句时,用于控制分支选择的变量x1的值为1,所以要执行的是“case 1”的分支。该分支又是一个switch语句,用于控制分支选择的变量x2的值为1,所以需要执行的是“case 1”的分支。该分支执行的语句是“x4--”,使得x4的值变为0。接着退出该分支,即退出内层的switch语句。由于外层的switch语句的“case 1”分支中没有“break”语句,所以将继续执行其后的“case 2”分支,即执行“x3++,x4--;”,结果x3等于2, x4等于-1。再退出外层switch语句,执行输出语句,此时,变量x3的值为2;变量x4的值为-1。所以输出结果是2-1。* c2 E. C% d+ |# o
【参考答案】2-1。7 E( z% @! r+ T1 ~) m
4.conv(b)
0 o7 k; e' A# m+ ? int b;1 y& W+ O9 u% O+ @6 J- N# i
{ if(b>=2)conv(b/2);* K! f9 L; o& Z8 t) l) c5 Y
printf("%d",b%2);
9 q- R- @+ ]! E( |: w: \$ I$ J return;
! F. ]3 D& H; V) t; b }! P& Q3 {* y/ i R2 e$ `* N
main()
2 O9 r2 O7 T5 s. H; G* w { int d;+ K: i. ^5 ]2 X: M! }
scanf("%d",&d);
$ f& R5 |: m# w+ D$ A( { conv(d);
' L0 ^- N0 q8 e$ p# }0 t: m. P! p7 i }3 q! C( y/ ?) F$ ~
说明:本程序执行时从键盘上输入:22后跟回车键。 v- t5 t& }/ W" j. ]
【解析】主函数中输入整数22存入变量d中,然后调用函数。conv()。此时将把实参d中的22传递给形参b。然后再执行函数体,函数体中前面一条语句是单分支语句,当b>=2时再用“b/2”调用自己,显然这是一个递归调用的函数。下面我们来详细分析递归调用的过程:8 X6 w! _3 H+ c Z% b ~) q
第1次调用函数(b=22),满足条件,引起第2次调用自己(b/2=11)0 ?4 Z* }7 \* y& ?+ n& b& A N
第2次调用函数(b=11),满足条件,引起第3次调用自己(b/2=5)
) f: z% ? u# J3 n3 ^ 第3次调用函数(b=5),满足条件,引起第4次调用自己(b/2=2): Q0 [8 ? ^! x3 J4 j
第4次调用函数(b=2),满足条件,引起第2次调用自己(b/2=1)
2 i- b+ x/ m( R# X4 |( v, O 第5次调用函数(b=1),不满足条件,执行输出语句,输出结果为 b%2=1%2=1
. C" P4 z7 C4 h- E# i, X: N 执行第5次调用的返回,执行第今次调用时的输出语句,输出结果为b%2=2%2=0
2 e0 `& z; {4 R8 J4 x1 z d 执行第4次调用的返回,执行第3次调用时的输出语句,输出结果为b%2=5%2=1
9 j0 S* _" b; C; i$ A, a; q 执行第3次调用的返回,执行第2次调用时的输出语句,输出结果为b%2=11%2=1( ~3 M/ x' {" T3 U/ ] B
执行第2次调用的返回,执行第1次调用时的输出语句,输出结果为b%2=22%2=0* q( r* C {! M* U! h" U
执行第1次调用的返回,将返回主函数,结束程序的运行。0 M' _4 O# n7 L6 w4 m8 V2 D- T
所以程序运行的输出结果是:10110。
3 e: J( x8 `8 z 【参考答案】10110。 |