C程序設(shè)計 第5章_第1頁
C程序設(shè)計 第5章_第2頁
C程序設(shè)計 第5章_第3頁
C程序設(shè)計 第5章_第4頁
C程序設(shè)計 第5章_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第5章章 函數(shù)函數(shù)第第1章章 C語言概述語言概述第第2章章 基本數(shù)據(jù)類型和運算基本數(shù)據(jù)類型和運算第第3章章 結(jié)構(gòu)化程序設(shè)計結(jié)構(gòu)化程序設(shè)計第第5章章 函數(shù)函數(shù)第第6章章 指針指針第第7章章 復(fù)合結(jié)構(gòu)類型復(fù)合結(jié)構(gòu)類型第第8章章 編譯預(yù)處理編譯預(yù)處理第第4章章 數(shù)組及字符串數(shù)組及字符串課程概述課程概述 附錄附錄5.1 C程序的模塊結(jié)構(gòu)程序的模塊結(jié)構(gòu)5.2 函數(shù)的分類函數(shù)的分類5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞5.5 函數(shù)的嵌套與遞歸函數(shù)的嵌套與遞歸5.6系統(tǒng)函數(shù)系統(tǒng)函數(shù)5.7變量的存儲類別、作用域、生存變量的存儲類別、作用域、生存期期 第第9章章 位運

2、算位運算第第10章章 文件文件函數(shù)函數(shù)第第5章章教學(xué)目標教學(xué)目標 掌握掌握C函數(shù)的定義和調(diào)用方法函數(shù)的定義和調(diào)用方法 熟悉函數(shù)間的數(shù)據(jù)傳遞方法熟悉函數(shù)間的數(shù)據(jù)傳遞方法 了解變量和函數(shù)的存儲類型對函數(shù)調(diào)用的影響了解變量和函數(shù)的存儲類型對函數(shù)調(diào)用的影響 掌握遞歸函數(shù)的設(shè)計等掌握遞歸函數(shù)的設(shè)計等5.1.1 C程序的模塊化結(jié)構(gòu)概念程序的模塊化結(jié)構(gòu)概念5.1 C程序的模塊結(jié)構(gòu)程序的模塊結(jié)構(gòu)1. C語言的模塊化語言的模塊化 2. C函數(shù)邏輯關(guān)系示意函數(shù)邏輯關(guān)系示意一個一個C程序由一個具有固定程序由一個具有固定名稱名稱main()的主函數(shù)和若干個的主函數(shù)和若干個以標識符命名的其他函數(shù)組以標識符命名的其他函數(shù)

3、組成,通常用成,通常用main()函數(shù)描述程函數(shù)描述程序的總體框架,其他函數(shù)則序的總體框架,其他函數(shù)則完成某種特定的子功能。完成某種特定的子功能。一個一個C程序執(zhí)行時,總是從程序執(zhí)行時,總是從main()函數(shù)開始,由函數(shù)開始,由main()函函數(shù)調(diào)用其他函數(shù),而其他函數(shù)調(diào)用其他函數(shù),而其他函數(shù)又可以相互調(diào)用。數(shù)又可以相互調(diào)用。5.1.1 C程序的模塊化結(jié)構(gòu)概念程序的模塊化結(jié)構(gòu)概念5.1 C程序的模塊結(jié)構(gòu)程序的模塊結(jié)構(gòu)1. C語言的模塊化語言的模塊化 2. C函數(shù)邏輯關(guān)系示意函數(shù)邏輯關(guān)系示意main( )fun1( );fun2( );fun1( );fun11( );fun2( );fun21

4、( );fun22( );fun11( );fun21( );fun22( );5.1.2 函數(shù)的概述函數(shù)的概述5.1 C程序的模塊結(jié)構(gòu)程序的模塊結(jié)構(gòu)1. 函數(shù)的概述函數(shù)的概述 2. 例例5.1函數(shù)本質(zhì)上是一個完成特定函數(shù)本質(zhì)上是一個完成特定功能的段程序,該段程序可以功能的段程序,該段程序可以被其他函數(shù)調(diào)用。除了主函數(shù)被其他函數(shù)調(diào)用。除了主函數(shù)之外,其他的函數(shù)是不能獨立之外,其他的函數(shù)是不能獨立運行的。運行的。程序的全部工作都是由各程序的全部工作都是由各式各樣的函數(shù)完成的,所以也式各樣的函數(shù)完成的,所以也把語言稱為函數(shù)式語言。把語言稱為函數(shù)式語言。5.1.2 函數(shù)的概述函數(shù)的概述5.1 C程序

5、的模塊結(jié)構(gòu)程序的模塊結(jié)構(gòu)1. 函數(shù)的概述函數(shù)的概述 2. 例例5.1例例5.1 一個簡單函數(shù)調(diào)用的例子。一個簡單函數(shù)調(diào)用的例子。#includehello() /* hello函數(shù)函數(shù) */ printf (Hello,human n);main() hello(); /* 調(diào)用調(diào)用hello函數(shù)函數(shù)*/程序的運行結(jié)果如下:程序的運行結(jié)果如下:Hello,human2. 從形式角度從形式角度3. 作用范圍角度作用范圍角度4. 從返回值角度從返回值角度1. 從定義的角度從定義的角度5.2 函數(shù)的分類函數(shù)的分類從函數(shù)定義的角度看,函數(shù)可分從函數(shù)定義的角度看,函數(shù)可分為用戶函數(shù)和系統(tǒng)函數(shù)兩種。為用戶

