第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第1頁
第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第2頁
第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第3頁
第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第4頁
第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩153頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計(jì)地球物理與信息工程學(xué)院計(jì)算機(jī)系地球物理與信息工程學(xué)院計(jì)算機(jī)系第第7章章利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)2第第7章章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1 為什么要用函數(shù)為什么要用函數(shù)7.2 怎樣定義函數(shù)怎樣定義函數(shù)7.3 調(diào)用函數(shù)調(diào)用函數(shù)7.4 對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型7.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用7.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用7.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)7.8 局部變量和全局變量局部變量和全局變量7.9 變量的存儲方式和生存期變量的存儲方式和生存期7.

2、10 關(guān)于變量的聲明和定義關(guān)于變量的聲明和定義7.11 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)3第第7章章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1 為什么要用函數(shù)為什么要用函數(shù)7.2 怎樣定義函數(shù)怎樣定義函數(shù)7.3 調(diào)用函數(shù)調(diào)用函數(shù)7.4 對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型7.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用7.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用7.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)7.8 局部變量和全局變量局部變量和全局變量7.9 變量的存儲方式和生存期變量的存儲方式和生存期7.10 關(guān)于變量的聲明和定義關(guān)于變量的聲明和定

3、義7.11 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)4本章主要內(nèi)容本章主要內(nèi)容 函數(shù)的有關(guān)概念函數(shù)的有關(guān)概念l定義定義l調(diào)用調(diào)用l參數(shù)參數(shù)l返回值返回值l函數(shù)原型聲函數(shù)原型聲明明 函數(shù)嵌套調(diào)用函數(shù)嵌套調(diào)用 函數(shù)遞歸調(diào)用函數(shù)遞歸調(diào)用 數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù) 內(nèi)部變量與外部變內(nèi)部變量與外部變量量 變量的存儲方式變量的存儲方式 變量聲明定義的區(qū)變量聲明定義的區(qū)別別 內(nèi)部函數(shù)與外部函內(nèi)部函數(shù)與外部函數(shù)數(shù)例題例題 習(xí)題習(xí)題 典型算法典型算法函數(shù)參數(shù)單向值傳遞問題函數(shù)參數(shù)單向值傳遞問題多層嵌套調(diào)用多層嵌套調(diào)用函數(shù)遞歸調(diào)用函數(shù)遞歸調(diào)用數(shù)組名作參數(shù)數(shù)組名作參數(shù)排序排序求

4、最大值最小值求最大值最小值字符串處理字符串處理第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)57.1 為什么要用函數(shù)為什么要用函數(shù)復(fù)雜問題復(fù)雜問題模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能函數(shù)實(shí)現(xiàn)一個(gè)特定的功能每個(gè)函數(shù)可以被使用多次每個(gè)函數(shù)可以被使用多次-復(fù)用復(fù)用第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)6mainabcfghdeie用函數(shù)解決復(fù)雜問題用函數(shù)解決復(fù)雜問題第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7可以使用可以使用庫函數(shù)庫函數(shù)可以使用可以使用自己編寫的函數(shù)自己編寫的函數(shù)在程序設(shè)計(jì)中在程序設(shè)計(jì)中要善于利用函數(shù)要善于利用函數(shù)可以可以減少重復(fù)編寫程序段的工作量減少重復(fù)編寫程序段的工作量同時(shí)可以同時(shí)可以方便

5、地實(shí)現(xiàn)模塊化的程序設(shè)計(jì)方便地實(shí)現(xiàn)模塊化的程序設(shè)計(jì)可以使用哪些函數(shù)?可以使用哪些函數(shù)?第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)8例題例題7-1例例7.1 輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)。輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)。*How do you do!*第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)9#include int main() void print_star( ); /聲明函數(shù)聲明函數(shù) void print_message( ); /聲明函數(shù)聲明函數(shù) print_star( ); /調(diào)用函數(shù)調(diào)用函數(shù) print_message( ); /調(diào)用函數(shù)調(diào)用函數(shù) print_star( ); /調(diào)用函數(shù)調(diào)用函數(shù)

6、return 0;void print_star( ) /定義函數(shù)定義函數(shù) printf(*n); void print_message( ) /定義函數(shù)定義函數(shù) printf( How do you do!n); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)10一個(gè)程序由一個(gè)或多個(gè)程序模塊組成,一個(gè)程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件每一個(gè)程序模塊作為一個(gè)源程序文件 一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其他有關(guān)內(nèi)容(如預(yù)處理指令、數(shù)據(jù)聲明與他有關(guān)內(nèi)容(如預(yù)處理指令、數(shù)據(jù)聲明與定義等)組定義等)組成成程序的執(zhí)行是從程序的執(zhí)行是從main函數(shù)開始

7、的,如果函數(shù)開始的,如果在在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到程返回到main函數(shù),在函數(shù),在main函數(shù)中結(jié)束整函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。個(gè)程序的運(yùn)行。所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是分別進(jìn)行的,是互相獨(dú)立的。即函數(shù)不能分別進(jìn)行的,是互相獨(dú)立的。即函數(shù)不能嵌套定義嵌套定義說明:說明:第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)11從用戶使用的角度看,函數(shù)有兩種從用戶使用的角度看,函數(shù)有兩種 庫函數(shù)庫函數(shù) 用戶自己定義的函數(shù)用戶自己定義的函數(shù)從函數(shù)的形式看,函數(shù)分兩類從函數(shù)的形式看,函數(shù)分兩類 無參函數(shù)無參函數(shù) 有參函有參

8、函數(shù)數(shù)函數(shù)的種類函數(shù)的種類第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)127.2 怎樣定義函數(shù)怎樣定義函數(shù)7.2.1 為什么要定義函數(shù)為什么要定義函數(shù)7.2.2 定義函數(shù)的方法定義函數(shù)的方法第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)137.2.1 為什么要定義函數(shù)為什么要定義函數(shù)C語言要求,在程序中用到的所有函數(shù),語言要求,在程序中用到的所有函數(shù),必須必須先定義,后使用先定義,后使用 指定函數(shù)的名字指定函數(shù)的名字,以便以后按名調(diào)用,以便以后按名調(diào)用 指定函數(shù)類型指定函數(shù)類型,即函數(shù)返回值的類型,即函數(shù)返回值的類型 指定函數(shù)參數(shù)的名字和類型指定函數(shù)參數(shù)的名字和類型,以便在調(diào)用函,以便在調(diào)用函數(shù)時(shí)向它們傳遞數(shù)據(jù)數(shù)時(shí)

9、向它們傳遞數(shù)據(jù) 指定函數(shù)的功能指定函數(shù)的功能。這是最重要的,這是在函。這是最重要的,這是在函數(shù)體中解決的數(shù)體中解決的第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)14p 對于對于庫函數(shù),程序設(shè)計(jì)者只需用庫函數(shù),程序設(shè)計(jì)者只需用#include指令把有關(guān)的頭文件包含到本文件模塊中指令把有關(guān)的頭文件包含到本文件模塊中即可即可 #include #include #include第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)157.2.2 定義函數(shù)的方法定義函數(shù)的方法1、定義無參函數(shù)定義無參函數(shù)定義無參函數(shù)的一般形定義無參函數(shù)的一般形式為式為:類型名類型名 函數(shù)名函數(shù)名 (void) 函數(shù)體函數(shù)體 類型名類型名 函數(shù)名函數(shù)

10、名( ) 函數(shù)體函數(shù)體 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)162、定義有參函數(shù)定義有參函數(shù)定義有參函數(shù)的一般形式為定義有參函數(shù)的一般形式為:類型名類型名 函數(shù)名函數(shù)名(形式參數(shù)表列形式參數(shù)表列) 函數(shù)體函數(shù)體第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)173、定義空函數(shù)定義空函數(shù)定義定義空空函數(shù)的一般形式為函數(shù)的一般形式為:類型名類型名 函數(shù)名函數(shù)名( ) 作用:作用:先用空函數(shù)占一個(gè)位置,以后先用空函數(shù)占一個(gè)位置,以后逐逐步步擴(kuò)充擴(kuò)充好處好處:程序結(jié)構(gòu)清楚,可讀性好,以后程序結(jié)構(gòu)清楚,可讀性好,以后擴(kuò)充新功擴(kuò)充新功 能方便,對程序結(jié)構(gòu)影響能方便,對程序結(jié)構(gòu)影響不大不大第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)

11、187.3 調(diào)用函數(shù)調(diào)用函數(shù)7.3.1 函數(shù)調(diào)用的形式函數(shù)調(diào)用的形式7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞7.3.3 函數(shù)調(diào)用的過程函數(shù)調(diào)用的過程7.3.4 函數(shù)的返回值函數(shù)的返回值第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)197.3.1 函數(shù)調(diào)用的形式函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來分,可以有以下分,可以有以下3種函數(shù)調(diào)用方式種函數(shù)調(diào)用方式:. 函數(shù)調(diào)用語句函數(shù)調(diào)用語句u把函數(shù)調(diào)用單獨(dú)作為一個(gè)語句把函數(shù)調(diào)用單獨(dú)作為一個(gè)語句, 如如 printf_star();u這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作這時(shí)不要求函數(shù)帶回值,只要

12、求函數(shù)完成一定的操作第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)20. 函數(shù)表達(dá)式函數(shù)表達(dá)式u函數(shù)調(diào)用出現(xiàn)在另一個(gè)表達(dá)式中函數(shù)調(diào)用出現(xiàn)在另一個(gè)表達(dá)式中, 如如u c=max(a,b);u這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算. 函數(shù)參數(shù)函數(shù)參數(shù)函數(shù)調(diào)用作為另一函數(shù)調(diào)用時(shí)的實(shí)參函數(shù)調(diào)用作為另一函數(shù)調(diào)用時(shí)的實(shí)參, 如如 mmax(a,max(b,c);其中其中max(b,c)是一次函數(shù)調(diào)用,它的值作為是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參另一次調(diào)用的實(shí)參第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)217.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞

13、1.1.形式參數(shù)和實(shí)際參數(shù)形式參數(shù)和實(shí)際參數(shù)定義函數(shù)時(shí)函數(shù)名后面的變量名稱為定義函數(shù)時(shí)函數(shù)名后面的變量名稱為形式形式參數(shù)參數(shù)(簡稱(簡稱形參形參)主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面參主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面參數(shù)稱為數(shù)稱為實(shí)際參數(shù)實(shí)際參數(shù)(簡稱(簡稱實(shí)參實(shí)參)p形式參數(shù)形式參數(shù)是在首行定義的變量等!是在首行定義的變量等!p實(shí)際參數(shù)實(shí)際參數(shù)可以是常量、變量或表達(dá)式可以是常量、變量或表達(dá)式第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)222.2.實(shí)參和形參間的數(shù)據(jù)傳遞實(shí)參和形參間的數(shù)據(jù)傳遞在調(diào)用函數(shù)過程中,系統(tǒng)會把實(shí)參的值傳遞在調(diào)用函數(shù)過程中,系統(tǒng)會把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參給被調(diào)用函數(shù)的形

14、參或者說,或者說,形參從實(shí)參得到一個(gè)值形參從實(shí)參得到一個(gè)值該值在函數(shù)調(diào)用期間有效,可以參加該值在函數(shù)調(diào)用期間有效,可以參加被調(diào)被調(diào)函函數(shù)中的運(yùn)算數(shù)中的運(yùn)算從從實(shí)參實(shí)參到到形參形參的值傳遞的的值傳遞的單向單向的!沒有返回的!沒有返回的過程!的過程!單向值傳遞!單向值傳遞!第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)23例例7.2 輸入兩個(gè)整數(shù),要求輸出其中值較大輸入兩個(gè)整數(shù),要求輸出其中值較大者。者。 要求用函數(shù)來找到大數(shù)。要求用函數(shù)來找到大數(shù)。先編寫先編寫max函數(shù):函數(shù):int max(int x,int y) int z; z=xy?x:y; return(z); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)

15、24#include int main() int max(int x,int y); int a,b,c; printf(two integer numbers: ); scanf(%d,%d,&a,&b); c=max(a,b); printf(max is %dn,c); 實(shí)參可以是常量、變量或表達(dá)式實(shí)參可以是常量、變量或表達(dá)式第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)25int max(int x, int y ) int z; z=xy?x:y; return(z); #include int main() int max(int x,int y); int a,b,c; p

16、rintf(two integer numbers: ); scanf(%d,%d,&a,&b); c=max( a , b ); printf(max is %dn,c); 調(diào)用時(shí):調(diào)用時(shí):從實(shí)參到形參,單向值傳遞!從實(shí)參到形參,單向值傳遞!返回時(shí):返回時(shí):帶回一個(gè)值!帶回一個(gè)值!第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)267.3.3 函數(shù)調(diào)用的過程函數(shù)調(diào)用的過程在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲單元。調(diào)用時(shí),它們并不占內(nèi)存中的存儲單元。在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)max的形參被臨的形參被臨時(shí)分配內(nèi)

17、存單元。時(shí)分配內(nèi)存單元。2a3bxy23實(shí)參實(shí)參形參形參第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)27調(diào)用結(jié)束,形參單元被釋放調(diào)用結(jié)束,形參單元被釋放實(shí)參單元仍保留并維持原值,沒有改變實(shí)參單元仍保留并維持原值,沒有改變?nèi)绻趫?zhí)行一個(gè)被調(diào)用函數(shù)時(shí),如果在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值發(fā)生形參的值發(fā)生改變,改變,2a3bxy23實(shí)參實(shí)參形參形參不會改變主調(diào)函數(shù)的實(shí)參的值不會改變主調(diào)函數(shù)的實(shí)參的值! !第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)28#include int main() int f(int x,int y); int a=5,b=8; printf(a=%d,b=%dn,a,b); f(a,b);

18、printf(a=%d,b=%dn,a,b); return 0;int f(int x,int y) x=x+9; y=y*3; return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)29#include int main() int f(int x,int y); int a=5,b=8; printf(a=%d,b=%dn,a,b); f(a,b); printf(a=%d,b=%dn,a,b); return 0;int f(int x,int y) x=x+9; y=y*3; printf(x=%d,y=%dn,x,y); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)30#in

19、clude int main() int f(int x,int y); int a=5,b=8; printf(a=%d,b=%dn,a,b); f( a , b ); printf(a=%d,b=%dn,a,b); return 0;int f(int x , int y ) x=x+9; y=y*3; printf(x=%d,y=%dn,x,y); return 0;a到到x,b到到y(tǒng),都是單向傳遞的,都是單向傳遞的沒有沒有x到到a,y到到b的傳遞的傳遞第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)31#include int main() int f(int x,int y); int a=5,b

20、=8; printf(a=%d,b=%dn,a,b); f( a+6 , b+8 ); printf(a=%d,b=%dn,a,b); return 0;int f(int x , int y ) x=x+9; y=y*3; printf(x=%d,y=%dn,x,y); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)327.3.4 函數(shù)的返回值函數(shù)的返回值希望通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到希望通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到確定的值確定的值, 這就是這就是函數(shù)值函數(shù)值(函數(shù)的返回值函數(shù)的返回值) 函數(shù)的返回值是通過函數(shù)中的函數(shù)的返回值是通過函數(shù)中的return語句獲得的語句獲得的 一個(gè)函數(shù)中

21、可以有一個(gè)以上的一個(gè)函數(shù)中可以有一個(gè)以上的return語句語句, 執(zhí)行到哪一個(gè)執(zhí)行到哪一個(gè)return語句語句, 哪一個(gè)哪一個(gè)就就起作用起作用 return語句后面的括號可以不要語句后面的括號可以不要u函數(shù)值的類型函數(shù)值的類型, 應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型u在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語句中的語句中的表達(dá)式類型一致表達(dá)式類型一致u如果函數(shù)值的類型和如果函數(shù)值的類型和return語句中表達(dá)式的值不一致語句中表達(dá)式的值不一致, 則則以函數(shù)類型為準(zhǔn)以函數(shù)類型為準(zhǔn)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)33例例7.

22、3#include int main() int max(float x,float y); float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(max is %dn,c); return 0;int max(float x, float y) float z; z=xy?x:y; return( z ) ;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)34例例7.3#include int main() int max(float x,float y); float a,b; float c; scanf(%f,%f,&

23、;a,&b); c=max(a,b); printf(max is %f n,c); return 0;int max(float x, float y) float z; z=xy?x:y; return( z ) ;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)35例例7.3#include int main() float max(float x,float y); float a,b; float c; scanf(%f,%f,&a,&b); c=max(a,b); printf(max is %f n,c); return 0;float max(float x, flo

24、at y) float z; z=xy?x:y; return( z ) ;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)367.4 對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型 在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需要具備在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需要具備如下條件:如下條件:被調(diào)用函數(shù)必須是已經(jīng)定義的函數(shù)(是庫函被調(diào)用函數(shù)必須是已經(jīng)定義的函數(shù)(是庫函數(shù)或用戶自己定義的函數(shù))數(shù)或用戶自己定義的函數(shù))如果使用庫函數(shù),應(yīng)該在本文件開頭如果使用庫函數(shù),應(yīng)該在本文件開頭加相應(yīng)加相應(yīng)的的#include指令指令如果使用自己定義的函數(shù),而該函數(shù)的位置如果使用自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)后面,在調(diào)用它

25、的函數(shù)后面,應(yīng)該聲明應(yīng)該聲明第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)37用用add函數(shù)實(shí)現(xiàn)函數(shù)實(shí)現(xiàn)求和。在求和。在main函數(shù)中輸入函數(shù)中輸入輸出。輸出。求得的和是求得的和是float型,型,add函數(shù)為函數(shù)為float型型。add有兩個(gè)參數(shù),也分別是有兩個(gè)參數(shù),也分別是float型,型,float型。型。使用使用add函數(shù)前要有聲明。函數(shù)前要有聲明。例例7.4 輸入兩個(gè)實(shí)數(shù),用一個(gè)函數(shù)求出它們之輸入兩個(gè)實(shí)數(shù),用一個(gè)函數(shù)求出它們之和。和。第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)38#include int main() float add(float x, float y); float a,b,c; p

26、rintf(Please enter a and b:); scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %fn,c); return 0;float add(float x,float y) float z; z=x+y; return(z); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)39#include int main() float add(float m, float n); float a,b,c; printf(Please enter a and b:); scanf(%f,%f,&a,&b); c=add

27、(a,b); printf(sum is %fn,c); return 0;float add(float m,float n) float z; z=m+n; return(z); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)40#include int main() float add(float u, float v); float a,b,c; printf(Please enter a and b:); scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %fn,c); return 0;float add(float u,float v

28、) float z; z=u+v; return(z); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)41#include int main() float add(float , float ); float a,b,c; printf(Please enter a and b:); scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %fn,c); return 0;float add(float x,float y) float z; z=x+y; return(z); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)42 函數(shù)原型一般形式有兩種函數(shù)原型一

29、般形式有兩種: float add(float x, float y); float add(float, float); 原型說明可以放在文件的開頭,這時(shí)所有原型說明可以放在文件的開頭,這時(shí)所有函數(shù)都可以使用此函數(shù)函數(shù)都可以使用此函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)43例題例題編寫一個(gè)函數(shù),判斷一個(gè)數(shù)是否是素?cái)?shù)編寫一個(gè)函數(shù),判斷一個(gè)數(shù)是否是素?cái)?shù)分析,輸入分析,輸入m判斷判斷m是否是素?cái)?shù)是否是素?cái)?shù)如果是,輸出如果是,輸出1,如果不是,輸出,如果不是,輸出0應(yīng)該是從實(shí)參傳來應(yīng)該是從實(shí)參傳來m的值,的值,m是形參。函數(shù)是形參。函數(shù)的返回值是的返回值是1代表是素?cái)?shù),代表是素?cái)?shù),0代表不是素?cái)?shù)代表不

30、是素?cái)?shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)44int prime(int m) int i; for(i=2;im;i+) if(m%i=0)return 0; return 1;再編寫一個(gè)主函數(shù),求再編寫一個(gè)主函數(shù),求200以內(nèi)的孿生素?cái)?shù)。孿生素以內(nèi)的孿生素?cái)?shù)。孿生素?cái)?shù)是差是數(shù)是差是2的素?cái)?shù),如:的素?cái)?shù),如:3和和5,5和和7,等等,等等第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)45#include int main() int prime(int m); int m; for(m=3;m198;m+=2) if(prime(m)&prime(m+2) printf(%3d,%3dn,m,m+

31、2);int prime(int m) int i; for(i=2;im;i+) if(m%i=0)return 0; return 1;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)46第第7章章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1 為什么要用函數(shù)為什么要用函數(shù)7.2 怎樣定義函數(shù)怎樣定義函數(shù)7.3 調(diào)用函數(shù)調(diào)用函數(shù)7.4 對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型7.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用7.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用7.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)7.8 局部變量和全局變量局部變量和全局變量7.9 變量的存儲方式和生存期變量的存儲方式和生存

32、期7.10 關(guān)于變量的聲明和定義關(guān)于變量的聲明和定義7.11 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)477.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用 語言的函數(shù)定義是互相平行、獨(dú)立的語言的函數(shù)定義是互相平行、獨(dú)立的 即即函數(shù)不能嵌套定義函數(shù)不能嵌套定義 但可以嵌套調(diào)用函數(shù)但可以嵌套調(diào)用函數(shù) 即即調(diào)用一個(gè)函數(shù)的過程中,又調(diào)用一個(gè)函數(shù)的過程中,又可以可以調(diào)用另調(diào)用另一個(gè)函數(shù)一個(gè)函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)48main函數(shù)函數(shù)調(diào)用調(diào)用a函數(shù)函數(shù)結(jié)束結(jié)束a函數(shù)函數(shù)調(diào)用調(diào)用b函數(shù)函數(shù)b函數(shù)函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)49例例7.5 輸入輸入4個(gè)整數(shù),找出其中最

33、大的數(shù)。用函數(shù)的個(gè)整數(shù),找出其中最大的數(shù)。用函數(shù)的嵌套調(diào)用來處理。嵌套調(diào)用來處理。解題思路:解題思路: main只負(fù)責(zé)輸入輸出,把求只負(fù)責(zé)輸入輸出,把求4個(gè)數(shù)的最大值的任個(gè)數(shù)的最大值的任務(wù)交給一個(gè)務(wù)交給一個(gè)max4函數(shù)去做。現(xiàn)在就需要編寫一個(gè)函數(shù)去做?,F(xiàn)在就需要編寫一個(gè)max4函數(shù),完成求函數(shù),完成求4個(gè)數(shù)的最大值個(gè)數(shù)的最大值 max4函數(shù)求最大值時(shí),調(diào)用函數(shù)求最大值時(shí),調(diào)用max2函數(shù)求兩個(gè)數(shù)函數(shù)求兩個(gè)數(shù)的較大值。的較大值。1. max函數(shù)以前我們編寫過函數(shù)以前我們編寫過第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)50#include int main() int max4(int a,int b,i

34、nt c,int d); int a,b,c,d,max; printf(4 interger numbers:); scanf(%d%d%d%d,&a,&b,&c,&d); max=max4(a,b,c,d); printf(max=%d n,max); return 0; 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)51int max4(int a,int b,int c,int d) int max2(int a,int b); int m; m=max2(a,b); m=max2(m,c); m=max2(m,d); return(m); int max2(int

35、 a,int b) if(ab) return a; else return b; 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)52第第7章章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1 為什么要用函數(shù)為什么要用函數(shù)7.2 怎樣定義函數(shù)怎樣定義函數(shù)7.3 調(diào)用函數(shù)調(diào)用函數(shù)7.4 對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型7.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用7.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用7.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)7.8 局部變量和全局變量局部變量和全局變量7.9 變量的存儲方式和生存期變量的存儲方式和生存期7.10 關(guān)于變量的聲明和定義關(guān)于變量的聲明和定義7.

36、11 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)537.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)遞歸調(diào)用用。 語言的特點(diǎn)之一就在于允許函數(shù)的遞歸語言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。調(diào)用。第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)54 f2函數(shù)函數(shù)調(diào)用調(diào)用f1函數(shù)函數(shù) int f(int x) int y,z; z=f(y); return (2*z); f函數(shù)函數(shù)調(diào)用調(diào)用f函數(shù)函數(shù) f1函數(shù)函數(shù)調(diào)用調(diào)用f2函數(shù)函數(shù)應(yīng)使用應(yīng)使用if語句控制結(jié)

37、束調(diào)用語句控制結(jié)束調(diào)用直接調(diào)用本函數(shù)直接調(diào)用本函數(shù)間接調(diào)用本函數(shù)間接調(diào)用本函數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)55 例例7.6 有有5個(gè)學(xué)生坐在一起個(gè)學(xué)生坐在一起u問第問第5個(gè)學(xué)生多少歲?他說比第個(gè)學(xué)生多少歲?他說比第4個(gè)學(xué)生大個(gè)學(xué)生大2歲歲u問第問第4個(gè)學(xué)生多少歲?他說比第個(gè)學(xué)生多少歲?他說比第3個(gè)學(xué)生大個(gè)學(xué)生大2歲歲u問第問第3個(gè)學(xué)生多少歲?他說比第個(gè)學(xué)生多少歲?他說比第2個(gè)學(xué)生大個(gè)學(xué)生大2歲歲u問第問第2個(gè)學(xué)生多少歲?他說比第個(gè)學(xué)生多少歲?他說比第1個(gè)學(xué)生大個(gè)學(xué)生大2歲歲u問第問第1個(gè)學(xué)生多少歲?他說是個(gè)學(xué)生多少歲?他說是10歲歲請問第請問第5個(gè)學(xué)生多大個(gè)學(xué)生多大第7章 利用函數(shù)實(shí)現(xiàn)模

