C語言函式和巨集定義

2022-08-29 18:18:05 字數 3265 閱讀 2958

一. 目的和要求

1、 掌握函式的定義方法和呼叫規則。

2、掌握c語言程式中主調函式和被呼叫函式之間進行資料傳遞的規則。

3、了解函式的返回值及它的型別,並正確使用它。

4、了解區域性變數和全域性變數的作用域及它們與儲存分類的關係,理解變數的存在性和可見性的概念。

5、練習遞迴函式的使用。

6、理解巨集的概念,掌握定義無參巨集和帶參巨集的方法。了解檔案包含的概念,掌握其用法。

7、理解內部函式和外部函式,了解外部函式的編譯和連線的方法。

二.相關知識

1、 函式的概念

函式是乙個可以反覆使用的程式段,從其它的程式段中均可以通過呼叫語句來執行這段程式,完成既定的工作。

從程式設計的角度來看,函式可以分為兩種:

① 標準函式,即庫函式。

② 自定義函式。

從函式形式的角度來看,函式也可分為無參函式和有參函式兩種。

2、 函式的定義

乙個函式在被呼叫之前必須先定義,函式定義的一般形式:

儲存型別資料型別函式名(形式參數列)

void main()

/*函式add( )的定義*/

問題解答提示

1.使用函式abs( )求某整數的絕對值,要在程式開頭寫上檔案包含命令,將標頭檔案包含進來。

2.標準函式只需要呼叫就行了;對於自定義函式,首先要定義,然後再呼叫。

3.函式的說明與函式的定義是兩個不同的概念。函式的說明是對函式的型別及引數等的說明,函式的定義是對該函式的演算法的實現。

4.若函式的定義在該函式的呼叫之後,則必需要對該函式進行說明(如:add( )函式);若函式的定義在該函式的呼叫之前,則不必對該函式進行說明,函式定義的頭部充當說明(如sub( )函式)。

5.在sub( )函式中,想得到絕對值較大的數減去絕對值較小的數,使用了if_else語句。

6.如果在實驗中碰到任何問題,請向實驗老師尋求幫助。

強化練習

1.根據程式模板,要求不用求絕對值函式來完成求出某數的絕對值。

2.利用條件表示式,在sub( )函式中使用一條return語句來達到所要的結果(即返回絕對值較大的數減去絕對值較小的數)。

3.根據題意,若使用全域性變數a和b得到同樣的結果,應該對程式模板做何修改。

實驗練習 2:編寫求n階乘的函式。

本練習要求在封閉式實驗課中在助教或者講師的指導下完成。本練習分成6個部分:

1. 實驗目的

2. 問題描述

3. 事例輸出

4. 程式模板

5. 問題解答提示

6. 後續問題和任務

程式模板是完整的、可實際執行的c程式,其中關鍵的一行或者多行**已經替換為注釋。請先閱讀問題描述,分析事例輸出;然後研究模板的**。參考問題解答提示,用c**替換/* */注釋。

編譯並執行程式,並將輸出結果與提供的事例輸出進行比較。然後回答強化練習。

實驗目的

本實驗旨在鞏固學生對函式概念的理解,增強程式設計能力。在這個實驗中,學生將練習:

定義符號常量。

使用長整型變數存放累乘積。

在函式中,使用區域性靜態變數存放累乘積。

在強化練習中,學生將練習:

比較使用int型和long型變數存放累乘積。

使用全域性變數存放累乘積。

問題描述

編寫函式,求出從主調函式傳來的數值i的階乘值,然後將其傳回主調函式並輸出。

示例輸出:

程式模板:

include 「

定義符號常量n,代表數字5*/

long function(int i)

定義區域性靜態變數f並賦初值1*/

/*求形參i的階乘值並存放在f中*/

return f;

void main( )

long product;

int i;

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

{ /*呼叫函式function( )求階乘值,並賦值給product */

/*輸出*/

問題解答提示:

1.定義符號常量一方面可以增強程式的可讀性,另一方面可以根據需要修改符號常量的值來求不同數的階乘值,使程式具有通用性。

2.int 型變數佔2個位元組的儲存空間,當求的值太大時就存放不下,所以要用長整型數來存放,long型變數佔4個位元組的儲存空間。

3.使用迴圈語句依次求出1至n的階乘值。

4.在迴圈體中,每呼叫一次求階乘函式就能求出指定值的階乘值。

5.求階乘函式的型別是整型,它是有返回值的,不能寫成呼叫語句。而是把函式呼叫當做表示式,能把它放在表示式能出現的任何地方。

6.區域性靜態變數有全域性的壽命和區域性的可見性,退出function( )函式它是不可見的,進入function( )函式它又可見。這說明該區域性靜態變數沒有被釋放。

7.區域性靜態變數的值具有繼承性,利用這一特點可以依次求出1至n的階乘值。

8.如果在實驗中碰到任何問題,請向實驗老師尋求幫助。

強化練習

1.根據程式模板,如果把變數product說明為int型,會有什麼結果?若把符號常量n改為10呢,會是什麼結果?

2.根據程式模板,如果把變數f說明為全域性變數,對結果會有影響嗎?

實驗練習 3:編寫計算x的y次冪的遞迴函式getpower(int x, int y ),並在主程式中實現輸入輸出。

本練習要求在封閉式實驗課中在助教或者講師的指導下完成。本練習分成6個部分:

1. 實驗目的

2. 問題描述

3. 事例輸出

4. 程式模板

5. 問題解答提示

6. 後續問題和任務

程式模板是完整的、可實際執行的c程式,其中關鍵的一行或者多行**已經替換為注釋。請先閱讀問題描述,分析事例輸出;然後研究模板的**。參考問題解答提示,用c**替換/* */注釋。

編譯並執行程式,並將輸出結果與提供的事例輸出進行比較。然後回答強化練習。

實驗目的

本實驗旨在鞏固學生對遞迴函式概念的理解,增強程式設計能力。在這個實驗中,學生將練習:

寫出解決該問題的遞迴演算法:

xy=1

getpower(x,y)=

x*getpower(x, y-1); y>=2

在遞迴函式中,使用數字1作為回歸條件。

在遞迴函式中,使用if_else語句根據條件的真假來決定是遞推還是回歸。

在強化練習中,學生將練習:

在遞迴函式中,改變回歸條件會產生什麼結果。

比較使用遞迴函式編寫程式和不使用遞迴函式編寫程式。

使用標準函式編寫該程式。

問題描述

編寫程式,分別從鍵盤輸入資料x和y,計算x的y次冪並輸出。

C語言函式大全

函式名 abort 功能 異常終止乙個程序 用法 void abort void 函式名 abs 功能 求整數的絕對值 用法 int abs int i 函式名 absread,abswirte 功能 絕對磁碟扇區讀 寫資料 用法 int absread int drive,int nsects,i...

C語言函式用法大全

函式名 stpcpy 功能 拷貝乙個字串到另乙個 用法 char stpcpy char destin,char source 程式例 include include int main void 函式名 strcat 功能 字串拼接函式 用法 char strcat char destin,char...

C語言庫函式大全

absread 讀磁碟絕對扇區函式 原形 int absread int drive,int num,int sectnum,void buf 功能 從drive指定的驅動器磁碟上,sectnum指定的邏輯扇區號開始讀取 通過dos中斷0x25讀取 num個 最多64k個 扇區的內容,儲存於buf所...