6、函數(shù)和系統(tǒng)函數(shù)兩種。(1)用戶函數(shù):用戶函數(shù)是用戶)用戶函數(shù):用戶函數(shù)是用戶按需要編寫的函數(shù)。按需要編寫的函數(shù)。(2)系統(tǒng)函數(shù):由語言系統(tǒng)提)系統(tǒng)函數(shù):由語言系統(tǒng)提供,用戶無須定義,也不必在程供,用戶無須定義,也不必在程序中作類型說明,只需在程序前序中作類型說明,只需在程序前包含有該函數(shù)原型的頭文件即可包含有該函數(shù)原型的頭文件即可在程序中直接調(diào)用。在程序中直接調(diào)用。2. 從形式角度從形式角度3. 作用范圍角度作用范圍角度4. 從返回值角度從返回值角度1. 從定義的角度從定義的角度5.2 函數(shù)的分類函數(shù)的分類從函數(shù)形式上來看,可以將函從函數(shù)形式上來看,可以將函數(shù)分為無參函數(shù)和有參函數(shù)兩種。數(shù)分為

7、無參函數(shù)和有參函數(shù)兩種。(1)無參函數(shù):無參函數(shù)即在函)無參函數(shù):無參函數(shù)即在函數(shù)定義、函數(shù)說明及函數(shù)調(diào)用中數(shù)定義、函數(shù)說明及函數(shù)調(diào)用中均不帶參數(shù)。均不帶參數(shù)。(2)有參函數(shù):有參函數(shù)也稱為)有參函數(shù):有參函數(shù)也稱為帶參函數(shù)。帶參函數(shù)。在函數(shù)定義及函數(shù)說明時都有在函數(shù)定義及函數(shù)說明時都有參數(shù),稱為形式參數(shù)(簡稱為形參數(shù),稱為形式參數(shù)(簡稱為形參);參);在函數(shù)調(diào)用時也必須給出參數(shù),在函數(shù)調(diào)用時也必須給出參數(shù),稱為實際參數(shù)(簡稱為實參)。稱為實際參數(shù)(簡稱為實參)。2. 從形式角度從形式角度3. 作用范圍角度作用范圍角度4. 從返回值角度從返回值角度1. 從定義的角度從定義的角度5.2 函數(shù)的分

8、類函數(shù)的分類如果從函數(shù)起作用的范圍來分,如果從函數(shù)起作用的范圍來分,又可以將函數(shù)分為外部函數(shù)和內(nèi)部又可以將函數(shù)分為外部函數(shù)和內(nèi)部函數(shù)。函數(shù)。(1)外部函數(shù):可以被任何編譯)外部函數(shù):可以被任何編譯單位調(diào)用的函數(shù)稱為外部函數(shù)。單位調(diào)用的函數(shù)稱為外部函數(shù)。(2)內(nèi)部函數(shù):只能在本編譯單)內(nèi)部函數(shù):只能在本編譯單位中被調(diào)用的函數(shù)稱為內(nèi)部函數(shù)。位中被調(diào)用的函數(shù)稱為內(nèi)部函數(shù)。2. 從形式角度從形式角度3. 作用范圍角度作用范圍角度4. 從返回值角度從返回值角度1. 從定義的角度從定義的角度5.2 函數(shù)的分類函數(shù)的分類從函數(shù)有無返回值角度,又可把從函數(shù)有無返回值角度,又可把函數(shù)分為有返回值函數(shù)和無返回函數(shù)

9、分為有返回值函數(shù)和無返回值函數(shù)兩種。值函數(shù)兩種。(1)有返回值函數(shù):有返回值函)有返回值函數(shù):有返回值函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個執(zhí)行結(jié)果,稱為函數(shù)返回回一個執(zhí)行結(jié)果,稱為函數(shù)返回值。值。(2)無返回值函數(shù):無返回值函)無返回值函數(shù):無返回值函數(shù)用于完成某項特定的處理任務(wù),數(shù)用于完成某項特定的處理任務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)執(zhí)行完成后不向調(diào)用者返回函數(shù)值。值。5.3.1 函數(shù)的說明函數(shù)的說明5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(數(shù)據(jù)類型數(shù)據(jù)類型 形式參數(shù)形式參數(shù)1,數(shù)據(jù)類型數(shù)據(jù)類型 形式形式參數(shù)參數(shù)2,數(shù)據(jù)類型數(shù)據(jù)類型

10、 形式參數(shù)形式參數(shù)n); 2. 傳統(tǒng)格式傳統(tǒng)格式函數(shù)的類型說明函數(shù)的類型說明 函數(shù)名函數(shù)名(帶有類型說明帶有類型說明的參數(shù)表的參數(shù)表) 函數(shù)體函數(shù)體;1. 現(xiàn)代格式現(xiàn)代格式5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用2. 傳統(tǒng)格式傳統(tǒng)格式函數(shù)的類型說明函數(shù)的類型說明 函數(shù)名函數(shù)名(不帶類型說明不帶類型說明的參數(shù)表的參數(shù)表) 參數(shù)的類型說明參數(shù)的類型說明; 函數(shù)體函數(shù)體;1. 現(xiàn)代格式現(xiàn)代格式5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用134562函數(shù)名函數(shù)名函數(shù)名是編譯系統(tǒng)識別函數(shù)的依據(jù),除函數(shù)名是編譯系統(tǒng)識別函數(shù)的依據(jù),除了了main(

11、)函數(shù)有固定名稱外,其他函數(shù)由函數(shù)有固定名稱外,其他函數(shù)由用戶按標識符的規(guī)則自行命名。用戶按標識符的規(guī)則自行命名。函數(shù)名與其后的圓括號之間不能留空格,函數(shù)名與其后的圓括號之間不能留空格,C編譯系統(tǒng)依據(jù)一個標識符后有沒有圓括編譯系統(tǒng)依據(jù)一個標識符后有沒有圓括號來判定它是不是函數(shù)。號來判定它是不是函數(shù)。函數(shù)名是一個常數(shù),代表該段程序代碼函數(shù)名是一個常數(shù),代表該段程序代碼在內(nèi)存中的首地址,也叫函數(shù)入口地址。在內(nèi)存中的首地址,也叫函數(shù)入口地址。5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用134562函數(shù)的形式參數(shù)函數(shù)的形式參數(shù)函數(shù)的形式參數(shù)也稱形參,用來建立函函數(shù)的形式參數(shù)

12、也稱形參,用來建立函數(shù)之間的數(shù)據(jù)聯(lián)系。當一個函數(shù)被調(diào)用數(shù)之間的數(shù)據(jù)聯(lián)系。當一個函數(shù)被調(diào)用時,形參接收來自調(diào)用函數(shù)的實在參數(shù)時,形參接收來自調(diào)用函數(shù)的實在參數(shù)(也稱實參),實現(xiàn)函數(shù)與函數(shù)之間的(也稱實參),實現(xiàn)函數(shù)與函數(shù)之間的數(shù)據(jù)通信,稱為虛實結(jié)合或啞實結(jié)合。數(shù)據(jù)通信,稱為虛實結(jié)合或啞實結(jié)合。當形參有多個時,相互之間用逗號隔開。當形參有多個時,相互之間用逗號隔開。函數(shù)名后面的圓括號中是空白或函數(shù)名后面的圓括號中是空白或void的的函數(shù)稱為無參函數(shù)。如:函數(shù)稱為無參函數(shù)。如:float sub(void)或或float sub()5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和

13、調(diào)用134562函數(shù)的返回值函數(shù)的返回值函數(shù)在運行結(jié)束時將運算結(jié)果返回到調(diào)函數(shù)在運行結(jié)束時將運算結(jié)果返回到調(diào)用函數(shù),稱為函數(shù)的返回值。用函數(shù),稱為函數(shù)的返回值。函數(shù)的返回值是由函數(shù)的返回值是由return語句完成的,語句完成的,其中,作為返回值的變量或表達式可以其中,作為返回值的變量或表達式可以用圓括號括住,也可以省略圓括號。用圓括號括住,也可以省略圓括號。當函數(shù)無返回值時,當函數(shù)無返回值時,return的作用是將的作用是將控制權(quán)交給調(diào)用函數(shù),而不是返回一個控制權(quán)交給調(diào)用函數(shù),而不是返回一個值。值。5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用134562函數(shù)的數(shù)據(jù)類

14、型函數(shù)的數(shù)據(jù)類型函數(shù)的數(shù)據(jù)類型指的是該函數(shù)返回值的函數(shù)的數(shù)據(jù)類型指的是該函數(shù)返回值的類型,可以是類型,可以是char、int、float、double和和指針等。如果省略函數(shù)的數(shù)據(jù)類型,則指針等。如果省略函數(shù)的數(shù)據(jù)類型,則默認為默認為int型。型。如果如果return中的表達式類型與函數(shù)類型中的表達式類型與函數(shù)類型不一致,則編譯系統(tǒng)自動將表達式的類不一致,則編譯系統(tǒng)自動將表達式的類型轉(zhuǎn)換成函數(shù)的類型后返回。型轉(zhuǎn)換成函數(shù)的類型后返回。無返回值的函數(shù)可以定義為無值類型。無返回值的函數(shù)可以定義為無值類型。在傳統(tǒng)格式中,定義無值類型時,函數(shù)在傳統(tǒng)格式中,定義無值類型時,函數(shù)名前不加任何關(guān)鍵字;在現(xiàn)代格

15、式中,名前不加任何關(guān)鍵字;在現(xiàn)代格式中,則顯式地加上關(guān)鍵字則顯式地加上關(guān)鍵字void。5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用134562函數(shù)的存儲類型函數(shù)的存儲類型函數(shù)的存儲類型用來表示該函數(shù)能否被函數(shù)的存儲類型用來表示該函數(shù)能否被其他程序文件中的函數(shù)調(diào)用。其他程序文件中的函數(shù)調(diào)用。當一個程序文件中的函數(shù)允許被另一個當一個程序文件中的函數(shù)允許被另一個程序文件中的函數(shù)調(diào)用時,可以將它定程序文件中的函數(shù)調(diào)用時,可以將它定義成義成extern型,否則,就要定義成型,否則,就要定義成static型。型。如果在函數(shù)定義時缺省存儲類型,則默如果在函數(shù)定義時缺省存儲類型,則

16、默認為認為extern。5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用134562函數(shù)體函數(shù)體函數(shù)體是函數(shù)實現(xiàn)特定處理功能的語句函數(shù)體是函數(shù)實現(xiàn)特定處理功能的語句集合,其形式與集合,其形式與main函數(shù)完全相同。函數(shù)完全相同。C語言允許一個函數(shù)調(diào)用另一個函數(shù),語言允許一個函數(shù)調(diào)用另一個函數(shù),但不允許在一個函數(shù)體內(nèi)再定義另一個但不允許在一個函數(shù)體內(nèi)再定義另一個函數(shù)。函數(shù)。5.3.2 函數(shù)的定義函數(shù)的定義5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用1. 有參函數(shù)的定義有參函數(shù)的定義2.無參函數(shù)的定義無參函數(shù)的定義 有參函數(shù)定義的一般形式為:有參函數(shù)定義的一般形式為:類型標識符

17、類型標識符 函數(shù)名函數(shù)名(數(shù)據(jù)類型數(shù)據(jù)類型 形式參形式參數(shù)數(shù)1,數(shù)據(jù)類型數(shù)據(jù)類型 形式參數(shù)形式參數(shù)2,數(shù)據(jù)類型數(shù)據(jù)類型 形式參數(shù)形式參數(shù)n) 函數(shù)體函數(shù)體說明:形參是變量,必須在形參表中說明:形參是變量,必須在形參表中給出形參的類型說明。給出形參的類型說明。5.3.3 有參函數(shù)和無參函數(shù)有參函數(shù)和無參函數(shù)5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用定義的一般形式定義的一般形式1. 有參函數(shù)的定義有參函數(shù)的定義2.無參函數(shù)的定義無參函數(shù)的定義 #includeint max(int a, int b,int c) int max;max=a;if(ab) max=b;if(maxc) max=c;r