38、塊化程序設(shè)計(jì)56解題思路:解題思路:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10) 1n(2) 1n(age)n(age) 1n(10)n(age第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)57 #include int main() int age(int n); printf(NO.5,age:%dn,age(5); return 0; int age(int n) int c; if(n=1) c=10; else c=age(n-1)+2; return(c); ) 1n(2) 1n(age)n(age

39、) 1n(10)n(age第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)58例例7.7 用遞歸方法求!用遞歸方法求!解題思路:解題思路:找出求階乘的遞推公式找出求階乘的遞推公式)n()!n(n),n(!n!n11101編寫一個(gè)編寫一個(gè)遞歸函數(shù)遞歸函數(shù)實(shí)現(xiàn)遞推公式實(shí)現(xiàn)遞推公式主函數(shù)中輸入,調(diào)用被調(diào)函數(shù),輸出主函數(shù)中輸入,調(diào)用被調(diào)函數(shù),輸出第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)59int fac(int n) int f; if(n0) printf(n0,data error!); else if(n=0 | | n=1) f=1; else f=fac(n-1)*n; return(f); )n()!n(n)

40、,n(!n!n11101第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)60#include int main() int fac(int n); int n; int y; printf(input an integer number:); scanf(%d,&n); y=fac(n); printf(%d!=%dn,n,y); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)61再例:猴子吃桃問題再例:猴子吃桃問題先找出遞推公式,編寫一個(gè)函數(shù)實(shí)現(xiàn)遞推先找出遞推公式,編寫一個(gè)函數(shù)實(shí)現(xiàn)遞推公式,再編寫主函數(shù)調(diào)用,輸出結(jié)果。公式,再編寫主函數(shù)調(diào)用,輸出結(jié)果。 時(shí)時(shí)當(dāng)當(dāng)(時(shí)時(shí)當(dāng)當(dāng)10n1, 2*)1

41、)1n(peach10n, 1)n(peach第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)62#includeint peach(int n) int p; if(n=10) p=1; else p=(peach(n+1)+1)*2; return(p);void main() printf( %dn,peach(1); 時(shí)時(shí)當(dāng)當(dāng)(時(shí)時(shí)當(dāng)當(dāng)10n1, 2*)1)1n(peach10n, 1)n(peach第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)63 例例7.8 Hanoi(漢諾)塔問題。古代有一(漢諾)塔問題。古代有一個(gè)梵塔,塔內(nèi)有個(gè)梵塔,塔內(nèi)有3個(gè)座個(gè)座A、B、C,開始時(shí),開始時(shí)座上有座上有64個(gè)盤子,盤子

42、大小不等,大的個(gè)盤子,盤子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤子從座移到座,但規(guī)定每次只允個(gè)盤子從座移到座,但規(guī)定每次只允許移動一個(gè)盤,且在移動過程中在許移動一個(gè)盤,且在移動過程中在3個(gè)座上個(gè)座上都始終保持大盤在下,小盤在上。在移動都始終保持大盤在下,小盤在上。在移動過程中可以利用過程中可以利用B座。要求編程序輸出移座。要求編程序輸出移動一盤子的步驟。動一盤子的步驟。ABC第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)647.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)7.7.1 數(shù)組元素作函數(shù)實(shí)參數(shù)組元素作函數(shù)實(shí)參7.7.2 數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)

43、7.7.3 多維數(shù)組名作函數(shù)參數(shù)多維數(shù)組名作函數(shù)參數(shù)第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)657.7.1 數(shù)組元素作函數(shù)實(shí)參數(shù)組元素作函數(shù)實(shí)參 函數(shù)的實(shí)參可以是:變量、常量、表達(dá)式函數(shù)的實(shí)參可以是:變量、常量、表達(dá)式等,只要有具體的值就可以等,只要有具體的值就可以 數(shù)組元素當(dāng)然也可以作函數(shù)的實(shí)參數(shù)組元素當(dāng)然也可以作函數(shù)的實(shí)參 數(shù)組元素不能作函數(shù)形參!數(shù)組元素不能作函數(shù)形參!例例7.9 輸入輸入10個(gè)數(shù),要求輸出其中值最個(gè)數(shù),要求輸出其中值最大的元素和大的元素和 該數(shù)是第幾個(gè)數(shù)。該數(shù)是第幾個(gè)數(shù)。第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)66例例7.9 輸入輸入10個(gè)數(shù),要求輸出其中值最個(gè)數(shù),要求輸出其中值最

44、大的元素和大的元素和 該數(shù)是第幾個(gè)數(shù)。該數(shù)是第幾個(gè)數(shù)。 算法設(shè)計(jì):算法設(shè)計(jì):定義數(shù)組定義數(shù)組a,用來存放,用來存放10個(gè)數(shù)個(gè)數(shù)設(shè)計(jì)函數(shù)設(shè)計(jì)函數(shù)max,用來求兩個(gè)數(shù)中的大者,用來求兩個(gè)數(shù)中的大者在主函數(shù)中定義變量在主函數(shù)中定義變量m,初值為,初值為a0,每次,每次調(diào)用調(diào)用max函數(shù)后的返回值存放在函數(shù)后的返回值存放在m中中1.用用打擂臺打擂臺算法,依次將數(shù)組元素算法,依次將數(shù)組元素a1到到a9與與m比較,最后得到的比較,最后得到的m值就是值就是10個(gè)數(shù)個(gè)數(shù)中的最大者中的最大者第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)67#include int main() int max(int x,int y);

