版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、12本章要點(diǎn)本章要點(diǎn)3主要內(nèi)容主要內(nèi)容 概述概述 函數(shù)定義的一般形式函數(shù)定義的一般形式 函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)和函數(shù)的值 函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù) 局部變量和全局變量局部變量和全局變量 變量的存儲(chǔ)類別變量的存儲(chǔ)類別 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)4程序設(shè)計(jì)是一門藝術(shù)程序設(shè)計(jì)是一門藝術(shù) 算法設(shè)計(jì)的藝術(shù) 程序的靈魂程序的靈魂 Donald E. Knuth, The Art of Computer Programming, 清華大學(xué)出版社清華大學(xué)出版社, 2002 結(jié)構(gòu)設(shè)計(jì)的藝術(shù) 程序的肉體程序的肉
2、體 “the larger the project, the more essential the structuring!”Dijkstra, 1968 模塊化(模塊化(信息隱蔽原則信息隱蔽原則,Parnas, 1972) 結(jié)構(gòu)化(結(jié)構(gòu)化(Structural) 面向?qū)ο螅嫦驅(qū)ο螅∣bject-Oriented) 面向組件(面向組件(Component-Oriented) 面向智能體(面向智能體(Agent-Oriented) 1 1 概述概述 5結(jié)構(gòu)化程序設(shè)計(jì)方法結(jié)構(gòu)化程序設(shè)計(jì)方法自頂向下,逐步細(xì)化(逐步求精)自底向上,逐步積累模塊化設(shè)計(jì)結(jié)構(gòu)化編碼順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)6為什么要模塊化
3、為什么要模塊化 讀多少行的程序能讓你不頭疼? main()當(dāng)中能放多少行程序? 假如printf()函數(shù)由10行代碼替換,那么你見過的程序會(huì)成什么樣子? 如果所有代碼都在main()當(dāng)中,怎么團(tuán)隊(duì)合作? 如果代碼都在一個(gè)文件中,怎么團(tuán)隊(duì)合作?7模塊化的優(yōu)點(diǎn)模塊化的優(yōu)點(diǎn) 分而治之 函數(shù)把較大的任務(wù)分解成若干個(gè)較小的任務(wù),并提函數(shù)把較大的任務(wù)分解成若干個(gè)較小的任務(wù),并提煉出公用任務(wù)煉出公用任務(wù) 并行開發(fā) 按模塊分配任務(wù),職責(zé)明確按模塊分配任務(wù),職責(zé)明確 并行開發(fā),縮短開發(fā)時(shí)間并行開發(fā),縮短開發(fā)時(shí)間 復(fù)用 程序員可以在其他函數(shù)的基礎(chǔ)上構(gòu)造程序,而不需程序員可以在其他函數(shù)的基礎(chǔ)上構(gòu)造程序,而不需要從頭
4、做起要從頭做起 信息隱藏 設(shè)計(jì)得當(dāng)?shù)暮瘮?shù)可以把具體操作細(xì)節(jié)對程序中不需設(shè)計(jì)得當(dāng)?shù)暮瘮?shù)可以把具體操作細(xì)節(jié)對程序中不需要知道它們的那些部分隱藏掉,從而使整個(gè)程序結(jié)要知道它們的那些部分隱藏掉,從而使整個(gè)程序結(jié)構(gòu)清楚構(gòu)清楚8函數(shù)(函數(shù)(functionfunction)和模塊()和模塊(modulemodule) 函數(shù)是C語言中模塊化編程的最小單位 可以把每個(gè)函數(shù)看作一個(gè)模塊 若干相關(guān)的函數(shù)可以合并作一個(gè)“模塊”9函數(shù)間的調(diào)用關(guān)系函數(shù)間的調(diào)用關(guān)系主函數(shù)可以調(diào)用其他函數(shù);其他函數(shù)也可以互相調(diào)用;同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用;函數(shù)可以調(diào)用任意多次;主函數(shù)不能被其它函數(shù)調(diào)用。1011例例:先舉一個(gè)函數(shù)
5、調(diào)用的簡單例子先舉一個(gè)函數(shù)調(diào)用的簡單例子# include void main() void print_star(); /*對對print_star函數(shù)聲明函數(shù)聲明*/ void print_message(); /*對對print_message函數(shù)聲明函數(shù)聲明*/ print_star(); /*調(diào)用調(diào)用print_star函數(shù)函數(shù)*/ print_message(); /*調(diào)用調(diào)用print_message函數(shù)函數(shù)*/ print_star(); /*調(diào)用調(diào)用print_star函數(shù)函數(shù)*/12void print_star() /*定義定義printstar函數(shù)函數(shù)*/ printf
6、 (*n);void print_message() /*定義定義print_message函數(shù)函數(shù)*/ printf (How do you do!n);運(yùn)行情況如下:運(yùn)行情況如下:*How do you do!*13說明:說明: 1)一個(gè)程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊可以有一個(gè)或者多個(gè)源程序文件。對于較大的程序,通常將程序內(nèi)容分別放在若干個(gè)源文件中,再由若干源程序文件組成一個(gè)C程序。這樣便于分別編寫、分別編譯,提高調(diào)試效率。一個(gè)源程序文件可以為多個(gè)C程序公用。142)一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其他有關(guān)內(nèi)容(如命令行、數(shù)據(jù)定義等)組成。一個(gè)源程序文件是一個(gè)編譯單位,在程
7、序編譯時(shí)是以源程序文件為單位進(jìn)行編譯的,而不是以函數(shù)為單位進(jìn)行編譯的。3)程序的執(zhí)行是從main函數(shù)開始的,如果在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。154)所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是分別進(jìn)行的,是互相獨(dú)立的。一個(gè)函數(shù)并不從屬于另一函數(shù),即函數(shù)不能嵌套定義。函數(shù)間可以互相調(diào)用,但不能調(diào)用main函數(shù)。main函數(shù)是系統(tǒng)調(diào)用的。161)從用戶使用的角度: 標(biāo)準(zhǔn)函數(shù),即庫函數(shù)。這是由系統(tǒng)提供的,用戶不必自己定義這些函數(shù),可以直接使用它們。不同的C系統(tǒng)提供的庫函數(shù)的數(shù)量和功能會(huì)有一些不同,但許多基本的函數(shù)是共同的。 用戶自己定義的
8、函數(shù)。用以解決用戶的專門需要。 172)從函數(shù)的形式看: 無參函數(shù)。無參函數(shù)一般用來執(zhí)行指定的一組操作。在調(diào)用無參函數(shù)時(shí),主調(diào)函數(shù)不向被調(diào)用函數(shù)傳遞數(shù)據(jù)。有參函數(shù)。主調(diào)函數(shù)在調(diào)用被調(diào)用函數(shù)時(shí),通過參數(shù)向被調(diào)用函數(shù)傳遞數(shù)據(jù)。 18無參函數(shù)的定義一般形式無參函數(shù)的定義一般形式定義無參函數(shù)的一般形式為定義無參函數(shù)的一般形式為:類型標(biāo)識符類型標(biāo)識符函數(shù)名函數(shù)名()() 聲明部分聲明部分 語句部分語句部分 例如:例如:void print_star () int i; for (i = 0; i y ? x : y; return (z);202 2)現(xiàn)代風(fēng)格)現(xiàn)代風(fēng)格類型標(biāo)識符類型標(biāo)識符函數(shù)名函數(shù)名(
9、形式參數(shù)表列)(形式參數(shù)表列) 聲明部分聲明部分 語句部分語句部分 例如:例如:int max (int x, int y) int z; /*函數(shù)體中的聲明部分函數(shù)體中的聲明部分*/ z = x y ? x : y; return (z);21空函數(shù)空函數(shù)定義空函數(shù)的一般形式為定義空函數(shù)的一般形式為:類型標(biāo)識符類型標(biāo)識符函數(shù)名函數(shù)名()() 例如:例如:dummy ()主調(diào)函數(shù)調(diào)用空函數(shù)時(shí),只表明這里要調(diào)用一個(gè)函數(shù),但函數(shù)本身什么工作也不做等,以后擴(kuò)充函數(shù)功能時(shí)補(bǔ)充上。 22(1 1)形式參數(shù)和實(shí)際參數(shù))形式參數(shù)和實(shí)際參數(shù)形式參數(shù)(formal parameter):定義函數(shù)時(shí)函數(shù)名后面括號
10、中的變量名稱為“形式參數(shù)”(簡稱“形參形參”)。實(shí)際參數(shù)(actual argument):主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號中的參數(shù)(可以是一個(gè)表達(dá)式)稱為“實(shí)際參數(shù)”(簡稱“實(shí)參實(shí)參”)。函數(shù)返回值:return后面的括號中的值作為函數(shù)帶回的值(稱函數(shù)返回值函數(shù)返回值)。 23 在不同的函數(shù)之間傳遞數(shù)據(jù),可以使用的方法有:參數(shù):通過形式參數(shù)和實(shí)際參數(shù)返回值:用return語句返回計(jì)算結(jié)果全局變量:外部變量24例:調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞例:調(diào)用函數(shù)時(shí)的數(shù)據(jù)傳遞#include void main () int max (int x, int y); /* 對對max函數(shù)的聲明函數(shù)的聲明
11、*/ int a, b, c; scanf (%d,%d, &a, &b); c = max (a, b); printf (Max is %dn, c); 25int max (int x, int y) /*定義有參函數(shù)定義有參函數(shù)max*/ int z; z = x y ? x : y; return z;運(yùn)行情況如下:運(yùn)行情況如下:7, 8 Max is 826通過函數(shù)調(diào)用,可使兩個(gè)函數(shù)中的數(shù)據(jù)發(fā)生聯(lián)系。 c = max (a, b); - int max( int x, int y) return (z); 實(shí)參:實(shí)參:在運(yùn)行時(shí)在運(yùn)行時(shí) 把值傳給函數(shù)把值傳給函數(shù)形參:形參:通知系統(tǒng)通
12、知系統(tǒng) 要預(yù)留內(nèi)存位置要預(yù)留內(nèi)存位置把函數(shù)把函數(shù)的結(jié)果的結(jié)果賦給變賦給變量量c27關(guān)于形參與實(shí)參的說明:關(guān)于形參與實(shí)參的說明:1 1) 在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)max中的形參才被分配內(nèi)存單元。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元也被釋放。2 2) 實(shí)參可以是常量、變量或表達(dá)式,例如:例如: max (3, a + b);但要求它們有確定的值。在調(diào)用時(shí)將實(shí)參的值賦給形參。283 3)在被定義的函數(shù)中,必須指定形參的類型。4 4)實(shí)參與形參的類型應(yīng)相同或賦值兼容。5 5)值傳遞:實(shí)參向形參的數(shù)據(jù)傳遞是單向“值傳遞”,只能由實(shí)參傳
13、給形參,而不能由形參傳回來給實(shí)參。 在調(diào)用函數(shù)時(shí),給形參分配存儲(chǔ)單元,并將實(shí)參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留并維持原值。29參數(shù)傳遞的兩種方式參數(shù)傳遞的兩種方式 函數(shù)調(diào)用時(shí),為形參分配單元,并將實(shí)參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值。特點(diǎn)是形參與實(shí)參占用不同的內(nèi)存單元,單向傳遞。 函數(shù)調(diào)用時(shí),將數(shù)據(jù)的存儲(chǔ)地址作為參數(shù)傳遞給形參,特點(diǎn)是形參與實(shí)參指向同樣的存儲(chǔ)單元,“雙向”傳遞,實(shí)參必須是地址常量或變量,形參是地址變量。30值傳遞值傳遞#include void swap (int a, int b) int temp; temp
14、 = a; a = b; b = temp;void main () int x = 7, y = 11; printf (x=%d,ty=%dn, x, y); printf (swapped:n); swap (x, y); printf (x=%d,ty=%dn, x, y);輸出結(jié)果:輸出結(jié)果:x=7, y=11swapped:x=7, y=1131地址傳遞地址傳遞#include void swap (int *a, int *b) int temp; temp = *a; *a = *b; *b = temp;void main() int x = 7, y = 11; print
15、f (x=%d,ty=%dn, x, y); printf (swapped:n); swap (&x, &y); printf (x=%d,ty=%dn, x, y);輸出結(jié)果:輸出結(jié)果:x=7, y=11swapped:x=11, y=732(2 2)函數(shù)的返回值)函數(shù)的返回值 函數(shù)的返回值函數(shù)的返回值是通過函數(shù)調(diào)用使主調(diào)函數(shù)得到的確定值。例如:例如:max (2, 3)的值是,max (5, 2)的值是5。賦值語句將這個(gè)函數(shù)值賦給變量c。 33說明:說明: 1)函數(shù)的返回值是通過函數(shù)中的return語句獲得的。 一個(gè)函數(shù)中可以有一個(gè)以上的return語句,執(zhí)行到哪一個(gè)return語句,哪
16、一個(gè)語句起作用。return語句后面的括弧也可以不要例如例如: return z; 等價(jià)于等價(jià)于 return (z);return后面的值可以是一個(gè)表達(dá)式。例如例如: int max (int x, int y) return (x y ? x : y); 342)函數(shù)的返回值應(yīng)當(dāng)屬于某一個(gè)確定的類型,在定義函數(shù)時(shí)指定函數(shù)返回值的類型。例如:例如:下面是下面是3個(gè)函數(shù)的首行:個(gè)函數(shù)的首行:int max (float x, float y) /* 函數(shù)值為整型函數(shù)值為整型 */char letter (char c1, char c2) /* 函數(shù)值為字符型函數(shù)值為字符型 */ double
17、 min (int x, int y) /* 函數(shù)值為雙精度型函數(shù)值為雙精度型 */ 注意:注意:凡不加類型說明的函數(shù),自動(dòng)按整型處理(盡量避免)。353)在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語句中的表達(dá)式類型一致。 如果函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。 對數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。即函數(shù)類型決定返回值的類型。36例:返回值類型與函數(shù)類型不同例:返回值類型與函數(shù)類型不同#include void main () int max (float x, float y); float a, b; int c; scanf (%f,%f, &a,
18、 &b); c = max (a, b); printf (Max is %dn, c); int max (float x, float y) float z; /* z為實(shí)型變量為實(shí)型變量 */ z = x y ? x : y; return (z);運(yùn)行情況如下:1.5,2.5 Max is 2 374)對于不帶回值的函數(shù),應(yīng)當(dāng)用“void”定義函數(shù)為“無類型”(或稱“空類型”)。如: void print_star ();38函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式為函數(shù)調(diào)用的一般形式為: : 函數(shù)名(實(shí)參表列)函數(shù)名(實(shí)參表列)說明說明: :1 1)如果是調(diào)用無參函數(shù),
19、則“實(shí)參表列”可以沒有,但括弧不能省略。393 3)如果實(shí)參表列包括多個(gè)實(shí)參,對實(shí)參求值的順序并不是確定的,有的系統(tǒng)按自左至右順序求實(shí)參的值,有的系統(tǒng)則按自右至左順序。2 2)如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號隔開。實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類型應(yīng)匹配。實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。40例:求值的順序例:求值的順序#include void main() int compare (int a, int b);/*函數(shù)聲明函數(shù)聲明*/ int i = 2, p; p = compare (i, +i); /*函數(shù)調(diào)用函數(shù)調(diào)用*/ printf (%dn, p); 41int comp
20、are (int a, int b) /*函數(shù)定義函數(shù)定義*/ int c; if (a b) c = 1; else if (a = b) c = 0; else c = -1; return (c);42對于函數(shù)調(diào)用對于函數(shù)調(diào)用 int i = 2, p;p = compare (i, +i); 如果按自右至左順序求實(shí)如果按自右至左順序求實(shí)參的值,則函數(shù)調(diào)用相當(dāng)參的值,則函數(shù)調(diào)用相當(dāng)于于compare (3, 3),p = 0如果按自左至右順序求實(shí)如果按自左至右順序求實(shí)參的值,則函數(shù)調(diào)用相當(dāng)參的值,則函數(shù)調(diào)用相當(dāng)于于compare (2, 3), p = -1如果是從左到右求值,最好改寫為
21、:如果是從左到右求值,最好改寫為:int i = 2, p, j, k;k = i;j = +i;p = compare (k, j);43函數(shù)調(diào)用的方式函數(shù)調(diào)用的方式)函數(shù)語句)函數(shù)語句把函數(shù)調(diào)用作為一個(gè)語句。這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。)函數(shù)表達(dá)式)函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)函數(shù)表達(dá)式式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。例如: c = 2*max (a, b); 按函數(shù)在程序中出現(xiàn)的位置來分,可以有以按函數(shù)在程序中出現(xiàn)的位置來分,可以有以下三種函數(shù)調(diào)用方式:下三種函數(shù)調(diào)用方式: 44)函數(shù)參數(shù))函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)的
22、實(shí)參。例如例如: : m = max (a , max ( b , c ) ) ;其中max ( b , c )是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參。m的值是a、b、c三者中的最大者。45對被調(diào)用函數(shù)的聲明和函數(shù)原型對被調(diào)用函數(shù)的聲明和函數(shù)原型1)首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫函數(shù)或用戶自己定義的函數(shù))。但光有這一條件還不夠。463)對于自定義函數(shù),當(dāng)該函數(shù)定義的位置在主調(diào)函數(shù)的后面時(shí),應(yīng)該在主調(diào)函數(shù)中或主調(diào)函數(shù)前對被調(diào)函數(shù)作聲明; 如果自定義函數(shù)在主調(diào)函數(shù)前定義,則不用聲明。2)如果使用庫函數(shù),還應(yīng)該在本文件開頭用#include 命令將調(diào)用有關(guān)庫函數(shù)時(shí)所需用到的信息
23、“包含”到本文件中來。 47函數(shù)原型的一般形式為函數(shù)原型的一般形式為: : 函數(shù)類型 函數(shù)名(參數(shù)類型1 參數(shù)名1,參數(shù)類型2 參數(shù)名2); 函數(shù)類型 函數(shù)名(參數(shù)類型1,參數(shù)類型2);聲明的作用:聲明的作用:把函數(shù)名、函數(shù)參數(shù)的個(gè)數(shù)和參數(shù)類型等信息通知編譯系統(tǒng),以便在遇到函數(shù)調(diào)用時(shí),編譯系統(tǒng)能正確識別函數(shù)并檢查調(diào)用是否合法。48注意:注意: 函數(shù)的“定義”和“聲明”的區(qū)別:l 函數(shù)的定義是指對函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型、形參及其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。l 函數(shù)的聲明的作用則是把函數(shù)的名字、函數(shù)類型以及形參的類型、個(gè)數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)
24、時(shí)系統(tǒng)按此進(jìn)行對照檢查。 49函數(shù)的聲明函數(shù)的聲明1)使用函數(shù)原型;2)也可以使用下面的方法進(jìn)行函數(shù)的聲明: 函數(shù)類型 函數(shù)名(); (老版本使用,不提倡)2)聲明可在主調(diào)函數(shù)的開頭,也可在文件的開頭;3)在文件的開頭進(jìn)行聲明后,在主調(diào)函數(shù)中可不再聲明;4)如果函數(shù)定義在主調(diào)函數(shù)之前,則不用聲明;5)如果被調(diào)函數(shù)類型為整型,可不用聲明。(不提倡)50例:對被調(diào)用的函數(shù)作聲明(一)例:對被調(diào)用的函數(shù)作聲明(一)#include void main () float add (float x, float y); /*對被調(diào)用函數(shù)對被調(diào)用函數(shù)add的聲明的聲明*/ float a, b, c; s
25、canf (%f,%f, &a, &b); c = add (a, b); printf (sum is %fn, c); float add (float x, float y) /* 函數(shù)首部函數(shù)首部 */ float z; /* 函數(shù)體函數(shù)體 */ z = x + y; return (z);float add (float, float);51例:對被調(diào)用的函數(shù)作聲明(二)例:對被調(diào)用的函數(shù)作聲明(二)#include /*對被調(diào)用函數(shù)對被調(diào)用函數(shù)add的聲明的聲明*/float add (float x, float y); void main () float a, b, c; s
26、canf (%f,%f, &a, &b); c = add (a, b); printf (sum is %fn, c); float add (float x, float y) /*函數(shù)首部函數(shù)首部*/ float ; /* 函數(shù)體函數(shù)體 */ z = x + y; return (z); float add (float, float);52例:對被調(diào)用的函數(shù)作聲明(三)例:對被調(diào)用的函數(shù)作聲明(三)#include float add (float x, float y) /*函數(shù)首部函數(shù)首部*/ float z; /*函數(shù)體函數(shù)體*/ z = x + y; return (z);vo
27、id main () float a, b, c; scanf (%f,%f, &a, &b); c = add (a, b); printf (sum is %fn, c);53例:對被調(diào)用的函數(shù)作聲明(四)例:對被調(diào)用的函數(shù)作聲明(四)#include void main () int a, b, c; scanf (%d,%d, &a, &b); c = add (a, b); printf (sum is %dn, c);int add (int x, int y) /*函數(shù)首部函數(shù)首部*/ int z; /*函數(shù)體函數(shù)體*/ z = x + y; return (z);54函數(shù)調(diào)用示
28、例:函數(shù)調(diào)用示例:求求n! = n(n-1)(n-2)n! = n(n-1)(n-2)1 1 。float fac (int n) int i; float f; if (n 0) f = -1; else if (n = 0) f = 1; else f = 1; for (i = 1; i = n; i+) f *= i; return f;55void main () int n; float f; printf (input a number:n); scanf (%d, &n); f = fac (n); if (f 0) printf (data errorn); else pri
29、ntf (%d! = %fn, n, f);56嵌套定義:嵌套定義:在定義一個(gè)函數(shù)時(shí),其函數(shù)體內(nèi)又包含另一個(gè)函數(shù)的完整定義 。C語言不允許嵌套定義。嵌套調(diào)用:嵌套調(diào)用:調(diào)用一個(gè)函數(shù)的過程中,再調(diào)用另一個(gè)函數(shù)。57例:用弦截法求方程例:用弦截法求方程 f(x)=xf(x)=x3 3-5x-5x2 2+16x-80=0 +16x-80=0 的根的根 581)兩個(gè)不同點(diǎn)x1,x2,如果f(x1)和f(x2)符號相反,則(x1,x2)區(qū)間內(nèi)必有一個(gè)根。如果f(x1)與f(x2)同符號,則應(yīng)改變x1,x2,直到f(x1)、f(x2)異號為止。注意x1、x2的值不應(yīng)差太大,以保證(x1,x2)區(qū)間內(nèi)只有一
30、個(gè)根。 2 2)連接(x1, f(x1)和(x2, f(x2)兩點(diǎn),此線(即弦)交x軸于x。(f(x2) f(x1) / (x2 x1) = (f(x2) y) / (x2 x) x = (x1*f(x2) x2*f(x1) / (f(x2) f(x1)方法:方法:593 3)若f(x)與f(x1)同符號,則根必在(x,x2)區(qū)間內(nèi),此時(shí)將x作為新的x1。如果f(x)與f(x2)同符號,則表示根在(x1,x)區(qū)間內(nèi),將x作為新的x2。4 4)重復(fù)步驟 (2) 和 (3) , 直到 f(x) 為止, 為一個(gè)很小的數(shù), 例如 10-6. 此時(shí)認(rèn)為 f(x)0 。60N-S流程圖流程圖 61實(shí)現(xiàn)各部
31、分功能的幾個(gè)函數(shù)實(shí)現(xiàn)各部分功能的幾個(gè)函數(shù):1)用函數(shù)f(x)代表x的函數(shù):x3-5x2+16x-80。2)用函數(shù)調(diào)用xpoint (x1, x2)來求(x1, f(x1)和 (x2, f(x2)的連線與x軸的交點(diǎn)x的坐標(biāo)。3)用函數(shù)調(diào)用root (x1, x2)來求(x1, x2)區(qū)間的 那個(gè)實(shí)根。顯然,執(zhí)行root函數(shù)過程中要用到函 數(shù)xpoint,而執(zhí)行xpoint函數(shù)過程中要用 到f函數(shù)。62#include #include /*定義函數(shù),以實(shí)現(xiàn)定義函數(shù),以實(shí)現(xiàn)f(x)x3-5x2+16x-80*/ float f (float x) float y; y = (x 5.0) * x
32、+ 16.0) *x 80.0; return y;/*定義定義xpoint函數(shù),求出弦與函數(shù),求出弦與x軸交點(diǎn)軸交點(diǎn) */ float xpoint (float x1, float x2) float x; x = (x1*f(x2)x2*f(x1)/(f(x2)f(x1); return (x);63/* 定義定義root函數(shù),求近似根函數(shù),求近似根 */float root (float x1, float x2) float x, y, y1; do x = xpoint (x1, x2); y = f (x); y1 = f (x1); if (y * y1 0) /*f(x)與與
33、f(x1)同符號同符號*/ x1 = x; else x2 = x; while (fabs (y) = 0.000001); return (x);64運(yùn)行情況如下:運(yùn)行情況如下:input x1, x2:2,6A root of equation is 5.0000void main () /* 主函數(shù)主函數(shù) */ float x1, x2, f1, f2, x; do printf (input x1, x2: n); scanf (%f,%f, &x1, &x2); f1 = f (x1); f2 = f (x2); while (f1 * f2 = 0); x = root (x1,
34、 x2); printf (A root of equation is %8.4fn, x);6566 遞歸調(diào)用:在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。語言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。直接調(diào)用:直接調(diào)用:int f (int x) int r; . r = 2 * f (x); . return (r);間接調(diào)用:間接調(diào)用:int f2 (int x);int f1 (int x) return (2 * f2 (x);int f2 (int x) return f1 (x); 67例:有個(gè)人坐在一起,問第個(gè)人多少歲?他說比例:有個(gè)人坐在一起,問第
35、個(gè)人多少歲?他說比第個(gè)人大歲。問第個(gè)人歲數(shù),他說比第個(gè)人第個(gè)人大歲。問第個(gè)人歲數(shù),他說比第個(gè)人大歲。問第個(gè)人,又說比第個(gè)人大歲。問第大歲。問第個(gè)人,又說比第個(gè)人大歲。問第個(gè)人,說比第個(gè)人大歲。最后問第個(gè)人,他個(gè)人,說比第個(gè)人大歲。最后問第個(gè)人,他說是歲。請問第個(gè)人多大。說是歲。請問第個(gè)人多大。 age(5) = age(4) + 2age(4) = age(3) + 2age(3) = age(2) + 2age(2) = age(1) + 2age(1) = 10用數(shù)學(xué)公式表述如下:用數(shù)學(xué)公式表述如下: age(n)=10 (n = 1)age(n1)+2 (n 1)68/*可以用一個(gè)函數(shù)來
36、描述上述遞歸過程可以用一個(gè)函數(shù)來描述上述遞歸過程*/int age (int n) /* 求年齡的遞歸函數(shù)求年齡的遞歸函數(shù) */ int c; /* c用作存放函數(shù)的返回值的變量用作存放函數(shù)的返回值的變量 */ if (n = 1) c = 10; else c = age (n-1) + 2; return (c);/*用一個(gè)主函數(shù)調(diào)用用一個(gè)主函數(shù)調(diào)用age函數(shù),求得第函數(shù),求得第5人的年齡人的年齡*/#include void main () printf (%dn, age (5);運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:1869例:用遞歸方法求例:用遞歸方法求n!n! 求求n!也可以用遞歸方法,即
37、也可以用遞歸方法,即5!等于等于4!5,而,而4!=3!41!=1??捎孟旅娴倪f歸公式表示:可用下面的遞歸公式表示: n! = 1 (n = 0, 1) n(n-1)! (n 1)70例:例:Hanoi(漢諾塔)問題(漢諾塔)問題:71將n個(gè)盤子從A座移到C座可以分解為以下3個(gè)步驟:1.將A上n-1個(gè)盤借助C座先移到B座上。2.把A座上剩下的一個(gè)盤移到C座上。3.將n-1個(gè)盤從B座借助于A座移到C座上。72#include void main () void hanoi (int n, char one, char two, char three); /* 對對hanoi函數(shù)的聲明函數(shù)的聲明
38、*/ int m; printf (input the number of diskes:); scanf (%d, &m); printf (Steps to moveing %d diskes:n, m); hanoi (m, A, B, C);73void hanoi (int n, char one, char two, char three) /* 定義定義hanoi函數(shù)函數(shù),將個(gè)盤從將個(gè)盤從one座借助座借助two座,移到座,移到three座座 */ void move (char x, char y); /* 對對move函數(shù)的聲明函數(shù)的聲明 */ if( n = 1) move
39、 (one, three); else hanoi (n-1, one, three, two); move (one, three); hanoi (n-1, two, one, three); void move(char x,char y) /* 定義定義move函數(shù)函數(shù) */ printf (“%c-%cn, x, y);74運(yùn)行情況如下:運(yùn)行情況如下:input the number of diskes:3 Steps to moving 3 diskes: 75迭代與遞歸迭代與遞歸 迭代從已知條件一步步推出結(jié)果;遞歸把問題不斷分解成更小的相同問題,最后變成一個(gè)已知問題求解; 迭代使
40、用循環(huán),不斷用新值代替舊值,最后達(dá)到結(jié)束條件; 迭代和遞歸都有結(jié)束條件; 遞歸邏輯清析,時(shí)空開銷大,層次過多可能溢出;迭代邏輯較復(fù)雜,開銷?。?6數(shù)組元素作函數(shù)實(shí)參數(shù)組元素作函數(shù)實(shí)參 由于實(shí)參可以是表達(dá)式,而數(shù)組元素可以是表達(dá)式的組成部分,因此數(shù)組元素可以作為函數(shù)的實(shí)參,與用變量作實(shí)參一樣,是單向傳遞,即“值傳送”方式。 77例:有兩個(gè)數(shù)組例:有兩個(gè)數(shù)組a a和和b b,各有,各有1010個(gè)元素,將它們對應(yīng)個(gè)元素,將它們對應(yīng)地逐個(gè)相比(即地逐個(gè)相比(即a0a0與與b0b0比,比,a1a1與與b1b1比比)。如果)。如果a a數(shù)組中的元素大于數(shù)組中的元素大于b b數(shù)組中的相應(yīng)數(shù)組中的相應(yīng)元素的數(shù)
41、目多于元素的數(shù)目多于b b數(shù)組中元素大于數(shù)組中元素大于a a數(shù)組中相應(yīng)元素?cái)?shù)組中相應(yīng)元素的數(shù)目的數(shù)目( (例如,例如,aiaibi6bi6次,次,bibiai3ai3次,其中次,其中i i每次為不同的值每次為不同的值) ),則認(rèn)為,則認(rèn)為a a數(shù)組大于數(shù)組大于b b數(shù)組,并分?jǐn)?shù)組,并分別統(tǒng)計(jì)出兩個(gè)數(shù)組相應(yīng)元素大于、等于、小于的次別統(tǒng)計(jì)出兩個(gè)數(shù)組相應(yīng)元素大于、等于、小于的次數(shù)。數(shù)。 78#include void main () int large (int x, int y); /* 函數(shù)聲明函數(shù)聲明 */ int a10, b10, i, n = 0, m = 0, k = 0; print
42、f (enter array a:n); for (i = 0; i 10; i+) scanf (%d, &ai); printf (nenter array b:n); for (i = 0; i 10; i+) scanf (%d, &bi); printf (n); for (i = 0; i bi %d timesn ai=bi %d timesn ai k) printf (array a is larger than array bn); else if (n y) flag = 1; else if (x bi 4 timesai=bi 1 timesaibi 5 timesa
43、rray a is smaller than array b81數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù) 用數(shù)組名作函數(shù)參數(shù)時(shí),此時(shí)形參應(yīng)當(dāng)用數(shù)組名或用指針變量 。例:有一個(gè)一維數(shù)組例:有一個(gè)一維數(shù)組score,內(nèi)放,內(nèi)放10個(gè)學(xué)生成績,個(gè)學(xué)生成績,求平均成績。求平均成績。82#include void main () float average (float array10); /*函數(shù)聲明函數(shù)聲明*/ float score10, aver; int i; printf (input 10 scores:n); for (i = 0; i 10; i+) scanf (%f, &scorei);
44、printf (n); aver = average (score); printf (average score is %5.2fn, aver);83float average (float array10) int i; float aver, sum = 0; for (i = 0; i 10; i+) sum += arrayi; aver = sum / 10; return (aver);運(yùn)行情況如下:運(yùn)行情況如下:input 10 scores:100 56 78 98.5 76 87 99 67.5 75 97 average score is 83.4084例:形參數(shù)組不定
45、義長度例:形參數(shù)組不定義長度#include void main () float average (float array, int n); float score_15 = 98.5, 97, 91.5, 60, 55; float score_210 = 67.5, 89.5, 99, 69.5, 77, 89.5, 76.5, 54, 60, 99.5; printf (the average of class A is %6.2fn, average (score_1, 5); printf (the average of class B is %6.2fn”, average (s
46、core_2, 10);85float average (float array, int n) int i; float aver, sum = 0; for (i = 0; i n; i+) sum += arrayi; aver = sum/n; return (aver);運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:the average of class A is 80.40The average of class B is 78.2086例:例:用選擇法對數(shù)組中10個(gè)整數(shù)按由小到大排序。 所謂選擇法就是先將10個(gè)數(shù)中最小的數(shù)與a0對換;再將a1到a9中最小的數(shù)與a1對換每比較一輪,找出一個(gè)未經(jīng)排序
47、的數(shù)中最小的一個(gè)。共比較9輪。87a0 a1 a2 a3 a4未排序時(shí)的情況: 3 6 1 9 4 第1輪:將5個(gè)數(shù)中最小的數(shù)1與a0對換 1 6 3 9 4 第2輪:將余下的4個(gè)數(shù)中最小的數(shù)3與a1對換 1 3 6 9 4 第3輪:將余下的3個(gè)數(shù)中最小的數(shù)4與a2對換 1 3 4 9 6 第4輪:將余下的2個(gè)數(shù)中最小的數(shù)6與a3對換 1 3 4 6 9 88#include void main () void sort (int array, int n); int a10, i; printf (enter the arrayn); for (i = 0; i 10; i+) scanf
48、(%d, &ai); sort (a, 10); printf (the sorted array:n); for (i = 0; i 10; i+) printf (%d, ai); printf (n);89/*排序函數(shù)排序函數(shù)*/void sort (int array, int n) int i, j, k, t; for (i = 0; i n 1; i+) k = i; for (j = i + 1; j n; j +) if (arrayj arragk) k = j; t = arrayk; arrayk = arrayi; arrayi = t; 90多維數(shù)組名作函數(shù)參數(shù)多維
49、數(shù)組名作函數(shù)參數(shù)例:求二維數(shù)組中最大的元素例:求二維數(shù)組中最大的元素#include void main () int max_value (int array4); int a34 = 1,3,5,7, 2,4,6,8, 15,17,34,12; printf (max value is %dn, max_value (a); 用多維數(shù)組名作為函數(shù)實(shí)參和形參。在被調(diào)函數(shù)中對形參數(shù)組定義時(shí)可以指定每一維的大小 。91int max_value (int array4) int i, j, max; max = array00; for (i = 0; i 3; i+) for (j = 0;
50、j max) max = arrayij; return (max);運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:Max value is 34928 8 局部變量和全局變量局部變量和全局變量局部變量局部變量局部變量(內(nèi)部變量):在一個(gè)函數(shù)內(nèi)部定義的變量稱內(nèi)部變量。它只在本函數(shù)范圍內(nèi)有效,即:只有在本函數(shù)內(nèi)才能使用這些變量,故稱為“局部變量” 。93例:例:float f1 (int a) /*函數(shù)函數(shù)f1*/ int b, c; . /*a, b, c有效有效*/ char f2 (int x, int y) /*函數(shù)函數(shù)f2*/ int i, j; /*x, y, i, j有效有效*/void main(
51、 ) /*主函數(shù)主函數(shù)*/ int m, n; . /*m, n有效有效*/94 主函數(shù)中定義的變量只在主函數(shù)中有效,而不因?yàn)樵谥骱瘮?shù)中定義而在整個(gè)文件或程序中有效。主函數(shù)也不能使用其他函數(shù)中定義的變量。 不同函數(shù)中可以使用相同名字的變量,它們代表不同的對象,互不干擾。 形式參數(shù)也是局部變量。 在一個(gè)函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效,這種復(fù)合語句也稱為“分程序”或“程序塊”。95void main () int a, b; . int c; c = a + b; . .c 在 此 范在 此 范圍內(nèi)有效圍內(nèi)有效a,b在此在此范 圍 內(nèi)范 圍 內(nèi)有效有效96全局變量
52、(外部變量):函數(shù)之外定義的變量稱為外部變量。外部變量可以為本文件中其他函數(shù)所共用。它的有效范圍為從定義變量的位置開始到本源文件結(jié)束。所以也稱全局變量(全程變量)。97int p = 1, q = 5; /* 外部變量外部變量 */float f1 (int a) /* 定義函數(shù)定義函數(shù)f1 */ int b, c; .char c1, c2; /* 外部變量外部變量 */char f2 (int x, int y) /* 定義函數(shù)定義函數(shù)f2 */ int i, j; .void main () /* 主函數(shù)主函數(shù) */ int m,n; .全 局 變?nèi)?局 變量量p, q的的作 用 范作
53、用 范圍圍全局全局變量變量c1, c2的作的作用范用范圍圍98例:有一個(gè)一維數(shù)組,內(nèi)放例:有一個(gè)一維數(shù)組,內(nèi)放10個(gè)學(xué)生成績,寫一個(gè)函數(shù),求出個(gè)學(xué)生成績,寫一個(gè)函數(shù),求出平均分、最高分和最低分。平均分、最高分和最低分。#include float Max = 0, Min = 0; /*全局變量全局變量*/void main () float average (float array, int n); float ave, score10; int i; for (i = 0; i 10; i+) scanf (%f, &scorei); ave = average (score, 10);
54、printf (max=%6.2fnmin=%6.2fnaverage=%6.2fn“, Max,Min,ave);99/* 定義函數(shù),形參為數(shù)組定義函數(shù),形參為數(shù)組 */float average (float array, int n) int i; float aver, sum = array0; Max = Min = array0; for (i = 1; i Max) Max = arrayi; else if (arrayi Min) Min = arrayi; sum += arrayi; aver sum / n; return (aver); 運(yùn)行情況如下:運(yùn)行情況如下:
55、99 45 78 97 100 67.5 89 92 66 43 max=100.00min= 43.00average= 77.65100調(diào)用:調(diào)用:ave = average (score, 10);聲明:聲明:float average (float array, n);101建議:不必要時(shí)不要使用全局變量,原因如下: 全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開辟單元。 使用全局變量過多,會(huì)降低程序的清晰性。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變外部變量的值,程序容易出錯(cuò)。因此,要限制使用全局變量。102 降低函數(shù)的通用性。因?yàn)楹瘮?shù)在執(zhí)行時(shí)要依賴于其所在的外部變量。如果將一個(gè)
56、函數(shù)移到另一個(gè)文件中,還要將有關(guān)的外部變量及其值一起移過去。但若該外部變量與其他文件的變量同名時(shí),就會(huì)出現(xiàn)問題,降低了程序的可靠性和通用性。一般要求把程序中的函數(shù)做成一個(gè)封閉體,除了可以通過“實(shí)參形參”和“返回值”的渠道與外界發(fā)生聯(lián)系外,沒有其他渠道。103例:不使用全局變量例:不使用全局變量#include void main () void average (float array, int n, float result3); float res3, score10; int i; for (i = 0; i 10; i+) scanf (%f, &scorei); average (s
57、core, 10, res); printf (max=%6.2fnmin=%6.2fnaverage=%6.2fn“, res0, res1, res2);104/* 定義函數(shù),形參為數(shù)組定義函數(shù),形參為數(shù)組 */void average (float array, int n, float result3) int i; float aver, max, min, sum; sum = max = min = array0; for (i = 1; i max) max = arrayi; else if (arrayi min) min = arrayi; sum += arrayi;
58、aver = sum / n; result0 = max; result1 = min; result2 = aver; 運(yùn)行情況如下:運(yùn)行情況如下:99 45 78 97 100 67.5 89 92 66 43 max=100.00min= 43.00average= 77.65105例:外部變量與局部變量同名例:外部變量與局部變量同名#include int a = 3, b = 5; /*a,b為外部變量為外部變量*/void main () int max (int a, int b); int a = 8; /*a為局部變量為局部變量*/ printf (%d, max (a,
59、b); int max (int a, int b) /*a, b為局部變量為局部變量*/ int c; c = a b ? a : b; return (c); 運(yùn)行結(jié)果為運(yùn)行結(jié)果為 :8形參形參a a、b b作用范圍作用范圍局部變量局部變量a a作用范圍作用范圍全局變量全局變量b b的作用范圍的作用范圍a,b作用范圍作用范圍從此行開始到從此行開始到文件尾文件尾1069 9 變量的存儲(chǔ)類別變量的存儲(chǔ)類別 動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式 從變量的從變量的作用域(即從空間)作用域(即從空間)角度來分,可以分為角度來分,可以分為全局變量全局變量和和局部變量局部變量。從變量值從
60、變量值存在的時(shí)間存在的時(shí)間角度來分,又可以分為角度來分,又可以分為靜態(tài)存靜態(tài)存儲(chǔ)方式儲(chǔ)方式和和動(dòng)態(tài)存儲(chǔ)方式動(dòng)態(tài)存儲(chǔ)方式。靜態(tài)存儲(chǔ)方式:靜態(tài)存儲(chǔ)方式:指在程序運(yùn)行期間由系統(tǒng)分配固定指在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間的方式的存儲(chǔ)空間的方式。動(dòng)態(tài)存儲(chǔ)方式:動(dòng)態(tài)存儲(chǔ)方式:則是在程序運(yùn)行期間根據(jù)需要進(jìn)行則是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。動(dòng)態(tài)的分配存儲(chǔ)空間的方式。存儲(chǔ)空間可以分為三部分:存儲(chǔ)空間可以分為三部分:1.1.程序區(qū)程序區(qū) 2.2.靜態(tài)存儲(chǔ)靜態(tài)存儲(chǔ)區(qū)區(qū) 3.3.動(dòng)態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)存儲(chǔ)區(qū)107 變量和函數(shù)有兩個(gè)屬性:數(shù)據(jù)類型數(shù)據(jù)類型和數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)的存儲(chǔ)類別類別。存儲(chǔ)類別指的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
- 規(guī)范校外培訓(xùn)合同(2篇)
- 小丑電影課件教學(xué)課件
- 老師課件制作教學(xué)
- 南京工業(yè)大學(xué)浦江學(xué)院《土力學(xué)與地基基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京航空航天大學(xué)《法律文書》2022-2023學(xué)年期末試卷
- soc芯片課件教學(xué)課件
- 石林縣風(fēng)貌改造施工組織設(shè)計(jì)書(二標(biāo)段)
- 南京工業(yè)大學(xué)浦江學(xué)院《企業(yè)家精神創(chuàng)新精神與商業(yè)規(guī)劃》2022-2023學(xué)年第一學(xué)期期末試卷
- 《詠柳》的說課稿
- 國開2024年秋《機(jī)電控制工程基礎(chǔ)》形考任務(wù)3答案
- 購并技巧與案例解析
- 當(dāng)代西方國家議會(huì)制度
- structure-.---中文使用手冊
- 小學(xué)三年級縮句、擴(kuò)句復(fù)習(xí)及教案(課堂PPT)
- 平凡之路--樸樹-歌詞
- 斯派克直讀光譜儀操作手冊(共43頁)
- 梯形練字格A4紙打印版
- 2014年SHE教育培訓(xùn)計(jì)劃
- 二年級上冊葉一舵心理健康教案
- 機(jī)場使用手冊飛行區(qū)場地管理
評論
0/150
提交評論