18、eturn(max);main()int max(int a,int b,int c);int z,m,n,y;printf(input three numbers:n);scanf(%d%d%d,&m,&n,&y);z=max(m,n,y);printf(The max is %d,z);5.3.3 有參函數(shù)和無參函數(shù)有參函數(shù)和無參函數(shù)5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用例例5.2程序的運行情況為:程序的運行情況為:input three numbers:23 1 78 The max is 781. 有參函數(shù)的定義有參函數(shù)的定義2.無參函數(shù)的定義無參函數(shù)的定義

19、類型標識符類型標識符 函數(shù)名(函數(shù)名( ) 函數(shù)體函數(shù)體其中:類型標識符和函數(shù)名稱為函數(shù)頭。其中:類型標識符和函數(shù)名稱為函數(shù)頭。類型標識符指明了本函數(shù)的類型,函數(shù)的類型標識符指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返回值的類型。類型實際上是函數(shù)返回值的類型。無參函數(shù)無返回值時的函數(shù)類型符可以寫無參函數(shù)無返回值時的函數(shù)類型符可以寫為為void。例如:例如:void Hello()() printf(Hello humann);5.3.3 有參函數(shù)和無參函數(shù)有參函數(shù)和無參函數(shù)5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用定義的一般形式定義的一般形式1. 函數(shù)的簡單調(diào)用函數(shù)的簡單調(diào)用2.調(diào)用的形式調(diào)用的

20、形式 函數(shù)調(diào)用的一般形式為:函數(shù)調(diào)用的一般形式為: 被調(diào)用函數(shù)名被調(diào)用函數(shù)名(參數(shù)表達式參數(shù)表達式1,參數(shù)參數(shù)表達式表達式2,參數(shù)表達式參數(shù)表達式n);其中,參數(shù)前不加數(shù)據(jù)類型說明,其中,參數(shù)前不加數(shù)據(jù)類型說明,參數(shù)表達式可以是常量、變量或表參數(shù)表達式可以是常量、變量或表達式。各個參數(shù)表達式之間用逗號達式。各個參數(shù)表達式之間用逗號分割。分割。使用使用C語言的庫函數(shù)就是函數(shù)簡單語言的庫函數(shù)就是函數(shù)簡單調(diào)用的方法。例如:調(diào)用的方法。例如:main() printf(*n); 上述程序在上述程序在main()函數(shù)中調(diào)用輸函數(shù)中調(diào)用輸出函數(shù)出函數(shù)printf來輸出一行星號。來輸出一行星號。5.3.4

21、函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用1. 函數(shù)的簡單調(diào)用函數(shù)的簡單調(diào)用2.調(diào)用的形式調(diào)用的形式 函數(shù)作為表達式中的一項出現(xiàn)在表函數(shù)作為表達式中的一項出現(xiàn)在表達式中,以函數(shù)返回值參與表達式的達式中,以函數(shù)返回值參與表達式的運算。這種方式要求函數(shù)有返回值。運算。這種方式要求函數(shù)有返回值。例如:例如:z=max(x,y)*8;其中,函數(shù)其中,函數(shù)max是賦值表達式的一是賦值表達式的一部分,它的值乘以部分,它的值乘以8后再賦予變量后再賦予變量z。5.3.4 函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)表達式函數(shù)表達式1. 函數(shù)的簡單調(diào)用函數(shù)的簡單調(diào)用2.調(diào)用

22、的形式調(diào)用的形式 函數(shù)調(diào)用的一般形式加上分號即構(gòu)函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。例如:成函數(shù)語句。例如:printf(%d,m);max(x,y); 等都是以函數(shù)語句的方式調(diào)用函數(shù)。等都是以函數(shù)語句的方式調(diào)用函數(shù)。5.3.4 函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)語句函數(shù)語句1. 函數(shù)的簡單調(diào)用函數(shù)的簡單調(diào)用2.調(diào)用的形式調(diào)用的形式 函數(shù)作為另一個函數(shù)調(diào)用的實際參函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實參傳遞給調(diào)用函數(shù),因此要值作為實參傳遞給調(diào)用函數(shù),因此要求該函數(shù)必須有返回值。例如:求該函數(shù)必須

23、有返回值。例如:printf(%d,max(m,n); 上述語句是把上述語句是把max函數(shù)的返回值函數(shù)的返回值又作為又作為printf函數(shù)的實參來使用。函數(shù)的實參來使用。5.3.4 函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)實參函數(shù)實參(1)調(diào)用系統(tǒng)函數(shù)時,需要用)調(diào)用系統(tǒng)函數(shù)時,需要用#include“頭文件名頭文件名.h”將定義系將定義系統(tǒng)函數(shù)的庫文件包含在本程序中。統(tǒng)函數(shù)的庫文件包含在本程序中。(2)調(diào)用函數(shù)和被調(diào)用函數(shù)在一個編譯單元中,則在書寫順序)調(diào)用函數(shù)和被調(diào)用函數(shù)在一個編譯單元中,則在書寫順序上被調(diào)用函數(shù)比調(diào)用函數(shù)先出現(xiàn);或者被調(diào)用函數(shù)雖然在調(diào)用上被調(diào)用函數(shù)

24、比調(diào)用函數(shù)先出現(xiàn);或者被調(diào)用函數(shù)雖然在調(diào)用函數(shù)之后出現(xiàn),而被調(diào)用函數(shù)的類型是整型或字符型,可以不函數(shù)之后出現(xiàn),而被調(diào)用函數(shù)的類型是整型或字符型,可以不對被調(diào)用函數(shù)加以說明。除了上述兩種情況以外,都要對被調(diào)對被調(diào)用函數(shù)加以說明。除了上述兩種情況以外,都要對被調(diào)用函數(shù)加以說明。用函數(shù)加以說明。函數(shù)說明的位置一般在調(diào)用函數(shù)的函數(shù)體開頭的數(shù)據(jù)說明語函數(shù)說明的位置一般在調(diào)用函數(shù)的函數(shù)體開頭的數(shù)據(jù)說明語句中,說明的格式為:句中,說明的格式為:數(shù)據(jù)類型數(shù)據(jù)類型 被調(diào)用函數(shù)名被調(diào)用函數(shù)名();5.3.4 函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)調(diào)用時,需要對調(diào)用函數(shù)進行說明,說明時需要

25、注意以下幾點:函數(shù)調(diào)用時,需要對調(diào)用函數(shù)進行說明,說明時需要注意以下幾點:(3)被調(diào)用函數(shù)和調(diào)用函數(shù)不在一個編譯單元,需)被調(diào)用函數(shù)和調(diào)用函數(shù)不在一個編譯單元,需在定義函數(shù)的編譯單元中用下列方式將被調(diào)用函數(shù)在定義函數(shù)的編譯單元中用下列方式將被調(diào)用函數(shù)定義成外部函數(shù):定義成外部函數(shù): extern 數(shù)據(jù)類型數(shù)據(jù)類型 函數(shù)名函數(shù)名(形式參形式參數(shù)表數(shù)表);在主調(diào)用函數(shù)的函數(shù)體中,或所在編譯單元的開在主調(diào)用函數(shù)的函數(shù)體中,或所在編譯單元的開頭將要調(diào)用的函數(shù)說明成頭將要調(diào)用的函數(shù)說明成“外部函數(shù)外部函數(shù)”。具體的說。具體的說明語句格式為:明語句格式為:extern 數(shù)據(jù)類型數(shù)據(jù)類型 被調(diào)函數(shù)名被調(diào)函數(shù)

26、名();5.3.4 函數(shù)的調(diào)用函數(shù)的調(diào)用5.3 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用函數(shù)調(diào)用時,需要對調(diào)用函數(shù)進行說明,說明時需要注意以下幾點:函數(shù)調(diào)用時,需要對調(diào)用函數(shù)進行說明,說明時需要注意以下幾點:2. 形參和實參形參和實參的特點的特點3. 用用return語句語句返回函數(shù)的值返回函數(shù)的值1. 形參和實參形參和實參的概念的概念5.4.1 函數(shù)的參數(shù)和值函數(shù)的參數(shù)和值5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使體內(nèi)都可以使用,離開該函數(shù)則不能使用。用。實參出現(xiàn)在主調(diào)函數(shù)中,進入被調(diào)函實參出現(xiàn)在主調(diào)函數(shù)

27、中,進入被調(diào)函數(shù)后,實參變量也不能使用。數(shù)后,實參變量也不能使用。形參和實參兩者相互配合進形參和實參兩者相互配合進行數(shù)據(jù)傳行數(shù)據(jù)傳送。送。發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參,從而實現(xiàn)主值傳送給被調(diào)函數(shù)的形參,從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。2. 形參和實參形參和實參的特點的特點3. 用用return語句語句返回函數(shù)的值返回函數(shù)的值1. 形參和實參形參和實參的概念的概念5.4.1 函數(shù)的參數(shù)和值函數(shù)的參數(shù)和值5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞 例例5.4 求求m個自然數(shù)之和。個自然數(shù)之和。下圖所示為對應(yīng)的

28、下圖所示為對應(yīng)的N-S流程圖。流程圖。輸入一個整數(shù)mfor i=m-1 to 1m=m+i輸出m個自然數(shù)之和輸出m的值sum函數(shù)2. 形參和實參形參和實參的特點的特點3. 用用return語句語句返回函數(shù)的值返回函數(shù)的值1. 形參和實參形參和實參的概念的概念5.4.1 函數(shù)的參數(shù)和值函數(shù)的參數(shù)和值5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞例例5.4的程序代碼如下:的程序代碼如下:#includeint sum(int m) /*求和函數(shù)求和函數(shù)sum的定義的定義*/int i;for(i=m-1;i=1;i-) m=m+i;printf(sum=%dn,m);main()int m;printf

29、(please input number:n);scanf(%d,&m); /*輸入自然數(shù)的輸入自然數(shù)的個數(shù)個數(shù)m的值的值*/sum(m); /*調(diào)用求和函數(shù)調(diào)用求和函數(shù)sum*/printf(m=%dn,m); /*輸出輸出m的值的值*/程序的運行情況為:程序的運行情況為:please input number:200sum=20100m=2002. 形參和實參形參和實參的特點的特點3. 用用return語句語句返回函數(shù)的值返回函數(shù)的值1. 形參和實參形參和實參的概念的概念5.4.1 函數(shù)的參數(shù)和值函數(shù)的參數(shù)和值5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞(1)實參可以是常量、變量、表達

30、式和函)實參可以是常量、變量、表達式和函數(shù)等,并且必須具有確定的值。數(shù)等,并且必須具有確定的值。 (2)形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié))形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束后則不能再使用該形參變量。束后則不能再使用該形參變量。(3)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實參的值傳送給形參,而不能把形即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。參的值反向地傳送給實參。(4)實參和形參在數(shù)量上、類型上、順序)實參和形參在數(shù)量上、類型上、順序上應(yīng)嚴格一致,否則會發(fā)生上應(yīng)嚴格一致,否則會發(fā)生“類型不匹配類型不匹配”的錯誤。的錯誤。2. 形參和實

31、參形參和實參的特點的特點3. 用用return語句語句返回函數(shù)的值返回函數(shù)的值1. 形參和實參形參和實參的概念的概念5.4.1 函數(shù)的參數(shù)和值函數(shù)的參數(shù)和值5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞(1)要想返回函數(shù)的值,只能通過)要想返回函數(shù)的值,只能通過return語句來實現(xiàn)。語句來實現(xiàn)。return 語句的一般形式為:語句的一般形式為:return 表達式表達式;或者為:或者為:return(表達式表達式);return語句的功能是計算表達式的值,并返語句的功能是計算表達式的值,并返回給主調(diào)函數(shù)?;亟o主調(diào)函數(shù)。(2)函數(shù)值為整型時,在函數(shù)定義時可以)函數(shù)值為整型時,在函數(shù)定義時可以省去類型

32、說明。省去類型說明。(3)函數(shù)值的類型和函數(shù)定義中說明的函)函數(shù)值的類型和函數(shù)定義中說明的函數(shù)的類型應(yīng)保持一致。數(shù)的類型應(yīng)保持一致。(4)不返回函數(shù)值的函數(shù)可以明確定義為)不返回函數(shù)值的函數(shù)可以明確定義為“空類型空類型”,空類型的說明符為,空類型的說明符為“void”。1. 兩種形式兩種形式 2. 例例5.5 數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素作為實參使用;另一種是把把數(shù)組元素作為實參使用;另一種是把數(shù)組名作為函數(shù)的形參和實參使用。數(shù)組名作為函數(shù)的形參和實參使用。當數(shù)組名作為實參向被調(diào)用函數(shù)傳遞時,當數(shù)組名作為實參向被調(diào)用函數(shù)傳遞時,只傳遞數(shù)組的地址

33、,而不是將整個數(shù)組只傳遞數(shù)組的地址,而不是將整個數(shù)組元素都復(fù)制到函數(shù)中去,即用數(shù)組名作元素都復(fù)制到函數(shù)中去,即用數(shù)組名作為實參調(diào)用被調(diào)用函數(shù),調(diào)用時指向該為實參調(diào)用被調(diào)用函數(shù),調(diào)用時指向該數(shù)組第一個元素數(shù)組第一個元素的指針被傳遞給了被調(diào)的指針被傳遞給了被調(diào)用函數(shù)。用函數(shù)。5.4.2 用數(shù)組作為函數(shù)參數(shù)進行傳遞用數(shù)組作為函數(shù)參數(shù)進行傳遞5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞1. 兩種形式兩種形式 2. 例例5.5 例例5.5 把數(shù)組名作為函數(shù)參數(shù)應(yīng)用舉把數(shù)組名作為函數(shù)參數(shù)應(yīng)用舉例。例。#includeint xs(int *n); void main() int m10, i; for(i=0

34、; i10; i+)mi=i; xs(m); /*按指針方式傳遞數(shù)組按指針方式傳遞數(shù)組*/ int xs(int *n)int j; for(j=0; j10; j+) printf(%3d, *(n+);printf(n);5.4.2 用數(shù)組作為函數(shù)參數(shù)進行傳遞用數(shù)組作為函數(shù)參數(shù)進行傳遞5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞該程序的運行結(jié)果如下:該程序的運行結(jié)果如下:0 1 2 3 4 5 6 7 8 91. 實例一實例一 2. 實例二實例二 定義一個函數(shù)定義一個函數(shù)index(),其中包含兩個形參:一個是字,其中包含兩個形參:一個是字符型,另一個是字符串,該函數(shù)的返回值為整數(shù)。函符型,另

35、一個是字符串,該函數(shù)的返回值為整數(shù)。函數(shù)的功能是計算字符型數(shù)據(jù)在字符串中出現(xiàn)的次數(shù),數(shù)的功能是計算字符型數(shù)據(jù)在字符串中出現(xiàn)的次數(shù),并將出現(xiàn)的次數(shù)作為該函數(shù)的返回值。要求編寫該函并將出現(xiàn)的次數(shù)作為該函數(shù)的返回值。要求編寫該函數(shù),同時編寫主函數(shù)調(diào)用該函數(shù)。數(shù),同時編寫主函數(shù)調(diào)用該函數(shù)。下圖所示為對應(yīng)的下圖所示為對應(yīng)的N-S流程圖。流程圖。 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞count=0, i=0當stri 不等于0stri等于c?真假count=count+1i=i+1返回count的值index函數(shù)輸入一個字符串存入str1輸入一個待查找的字符輸出待查

36、找字符在指定串中出現(xiàn)的次數(shù)1. 實例一實例一 2. 實例二實例二 程序代碼如下:程序代碼如下:#includeint index(char c,char str); /*函數(shù)說明函數(shù)說明*/void main()char str110,c;puts(nPlease enter a string:);gets(str1); /*輸入一個字符串輸入一個字符串*/puts(nPlease enter a char you want to look for:);c=getchar(); /*輸入一個字符輸入一個字符*/printf(nThere are %d characters %c in stri

37、ng %s, index(c,str1),c,str1); /*調(diào)用函數(shù)并輸出結(jié)果調(diào)用函數(shù)并輸出結(jié)果*/ 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞1. 實例一實例一 2. 實例二實例二 int index(char c,char str) /*函數(shù)定義函數(shù)定義*/int i,count;count=0; /*計數(shù)器清零計數(shù)器清零*/i=0;while(stri!=0) /*字符串未結(jié)束字符串未結(jié)束*/ if(stri=c) count+; /*當前字符為當前字符為C,計數(shù)器加,計數(shù)器加1*/ i+;return count; /*返回計數(shù)器的值返回計數(shù)器的值

38、*/ 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞該程序的運行結(jié)果如下:該程序的運行結(jié)果如下:Please enter a string:helloworld Please enter a char you want to look for:l There are 3 characters l in string helloworld1. 實例一實例一 2. 實例二實例二 編寫一個函數(shù)輸出如下圖案。用參數(shù)編寫一個函數(shù)輸出如下圖案。用參數(shù)n控制輸出的行數(shù),參數(shù)值的取值范圍是控制輸出的行數(shù),參數(shù)值的取值范圍是19,超過這個范圍,函數(shù)不做任何輸,超過這個范圍,函數(shù)不做

39、任何輸出,返回整數(shù)出,返回整數(shù)0;否則,輸出如下所示;否則,輸出如下所示的圖案后返回整數(shù)的圖案后返回整數(shù)1。編寫該函數(shù),并編寫主函數(shù)調(diào)用該函編寫該函數(shù),并編寫主函數(shù)調(diào)用該函數(shù)。數(shù)。 1 222 33333 4444444 555555555 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞1. 實例一實例一 2. 實例二實例二 下圖所示為對應(yīng)的下圖所示為對應(yīng)的N-S流程圖。流程圖。 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞輸入一個整型變量n定義整型變量i和jn=1&n=9真假for i=1 to n輸出數(shù)字前的空格for

40、j=n-i to 1輸出數(shù)字for j=1 to 2*i-1輸出換行符!i是否為真?真假返回1返回0print函數(shù)i=print(i)輸出Error data!輸出print的值1. 實例一實例一 2. 實例二實例二 程序代碼如下:程序代碼如下:#include main() int i,n;printf(nPlease enter 1 integer:);scanf(%d,&n);i=print(n);if(!i)printf(Error data!n); printf(The value of print is %d!,i);int print(int n) int i,j;if(

41、n=1&n=9) 5.4.3 參數(shù)傳遞舉例參數(shù)傳遞舉例5.4 函數(shù)間的參數(shù)傳遞函數(shù)間的參數(shù)傳遞1. 實例一實例一 2. 實例二實例二 for(i=1;i=1;j-) /*輸出數(shù)字前的空格輸出數(shù)字前的空格*/ printf( ); for(j=1;j1)1. 簡介簡介 2. 例例5.6 下面是求下面是求n階層的程序:階層的程序:#includefloat fac(int n)float f;if(n0) printf(n%cn,x,z); else move(m-1,x,z,y); printf(%c-%cn,x,z); move(m-1,y,x,z); main() int h; pr

42、intf(nPlease input number:n); scanf(%d,&h); printf(the step to moving %2d diskes:n,h); move(h,a,b,c); 5.5.2 函數(shù)的遞歸函數(shù)的遞歸5.5 函數(shù)的嵌套與遞歸函數(shù)的嵌套與遞歸3. 例例5.7 當當m=3 時程序運行的結(jié)果為:時程序運行的結(jié)果為:input number:3 the step to moving 3 disks:a-ca-bc-ba-cb-ab-ca-c12【函數(shù)名】【函數(shù)名】 abs【用法】【用法】int abs(int i);【 例例5.8】#include #inc

43、lude int main() int number = -2541; printf(number is: %d absolute value is: %dn, number, abs(number); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求整數(shù)的絕對值求整數(shù)的絕對值【運行結(jié)果運行結(jié)果】number is: -2541 absolute value is: 254112【函數(shù)名】【函數(shù)名】 cos 【用法】【用法】 double cos(double x); 【 例例5.9】 #include #include int main(

44、) double ret; double x = 0.6; ret = cos(x); printf(The cosine of %lf is %lfn, x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求余弦函數(shù)求余弦函數(shù)【運行結(jié)果運行結(jié)果】The cosine of 0.600000 is 0.82533612【函數(shù)名】【函數(shù)名】 exp 【用法】【用法】double exp(double x); 【例【例5.10】 #include #include int main() double ret; double x =

45、8.0; ret = exp(x); printf(e raised to the power of %lf (e %lf) = %lfn,x, x, ret);return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求指數(shù)函數(shù)求指數(shù)函數(shù)(e的的x次方次方)【運行結(jié)果運行結(jié)果】e raised to the power of 8.000000 (e 8.000000) = 2980.95798712【函數(shù)名】【函數(shù)名】 labs 【用法】【用法】long labs(long n); 【例【例5.11】 #include #include int ma

46、in() long int ret; long int x = -12345678L; ret=labs(x); printf(“number: %ld abs value: %ldn”, x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789取長整型絕對值取長整型絕對值【運行結(jié)果運行結(jié)果】number: -12345678 abs value: 1234567812【函數(shù)名】【函數(shù)名】 log 【用法】【用法】 double log(double x); 【例【例5.12】 #include #include int main(

47、) double ret; double x = 5.8928; ret = log(x); printf(The natural log of %lf is %lfn, x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求對數(shù)函數(shù)求對數(shù)函數(shù)【運行結(jié)果運行結(jié)果】The natural log of 5.892800 is 1.77373112【函數(shù)名】【函數(shù)名】 pow 【用法】【用法】 double pow(double x, double y); 【例【例5.13】 #include #include int main()

48、 double x = 3.0, y = 4.0; printf(%lf raised to %lf is %lfn, x, y, pow(x, y); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789指數(shù)函數(shù)指數(shù)函數(shù)(x的的y次方次方)【運行結(jié)果運行結(jié)果】3.000000 raised to 4.000000 is 81.00000012【函數(shù)名】【函數(shù)名】 sin 【用【用 法】法】double sin(double x); 【例【例5.14】#include #include int main() double ret, x = 0.5

49、; ret = sin(x); printf(The sin() of %lf is %lfn, x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求正弦函數(shù)求正弦函數(shù)【運行結(jié)果運行結(jié)果】The sin() of 0.500000 is 0.47942612【函數(shù)名】【函數(shù)名】 sqrt 【用法】【用法】double sqrt(double x); 【例【例5.15】 #include #include int main() double x = 9.0, ret; ret = sqrt(x); printf(The squa

50、re root of %lf is %lfn, x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789計算平方根函數(shù)計算平方根函數(shù)【運行結(jié)果運行結(jié)果】The square root of 9.000000 is 3.00000012【函數(shù)名】【函數(shù)名】 tan 【用法】【用法】double tan(double x); 【例【例5.16】 #include #include int main() double ret, x; x = 0.5; ret = tan(x); printf(The tan of %lf is %lfn,

51、 x, ret); return 0; 34 5.6.1 常用的數(shù)學(xué)函數(shù)常用的數(shù)學(xué)函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)56789求正切函數(shù)求正切函數(shù)【運行結(jié)果運行結(jié)果】The tan of 0.500000 is 0.5463021【函數(shù)名】【函數(shù)名】 itoa 【用法】【用法】char *itoa(int value, char *string, int radix); 【例【例5.17】 #include #include int main() int number = 23516; char string30; itoa(number, string, 10); printf(integer =

52、 %d string = %sn, number, string); return 0; 2 5.6.2 字符函數(shù)字符函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)3整數(shù)轉(zhuǎn)換為字符串函數(shù)整數(shù)轉(zhuǎn)換為字符串函數(shù)【運行結(jié)果運行結(jié)果】integer = 23516 string =235161【函數(shù)名】【函數(shù)名】 tolower 【用法】【用法】int tolower(int c); 【例【例5.18】 #include #include #include int main(void) int length, i; char *string = THIS IS A STRING; length = strlen(str

53、ing); for(i=0; ilength; i+) stringi = tolower(stringi); printf(%sn,string); return 0; 2 5.6.2 字符函數(shù)字符函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)3字符轉(zhuǎn)換成小寫字母函數(shù)字符轉(zhuǎn)換成小寫字母函數(shù)【運行結(jié)果運行結(jié)果】this is a string1【函數(shù)名】【函數(shù)名】 toupper 【用法】【用法】int toupper(int c); 【例【例5.19】 #include #include #include int main(void) int length, i; char *string=this is a

54、 string; length = strlen(string); for(i=0;ilength;i+) stringi=toupper(stringi); printf(%sn,string); return 0; 2 5.6.2 字符函數(shù)字符函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)3字符轉(zhuǎn)換成大寫字母函數(shù)字符轉(zhuǎn)換成大寫字母函數(shù)【運行結(jié)果運行結(jié)果】THIS IS A STRING1【函數(shù)名】【函數(shù)名】 gettime 【用法】【用法】void gettime(struct time *timep); 【例【例5.20】#include #include int main() struct time t

55、; gettime(&t); printf(The current time is: %2d:%2d:%2d.%2dn, t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); return 0; 2 5.6.3 其他函數(shù)其他函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù)取得當前系統(tǒng)時間函數(shù)取得當前系統(tǒng)時間函數(shù)【運行結(jié)果運行結(jié)果】(運行程序時的系統(tǒng)時間)(運行程序時的系統(tǒng)時間)The current time is:14:10:38.911【函數(shù)名】【函數(shù)名】 rand 【用法】【用法】void rand(void); 【例【例5.21】 #include #include

56、 int main() int i; printf(Ten random numbers from 0 to 99nn); for(i=0; i10; i+) printf(%dn, rand()%100); return 0; 說明:由于說明:由于rand()函數(shù)返回值為隨機數(shù),所以上述程函數(shù)返回值為隨機數(shù),所以上述程序每次執(zhí)行的結(jié)果不相同。序每次執(zhí)行的結(jié)果不相同。2 5.6.3 其他函數(shù)其他函數(shù)5.6 系統(tǒng)函數(shù)系統(tǒng)函數(shù) 隨機數(shù)發(fā)生器函數(shù)隨機數(shù)發(fā)生器函數(shù)【運行結(jié)果運行結(jié)果】Ten random numbers from 0 to 9946308290561795154826變量的完整定義格式

57、為:變量的完整定義格式為: 存儲類型標識符存儲類型標識符 類型標識符類型標識符 變量名表;變量名表;在函數(shù)(包括主函數(shù))內(nèi)部或復(fù)合語句的說明部分所在函數(shù)(包括主函數(shù))內(nèi)部或復(fù)合語句的說明部分所定義的變量稱為局部變量。局部變量的作用域僅在它定義的變量稱為局部變量。局部變量的作用域僅在它所定義的函數(shù)體或復(fù)合語句之內(nèi)。所定義的函數(shù)體或復(fù)合語句之內(nèi)。5.7.1 變量的作用域變量的作用域5.7 變量的存儲類別、作用域、生存期變量的存儲類別、作用域、生存期auto及及register型變量的初始化是在程序執(zhí)行期間型變量的初始化是在程序執(zhí)行期間完成的,它們所在的函數(shù)或程序段每次被調(diào)用時,完成的,它們所在的函

58、數(shù)或程序段每次被調(diào)用時,初始化都要進行一次。初始化都要進行一次?!纠?.22】auto型變量的初始化舉例。型變量的初始化舉例。#include found() auto int x=3; /*關(guān)鍵字關(guān)鍵字auto可以省略,可以省略,auto int a=2; 與與 int a=2; 二者等價。二者等價。*/x+;return x;main() int i;for(i=0;i3;i+)printf(%d ,found(); auto及及register型變量的初始化型變量的初始化5.7.2 變量的存儲類別和生存期變量的存儲類別和生存期5.7 變量的存儲類別、作用域、生存期變量的存儲類別、作用域

59、、生存期【運行結(jié)果運行結(jié)果】4 4 4auto或或register型變量的值只在它們所在的函數(shù)型變量的值只在它們所在的函數(shù)或程序段執(zhí)行期間才被保留,一旦它們所在的或程序段執(zhí)行期間才被保留,一旦它們所在的函數(shù)或程序段執(zhí)行結(jié)束,其值就不再有效。函數(shù)或程序段執(zhí)行結(jié)束,其值就不再有效。【例【例5.23】auto型變量生存期舉例。型變量生存期舉例。#include found() auto int x=3;x+;return x;main() int x=6,i;for(i=0;i3;i+) printf(%dn,found(); auto及及register型變量的生命期型變量的生命期5.7.2 變量

60、的存儲類別和生存期變量的存儲類別和生存期5.7 變量的存儲類別、作用域、生存期變量的存儲類別、作用域、生存期上述程序在編譯時將報錯,上述程序在編譯時將報錯,因為在因為在found()中的中的x被定被定義在內(nèi)層花括號中,在離義在內(nèi)層花括號中,在離開內(nèi)層花括號后,開內(nèi)層花括號后,x就變就變成未定義,因而不能引用。成未定義,因而不能引用。static型變量的初始化是在編譯期間完成的,只進型變量的初始化是在編譯期間完成的,只進行一次;它的生存期和程序的生存期相同。因此,行一次;它的生存期和程序的生存期相同。因此,當它所在的函數(shù)多次被調(diào)用時,將不再進行初始當它所在的函數(shù)多次被調(diào)用時,將不再進行初始化,每次調(diào)用結(jié)束后,其值也將被保留。化,每次調(diào)用結(jié)束后,其值也將被保留。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論