45、int a10,m,n,i; for(i=0;i10;i+) scanf(%d,&ai); for(i=1,m=a0,n=0;im) m=max(m,ai); n=i; printf(largest number is %dn,m); printf(%dth number.n,n+1);int max(int x,int y) return(xy?x:y); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)68#include int main() int max(int x,int y); int a10,m,n,i; for(i=0;i10;i+) scanf(%d,&ai); for(

46、i=1,m=a0,n=0;im) m=max(m,ai); n=i; printf(largest number is %dn,m); printf(%dth number.n,n+1);int max(int x,int y) return(xy?x:y); 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)697.7.2 數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù) 數(shù)組名可以用作函數(shù)的參數(shù)數(shù)組名可以用作函數(shù)的參數(shù) 實(shí)參和形參都要用數(shù)組名實(shí)參和形參都要用數(shù)組名 用數(shù)組名作函數(shù)用數(shù)組名作函數(shù)參數(shù)時(shí),從實(shí)參向形參參數(shù)時(shí),從實(shí)參向形參傳傳遞的是遞的是數(shù)組首元素的地址數(shù)組首元素的地址例例7.10 有一個(gè)一維數(shù)組有一個(gè)一維數(shù)組

47、score,內(nèi)放,內(nèi)放10個(gè)學(xué)生成績,個(gè)學(xué)生成績,求平均成績。求平均成績。第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)70算法設(shè)計(jì):算法設(shè)計(jì): 編寫一個(gè)函數(shù)編寫一個(gè)函數(shù)average,用來求,用來求n個(gè)數(shù)的平均值。個(gè)數(shù)的平均值。 在主函數(shù)中完成輸入輸出。在主函數(shù)中完成輸入輸出。 主函數(shù)需要傳遞給主函數(shù)需要傳遞給average函數(shù)的參數(shù)有兩個(gè):函數(shù)的參數(shù)有兩個(gè):多少個(gè)數(shù)求平均值?即:個(gè)數(shù)多少個(gè)數(shù)求平均值?即:個(gè)數(shù)n這些數(shù)放在什么地方?即:數(shù)組名,本質(zhì)是數(shù)組的首這些數(shù)放在什么地方?即:數(shù)組名,本質(zhì)是數(shù)組的首地址地址 所以,所以,average有兩個(gè)參數(shù),個(gè)數(shù)有兩個(gè)參數(shù),個(gè)數(shù)n,數(shù)組名,數(shù)組名編寫主函數(shù),輸入

48、編寫主函數(shù),輸入10個(gè)成績的值,調(diào)用個(gè)成績的值,調(diào)用average函數(shù)求平均值,輸出結(jié)果函數(shù)求平均值,輸出結(jié)果第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)71double average(double a ,int n) int i; double aver,sum=0; for(i=0;in;i+) sum=sum+ai; aver=sum/n; return(aver);#includeint main() double average(double a ,int n); double score10,aver; int i; for(i=0;i10;i+) scanf(%lf,&score

49、i); aver=average(score,10); for(i=0;i10;i+) printf(%g ,scorei); printf(nThe average:%gn,aver); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)72#includedouble average(double a ,int n) int i; double aver,sum=0; for(i=0;in;i+) sum=sum+ai; aver=sum/n; return(aver);int main() double score10,aver; int i; for(i=0;i10;i+) scan

50、f(%lf,&scorei); aver=average(score,10); for(i=0;i10;i+) printf(%g ,scorei); printf(nThe average:%gn,aver); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)73#includedouble average(double a ,int n) int i; double aver,sum=0; for(i=0;in;i+) sum=sum+ai; aver=sum/n; return(aver);int main() double score10,aver; int i; for(

51、i=0;i10;i+) scanf(%lf,&scorei); aver=average(score,10); for(i=0;i10;i+) printf(%g ,scorei); printf(nThe average:%gn,aver); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)74例例7.11 有兩個(gè)班級,分別有有兩個(gè)班級,分別有35名和名和30名學(xué)生,調(diào)用名學(xué)生,調(diào)用一個(gè)一個(gè)average函數(shù),分別求這兩個(gè)班的學(xué)生函數(shù),分別求這兩個(gè)班的學(xué)生的平均成績。的平均成績。 算法設(shè)計(jì):算法設(shè)計(jì):求平均值的函數(shù)可以直接用上題中的函數(shù)求平均值的函數(shù)可以直接用上題中的函數(shù)aver

52、age主函數(shù)中,對兩個(gè)班分別調(diào)用主函數(shù)中,對兩個(gè)班分別調(diào)用average函數(shù)就函數(shù)就可以求得兩個(gè)班的平均分可以求得兩個(gè)班的平均分第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)75#include int main() double average(double a,int n); double score130,score235; int i; for(i=0;i30;i+)scanf(%lf,&score1i); for(i=0;i35;i+)scanf(%lf,&score2i); printf(%6.2fn,average(score1,30); printf(%6.2fn,aver

