一、課時內容
函式定義
函式要先定義後使用(呼叫)。
函式的一般是形式為:
型別識別符號 函式名(形參表)
函式體 //執行語句
關於函式的定義有以下說明:
·函式的資料型別是函式的返回值型別(若資料型別為void,則無返回值)。
·函式名是識別符號,乙個程式中除了主函式名必須為main外,其餘函式的名字按照識別符號的取名規則可以任意選取。
·形參表可以是空的(無參函式)也可以有多個形參,用逗號隔開,不管有無引數,函式名後的圓括號都必須有。形參可以是變數名、陣列名或指標名,作用是實現主調函式與被調函式之間的關係。
·函式中最外層一對花括號{}括起來的若干個說明語句和執行語句組成各乙個函式的函式體。函式的功能由函式體內的語句決定。
·函式不允許巢狀定義,但是允許巢狀使用。
函式在沒有被呼叫的時候是靜止的,此時的形參只是乙個符號,它標誌著在形參出現的位置應該有乙個什麼型別的資料。函式被呼叫時才執行。
函式定義的例子:
定義乙個函式,返回兩個數中的較大數
int max(int x,int y)
函式的宣告和呼叫
函式的宣告
呼叫函式之前先要宣告函式原型。在駐地凹函式中或所有函式定義之前按如下形式宣告:
型別說明符 被調函式名(含型別說明的形參表)
如果是在所有函式定義之前宣告了函式原型,那麼該函式在本程式檔案中任何地方都有效。
如果是在某個主調函式內部宣告了被呼叫函式的原型,那麼該原型就只能在這個函式內部有效。
函式的呼叫
宣告了函式原型之後,便可以按如下形式呼叫函式:
函式名(實參列表)
實參列表中應給出與函式原型形參個數相同、型別相符的實參。在主調函式中的引數成為實參,實參一般應具有確定的值。實參可以是變數、表示式,也可以是已有確定值的變數、陣列或指標名。
函式的返回值
在組成函式體的各類語句中,值得注意的是返回語句return。它的一般形式是:
return(表示式);
其功能是把程式流程從被調函式轉向主調函式並把表示式的值帶回主調函式,實現函式的返回。
在圓括號表示式的值實際上就是該函式的返回值。其返回值的型別即為它所在函式的函式型別。
函式的傳值呼叫
傳值呼叫
這種呼叫方式是將實參的資料值傳遞給形參,即將實參值拷貝乙個副本存放在被呼叫函式的棧區中。在被呼叫函式中,形參值可以改變,但不影響主調函式的實參值,引數傳遞方向只是從實參到形參,簡稱單項值傳遞,例:
#includeusing namespace std;樣例輸出void swap(int a,int b)
int main()
int main()
return y;
}int lcm()
int main()
{ cin>>x>>y;
cout《使用全域性變數的說明
·在乙個函式內部,即可以使用本函式定義的區域性變數,也可以使用在此函式前定義的全域性變數。
·全域性變數的作用是使得函式間多了一種傳遞資訊的方式。
·過多的使用全域性變數,會增加除錯難度。
·過多的使用全域性變數,會降低程式的通用性。
·全域性變數在程式執行的全過程中一直占用記憶體單元。
·全域性變數在定義是若沒有賦初值,其預設值為0。
區域性變數
·區域性變數的作用域實在定義該變數的函式內部。
·由於區域性變數的作用域僅侷限於本函式內部,所以,在不同的函式中變數名可以相同,它們分別代表不同的物件,在記憶體中佔據不同的記憶體單元,互不干擾。
·乙個區域性變數和乙個全域性變數是可以重名的,在相同的作用域內區域性變數有效時全域性變數無效,即區域性變數可以遮蔽全域性變數。
·在**塊中定義的變數的存在時間和作用域將被限制在該**塊中。
·主函式main中定義的變數也是區域性變數,這一點與其他程式語言不同。
·全域性變數陣列初始全部為0,區域性變數值是隨機的,要初始化初值,區域性變數受棧空間大小限制,大陣列需要注意。
遞迴演算法
遞迴概念
當函式的定義中,其內部操作又直接或間接的出現對自身的呼叫,則稱這樣的程式巢狀定義為遞迴定義。
遞迴通常把乙個大型複雜的問題層層轉化為乙個與原問題形似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大減少了程式的**量。
遞迴程式在執行過程中,一般具有如下模式;
1 將呼叫程式的返回位址、相應的呼叫前的變數都儲存在系統堆疊中;
2 執行被呼叫的函式;
3 若滿足退出遞迴呼叫,則退出遞迴,並從棧頂上彈回返回位址、取回儲存起來的變數值,繼續沿著返回位址,向下執行程式;
4 否則繼續遞迴呼叫,只是遞迴呼叫的引數發生變化;增加乙個量或減少乙個量,重複執行直到遞迴呼叫結束。
能夠用遞迴演算法解決的問題,一般滿足如下要求:
1 需要求解的問題可以化為子問題求解,其子問題的求解方法與原問題相同,只是規模上的增加或減少;
2 遞迴呼叫的次數是有限的,必須有遞迴結束的條件(成為遞迴邊界)
二、常見題型
1.輸入1個整數n。從小到大依次輸出n的所有因子。
輸入1個整數n(n<20億)輸出公升序輸出n的所有因子,中間用空格隔開;之後再輸出因子總個數。樣例輸入20
2 4 5 10 4
程式如下:
#includeusing namespace std;int yinzi(int x,int y);
int main()
{ long long n,i,s=0;
cin>>n;
for(i=2;i<=n/2;i++)
if(yinzi(n,i))
{ s++;
cout《驗證「歌德**猜想」,即:任意乙個大於2的偶數均可表示成兩個素數之和。輸入輸入只有乙個正整數x。(x是偶數,x <= 2000 且 x > 2)輸出輸出這個數的所有分解形式,形式為:
x = y + z
其中x為待驗證的數,y和z滿足y + z = x,而且 y <= z,y和z均是素數。
如果存在多組分解形式,則按照y的公升序輸出所有的分解,每行乙個分解表示式。
注意數和符號之間隔乙個空格。樣例輸入輸入樣例1:
10輸入樣例2:
100
程式如下:
#includeusing namespace std;樣例輸出int sushu(int n);
int main()
{ int x,j;
cin>>x;
for(j=2;j<=x/2;j++)
{ if(sushu(j))
if(sushu(x-j))
{ cout《求從1加到n的階乘的和,輸入n的值,按要求輸出。
輸入輸入乙個數n輸出輸出從1加到n的和樣例輸入5
153
程式如下:
#includeusing namespace std;
int jiecheng(int n);
int main()
{ int x,sum=0;
int j;
cin>>x;
for(j=1;j<=x;j++)
sum+=jiecheng(j);
cout《三、學習心得
通過對於函式的學習,理解了c++如何構建乙個具備特殊功能的函式來達到自己的目的,使主函式變得更加簡單。也提高了對本門課程的興趣,對於今後的學習勁頭更足。
C 函式總結
一.知識總結 1.函式定義的語法形式 資料型別 函式名 形式參數列 函式體 執行語句 函式定義說明 函式的資料型別是函式的返回值型別 若為void,則無返回值 函式名是識別符號,乙個程式中除了主函式名必須為main 外,其餘函式的名字校照標 識符的取名規則可以任意選取,最好取有助於記憶的名字 形式引...
c 函式總結
資料型別 函式名 形式參數列 函式體 執行語句 定義乙個函式,返回兩個數中的較大數。int max intx,inty return x y?x y 該函式返回值是整形,有兩個整形的形參,用來接收實參傳遞的兩個資料,函式體內的語句是求兩個數中的較大者並將其返回主調函式。函式的形式從結構上說可以分為三...
C 函式總結
1.函式原型 function prototype 作用 編譯階段對呼叫函式的合法性檢查。2.內建函式作用 編譯時將所呼叫函式的 直接嵌入到主調函式中。優點 節省執行時間。缺點 增加目標程式的長度。1 可以在宣告和定義時同時寫inline,也可以在其中一處寫。2 內建函式不包括複雜控制語句。例如 迴...