自考網
 自考動態  報考指南  考試政策  復習指導  課程設置  自考試題  自考就業  考生故事  助學單位  自考論壇 
 公共課: 真題|模擬題|筆記串講  經濟類: 真題|模擬題|筆記串講  法學類: 真題|模擬題|筆記串講  文學類真題|模擬題|筆記串講  高校招生  網絡課堂

高級語言程序設計知識點總結六

作者:   發布時間:2009-05-18 18:04:00  來源:
  • 文章正文
  • 資料下載
  • 自考圈
  • 論壇

  函數形式參數也是函數的一種局部變量,指針形式參數就是函數的指針變量,函數sum()的定義又可改寫成如下形式:

  int sum(int *a, int n)

  { int s=0;

  for(; n——;)

  s+=*a++;

  return s;

  }

  實際參數向形式參數傳遞字符串某字符的指針

  這種情況要求形式參數為字符指針的,對應的實際參數是字符數組某個元素的指針,通常是字符串的首字符指針。由于字符率是用一維的字符數組來實現的,所以字符指針形式參數與指向數組元素指針形式參數有相同的使用方法。但因字符串的特殊性,在編寫字符串處理函數時還會有許多技巧。下面以字符串拷貝函數strcpy()的實現為例說明字符指針形式參數的用法。

  「例6.3」字符串拷貝函數strcpy()。

  該函數功能是將一個已知字符串的內容復制到另一字符數組中。拷貝函數設有兩個形式參數from,to.from為已知字符串的首字符指針,to為存儲復制字符串首字符指針。函數定義如下:

  void strcpy(char *to, char *from,)

  {

  while( *to++=*from++);

  }

  3.調用環境與函數共用全局變量

  為了減少函數的形式參數,或因若干函數必須共同對一組變量進行處理。可讓調用環境與被調用的函數共用一組變量。即在函數調用之前先給變量設置初值,函數對這些變量進行處理,并將處理結果留在全局變量中。由于這種使用方式函數之間相互影響太大,如程序有錯,就會很難修正。

  6.5  返回指針的函數

  函數也可以返回指向某種數據對象的指針值。定義(或說明)返回指針值函數的函數頭有以下形式:

  類型說明符     * 函數名(形式參數表)

  例如,函數說明:

  int     *f(int,int);

  說明函數f()返回指向int型數據的指針,該函數有兩個整型形式參數。

  在函數名的兩側分別為* 運算符和()運算符,而()的優先級高于*,函數名先與()結合。函數名()是函數的說明形式。在函數名之前的* ,表示此函數返回指針類型的值。

  「例6.4」 編制在給定的字符串中找特定字符的第一次出現。若找到,返回指向字符串中該字符的指針;否則,返回NULL值。

  設函數為search(),該函數有兩個形式參數,指向字符串首字符的指針和待尋找的字符。以下是函數search()的定義:

  char *search(char *s,char c)

  { while(*s && *s! = c)

  s++;

  return *s?s:NULL;

  }

  6.6  函數遞歸調用

  一個函數為完成它的復雜工作,可以調用其它別的函數。例如,從主函數出發,主函數調用函數A() ,函數A()又調用函數B(),函數B()又調用函數C(),等等。這樣從主函數出發,形成一個長長的調用鏈,就是通常所說的函數嵌套調用。函數嵌套調用時,有一個重要的特征:先被調用的函數后返回。如這里所舉例子,待函數C()完成計算返回后,B()函數繼續計算(可能還要調用其它函數) ,待計算完成,返回到函數A(),函數A()計算完成后,才返回到主函數。

  當函數調用鏈上的某兩個函數為同一個函數時,稱這種函數調用方式為遞歸調用。通過速歸調用方式完成其功能的函數稱為遞歸函數。許多問題的求解方法具有遞歸特征,用遞歸函數描述這種求解算法比較簡潔。計算n的階乘(n!)函數就是一個很好的例子。因

  n! = l*2*3* …*n

  按其定義用循環語句可以方便地實現,寫成函數見下例6.5.

  「例6.5」用循環實現階乘計算的函數。

  float fac(int n)

  {float s;

  int i;

  for(s=1.of,i=l;i<=n; i++)

  s*= l;

  return s;

  }

  然而,把n! 的定義改寫成以下遞歸定義形式

  (l)n!=1, n<=l;

  (2)n!= n*(n-1)!, n>l.

  根據這個定義形式可用遞歸函數描述如下例6.6.

  「例6.6」 用遞歸實現階乘計算的函數。

  float rfac(int n)

  {

  if( n<=1) return 1.0f;

  return n*rfac(n-1) ;

  }

  以計算3! 為例,說明遞歸函數被調用時的執行過程。設有代碼m= rfac(3) 調用函數rfac()。函數調用rfac(3) 的計算過程可大致敘述如下:

  以函數調用rfac(3) 去調用函數rfac() ;函數rfac(n=3) 為計算3*2! ,用rfac(2) 去調用函數rfac();函數rfac(n=2) 為計算2*1!,用rfac(1)去調用函數rfac();函數 rfac(n=l) 計算1! ,以結果1.0返回;返回到發出調用rfac(l) 處,繼續計算,得到2! 的結果2.0返回;返回到發出調用rfac(2) 處,繼續計算得到3! 的結果6.0返回。

  遞歸計算n! 有一個重要特征,為求n有關的解,化為求n-l的解,求n-1的解又化為求n-2的解,如此類推。特別地,對于1的解是可立即得到的。這是將大問題解化為小問題解的遞推過程。有了1的解以后,接著是一個回溯過程,逐步獲得2的解,3的解,……,直至n的解。

  「例6.7」 用遞歸函數實現數組元素的求和計算。

  要采用遞歸方法計算數組元素的和,可把數組元素的累計和等于當前元素與數組其余元素的和,而對數組其余元素的和通過遞歸實現。下面的函數定義是這樣的解法之一。

  int rsum(int *a, int n)

  {

  if( n==0) return 0;/*若數組沒有元素,則返回0*/

  return *a+rsum(a+l,n-1);/*當前元素與其余元素的和*/

  }

