4.conv(b)
int b;
{ if(b>=2)conv(b/2);
printf("%d",b%2);
return;
}
main()
{ int d;
scanf("%d",&d);
conv(d);
。
說明:本程序執(zhí)行時從鍵盤上輸入:22后跟回車鍵。
【解析】主函數(shù)中輸入整數(shù)22存入變量d中,然后調(diào)用函數(shù)。conv()。此時將把實參d中的22傳遞給形參b。然后再執(zhí)行函數(shù)體,函數(shù)體中前面一條語句是單分支語句,當(dāng)b>=2時再用“b/2”調(diào)用自己,顯然這是一個遞歸調(diào)用的函數(shù)。下面我們來詳細(xì)分析遞歸調(diào)用的過程:
第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í)行輸出語句,輸出結(jié)果為 b%2=1%2=1
執(zhí)行第5次調(diào)用的返回,執(zhí)行第今次調(diào)用時的輸出語句,輸出結(jié)果為b%2=2%2=0
執(zhí)行第4次調(diào)用的返回,執(zhí)行第3次調(diào)用時的輸出語句,輸出結(jié)果為b%2=5%2=1
執(zhí)行第3次調(diào)用的返回,執(zhí)行第2次調(diào)用時的輸出語句,輸出結(jié)果為b%2=11%2=1
執(zhí)行第2次調(diào)用的返回,執(zhí)行第1次調(diào)用時的輸出語句,輸出結(jié)果為b%2=22%2=0
執(zhí)行第1次調(diào)用的返回,將返回主函數(shù),結(jié)束程序的運行。
所以程序運行的輸出結(jié)果是:10110。
【參考答案】10110。
5.void f(p1,p2)
int *p1,*p2;
{ int i,j;
*p2=0;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
*p2+=*(pl+i*3+j);
return;
}
main()
{ int a[3][3]={{1,2},{3,4},{5,6}};
int s;
f(a,&s);
printf("%d",s);
。
【解析】本程序是由一個無返回值的函數(shù)f()和主函數(shù)組成的。先看主函數(shù),定義了一個3行3列的二維數(shù)組a,并且給a賦了初值,初值如下:
a[0][0]=1 a[0][1]=2 a[0][2]=0
a[1][0]=3 a[1][1]=4 a[1][2]=0
a[2][0]=5 a[2][1]=6 a[2][2]=0
接著調(diào)用無返回值的函數(shù)f(),然后輸出變量s中的值,顯然這個s中的值是在函數(shù)f()中獲得的。
接下來分析函數(shù)f()。該函數(shù)有兩個形參,第1個形參是指針變量p1,對應(yīng)的實際參數(shù)是數(shù)組a的首地址,即調(diào)用該函數(shù)后,指針變量p1是指向二維數(shù)組a的首地址。第2個形參也是指針變量p2,對應(yīng)的實參是變量s的地址,即函數(shù)調(diào)用后指針變量p2是指向變量s的。再來分析函數(shù)體。前面定義了兩個變量i和j,從后面的循環(huán)語句中看出是二重循環(huán)的控制變量。接著,通過“*p2=0”,給變量s賦值0。二重for循環(huán)的循環(huán)體是“*p2+=*(p1+i*3+j)”,其中的“*p2”是代表變量s的,“*(p1+i*3+j)”是代表數(shù)組元素a[i][j],這個賦值語句是把a[i][j]加到變量s中(即求數(shù)組元素的和),F(xiàn)在只要分析清楚二重循環(huán)是對哪些數(shù)組元素進行求和的就可以得出變量s的值了。
下面是對二重循環(huán)的執(zhí)行記錄:
i=0 j=0 對應(yīng)a[0][0],其值為1
j=1 對應(yīng)a[0][1],其值為2
j=2 對應(yīng)a[0][2],其值為0
i=1 j=1 對應(yīng)a[1][1],其值為4
j=2 對應(yīng)a[1][2],其值為0
i=2 j=2 對應(yīng)a[2][2],其值為0
所以,s=a[0][0]+a[0][l]+a[0][2]+a[1][1]+a[2][2]+a[2][2]= 1+2+0+4+0+0=7。
【參考答案】7。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |