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);
}
【解析】本題的關(guān)鍵是嵌套的多分支語(yǔ)句switch。注意在執(zhí)行switch語(yǔ)句前,變量x1、x2、x3、x4已經(jīng)賦值,他們的值均為1。執(zhí)行外層switch語(yǔ)句時(shí),用于控制分支選擇的變量x1的值為1,所以要執(zhí)行的是“case 1”的分支。該分支又是一個(gè)switch語(yǔ)句,用于控制分支選擇的變量x2的值為1,所以需要執(zhí)行的是“case 1”的分支。該分支執(zhí)行的語(yǔ)句是“x4--”,使得x4的值變?yōu)?。接著退出該分支,即退出內(nèi)層的switch語(yǔ)句。由于外層的switch語(yǔ)句的“case 1”分支中沒(méi)有“break”語(yǔ)句,所以將繼續(xù)執(zhí)行其后的“case 2”分支,即執(zhí)行“x3++,x4--;”,結(jié)果x3等于2, x4等于-1。再退出外層switch語(yǔ)句,執(zhí)行輸出語(yǔ)句,此時(shí),變量x3的值為2;變量x4的值為-1。所以輸出結(jié)果是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);
}
說(shuō)明:本程序執(zhí)行時(shí)從鍵盤(pán)上輸入:22后跟回車(chē)鍵。
【解析】主函數(shù)中輸入整數(shù)22存入變量d中,然后調(diào)用函數(shù)。conv()。此時(shí)將把實(shí)參d中的22傳遞給形參b。然后再執(zhí)行函數(shù)體,函數(shù)體中前面一條語(yǔ)句是單分支語(yǔ)句,當(dāng)b>=2時(shí)再用“b/2”調(diào)用自己,顯然這是一個(gè)遞歸調(diào)用的函數(shù)。下面我們來(lái)詳細(xì)分析遞歸調(diào)用的過(guò)程:
第1次調(diào)用函數(shù)(b=22),滿足條件,引起第2次調(diào)用自己(b/2=11)
第2次調(diào)用函數(shù)(b=11),滿足條件,引起第3次調(diào)用自己(b/2=5)
第3次調(diào)用函數(shù)(b=5),滿足條件,引起第4次調(diào)用自己(b/2=2)
第4次調(diào)用函數(shù)(b=2),滿足條件,引起第2次調(diào)用自己(b/2=1)
第5次調(diào)用函數(shù)(b=1),不滿足條件,執(zhí)行輸出語(yǔ)句,輸出結(jié)果為 b%2=1%2=1
執(zhí)行第5次調(diào)用的返回,執(zhí)行第今次調(diào)用時(shí)的輸出語(yǔ)句,輸出結(jié)果為b%2=2%2=0
執(zhí)行第4次調(diào)用的返回,執(zhí)行第3次調(diào)用時(shí)的輸出語(yǔ)句,輸出結(jié)果為b%2=5%2=1
執(zhí)行第3次調(diào)用的返回,執(zhí)行第2次調(diào)用時(shí)的輸出語(yǔ)句,輸出結(jié)果為b%2=11%2=1
執(zhí)行第2次調(diào)用的返回,執(zhí)行第1次調(diào)用時(shí)的輸出語(yǔ)句,輸出結(jié)果為b%2=22%2=0
執(zhí)行第1次調(diào)用的返回,將返回主函數(shù),結(jié)束程序的運(yùn)行。
所以程序運(yùn)行的輸出結(jié)果是:10110。
【參考答案】10110。
相關(guān)推薦:計(jì)算機(jī)軟考程序員備考:程序設(shè)計(jì)知識(shí)點(diǎn)匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |