<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            如何快速掌握C語言函數

            時間:2025-10-13 04:35:53 賽賽 C語言 我要投稿

            如何快速掌握C語言函數

              C源程序是由函數組成的。最簡單的程序有一個主函數 main(),但實用程序往往由多個函數組成,由 主函數調用其他函數,其他函數也可以互相調用。函數是C源程序的基本模塊,程序的許多功能是通過對 函數模塊的調用來實現的,學會編寫和調用函數可以提高編程效率。下面是小編為大家帶來的如何快速掌握C語言函數的知識,歡迎閱讀。

              1、函數的定義

              C源程序是由函數組成的。最簡單的程序有一個主函數 main(),但實用程序往往由多個函數組成,由 主函數調用其他函數,其他函數也可以互相調用。函數是C源程序的基本模塊,程序的許多功能是通過對 函數模塊的調用來實現的,學會編寫和調用函數可以提高編程效率。

              函數的定義通常包含以下內容:

              類型 函數名(形參表說明) /*函數首部*/

              {

              說明語句 /*函數體*/

              執行語句

              }

              對上面的定義形式進行以下說明:

              (1)“類型”是指函數返回值的類型。函數返回值不能是數組,也不能是函數,除此之外任何合法的數據類型都可以是函數的類型,如:int,long,float,char 等。函數類型可以省略,當不指明函數類型時,系統默認的是整型。

              (2)函數名是用戶自定義的標識符,在 C 語言函數定義中不可省略,須符合 C 語言對標識符的規范, 用于標識函數,并用該標識符調用函數。另外函數名本身也有值,它代表了該函數的入口地址,使用指針 調用函數時,將用到此功能。

              (3)形參又稱為“形式參數”。形參表是用逗號分隔的一組變量說明,包括形參的類型和形參的標識 符,其作用是指出每一個形參的類型和形參的名稱,當調用函數時,接收來自主調函數的數據,確定各參 數的值。

              (4)用{ }括起來的部分是函數的主體,稱為函數體。函數體是一段程序,確定該函數應完成的規定的 運算,應執行的規定的動作,集中體現了函數的功能。函數內部應有自己的說明語句和執行語句,但函數 內定義的變量不可以與形參同名。花括號{ }是不可以省略的。

              根據函數定義的一般形式,可以定義一個最簡單的函數:

              add()

              {

              ;

              }

              這是 C 語言中一個合法的函數,函數名為 add。它沒有函數類型說明,也沒有形參表,同時函數體內 也沒有語句。實際上函數 add 不執行任何操作和運算,它是一個空函數,在一般情況下是沒有用途的,但 在程序開發的過程中有時是需要的,常用來代替尚未開發完畢的函數。

              2、函數的調用

              主調函數使用被調函數的功能,稱為函數調用。在 C 語言中,只有在函數調用時,函數體中定義的功 能才會被執行。C語言中,函數調用的一般形式為:

              函數名(類型 形參,類型 形參...);

              對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變量或其他構造類型數據及表 達式,各實參之間用逗號分隔。

              在C語言中,可以用以下幾種方式調用函數。

              (1)函數表達式:函數作為表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種 方式要求函數是有返回值的。例如:

              z=max(x,y);是一個賦值表達式,把 max 的返回值賦予變量 z。

              (2)函數語句:函數調用的一般形式加上分號即構成函數語句。

              例如:

              printf ("%d",a);

              scanf ("%d",&b);

              都是以函數語句的方式調用函數。

              (3)函數實參:函數作為另一個函數調用的實際參數出現。這種情況是把該函數的返回值作為實參進 行傳送,因此要求該函數必須是有返回值的。例如:

              1printf("%d",max(x,y)); /*把 max 調用的返回值作為 printf 函數的實參*/

              在主調函數中調用某函數之前應對該被調函數進行聲明。在主調函數中對被調函數進行說明的目的是

              使編譯系統知道被調函數返回值的類型,以便在主調函數中按此種類型對返回值進行相應的處理。其一般

              形式為:

              類型說明符 被調函數名(類型 形參,類型 形參...);

              需要注意的是,函數的聲明和函數的定義有本質上的不同。主要區別在以下兩個方面:

              (1)函數的定義是編寫一段程序,應有函數的具體功能語句——函數體;而函數的聲明僅是向編譯系 統的一個說明,不含具體的執行動作。

              (2)在程序中,函數的定義只能有一次,而函數的聲明可以有多次。

              3、變量的存儲類型

              在 C 語言中,變量是對程序中數據所占內存空間的一種抽象定義,定義變量時,用戶定義變量的名、 變量的類型,這些都是變量的操作屬性。不僅可以通過變量名訪問該變量,系統還通過該標識符確定變量 在內存中的位置。在計算機中,保存變量當前值的存儲單元有兩類,一類是內存,另一類是 CPU 的寄存 器。變量的存儲類型關系到變量的存儲位置,C 語言中定義了 4 種存儲屬性,即自動變量、外部變量、靜 態變量和寄存器變量,它關系到變量在內存中的存放位置, 由此決定了變量的保留時間和變量的作用范圍。

              變量的保留時間又稱為生存期,從時間的角度,可將變量分為靜態存儲和動態存儲兩種情況。靜態存 儲是指變量存儲在內存的靜態存儲區,在編譯時就分配了存儲空間,在整個程序的運行期間,該變量占有 固定的存儲單元,程序結束后,這部分空間才釋放,變量的值在整個程序中始終存在;動態存儲是指變量 存儲在內存的動態存儲區,在程序的運行過程中,只有當變量所在的函數被調用時,編譯系統才臨時為該 變量分配一段內存單元,函數調用結束,該變量空間釋放,變量的值只在函數調用期存在。

              變量的作用范圍又稱為作用域,從空間角度,可以將變量分為全局變量和局部變量。局部變量是在一 個函數或復合語句內定義的變量,它僅在函數或復合語句內有效,編譯時,編譯系統不為局部變量分配內 存單元,而是在程序運行過程中,當局部變量所在的函數被調用時,編譯系統根據需要,臨時分配內存, 調用結束,空間釋放;全局變量是在函數之外定義的變量,其作用范圍為從定義處開始到本文件結束,編 譯時,編譯系統為其分配固定的內存單元,在程序運行的自始至終都占用固定單元。

              1. 自動變量

              函數中的局部變量,如不專門聲明為 static 存儲類別,都是動態地分配存儲空間的,數據存儲在動態 存儲區中。函數中的形參和在函數中定義的變量(包括在復合語句中定義的變量)都屬此類,在調用該函 數時系統會給它們分配存儲空間,在函數調用結束時就自動釋放這些存儲空間。這類局部變量稱為自動變 量。自動變量用關鍵字 auto 進行存儲類別的聲明,例如聲明一個自動變量:

              int fun(int a)

              {

              auto int b,c=3; /*定義 b,c 為自動變量*/

              }

              a 是函數 fun()的形參,b、c 是自動變量,并對 c 賦初值 3。執行完 fun()函數后,自動釋放 a、b、c 所占的存儲單元。

              2. 外部變量

              外部變量(即全局變量)是在函數的外部定義的,它的作用域為從變量定義處開始,到本程序文件的末尾。如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件末尾。如果在定義點之前的函數想引用該外部變量,則應該在引用之前用關鍵字 extern 對該變量進行“外部變量聲明”。表示該 變量是一個已經定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量.

              用 extern 聲明外部變量,擴展程序文件中的作用域

              3. 靜態變量

              有時希望函數中的局部變量的值在函數調用結束后不消失而保留原值,這時就應該指定局部變量為靜 態局部變量,用關鍵字 static 進行聲明。

              4. 寄存器變量

              為提高效率,C 語言允許將局部變量的值存放在 CPU 的寄存器中,這種變量叫做寄存器變量,用關鍵字 register 聲明。使用寄存器變量需要注意以下幾點:

              (1)只有局部自動變量和形式參數可以作為寄存器變量。

              (2)一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量。

              (3)不能使用取地址運算符“&”求寄存器變量的地址。

              C語言函數的遞歸和調用

              一、要點:

              1、C語言函數可以遞歸調用。

              2、可以通過直接或間接兩種方式調用。目前只討論直接遞歸調用。

              二、遞歸條件

              采用遞歸方法來解決問題,必須符合以下三個條件:

              1、可以把要解決的問題轉化為一個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的對象有規律地遞增或遞減。

              說明:解決問題的方法相同,調用函數的參數每次不同(有規律的遞增或遞減),如果沒有規律也就不能適用遞歸調用。

              2、可以應用這個轉化過程使問題得到解決。

              說明:使用其他的辦法比較麻煩或很難解決,而使用遞歸的方法可以很好地解決問題。

              3、必定要有一個明確的結束遞歸的條件。

              說明:一定要能夠在適當的地方結束遞歸調用。不然可能導致系統崩潰。

              三、遞歸實例

              例:使用遞歸的方法求n!

              當n>1時,求n!的問題可以轉化為n*(n-1)!的新問題。

              比如n=5:

              第一部分:5*4*3*2*1 n*(n-1)!

              第二部分:4*3*2*1 (n-1)*(n-2)!

              第三部分:3*2*1 (n-2)(n-3)!

              第四部分:2*1 (n-3)(n-4)!

              第五部分:1 (n-5)! 5-5=0,得到值1,結束遞歸。

              源程序:

              fac(int n)

              {int t;

              if(n==1)||(n==0) return 1;

              else

              { t=n*fac(n-1);

              return t;

              }

              }

              main( )

              {int m,y;

              printf(“Enter m:”);

              scanf(“%d”,&m);

              if(m<0) printf(“Input data Error!n”);

              else

              {y=fac(m);

              printf(“n%d! =%d n”,m,y);

              }

              }

              四、遞歸說明

              1、當函數自己調用自己時,系統將自動把函數中當前的變量和形參暫時保留起來,在新一輪的調用過程中,系統為新調用的函數所用到的變量和形參開辟另外的存 儲單元(內存空間)。每次調用函數所使用的變量在不同的內存空間。

              2、遞歸調用的層次越多,同名變量的占用的存儲單元也就越多。一定要記住,每次函數的調用,系統都會為該函數的變量開辟新的內存空間。

              3、當本次調用的函數運行結束時,系統將釋放本次調用時所占用的內存空間。程序的流程返回到上一層的調用點,同時取得當初進入該層時,函數中的變量和形參 所占用的內存空間的數據。

              4、所有遞歸問題都可以用非遞歸的方法來解決,但對于一些比較復雜的遞歸問題用非遞歸的方法往往使程序變得十分復雜難以讀懂,而函數的遞歸調用在解決這類 問題時能使程序簡潔明了有較好的可讀性;但由于遞歸調用過程中,系統要為每一層調用中的變量開辟內存空間、要記住每一層調用后的返回點、要增加許多額外的 開銷,因此函數的遞歸調用通常會降低程序的運行效率。

              五、程序流程

              fac(int n) /*每次調用使用不同的參數*/

              { int t; /*每次調用都會為變量t開辟不同的內存空間*/

              if(n==1)||(n==0) /*當滿足這些條件返回1 */

              return 1;

              else

              { t=n*fac(n-1); /*每次程序運行到此處就會用n-1作為參數再調用一次本函數,此處是調用點*/

              return t; /*只有在上一句調用的所有過程全部結束時才運行到此處。*/

              }

              }

            【如何快速掌握C語言函數】相關文章:

            Java程序如何調用C/C++語言函數11-15

            什么是C語言函數01-22

            淺談C語言函數11-11

            C語言的數組與函數02-28

            C語言函數的定義03-07

            C語言函數的含義09-30

            C語言函數 atoi()09-18

            如何運用C語言malloc和free函數10-01

            C語言中如何定義函數式宏02-15

            • 相關推薦

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院