天天看點

C++語言基礎知識學習筆記(三)

學習了C++的資料類型和控制語句,現在學習函數。

通常情況下,我們将相對獨立的,經常使用的功能抽象為函數。函數編寫好以後,可以被重複使用。

從上面我們可以看出,使用函數有利于代碼重用,提高效率。

函數的定義

類型辨別符 函數名(形式參數表)

{

    語句

}

類型辨別符規定了函數的類型,也就是函數傳回值的類型,有return語句給出,無傳回值的函數類型辨別符為void,不必寫return語句
函數的聲明

調用之前,首先要在主調函數中聲明函數原型,形式如下:

類型說明符 被調函數名(含類型的形參表)

函數的調用

聲明後,可以按照以下格式調用:

函數名 (實際參數表)

函數的調用,可以作為一條語句,這時,函數可以沒有傳回值

函數的調用出現在表達式中,這時就必須有一個明确的傳回值

注意

如果是在所有函數之前聲明了函數,則在程式任何地方都可以調用。

如果是在主調函數内部聲明,則隻在這個函數内部有效。

例:編寫一個求x的n次方的函數。

算法,x的n次方,就是n個x相乘,用疊代法應該就OK樂。

程式如下:

#include

double power(double x,int n);

void main(void)

{double x,int n;

cout<<"請輸入x,n的值"<

cin>>x>>n;

cout<

}

double power(double x,int n)

{double val=1.0;

int i;

for(i=1;i<=n;i++)

val=x*val;

return(val);

}

此處的函數power(doubel x,int n)就是定義的一個函數。可以被調用。函數要有一個傳回值,因為函數被調用時作為一個表達式出現的。必須有傳回值。

感覺寫程式就是做數學題。

函數調用 說明
函數的嵌套調用 函數允許嵌套調用,就是函數1調用函數2,函數2調用函數3
函數的遞歸調用 函數可以調用自身,稱為遞歸調用

對應遞歸的算法

遞歸的算法是一種遞推的算法,頗有些福爾摩斯的味道,

函數的參數傳遞
内聯函數

為了節省開銷,在編譯時,将函數體嵌入每一個調用語句處,

一般不能有循環,和switch語句

其實,應該就是簡單的替換而已,就是為了省去調用和現場保護的時間和開銷

文法:

inline 類型說明符 被調函數名(含類型說明的形參表)

函數重載

重載這種機制,也是為了減少代碼量,編譯器會根據實參的類型和個數來查找比對的函數。

C++支援取相同的函數名,但是形參不同,

函數的嵌套調用

例:輸入兩個整數,求他們的平方和。

算法:為了說明問題,設計兩個函數,fun1,用來求平方和,fun2,用來求平方。

程式如下:

#include

void main(void)

{int a,b;

int fun1(int x,int y);

cin>>a>>b;

cout<<"a,b的平方和:"<

}

int fun1(int x,int y)

{int fun2(int m);

return(fun2(x)+fun2(y));

}

int fun2(int m)

{return(m*m);

}

在fun1函數中,調用fun2函數。就是函數的嵌套調用。

函數的遞歸調用

例:求n!。

算法:n!就是n*(n-1)*(n-2)…*1.要求5!,就要先求4!,要求4!的階乘,就要先求3!要求3!就要先求2!要求2!就要先求1!1!=1。然後往回推回去。用循環語句實作的一個算法。

程式如下:

#include

long fac(int n)

{long f;

if(n<0) cout<<"你輸入的資料錯誤"<

if(n==0) f=1

if(n>0) f=fac(n-a)*n;

return(f);

}

就是這麼一個過程,加入n=4,就一直執行到n=0,是個已知的值,然後往回代,就能求出4!的值。

函數的參數傳遞

有兩種,一種是傳值,一種是傳引用。我們上面的都是傳值。

傳值

用實參來初始化形參

初始化完成後,無論形參怎樣變化,也不影響實參

傳引用 對形參的修改,對實參也有效 先不管了,用到再看啦

C++的系統函數

應該是提高效率的最佳辦法,調用系統函數。這就要熟悉常用的系統函數。

看下火影,該吃飯了。