歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

C語言程序設(shè)計(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu)

  • 資源ID:114396913       資源大小:26.42KB        全文頁數(shù):11頁
  • 資源格式: DOCX        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

C語言程序設(shè)計(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu)

第10章函數(shù)與程序結(jié)構(gòu)【練習10-1】使用遞歸函數(shù)計算1到n之和:若要用遞歸函數(shù)計算sum=l+2+3+n(n為正整數(shù)),請寫出該遞歸函數(shù)的遞歸式子及遞歸出口。試編寫相應程序。解答:遞歸式子:sum(i)=sum(i-1)+i;遞歸出口:sum(i)=0;【練習10-2】請完成下列宏定義: MIN(a,b)求a,b的最小值 ISLOWER(c)判斷c是否為小寫字母 ISLEAP(y)判斷y是否為閏年 CIRFER(r)計算半徑為r的圓周長解答: MIN(a,b):求a,b的最小值。#defineMIN(a,b)(a<b)?a:b 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):計算半徑為r的圓周長。#definePI3.14159#defineCIRFER(r)2*PI*(r)【練習10-3】分別用函數(shù)和帶參宏實現(xiàn)從3個數(shù)中找出最大數(shù),請比較兩者在形式上和使用上的區(qū)別。解答:(1) 函數(shù)實現(xiàn)intmax(intx,inty,intz)intt;if(x>=y)if(x>=z)t=x;elset=z;elseif(y>=z)t=y;elset=z;returnt;(2) 宏實現(xiàn)#defineMAX(x,y,z)x>=y?(x>=z?x:z):(y>=z?y:z)兩者在定義形式上完全不同。使用上函數(shù)是在執(zhí)行時,從主調(diào)函數(shù)轉(zhuǎn)到函數(shù)max(),然后再返回到主調(diào)函數(shù),函數(shù)體始終存在;而宏是在編譯預處理時,用條件表達式去替換MAX(intx,inty,intz),等程序執(zhí)行時,執(zhí)行的是條件表達式,而不再存在MAX(intx,inty,intz)的式子。習題10一、選擇題1. 要調(diào)用數(shù)學函數(shù)時,在#include命令行中應包含CC.”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.4C.0D.以上均不是3. 執(zhí)行下列程序:#defineMA(x,y)(x*y)i=5;i=MA(i,i+1)-7;后變量i的值應為B。A. 30B.19C.23D.1引用,替換展4宏定義“#defineDIV(a,b)a/b”,經(jīng)DIV(x+5,y-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”,對兩個參數(shù)a、b的值進行交換,下列表述中哪個是正確的C。A.不定義參數(shù)a和b將導致編譯錯誤B.不定義參數(shù)a、b、t將導致編譯錯誤C. 不定義參數(shù)t將導致運行錯誤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;swap();printf("%d,%dn",x,y);return0;A3,8B8,3C5,7D7,57下面說法中正確的是A。A. 若全局變量僅在單個C文件中訪問,則可以將這個變量修改為靜態(tài)全局變量,以降低模塊間的耦合度B. 若全局變量僅由單個函數(shù)訪問,則可以將這個變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度C. 設(shè)計和使用訪問動態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函數(shù)時,需要考慮變量生命周期問題D. 靜態(tài)全局變量使用過多,可那會導致動態(tài)存儲區(qū)(堆棧)溢出二、填空題1. C語言的編譯預處理功能主要包括_條件編譯_、_宏定義_和_文件包含_。2執(zhí)行完下列語句段后,i的值為5。inti;intf(intx)return(x>0)?f(x-1)+f(x-2):1);i=f(3);3.下列程序段A與B功能等價,請?zhí)顚懗绦蚨蜝中相應語句。程序段A:intf(intn)if(n<=1)returnn;elsereturnf(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;_5.下面程序用于計算f(k,n)=lk+2k+nk,其中power(m,n)求mn。請?zhí)顚懗绦蛑邢鄳Z句。#include<stdio.h>intpower(intm,intn)inti;intp=1;for(i=1;i<=n;i+)p=p*m;returnp;intf(intk,intn)inti;ints=0;for(i=1;i<=n;i+)s=s+power(i,k);returns;intmain(void)intk,n;scanf(“%d%d”,&k,&n);printf(“f(%d,%d)=%ld”,k,n,f(k,n);return0;5.下列遞歸程序的輸出結(jié)果為g=4,g=3,k=6。#include<stdio.h>intfib(intg)switch(g)case0:return0;case1:case2:return2;printf("g=%d,",g);returnfib(g-1)+fib(g-2);intmain(void)intk;k=fib(4);printf("k=%ldn",k);return0;6下列語句的運算結(jié)果為_7,-13。#defineF(x)x-2#defineD(x)x*F(x)printf("%d,%d",D(3),D(D(3);三、程序設(shè)計題1.判斷滿足條件的三位數(shù):編寫一個函數(shù),利用參數(shù)傳入一個3位數(shù)n找出101n間所有滿足下列兩個條件的數(shù):它是完全平方數(shù),又有兩位數(shù)字相同,如144、676等,函數(shù)返回找出這樣的數(shù)據(jù)的個數(shù)。試編寫相應程序。解答:#include<stdio.h>#include<math.h>intfun(intn);intmain(void)intn;printf("Inputn:");scanf("%d",&n);printf("total=%dn",fun(n);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. 遞歸求階乘和:輸入一個整數(shù)n(n>0且n<=10),求1!+2!+3!+n!。定義并調(diào)用函數(shù)fact(n)計算n!,函數(shù)類型是double。試編寫相應程序。解答:#include<stdio.h>doublefact(intn);intmain(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;elsefor(i=1;i<=n;i+)result=result*i;result=result+fact(n-1);returnresult;3. 遞歸實現(xiàn)計算x輸入實數(shù)x和正整數(shù)n,用遞歸函數(shù)計算x*的值。試編寫相應程序。解答:#include<stdio.h>doublepower(doublex,intn);intmain(void)doublex;intn;printf("Inputx:");scanf("%lf",&x);printf("Inputn:");scanf("%d",&n);printf("%lf的小次方=%lf",x,n,power(x,n);return0;doublepower(doublex,intn)doubleresult;if(n=1)result=x;elseresult=x*power(x,(n-1);returnresult;4. 遞歸求式子和:輸入實數(shù)x和正整數(shù)n,用遞歸的方法對下列計算式子編寫一個函數(shù)。f(x,n)=x-x?+x?-X4+(-1)n-ix(n>0)試編寫相應程序。解答:#include<stdio.h>#include<math.h>doublef(doublex,intn);intmain(void)intn;doublex;printf("Inputx:");scanf("%lf",&x);printf("Inputn:");scanf("%d",&n);printf("f(%lf,%d)=%lfn",x,n,f(x,n);return0;doublef(doublex,intn)if(n=1)returnx;else5. 遞歸計算函數(shù)ack(m,n):輸入m和n。編寫遞歸函數(shù)計算Ackermenn函數(shù)的值:n+1m=0ack(m,n)二<.ack(ml,l)n=0&&m>0ack(ml,ack(m,nl)m>0&&n>0試編寫相應程序。解答:#include<stdio.h>intAck(intm,intn);intmain(void)intm,n;intresult;scanf("%d%d",&m,&n);result=Ack(m,n);printf("Ackerman(%d,%d)=%dn",m,n,result);return0;intAck(intm,intn)if(m=0)returnn+1;elseif(n=0&&m>0)returnAck(m1,1);elseif(m>0&&n>0)returnAck(m1,Ack(m,n1);6. 遞歸實現(xiàn)求Fabonacci數(shù)列:用遞歸方法編寫求斐波那契數(shù)列的函數(shù),函數(shù)類型為整型,并寫出相應主函數(shù)。斐波那契數(shù)列的定義如下。試編寫相應程序。f(n)=f(n2)+f(n1)(n>l)其中f(0)二0,f(l)二1。解答:#include<stdio.h>longfib(intn);intmain(void)intn;printf("Entern:");scanf("%d",&n);printf("fib(%d)=%ldn",n,fib(n);return0;longfib(intn)longres;if(n=0)res=0;elseif(n=1)res=1;elseres=fib(n-2)+fib(n-1);returnres;7. 遞歸實現(xiàn)十進制轉(zhuǎn)換二進制:輸入一個正整數(shù)n,將其轉(zhuǎn)換為二進制輸出。要求定義并調(diào)用函數(shù)dectobini(n),它的功能是輸出n的二進制。試編寫相應程序。解答:#include<stdio.h>intdectobini(intn);intmain(void)intn;printf("Inputn(十進制整數(shù)):");scanf("%d",&n);printf(“輸出二進制:%d",dectobini(n);return0;intdectobini(intn)intresult;if(n=0)result=0;elseresult=dectobini(n/2)*10+n%2;returnresult;8. 遞歸實現(xiàn)順序輸出整數(shù):輸入一個正整數(shù)n,編寫遞歸函數(shù)實現(xiàn)對其進行按位順序輸出的遞歸函數(shù)。試編寫相應程序。解答:#include<stdio.h>intinorder(intn);intmain(void)intn;printf("Inputn:");scanf("%d",&n);printf("按位順序輸出:%dn",inorder(n);return0;intinorder(intn)if(n<10)returnn;elsereturn(inorder(n/10)*10+n%10);9. 輸入n(n<10)個整數(shù),統(tǒng)計其中素數(shù)的個數(shù)。要求程序有兩個文件組成,一個文件中編寫main函數(shù),另一個文件中編寫素數(shù)判斷的函數(shù)。使用文件包含的方式實現(xiàn)。試編寫相應程序。解答:10三角形面積為:area二x(s一a)x(s一b)x(s-c)s=(a+b+c)/2其中a、b、c分別是三角形的3條邊。請分別定義計算s和area的宏。再使用函數(shù)實現(xiàn),比較兩者在形式上和使用上的區(qū)別。解答:(1)使用宏實現(xiàn)#include<stdio.h>#include<math.h>#defineS(a,b,c)(a)+(b)+(c)/2#defineAREA(s,a,b,c)sqrt(s)*(s)-(a)*(s)-(b)*(s)-(c)intmain(void)doublea,b,c,s;printf("inputa,b,c:");scanf("%lf%lf%lf",&a,&b,&c);s=S(a,b,c);printf("s=%lf,area=%lfn",s,AREA(s,a,b,c);return0;(2)使用函數(shù)實現(xiàn)#include<stdio.h>#include<math.h>doublef1(doublea,doubleb,doublec)return(a+b+c)/2;doublef2(doubles,doublea,doubleb,doublec)returnsqrt(s*(s-a)*(s-b)*(s-c);intmain(void)doublea,b,c,s;printf("inputa,b,c:");scanf("%lf%lf%lf",&a,&b,&c);s=f1(a,b,c);printf("s=%lf,area=%lfn",s,f2(s,a,b,c);return0;

注意事項

本文(C語言程序設(shè)計(第3版)何欽銘 顏 暉 第10章函數(shù)與程序結(jié)構(gòu))為本站會員(xin****18)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!