C語言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu)
《C語言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu)》由會員分享,可在線閱讀,更多相關(guān)《C語言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu)(11頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第10章函數(shù)與程序結(jié)構(gòu) 【練習(xí)10-1】使用遞歸函數(shù)計(jì)算1到n之和:若要用遞歸函數(shù)計(jì)算sum=l+2+3+???+n(n為正整數(shù)),請寫出該遞歸函數(shù)的遞歸式子及遞歸出口。試編寫相應(yīng)程序。 解答: 遞歸式子:sum(i)=sum(i-1)+i; 遞歸出口:sum(i)=0;【練習(xí)10-2】請完成下列宏定義: ① MIN(a,b)求a,b的最小值 ② ISLOWER(c)判斷c是否為小寫字母 ③ ISLEAP(y)判斷y是否為閏年 ④ CIRFER(r)計(jì)算半徑為r的圓周長 解答: ① MIN(a,b):求a,b的最小值。#defineMIN(a,b)(a
2、ISLOWER(c):判斷c是否為小寫字母。 #defineISLOWER(c)(c>='a'&&c<='z') ③ ISLEAP(y):判斷y是否為閏年。 #defineISLEAP(y)(y%4==0&&y%100!=0)||y%400==0) ④ CIRFER(r):計(jì)算半徑為r的圓周長。 #definePI3.14159 #defineCIRFER(r)2*PI*(r) 【練習(xí)10-3】分別用函數(shù)和帶參宏實(shí)現(xiàn)從3個(gè)數(shù)中找出最大數(shù),請比較兩者在形式上和使用上的區(qū)別。 解答: (1) 函數(shù)實(shí)現(xiàn) intmax(intx,inty,intz) { intt; if(x
3、>=y) if(x>=z)t=x; elset=z; else if(y>=z)t=y; elset=z; returnt; } (2) 宏實(shí)現(xiàn) #defineMAX(x,y,z)x>=y?(x>=z?x:z):(y>=z?y:z)兩者在定義形式上完全不同。使用上函數(shù)是在執(zhí)行時(shí),從主調(diào)函數(shù)轉(zhuǎn)到函數(shù)max(),然后再返回到主調(diào)函數(shù),函數(shù)體始終存在;而宏是在編譯預(yù)處理時(shí),用條件表達(dá)式去替換MAX(intx,inty,intz),等程序執(zhí)行時(shí),執(zhí)行的是條件表達(dá)式,而不再存在MAX(intx,inty,intz)的式子。 習(xí)題10 一、選擇題 1. 要調(diào)用數(shù)學(xué)函數(shù)時(shí),在#inc
4、lude命令行中應(yīng)包含C C.”math.h” A.”stdio.h”B.”string.h” D.”ctype.h” 2. 對于以下遞歸函數(shù)f,調(diào)用f(4),其返回值為Aintf(intn) {if(n)returnf(n-1)+n; elsereturnn; } A.10B.4 C.0D.以上均不是 3. 執(zhí)行下列程序: #defineMA(x,y)(x*y)i=5; i=MA(i,i+1)-7; 后變量i的值應(yīng)為B。 A. 30B.19C.23 D.1 引用,替換展 4?宏定義“#defineDIV(a,b)a/b”,經(jīng)DIV(x+5,y-5
5、)開后是A。 A. x+5/y-5C.(x+5)/(y-5) B. (x+5/y-5) D.(x+5)/(y-5); 5.定義帶參數(shù)的宏“#defineJH(a,b,t)t二a;a=b;b=t”,對兩個(gè)參數(shù)a、b的值進(jìn)行交換,下 列表述中哪個(gè)是正確的C。 A.不定義參數(shù)a和b將導(dǎo)致編譯錯(cuò)誤B.不定義參數(shù)a、b、t將導(dǎo)致編譯錯(cuò)誤 C. 不定義參數(shù)t將導(dǎo)致運(yùn)行錯(cuò)誤D.不需要定義參數(shù)a、b、t類型6.執(zhí)行下面程序,正確的輸出是Aintx=5,y=7; voidswap() {intz; z=x;x=y;y=z; } intmain(void) { intx=3,y=8
6、;swap(); printf("%d,%d\n",x,y);return0; } A.3,8B.8,3C.5,7D.7,5 7.下面說法中正確的是A。 A. 若全局變量僅在單個(gè)C文件中訪問,則可以將這個(gè)變量修改為靜態(tài)全局變量,以降低模塊間的耦合度 B. 若全局變量僅由單個(gè)函數(shù)訪問,則可以將這個(gè)變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度 C. 設(shè)計(jì)和使用訪問動(dòng)態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函數(shù)時(shí),需要考慮變量生命周期問題 D. 靜態(tài)全局變量使用過多,可那會導(dǎo)致動(dòng)態(tài)存儲區(qū)(堆棧)溢出 二、填空題 1. C語言的編譯預(yù)處理功能主要包括_條件編譯_、_宏定義_和
7、_文件包含_。2.執(zhí)行完下列語句段后,i的值為5。 inti; intf(intx) { return((x>0)?f(x-1)+f(x-2):1); } i=f(3); 3.下列程序段A與B功能等價(jià),請?zhí)顚懗绦蚨蜝中相應(yīng)語句。程序段A: intf(intn) {if(n<=1) returnn; else returnf(n-1)+f(n-2); } 程序B:intf(intn) {_intt,t0,t1;_ t0=0;t1=1;t=n; while(_n>1_){ t=_t0+t1_; t0=t1; t1=t;n--; }return_t;_ }
8、
5.下面程序用于計(jì)算f(k,n)=lk+2k+???+nk,其中power(m,n)求mn。請?zhí)顚懗绦蛑邢鄳?yīng)語句。
#include
9、ld”,k,n,f(k,n));
return0;
}5.下列遞歸程序的輸出結(jié)果為g=4,g=3,k=6。
#include
10、#defineD(x)x*F(x)
printf("%d,%d",D(3),D(D(3)));
三、程序設(shè)計(jì)題
1.判斷滿足條件的三位數(shù):編寫一個(gè)函數(shù),利用參數(shù)傳入一個(gè)3位數(shù)n找出101?n間所有滿足下列兩個(gè)條件的數(shù):它是完全平方數(shù),又有兩位數(shù)字相同,如144、676等,函數(shù)返回找出這樣的數(shù)據(jù)的個(gè)數(shù)。試編寫相應(yīng)程序。
解答:
#include
11、));
return0;
}
intfun(intn)
{
inti,d=0;
for(i=101;i<=n;i++)if(((int)sqrt(i)*(int)sqrt(i))==i){if(i/100==(i/10)%10||i/100==i%10||(i/10)%10==i%10)d++;
}
returnd;
2. 遞歸求階乘和:輸入一個(gè)整數(shù)n(n>0且n<=10),求1!+2!+3!+……n!。定義并調(diào)用函數(shù)fact(n)計(jì)算n!,函數(shù)類型是double。試編寫相應(yīng)程序。
解答:
#include
12、ntmain(void) { intn; printf("Inputn:"); scanf("%d",&n); printf("l~%d的階乘和:%.0lf",n,fact(n)); return0; } doublefact(intn) { inti; doubleresult=1; if(n==1) result=1; else{ for(i=1;i<=n;i++)result=result*i; result=result+fact(n-1); } returnresult; } 3. 遞歸實(shí)現(xiàn)計(jì)算x—輸入實(shí)數(shù)x和正整數(shù)n,用遞歸函數(shù)計(jì)算x*的值。
13、試編寫相應(yīng)程序。
解答:
#include
14、esult=x*power(x,(n-1));
returnresult;
}
4. 遞歸求式子和:輸入實(shí)數(shù)x和正整數(shù)n,用遞歸的方法對下列計(jì)算式子編寫一個(gè)函數(shù)。
f(x,n)=x-x?+x?-X4+…+(-1)n-ix(n>0)
試編寫相應(yīng)程序。
解答:
#include
15、,&n);
printf("f(%lf,%d)=%lf\n",x,n,f(x,n));
return0;
}
doublef(doublex,intn)
{
if(n==1)
returnx;
else
}
5. 遞歸計(jì)算函數(shù)ack(m,n):輸入m和n。編寫遞歸函數(shù)計(jì)算Ackermenn函數(shù)的值:
n+1m=0
ack(m,n)二<.ack(m—l,l)n=0&&m>0
ack(m—l,ack(m,n—l))m>0&&n>0
試編寫相應(yīng)程序。
解答:
#include
16、 intm,n; intresult; scanf("%d%d",&m,&n);result=Ack(m,n);printf("Ackerman(%d,%d)=%d\n",m,n,result); return0; } intAck(intm,intn) { if(m==0)returnn+1; elseif(n==0&&m>0) returnAck(m—1,1); elseif(m>0&&n>0) returnAck(m—1,Ack(m,n—1)); } 6. 遞歸實(shí)現(xiàn)求Fabonacci數(shù)列:用遞歸方法編寫求斐波那契數(shù)列的函數(shù),函數(shù)類型為整型,并寫出相應(yīng)主函數(shù)。
17、斐波那契數(shù)列的定義如下。試編寫相應(yīng)程序。
f(n)=f(n—2)+f(n—1)(n>l)其中f(0)二0,f(l)二1。解答:
#include
18、1);
returnres;
}
7. 遞歸實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換二進(jìn)制:輸入一個(gè)正整數(shù)n,將其轉(zhuǎn)換為二進(jìn)制輸出。要求定義并調(diào)用函數(shù)dectobini(n),它的功能是輸出n的二進(jìn)制。試編寫相應(yīng)程序。解答:
#include
19、=0)
result=0;
else
result=dectobini(n/2)*10+n%2;
returnresult;
}
8. 遞歸實(shí)現(xiàn)順序輸出整數(shù):輸入一個(gè)正整數(shù)n,編寫遞歸函數(shù)實(shí)現(xiàn)對其進(jìn)行按位順序輸出的遞歸函數(shù)。試編寫相應(yīng)程序。
解答:
#include
20、if(n<10)returnn;
elsereturn(inorder(n/10)*10+n%10);
}
9. 輸入n(n<10)個(gè)整數(shù),統(tǒng)計(jì)其中素?cái)?shù)的個(gè)數(shù)。要求程序有兩個(gè)文件組成,一個(gè)文件中編寫main函數(shù),另一個(gè)文件中編寫素?cái)?shù)判斷的函數(shù)。使用文件包含的方式實(shí)現(xiàn)。試編寫相應(yīng)程序。
解答:
10.三角形面積為:
area二x(s一a)x(s一b)x(s-c)s=(a+b+c)/2
其中a、b、c分別是三角形的3條邊。請分別定義計(jì)算s和area的宏。再使用函數(shù)實(shí)現(xiàn),比較兩者在形式上和使用上的區(qū)別。
解答:
(1)使用宏實(shí)現(xiàn)
#include
21、
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案