53、age(score2,35); return 0;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)76double average(double a ,int n) int i; double aver,sum=0; for(i=0;in;i+) sum=sum+ai; aver=sum/n; return(aver);第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)77例例7.12 用選擇法對數(shù)組中用選擇法對數(shù)組中10個(gè)整數(shù)按由小到個(gè)整數(shù)按由小到大排序大排序算法設(shè)計(jì):算法設(shè)計(jì):用一個(gè)函數(shù)用一個(gè)函數(shù)sort完成排序的過程完成排序的過程在在main函數(shù)中輸入函數(shù)中輸入10個(gè)整數(shù)個(gè)整數(shù)然后調(diào)用排序函數(shù)然后調(diào)用排序函數(shù)再輸出排

54、序好的再輸出排序好的10個(gè)整數(shù)個(gè)整數(shù)sort需要從主函數(shù)傳遞來兩個(gè)參數(shù):需要從主函數(shù)傳遞來兩個(gè)參數(shù): 數(shù)組名數(shù)組名; 排序數(shù)據(jù)的個(gè)數(shù)排序數(shù)據(jù)的個(gè)數(shù)sort不需要返回值!不需要返回值!sort函數(shù)的排序方法采用函數(shù)的排序方法采用“選擇法選擇法”第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)78 int a10; 數(shù)組元素下標(biāo)為數(shù)組元素下標(biāo)為0到到9,設(shè)從小,設(shè)從小到大排序。到大排序。 “選擇法選擇法”排序的過程:排序的過程:第第1步:在步:在a0到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a0交換交換第第2步:在步:在a1到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a1交換交換第第3步:在步:在a2

55、到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a2交換交換第第4步:在步:在a3到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a3交換交換第第5步:在步:在a4到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a4交換交換第第6步:在步:在a5到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a5交換交換第第7步:在步:在a6到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a6交換交換第第8步:在步:在a7到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a7交換交換第第9步:在步:在a8到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a8交換交換第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)79第第0步:

56、在步:在a0到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a0交換交換第第1步:在步:在a1到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a1交換交換第第2步:在步:在a2到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a2交換交換第第3步:在步:在a3到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a3交換交換第第4步:在步:在a4到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a4交換交換第第5步:在步:在a5到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a5交換交換第第6步:在步:在a6到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a6交換交換第第7步:在步:在a7到到a9中找到

57、最小的一個(gè),與中找到最小的一個(gè),與a7交換交換第第8步:在步:在a8到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a8交換交換總結(jié)為:總結(jié)為: 第第i步:在步:在ai到到a9中找到最小的一個(gè),中找到最小的一個(gè),與與ai交換交換i的值是從的值是從0到到8第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)80int a10; 數(shù)組元素下標(biāo)為數(shù)組元素下標(biāo)為0到到9,設(shè)從小,設(shè)從小到大排序。到大排序?!斑x擇法選擇法”排序的過程:排序的過程:第第0步:在步:在a0到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a0交換交換k=0;for(j=1;j10;j+) if(ajak) k=j; t=ak; ak=a0; a

58、0=t; 第第1步:在步:在a1到到a9中找到最小的一個(gè),與中找到最小的一個(gè),與a1交換交換k=1;for(j=2;j10;j+) if(ajak) k=j; t=ak; ak=a1; a1=t; 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)81k=0;for(j=1;j10;j+) if(ajak) k=j; i=0t=ak; ak=a0; a0=t; k=1;for(j=2;j10;j +) if(ajak) k=j; i=1t=ak; ak=a1; a1=t;k=2;for(j=3;j10;j+) if(ajak) k=j; i=2t=ak; ak=a2; a2=t;k=8;for(j=9;j10

59、;j+) if(ajak) k=j; i=8t=ak; ak=a8; a8=t;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)82void sort(int a , int n) int i,j,k,t; for(i=0;i9;i+) k=i; for(j=i+1;j10;j+) if(ajak) k=j; t=ak; ak=ai; ai=t; for(i=0;in-1;i+)for(j=i+1;j n;j+) if(ajak) k=j;第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)83void sort(int a , int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=

60、i+1;jn;j+) if(ajak) k=j; t=ak; ak=ai; ai=t; #include int main() void sort(int a ,int n); int a10,i; for(i=0;i10;i+) scanf(%d,&ai); sort(a,10); for(i=0;i10;i+) printf(%d ,ai); printf(n); return 0; 第7章 利用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)847.7.3 多維數(shù)組名作函數(shù)參數(shù)多維數(shù)組名作函數(shù)參數(shù)例例7.13 有一個(gè)有一個(gè)的矩陣,求所有的矩陣,求所有元素中的最大值。元素中的最大值。算法設(shè)計(jì):算法設(shè)計(jì):先使變量先使變量max的初值等于矩陣中第一個(gè)元素的值,的初值等于矩陣中第一個(gè)元素的值,然后將矩陣中各個(gè)元素的值與然后將矩陣中各個(gè)元素的值與max相比,每次比較相比,每次比較后都把后都把“大者大者”存放在存放在max中,全部元素比較完后,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論