C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章 函數(shù)與程序結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章 函數(shù)與程序結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第3版)何欽銘 顏 暉 第10章 函數(shù)與程序結(jié)構(gòu)_第3頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章 函數(shù)與程序結(jié)構(gòu)【練習(xí)10-1】使用遞歸函數(shù)計(jì)算1到n之和:若要用遞歸函數(shù)計(jì)算sum=1+2+3+…+nn為正整數(shù),請(qǐng)寫(xiě)出該遞歸函數(shù)的遞歸式子及遞歸出口。試編寫(xiě)相應(yīng)程序。解答:遞歸式子:sum(i)=sum(i-1)+i;遞歸出口:sum(i)=0;【練習(xí)10-2】請(qǐng)完成下列宏定義:① MIN(a,b) 求a,b的最小值② ISLOWER(c) 判斷c是否為小寫(xiě)字母③ ISLEAP(y) 判斷y是否為閏年④ CIRFER(r) 計(jì)算半徑為r解答:①M(fèi)IN(a,b):a,b#defineMIN(a,b) (a<b)?a:b②ISLOWER(c):c#define ISLOWER(c) (c>='a'&&c<='z')③ISLEAP(y):y#defineISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④CIRFER(r):r#definePI 3.14159#defineCIRFER(r) 2*PI*(r)10-33形式上和使用上的區(qū)別。解答:函數(shù)實(shí)現(xiàn)intmax(intx,inty,intz){intt;if(x>=y)if(x>=z)elset=z;elseif(y>=z)elset=z;returnt;}宏實(shí)現(xiàn)#defineMAX(x,y,z) x>=y?(x>=z?x:z):(y>=z?y:z)MAX(intx,inty,intz),等程序執(zhí)行時(shí),執(zhí)行的是條件表達(dá)式,而不再存MAX(intx,inty,intz)的式子。習(xí)題10一、選擇題1.要調(diào)用數(shù)學(xué)函數(shù)時(shí),在#include命令行中應(yīng)包含C。A.”stdio.h” B.”string.h”D.”ctype.h”C.”math.h”2.對(duì)于以下遞歸函數(shù)f,調(diào)用f(4),其返回值為intf(intn)A。{ if(n) returnf(n-1)+elsereturnn;}A.10 B.4 C.0 D3.執(zhí)行下列程序:#defineMA(x,i=5;i=MA(i,i+后變量i的值應(yīng)為 By) (x*y)1)–7;。A.30D.1B.19C.234.宏定義“#defineDIV(a,b)開(kāi)后是 A 。a/b”,DIV(x+5,y-5)引用,替換展A.x+5/y-5B.(x+5/y–5)C.(x+5)/(y-5)D.(x+5)/(y-5);5.定義帶參數(shù)的宏“#definea、b的值進(jìn)行交換,下列表述中哪個(gè)是正確的 CJH(a,b,t)t。=a;a=b;b=t”,對(duì)兩個(gè)參數(shù)A.a(chǎn)bB.a(chǎn)、b、tC.不定義參數(shù)t將導(dǎo)致運(yùn)行錯(cuò)誤 D.不需要定義參數(shù)a、b、t類(lèi)型執(zhí)行下面程序,正確的輸出是 A 。intx=5,y=voidswap(){ intz;z=x; x=y; y=z;}intmain(void){intx=3,y=swap();printf("%d,%d\n",x,y)return0;}A.3,8 B.8,3 C.5,7 D.7,5下面說(shuō)法中正確的是 A 。AC以降低模塊間的耦合度B.若全局變量?jī)H由單個(gè)函數(shù)訪問(wèn),則可以將這個(gè)變量改為該函數(shù)的靜態(tài)局部變量,以降低模塊間的耦合度C.設(shè)計(jì)和使用訪問(wèn)動(dòng)態(tài)全局變量、靜態(tài)全局變量、靜態(tài)局部變量的函數(shù)時(shí),需要考慮變量生命周期問(wèn)題D.靜態(tài)全局變量使用過(guò)多,可那會(huì)導(dǎo)致動(dòng)態(tài)存儲(chǔ)區(qū)(堆棧)溢出二、填空題1.C語(yǔ)言的編譯預(yù)處理功能主要包括_條件編譯_、_宏定義_和_文件包含_2.執(zhí)行完下列語(yǔ)句段后,i的值為 5 。inti;intf(intx){return((x>0)?f(x-1)+f(x-2):1);}i=f(3);3.下列程序段A與B功能等價(jià),請(qǐng)?zhí)顚?xiě)程序段B中相應(yīng)語(yǔ)句。程序段A:intf(intn){ if(n<=1)returnelsereturnf(n-1)+f(n-2);}程序B:intf(intn){ _intt,t0,t0=0;t1=1;t=n;while(_n>1_){t=_t0+t1_;t0=t1;t1=t;n--;}return _t;_}5.下面程序用于計(jì)算f(k,power(m,nmn寫(xiě)程序中相應(yīng)語(yǔ)句。#include<stdio.h>intpower(intm,intn){ inti;intfor(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;}下列遞歸程序的輸出結(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=%ld\n",k);return0;}下列語(yǔ)句的運(yùn)算結(jié)果為_(kāi)7,-13 #defineF(x) x-2#defineD(x) x*F(x)printf("%d,%d",D(3),D(D(3)))三、程序設(shè)計(jì)題1.判斷滿(mǎn)足條件的三位數(shù):編寫(xiě)一個(gè)函數(shù),利用參數(shù)傳入一個(gè)3位數(shù)n,找出101~n間所有滿(mǎn)足下列兩個(gè)條件的數(shù):它是完全平方數(shù),又有兩位數(shù)字相同,如144、676等,函數(shù)返回找出這樣的數(shù)據(jù)的個(gè)數(shù)。試編寫(xiě)相應(yīng)程序。解答:#include<stdio.h>#include<math.h>intfun(intn);intmain(void){intn;printf("Inputn:");scanf("%d",&n);printf("total=%d\n",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.n(n>0n<=10),1!+2!+3!+……n!fact(nndoubl。試編寫(xiě)相應(yīng)程序。解答:#include<stdio.h>doublefact(intn);intmain(void){intn;printf("Inputn:");scanf("%d",&n);printf("1~%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;}xxn,x相應(yīng)程序。解答:#include<stdio.h>doublepower(doublex,intn);intmain(void){doublex;intn;printf("Inputx:");scanf("%lf",&x);printf("Inputn:");scanf("%d",&n);printf("%lf的%d次方=%lf",x,n,power(x,n));return0;}doublepower(doublex,intn){doubleresult;if(n==1)result=x;elseresult=x*power(x,(n-1));returnresult;}xn,一個(gè)函數(shù)。f(x,n)=x-x2+x3-x4+…+(-1)n-1x試編寫(xiě)相應(yīng)程序。解答:#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)=%lf\n",x,n,f(x,n));return0;}doublef(doublex,intn){if(n==1)returnx;elsereturnpow(-1,n-1)*pow(x,n)+f(x,n-1);}ack(m,nmnAckermenn的值:n+1 m=0ack(m,n)= ack(m-1,1) ack(m-1,ack(m,n-1)) 試編寫(xiě)相應(yīng)程序。解答:#include<stdio.h>intAck(intm,intn);intmain(void){intm,n;intscanf("%d%d",&m,&n);result=Ack(m,n);printf("Ackerman(%d,%d)=%d\n",m,n,result);return0;}intAck(intm,intn){if(m==0)returnelse if(n==0&&m>0)returnAck(m-1,1);else if(m>0&&n>0)returnAck(m-1,Ack(m,n-1));}Fabonaccif(n)=f(n-2)+f(n-1)(n>1)f(0)=0,f(1)=1。解答:#include<stdio.h>longfib(intn);intmain(void){intn;printf("Entern:");scanf("%d",&n);printf("fib(%d)=%ld\n",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;}求定義并調(diào)用函數(shù)dectobini(n),它的功能是輸出n解答:#include<stdio.h>intdectobini(intn);intmain(void){intn;printf("Inputn(十進(jìn)制整數(shù)):");scanf("%d",&n);printf("輸出二進(jìn)制:%d",dectobini(n));return0;}intdectobini(intn){intresult;if(n==0)result=0;elseresult=dectobini(n/2)*10+n%2;returnresult;}遞歸實(shí)現(xiàn)順序輸出整數(shù):輸入一個(gè)正整數(shù)n,位順序輸出的遞歸函數(shù)。試編寫(xiě)相應(yīng)程序。解答:#include<stdio.h>intinorder(intn);intmain(void){intn;printf("Inputn:");scanf("%d",&n);printf("按位順序輸出:%d\n",inorder(n));return0;}intinorder(intn){if(n<10)returnn;elsereturn(inorder(n/10)*10+n%10);}main解答:三角形面積為:area=s(sa)(sb)s)

s=(a+b+c)/2其中a、b、c分別是三角形的3條邊。請(qǐng)分別定義計(jì)算s和area的宏。再使用函數(shù)實(shí)現(xiàn),比較兩者在形式上和使用上的區(qū)別。解答:使用宏實(shí)現(xiàn)#include<stdio.h>#in

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論