3.main()
{ int x1,x2,x3,x4;
x1=x2=x3=x4=1;
switch(x1)
{ case 1:switch(x2)
{ case 0:x3++;break;
case 1:x4--;
}
case 2:x3++,x4--;
}
printf("%d%d",x3,x4);
}
【解析】本题的关键是嵌套的多分支语句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。
【参考答案】2-1。
4.conv(b)
int b;
{ if(b>=2)conv(b/2);
printf("%d",b%2);
return;
}
main()
{ int d;
scanf("%d",&d);
conv(d);
}
说明:本程序执行时从键盘上输入:22后跟回车键。
【解析】主函数中输入整数22存入变量d中,然后调用函数。conv()。此时将把实参d中的22传递给形参b。然后再执行函数体,函数体中前面一条语句是单分支语句,当b>=2时再用“b/2”调用自己,显然这是一个递归调用的函数。下面我们来详细分析递归调用的过程:
第1次调用函数(b=22),满足条件,引起第2次调用自己(b/2=11)
第2次调用函数(b=11),满足条件,引起第3次调用自己(b/2=5)
第3次调用函数(b=5),满足条件,引起第4次调用自己(b/2=2)
第4次调用函数(b=2),满足条件,引起第2次调用自己(b/2=1)
第5次调用函数(b=1),不满足条件,执行输出语句,输出结果为 b%2=1%2=1
执行第5次调用的返回,执行第今次调用时的输出语句,输出结果为b%2=2%2=0
执行第4次调用的返回,执行第3次调用时的输出语句,输出结果为b%2=5%2=1
执行第3次调用的返回,执行第2次调用时的输出语句,输出结果为b%2=11%2=1
执行第2次调用的返回,执行第1次调用时的输出语句,输出结果为b%2=22%2=0
执行第1次调用的返回,将返回主函数,结束程序的运行。
所以程序运行的输出结果是:10110。
【参考答案】10110。