close

函數(function)

Function的用意就是將重複使用的程式碼,寫成一個區塊再給他一個名字,這樣要用的時候只要呼叫(Call)那個名字就好了,但是Function外面的變數並不會跟Function內的變數共用,所以有輸入值(Function處理所需要的值),然後也可以帶入之後返回一個值如(a=sin(2*pi)),像sin這樣帶入之後就直接變成一個值然後指派給a就是有回傳值的Function,而沒有回傳值的Function通常是拿來做不需要回傳,或者需要處理大於一個變數所用。
 

函數宣告

回傳值類型 函數名稱(輸入值類型 輸入值,.../*可選*/) 
{ 
    函數內的程式碼;
    ... 
    return 回傳值;//此行可選(與回傳類型有關) 
}

回傳值類型

主要分兩種

  1. 有回傳(函數Function):種類跟一般變數的種類一樣 如
    • int
    • float
    • char 等等..
  2. 沒有回傳(副程式Subroutine),Sub沒有回傳值是VB上的區分,不過在C上都已Function來表示,這種function只有這個回傳類型宣告方式
    • void

函數名稱


命名方式與變數相同a-z A-Z 0-9(開頭第一個字不可用數字) _等...

輸入值(可選)

你要幾個變數就用逗號隔開宣告幾個,當然不要就不需要輸入,在下方使用時就等於被宣告過了,而且其值=使用者所輸入的值,輸入值宣告方式變數一樣

注意的是,呼叫者傳入的值,會複製一份給輸入值所宣告的變數,在外面無法存取該變數,Function也無法改變外面的輸入值,兩者完全分開,互不影響

範例 有輸入

void print_squ(int a) 
{
    printf("%d^2=%d",a,a*a);//需要知道a為多少才可以 所以要輸入值
}

範例 無輸入

void newline() 
{
    printf("\n");//不需要任何變數就可以完成
}

回傳值(可選)

如果回傳值類型為非void類型,則須回傳一個該類型的值,語法及return 變數或常數;
範例 有回傳

double have_answer(double a,double b,double c) 
{
   return b*b-4*a*c;   
}

如果是void則不須在函數內加入return

 

範例 無回傳

void print(char name) 
{
    printf("%c wa baka.",name);
}

函數呼叫

要呼叫一個function 就呼喚她的名字,就跟printf與scanf一樣,就是看到底有沒有回傳值,跟有沒有輸入值,以下示範呼叫方式,還有呼叫的函數必須要在自己的上方,下方呼叫者才知道他宣告的內容

  • 有回傳的function,前方需要一個東西存取其回傳值,就是被assign
  • 沒回傳的function,直接執行

 

  • 有輸入值的function,名字後方的小括弧內填入要輸入的值,可以是變數或常數
  • 沒輸入值的function,則直接名稱後空括弧()

範例 上方排列出來的四種function範例及呼叫方式

#include<stdio.h>
void newline() //沒輸入沒回傳
{
    printf("\n");//不需要任何變數就可以完成
}
int seven_eleven()//沒輸入有回傳 這種基本上是不可能存在的 除了類似隨機函數等 或這個完全沒意義的函數 
{
    return 711;
}
void print(char name) //有輸入沒回傳
{
    printf("%c wa baka.",name);
}
double have_answer(double a,double b,double c) //有輸入有回傳 
{
   return b*b-4*a*c;   
}
int main()
{
    double a=1,b=5,c=1;
    double D=0;
    char name='W';
    D=have_answer(a,b,c);//有輸入值 則輸入兩個數 有輸出值 則須用東西存取(D)
    D=have_answer(1.0,5.0,1.0);//當然可以直接輸入數字
    printf("D=%d\n",D);
    printf("seven:%d",seven_eleven());//因為沒輸入值 則空白() 輸出值直接輸入printf
    newline();//沒輸入() 沒回傳則不須用變數存取
    print(name);//輸入name變數 沒回傳不須存取
    return 0;
}

 

TIY

arrow
arrow

    繩繩 發表在 痞客邦 留言(0) 人氣()