函數>函數定義的一般形式


函數定義的一般形式

1.無參數函數的定義形式

         類型識別字 函數名()

             {

                       變數宣告部分

                    語句

         }

其中類型識別字和函數名稱為函數頭。類型識別字指明了本函數的類型,函數的類型實際上是函數返回值的類型。 該類型識別字與前面介紹的各種說明符相同。函數名是由用戶定義的識別字,函數名後有一個空括弧,其中無參數,但括弧不可少。

{}中的內容稱為函數主體。在函數主體中變數宣告部分,是對函數中所用到的變數的類型說明。

    在很多情況下都不要求無參函數有返回值,此時函數類型符可以寫為void

我們可以改寫一個函數定義:

      #include<stdio.h>

      void Hello()

            {

               printf ("Hello,world \n");

      }

             void main()

            {

               Hello();

            }

這裏,只把main改為Hello()作為函數名,其餘不變。Hello()函數是一個無參數函數,當被其他函數使用時,就會在螢幕上輸出 "Hello,world"

 

2.有參數函數定義的一般形式

           類型識別字 函數名稱(參數表列)

               {

                        變數宣告部分

                    語句

          }

函數的參數,它們可以是各種類型的變數,各參數之間用逗號間隔。在進行函數使用時,主函數將賦予這些參數實際的值。參數既然是變數,必須在參數表中給出參數的類型說明。

例如,定義一個函數,用於求兩個數中的大數,可寫為:

     #include<stdio.h>

     int max(int a, int b)

    {

             if (a>b) return a;

             else return b;

}

    void main(){

           int x=10,y=210;

          printf("%d與%d之間,最大的數為%d\n",x,y,max(x,y));

    }

第一行說明max函數是一個整數函數,其返回的函數值是一個整數。參數為 a,b 均為整數。 a,b 的具體值是由主調函數在使用時傳送過來的。在{}中的函數內,除參數外沒有使用其他變數,因此只有語句而沒有聲明部分。在max函數體中的return語句是把a(b)的值作為函數的值返回給主函數。有返回值函數中至少應有一個return語句。

 在C程式中,一個函數的定義可以放在任意位置,既可放在主函數main之前,也可放在main之後。如果放在main()之後,必須要先宣告該函數。有四種方式,如以下範例。

例如:

可把max 函數置在main之後,也可以把它放在main之前。修改後的程式如下所示。

     【例

函數放在main()之前(1)

函數放在main()之後(1)

#include<stdio.h>

int max(int a,int b)

{

    if(a>b)return a;

    else return b;

}

main()

{

    int x,y,z;

    printf("input two numbers:\n");

    scanf("%d%d",&x,&y);

    z=max(x,y);

    printf("maxmum=%d",z);

}

#include<stdio.h>

int max(int a,int b);   //函數的宣告

main()

{

    int x,y,z;

    printf("input two numbers:\n");

    scanf("%d%d",&x,&y);

    z=max(x,y);

    printf("maxmum=%d",z);

}

int max(int a,int b)

{

    if(a>b)return a;

    else return b;

}

函數放在main()之前(2)

函數放在main()之前(2)

#include<stdio.h>

int max(int a,int b)

{

    if(a>b)return a;

    else return b;

}

main()

{

    int max(int a,int b);

    int x,y,z;

    printf("input two numbers:\n");

    scanf("%d%d",&x,&y);

    z=max(x,y);

    printf("maxmum=%d",z);

}

#include<stdio.h>

main()

{

    int max(int a,int b);

    int x,y,z;

    printf("input two numbers:\n");

    scanf("%d%d",&x,&y);

    z=max(x,y);

    printf("maxmum=%d",z);

}

int max(int a,int b)

{

    if(a>b)return a;

    else return b;

}

    現在我們可以從函數定義、函數說明及函數使用的角度來分析整個程式,從中進一步瞭解函數的各種特點。

程式的第1行至第5行為max函數定義。進入主函數後,因為準備使用max函數,故先對max函數進行說明。函數定義和函數說明並不是一回事,在後面還要專門討論。 可以看出函數說明與函數定義中的函數頭部分相同,但是末尾要加分號。程式第12 行為使用max函數,並把x, y中的值傳送給max的參數a, bmax函數執行的結果(ab)將返回給變數z。最後由主函數輸出z的值。

3.函數的返回值

    函數的值是指函數被使用之後,執行函數體中的程式段所取得的並返回給主調函數的值。如使用正弦函數取得正弦值,使用範例max函數取得的最大數等。對函數的值(或稱函數返回值)有以下一些說明:

1) 函數的值只能通過return語句返回主函數。

return  語句的一般形式為:

return 運算式;   或    return 變數

或者為:

return (運算式)

該語句的功能是計算運算式的值,並返回給主函數。在函數中允許有多個return語句,但每次使用只能有一個return 語句被執行,因此只能返回一個函數值。

2)       函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數類型為准,自動進行類型轉換。

3)       如函數值為整型,在函數定義時可以省去類型說明。

4)       不返回函數值的函數,可以明確定義為“空類型”,類型說明符為“void。如:函數 s並不向主函數返函數值,因此可定義為:

    void s(int n)

    {

        ……

     }

一旦函數被定義為空類型後,就代表該函數沒有回傳值。例如,在定義 s空類型後,在主函數中寫下述語句

    sum=s(n);

就是錯誤的。

為了使程式有良好的可讀性並減少出錯, 凡不要求返回值的函數都應定義為空類型。