熱門資料下載:
<
自考最新熱貼:
【責任編輯:育路編輯  糾錯
【育路網版權與免責聲明】  
    ① 凡本網注明稿件來源為"原創"的所有文字、圖片和音視頻稿件,版權均屬本網所有。任何媒體、網站或個人轉載、鏈接、轉貼或以其他方式復制發表時必須注明"稿件來源:育路網",違者本網將依法追究責任;
    ② 本網部分稿件來源于網絡,任何單位或個人認為育路網發布的內容可能涉嫌侵犯其合法權益,應該及時向育路網書面反饋,并提供身份證明、權屬證明及詳細侵權情況證明,育路網在收到上述法律文件后,將會盡快移除被控侵權內容。
自考報名咨詢電話:010-51291357 51291557
熱點專題
 
 自考熱點關注
                        MORE>>
學員報名服務中心: 北京北三環西路32號恒潤中心18層1803室(交通位置圖
咨詢電話:北京- 010-51268840/41 傳真:010-51418040 上海- 021-51567016/17
育路網-中國新銳教育社區: 北京站 | 上海站 | 鄭州站| 天津站
本站法律顧問:邱清榮律師
1999-2010 育路教育版權所有| 京ICP證100429號
亚洲中国久久精品无码,国产大屁股视频免费区,一区二区三区国产亚洲综合,国产AV无码专区毛片
亚洲欧美日韩另类一区 | 线观看国产精品视频 | 久久久久国产视频 | 日日狠狠久久偷偷色综合老牛 | 在线看片免费人成视频在线 | 亚洲AV元码天堂一区二区三区 |