函數(shù)形式參數(shù)也是函數(shù)的一種局部變量,指針形式參數(shù)就是函數(shù)的指針變量,函數(shù)sum()的定義又可改寫成如下形式: int sum(int *a, int n) { int s=0; for(; n——;) s+=*a++; return s; } 實(shí)際參數(shù)向形式參數(shù)傳遞字符串某字符的指針 這種情況要求形式參數(shù)為字符指針的,對應(yīng)的實(shí)際參數(shù)是字符數(shù)組某個元素的指針,通常是字符串的首字符指針。由于字符率是用一維的字符數(shù)組來實(shí)現(xiàn)的,所以字符指針形式參數(shù)與指向數(shù)組元素指針形式參數(shù)有相同的使用方法。但因字符串的特殊性,在編寫字符串處理函數(shù)時還會有許多技巧。下面以字符串拷貝函數(shù)strcpy()的實(shí)現(xiàn)為例說明字符指針形式參數(shù)的用法。 「例6.3」字符串拷貝函數(shù)strcpy()。 該函數(shù)功能是將一個已知字符串的內(nèi)容復(fù)制到另一字符數(shù)組中�?截惡瘮�(shù)設(shè)有兩個形式參數(shù)from,to.from為已知字符串的首字符指針,to為存儲復(fù)制字符串首字符指針。函數(shù)定義如下: void strcpy(char *to, char *from,) { while( *to++=*from++); } 3.調(diào)用環(huán)境與函數(shù)共用全局變量 為了減少函數(shù)的形式參數(shù),或因若干函數(shù)必須共同對一組變量進(jìn)行處理�?勺屨{(diào)用環(huán)境與被調(diào)用的函數(shù)共用一組變量。即在函數(shù)調(diào)用之前先給變量設(shè)置初值,函數(shù)對這些變量進(jìn)行處理,并將處理結(jié)果留在全局變量中。由于這種使用方式函數(shù)之間相互影響太大,如程序有錯,就會很難修正。 6.5 返回指針的函數(shù) 函數(shù)也可以返回指向某種數(shù)據(jù)對象的指針值。定義(或說明)返回指針值函數(shù)的函數(shù)頭有以下形式: 類型說明符 * 函數(shù)名(形式參數(shù)表) 例如,函數(shù)說明: int *f(int,int); 說明函數(shù)f()返回指向int型數(shù)據(jù)的指針,該函數(shù)有兩個整型形式參數(shù)。 在函數(shù)名的兩側(cè)分別為* 運(yùn)算符和()運(yùn)算符,而()的優(yōu)先級高于*,函數(shù)名先與()結(jié)合。函數(shù)名()是函數(shù)的說明形式。在函數(shù)名之前的* ,表示此函數(shù)返回指針類型的值。 「例6.4」 編制在給定的字符串中找特定字符的第一次出現(xiàn)。若找到,返回指向字符串中該字符的指針;否則,返回NULL值。 設(shè)函數(shù)為search(),該函數(shù)有兩個形式參數(shù),指向字符串首字符的指針和待尋找的字符。以下是函數(shù)search()的定義: char *search(char *s,char c) { while(*s && *s! = c) s++; return *s?s:NULL; } 6.6 函數(shù)遞歸調(diào)用 一個函數(shù)為完成它的復(fù)雜工作,可以調(diào)用其它別的函數(shù)。例如,從主函數(shù)出發(fā),主函數(shù)調(diào)用函數(shù)A() ,函數(shù)A()又調(diào)用函數(shù)B(),函數(shù)B()又調(diào)用函數(shù)C(),等等。這樣從主函數(shù)出發(fā),形成一個長長的調(diào)用鏈,就是通常所說的函數(shù)嵌套調(diào)用。函數(shù)嵌套調(diào)用時,有一個重要的特征:先被調(diào)用的函數(shù)后返回。如這里所舉例子,待函數(shù)C()完成計(jì)算返回后,B()函數(shù)繼續(xù)計(jì)算(可能還要調(diào)用其它函數(shù)) ,待計(jì)算完成,返回到函數(shù)A(),函數(shù)A()計(jì)算完成后,才返回到主函數(shù)。 當(dāng)函數(shù)調(diào)用鏈上的某兩個函數(shù)為同一個函數(shù)時,稱這種函數(shù)調(diào)用方式為遞歸調(diào)用。通過速歸調(diào)用方式完成其功能的函數(shù)稱為遞歸函數(shù)。許多問題的求解方法具有遞歸特征,用遞歸函數(shù)描述這種求解算法比較簡潔。計(jì)算n的階乘(n�。┖瘮�(shù)就是一個很好的例子。因 n! = l*2*3* …*n 按其定義用循環(huán)語句可以方便地實(shí)現(xiàn),寫成函數(shù)見下例6.5. 「例6.5」用循環(huán)實(shí)現(xiàn)階乘計(jì)算的函數(shù)。 float fac(int n) {float s; int i; for(s=1.of,i=l;i<=n; i++) s*= l; return s; } 然而,把n! 的定義改寫成以下遞歸定義形式 �。╨)n!=1, n<=l; (2)n�。� n*(n-1)!, n>l. 根據(jù)這個定義形式可用遞歸函數(shù)描述如下例6.6. 「例6.6」 用遞歸實(shí)現(xiàn)階乘計(jì)算的函數(shù)。 float rfac(int n) { if( n<=1) return 1.0f; return n*rfac(n-1) ; } 以計(jì)算3! 為例,說明遞歸函數(shù)被調(diào)用時的執(zhí)行過程。設(shè)有代碼m= rfac(3) 調(diào)用函數(shù)rfac()。函數(shù)調(diào)用rfac(3) 的計(jì)算過程可大致敘述如下: 以函數(shù)調(diào)用rfac(3) 去調(diào)用函數(shù)rfac() ;函數(shù)rfac(n=3) 為計(jì)算3*2! ,用rfac(2) 去調(diào)用函數(shù)rfac();函數(shù)rfac(n=2) 為計(jì)算2*1!,用rfac(1)去調(diào)用函數(shù)rfac();函數(shù) rfac(n=l) 計(jì)算1! ,以結(jié)果1.0返回;返回到發(fā)出調(diào)用rfac(l) 處,繼續(xù)計(jì)算,得到2! 的結(jié)果2.0返回;返回到發(fā)出調(diào)用rfac(2) 處,繼續(xù)計(jì)算得到3! 的結(jié)果6.0返回。 遞歸計(jì)算n! 有一個重要特征,為求n有關(guān)的解,化為求n-l的解,求n-1的解又化為求n-2的解,如此類推。特別地,對于1的解是可立即得到的。這是將大問題解化為小問題解的遞推過程。有了1的解以后,接著是一個回溯過程,逐步獲得2的解,3的解,……,直至n的解。 「例6.7」 用遞歸函數(shù)實(shí)現(xiàn)數(shù)組元素的求和計(jì)算。 要采用遞歸方法計(jì)算數(shù)組元素的和,可把數(shù)組元素的累計(jì)和等于當(dāng)前元素與數(shù)組其余元素的和,而對數(shù)組其余元素的和通過遞歸實(shí)現(xiàn)。下面的函數(shù)定義是這樣的解法之一。 int rsum(int *a, int n) { if( n==0) return 0;/*若數(shù)組沒有元素,則返回0*/ return *a+rsum(a+l,n-1);/*當(dāng)前元素與其余元素的和*/ } |
熱門資料下載: |
< |
自考最新熱貼: |
【責(zé)任編輯:育路編輯 糾錯】 |
|
【育路網(wǎng)版權(quán)與免責(zé)聲明】 | |
① 凡本網(wǎng)注明稿件來源為"原創(chuàng)"的所有文字、圖片和音視頻稿件,版權(quán)均屬本網(wǎng)所有。任何媒體、網(wǎng)站或個人轉(zhuǎn)載、鏈接、轉(zhuǎn)貼或以其他方式復(fù)制發(fā)表時必須注明"稿件來源:育路網(wǎng)",違者本網(wǎng)將依法追究責(zé)任; | |
② 本網(wǎng)部分稿件來源于網(wǎng)絡(luò),任何單位或個人認(rèn)為育路網(wǎng)發(fā)布的內(nèi)容可能涉嫌侵犯其合法權(quán)益,應(yīng)該及時向育路網(wǎng)書面反饋,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)情況證明,育路網(wǎng)在收到上述法律文件后,將會盡快移除被控侵權(quán)內(nèi)容。 |
熱點(diǎn)專題 |
·重慶:2011年自考各專業(yè)課程考試安排表 |
·浙江:7月7.41萬人參加自學(xué)考試 |
·廣州:2010年10月自考報名通知 |
·同濟(jì)大學(xué):2010年上半年自考畢業(yè)證發(fā)放 |
·陜西:2011年自學(xué)考試共開考96個專業(yè) |
·山東:64所院校將進(jìn)行自考實(shí)踐課程試點(diǎn) |
·萬州區(qū):2010年10月自考報名時間通知 |
·北京:2010年建成自考標(biāo)準(zhǔn)化考點(diǎn)試點(diǎn) |
·江蘇(南京)2010年7月自考成績查詢 |
·湖北:2010年7月自考成績查詢 |
誠聘英才 | 廣告招商 | 關(guān)于網(wǎng)站 | 聯(lián)系我們 | 地方加盟 | 商務(wù)合作 | 投訴建議 | 老師加盟 | 客服中心 | 網(wǎng)站地圖 | 學(xué)校中心 |
學(xué)員報名服務(wù)中心: 北京北三環(huán)西路32號恒潤中心18層1803室(交通位置圖) |
咨詢電話:北京- 010-51268840/41 傳真:010-51418040 上海- 021-51567016/17 |
本站法律顧問:邱清榮律師 |
1999-2010 育路教育版權(quán)所有| 京ICP證100429號 |