




已閱讀5頁(yè),還剩207頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì),7.1為什么要用函數(shù) 7.2怎樣定義函數(shù) 7.3調(diào)用函數(shù) 7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型 7.5函數(shù)的嵌套調(diào)用 7.6函數(shù)的遞歸調(diào)用 7.7數(shù)組作為函數(shù)參數(shù) 7.8局部變量和全局變量 7.9變量的存儲(chǔ)方式和生存期 7.10 關(guān)于變量的聲明和定義 7.11 內(nèi)部函數(shù)和外部函數(shù),7.1為什么要用函數(shù),問(wèn)題: 如果程序的功能比較多,規(guī)模比較大,把所有代碼都寫(xiě)在main函數(shù)中,就會(huì)使主函數(shù)變得龐雜、頭緒不清,閱讀和維護(hù)變得困難 有時(shí)程序中要多次實(shí)現(xiàn)某一功能,就需要多次重復(fù)編寫(xiě)實(shí)現(xiàn)此功能的程序代碼,這使程序冗長(zhǎng),不精煉,7.1為什么要用函數(shù),解決的方法:用模塊化程序設(shè)計(jì)的思路 采用“組裝”的辦法簡(jiǎn)化程序設(shè)計(jì)的過(guò)程 事先編好一批實(shí)現(xiàn)各種不同功能的函數(shù) 把它們保存在函數(shù)庫(kù)中,需要時(shí)直接用,7.1為什么要用函數(shù),解決的方法:用模塊化程序設(shè)計(jì)的思路 函數(shù)就是功能 每一個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一個(gè)特定的功能 函數(shù)的名字應(yīng)反映其代表的功能,7.1為什么要用函數(shù),在設(shè)計(jì)一個(gè)較大的程序時(shí),往往把它分為若干個(gè)程序模塊,每一個(gè)模塊包括一個(gè)或多個(gè)函數(shù),每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能 程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成 主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用 同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次,7.1為什么要用函數(shù),main,a,b,c,f,g,h,d,e,i,e,7.1為什么要用函數(shù),可以使用庫(kù)函數(shù) 可以使用自己編寫(xiě)的函數(shù) 在程序設(shè)計(jì)中要善于利用函數(shù),可以減少重復(fù)編寫(xiě)程序段的工作量,同時(shí)可以方便地實(shí)現(xiàn)模塊化的程序設(shè)計(jì),7.1為什么要用函數(shù),例7.1 輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)。 * How do you do! *,7.1為什么要用函數(shù),解題思路: 在輸出的文字上下分別有一行“*”號(hào),顯然不必重復(fù)寫(xiě)這段代碼,用一個(gè)函數(shù)print_star來(lái)實(shí)現(xiàn)輸出一行“*”號(hào)的功能。 再寫(xiě)一個(gè)print_message函數(shù)來(lái)輸出中間一行文字信息 用主函數(shù)分別調(diào)用這兩個(gè)函數(shù),#include int main() void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0; ,void print_star() printf(“*n”); ,void print_message() printf(“ How do you do!n”); ,輸出16個(gè)*,輸出一行文字,#include int main() void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0; ,void print_star() printf(“*n”); ,void print_message() printf(“ How do you do!n”); ,聲明函數(shù),定義函數(shù),#include int main() void print_star(); void print_message(); print_star(); print_message(); print_star(); return 0; ,void print_star() printf(“*n”); ,void print_message() printf(“ How do you do!n”); ,說(shuō)明: (1) 一個(gè)程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件。對(duì)較大的程序,一般不希望把所有內(nèi)容全放在一個(gè)文件中,而是將它們分別放在若干個(gè)源文件中,由若干個(gè)源程序文件組成一個(gè)C程序。這樣便于分別編寫(xiě)、分別編譯,提高調(diào)試效率。一個(gè)源程序文件可以為多個(gè)C程序共用。,說(shuō)明: (2) 一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其他有關(guān)內(nèi)容(如預(yù)處理指令、數(shù)據(jù)聲明與定義等)組成。一個(gè)源程序文件是一個(gè)編譯單位,在程序編譯時(shí)是以源程序文件為單位進(jìn)行編譯的,而不是以函數(shù)為單位進(jìn)行編譯的。,說(shuō)明: (3) 程序的執(zhí)行是從main函數(shù)開(kāi)始的,如果在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。,說(shuō)明: (4) 所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是分別進(jìn)行的,是互相獨(dú)立的。一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義。函數(shù)間可以互相調(diào)用,但不能調(diào)用main函數(shù)。main函數(shù)是被操作系統(tǒng)調(diào)用的。,說(shuō)明: (5) 從用戶使用的角度看,函數(shù)有兩種。 庫(kù)函數(shù),它是由系統(tǒng)提供的,用戶不必自己定義而直接使用它們。應(yīng)該說(shuō)明,不同的C語(yǔ)言編譯系統(tǒng)提供的庫(kù)函數(shù)的數(shù)量和功能會(huì)有一些不同,當(dāng)然許多基本的函數(shù)是共同的。 用戶自己定義的函數(shù)。它是用以解決用戶專門(mén)需要的函數(shù)。,說(shuō)明: (6) 從函數(shù)的形式看,函數(shù)分兩類。 無(wú)參函數(shù)。無(wú)參函數(shù)一般用來(lái)執(zhí)行指定的一組操作。無(wú)參函數(shù)可以帶回或不帶回函數(shù)值,但一般以不帶回函數(shù)值的居多。 有參函數(shù)。在調(diào)用函數(shù)時(shí),主調(diào)函數(shù)在調(diào)用被調(diào)用函數(shù)時(shí),通過(guò)參數(shù)向被調(diào)用函數(shù)傳遞數(shù)據(jù),一般情況下,執(zhí)行被調(diào)用函數(shù)時(shí)會(huì)得到一個(gè)函數(shù)值,供主調(diào)函數(shù)使用。,7.2 怎樣定義函數(shù),7.2.1 為什么要定義函數(shù) 7.2.2 定義函數(shù)的方法,7.2.1 為什么要定義函數(shù),C語(yǔ)言要求,在程序中用到的所有函數(shù),必須“先定義,后使用” 指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實(shí)現(xiàn)的功能以及參數(shù)的個(gè)數(shù)與類型,將這些信息通知編譯系統(tǒng)。,7.2.1 為什么要定義函數(shù),指定函數(shù)的名字,以便以后按名調(diào)用 指定函數(shù)類型,即函數(shù)返回值的類型 指定函數(shù)參數(shù)的名字和類型,以便在調(diào)用函數(shù)時(shí)向它們傳遞數(shù)據(jù) 指定函數(shù)的功能。這是最重要的,這是在函數(shù)體中解決的,7.2.1 為什么要定義函數(shù),對(duì)于庫(kù)函數(shù),程序設(shè)計(jì)者只需用#include指令把有關(guān)的頭文件包含到本文件模塊中即可 程序設(shè)計(jì)者需要在程序中自己定義想用的而庫(kù)函數(shù)并沒(méi)有提供的函數(shù),7.2.2 定義函數(shù)的方法,1.定義無(wú)參函數(shù) 定義無(wú)參函數(shù)的一般形式為:,類型名 函數(shù)名(void) 函數(shù)體 ,類型名 函數(shù)名() 函數(shù)體 ,包括聲明部分和語(yǔ)句部分,包括聲明部分和語(yǔ)句部分,7.2.2 定義函數(shù)的方法,1.定義無(wú)參函數(shù) 定義無(wú)參函數(shù)的一般形式為:,類型名 函數(shù)名(void) 函數(shù)體 ,類型名 函數(shù)名() 函數(shù)體 ,指定函數(shù)值的類型,指定函數(shù)值的類型,7.2.2 定義函數(shù)的方法,2.定義有參函數(shù) 定義有參函數(shù)的一般形式為: 類型名 函數(shù)名(形式參數(shù)表列) 函數(shù)體 ,7.2.2 定義函數(shù)的方法,3. 定義空函數(shù) 定義空函數(shù)的一般形式為: 類型名 函數(shù)名( ) 先用空函數(shù)占一個(gè)位置,以后逐步擴(kuò)充 好處:程序結(jié)構(gòu)清楚,可讀性好,以后擴(kuò)充新功能方便,對(duì)程序結(jié)構(gòu)影響不大,7.3 調(diào)用函數(shù),7.3.1函數(shù)調(diào)用的形式 7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞 7.3.3函數(shù)調(diào)用的過(guò)程 7.3.4函數(shù)的返回值,7.3.1函數(shù)調(diào)用的形式,函數(shù)調(diào)用的一般形式為: 函數(shù)名(實(shí)參表列) 如果是調(diào)用無(wú)參函數(shù),則“實(shí)參表列”可以沒(méi)有,但括號(hào)不能省略 如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)隔開(kāi),7.3.1函數(shù)調(diào)用的形式,按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式: . 函數(shù)調(diào)用語(yǔ)句 把函數(shù)調(diào)用單獨(dú)作為一個(gè)語(yǔ)句 如printf_star(); 這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作,7.3.1函數(shù)調(diào)用的形式,按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式: . 函數(shù)表達(dá)式 函數(shù)調(diào)用出現(xiàn)在另一個(gè)表達(dá)式中 如c=max(a,b); 這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算,7.3.1函數(shù)調(diào)用的形式,按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式: . 函數(shù)參數(shù) 函數(shù)調(diào)用作為另一函數(shù)調(diào)用時(shí)的實(shí)參 如mmax(a,max(b,c); 其中max(b,c)是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,1.形式參數(shù)和實(shí)際參數(shù) 在調(diào)用有參函數(shù)時(shí),主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系 定義函數(shù)時(shí)函數(shù)名后面的變量名稱為“形式參數(shù)”(簡(jiǎn)稱“形參”) 主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面參數(shù)稱為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”) 實(shí)際參數(shù)可以是常量、變量或表達(dá)式,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,2. 實(shí)參和形參間的數(shù)據(jù)傳遞 在調(diào)用函數(shù)過(guò)程中,系統(tǒng)會(huì)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參 或者說(shuō),形參從實(shí)參得到一個(gè)值 該值在函數(shù)調(diào)用期間有效,可以參加被調(diào)函數(shù)中的運(yùn)算,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,例7.2 輸入兩個(gè)整數(shù),要求輸出其中值較大者。要求用函數(shù)來(lái)找到大數(shù)。 解題思路: (1)函數(shù)名應(yīng)是見(jiàn)名知意,今定名為max (2) 由于給定的兩個(gè)數(shù)是整數(shù),返回主調(diào)函數(shù)的值(即較大數(shù))應(yīng)該是整型 (3)max函數(shù)應(yīng)當(dāng)有兩個(gè)參數(shù),以便從主函數(shù)接收兩個(gè)整數(shù),因此參數(shù)的類型應(yīng)當(dāng)是整型,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,先編寫(xiě)max函數(shù): int max(int x,int y) int z; z=xy?x:y; return(z); ,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,在max函數(shù)上面,再編寫(xiě)主函數(shù) #include int main() int max(int x,int y); int a,b,c; printf(“two integer numbers: “); scanf(“%d,%d”, ,實(shí)參可以是常量、變量或表達(dá)式,7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞,c=max(a,b); (main函數(shù)) int max(int x, int y) (max函數(shù)) int z; z=xy?x:y; return(z); ,7.3.3 函數(shù)調(diào)用的過(guò)程,在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中的存儲(chǔ)單元。在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)max的形參被臨時(shí)分配內(nèi)存單元。,2,a,3,b,x,y,2,3,實(shí)參,形參,7.3.3 函數(shù)調(diào)用的過(guò)程,調(diào)用結(jié)束,形參單元被釋放 實(shí)參單元仍保留并維持原值,沒(méi)有改變 如果在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值發(fā)生改變,不會(huì)改變主調(diào)函數(shù)的實(shí)參的值,2,a,3,b,x,y,2,3,實(shí)參,形參,7.3.4. 函數(shù)的返回值,通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)值(函數(shù)的返回值) 函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的。 一個(gè)函數(shù)中可以有一個(gè)以上的return語(yǔ)句,執(zhí)行到哪一個(gè)return語(yǔ)句,哪一個(gè)就起作用 return語(yǔ)句后面的括號(hào)可以不要,7.3.4. 函數(shù)的返回值,通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)值(函數(shù)的返回值) (2) 函數(shù)值的類型。應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型,7.3.4. 函數(shù)的返回值,通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)值(函數(shù)的返回值) (3)在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語(yǔ)句中的表達(dá)式類型一致 如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn),7.3.4. 函數(shù)的返回值,例7.3將例7.2稍作改動(dòng),將在max函數(shù)中定義的變量z改為float型。函數(shù)返回值的類型與指定的函數(shù)類型不同,分析其處理方法。 解題思路:如果函數(shù)返回值的類型與指定的函數(shù)類型不同,按照賦值規(guī)則處理。,#include int main() int max(float x,float y); float a,b; int c; scanf(“%f,%f,“, ,1.5,2.6,2.6,2,變?yōu)?,7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型,在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)需要具備如下條件: (1) 被調(diào)用函數(shù)必須是已經(jīng)定義的函數(shù)(是庫(kù)函數(shù)或用戶自己定義的函數(shù)) (2) 如果使用庫(kù)函數(shù),應(yīng)該在本文件開(kāi)頭加相應(yīng)的#include指令 (3) 如果使用自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它的函數(shù)后面,應(yīng)該聲明,7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型,例7.4 輸入兩個(gè)實(shí)數(shù),用一個(gè)函數(shù)求出它們之和。 解題思路:用add函數(shù)實(shí)現(xiàn)。首先要定義add函數(shù),它為float型,它應(yīng)有兩個(gè)參數(shù),也應(yīng)為float型。特別要注意的是:要對(duì)add函數(shù)進(jìn)行聲明。,7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型,分別編寫(xiě)add函數(shù)和main函數(shù),它們組成一個(gè)源程序文件 main函數(shù)的位置在add函數(shù)之前 在main函數(shù)中對(duì)add函數(shù)進(jìn)行聲明,#include int main() float add(float x, float y); float a,b,c; printf(“Please enter a and b:“); scanf(“%f,%f“, ,float add(float x,float y) float z; z=x+y; return(z); ,求兩個(gè)實(shí)數(shù)之和,函數(shù)值也是實(shí)型,對(duì)add函數(shù)聲明,#include int main() float add(float x, float y); float a,b,c; printf(“Please enter a and b:“); scanf(“%f,%f“, ,float add(float x,float y) float z; z=x+y; return(z); ,只差一個(gè)分號(hào),#include int main() float add(float x, float y); float a,b,c; printf(“Please enter a and b:“); scanf(“%f,%f“, ,float add(float x,float y) float z; z=x+y; return(z); ,定義add函數(shù),調(diào)用add函數(shù),函數(shù)原型的一般形式有兩種: 如 float add(float x, float y); float add(float, float); 原型說(shuō)明可以放在文件的開(kāi)頭,這時(shí)所有函數(shù)都可以使用此函數(shù),7.5 函數(shù)的嵌套調(diào)用,語(yǔ)言的函數(shù)定義是互相平行、獨(dú)立的 即函數(shù)不能嵌套定義 但可以嵌套調(diào)用函數(shù) 即調(diào)用一個(gè)函數(shù)的過(guò)程中,又可以調(diào)用另一個(gè)函數(shù),7.5 函數(shù)的嵌套調(diào)用,main函數(shù),調(diào)用a函數(shù),結(jié)束,a函數(shù),調(diào)用b函數(shù),b函數(shù),7.5 函數(shù)的嵌套調(diào)用,例7.5 輸入4個(gè)整數(shù),找出其中最大的數(shù)。用函數(shù)的嵌套調(diào)用來(lái)處理。 解題思路: main中調(diào)用max4函數(shù),找4個(gè)數(shù)中最大者 max4中再調(diào)用max2,找兩個(gè)數(shù)中的大者 max4中多次調(diào)用max2,可找4個(gè)數(shù)中的大者,然后把它作為函數(shù)值返回main函數(shù) main函數(shù)中輸出結(jié)果,#include int main() int max4(int a,int b,int c,int d); int a,b,c,d,max; printf(“4 interger numbers:“); scanf(“%d%d%d%d“, ,主函數(shù),對(duì)max4 函數(shù)聲明,#include int main() int max4(int a,int b,int c,int d); int a,b,c,d,max; printf(“4 interger numbers:“); scanf(“%d%d%d%d“, ,主函數(shù),輸入4個(gè)整數(shù),#include int main() int max4(int a,int b,int c,int d); int a,b,c,d,max; printf(“4 interger numbers:“); scanf(“%d%d%d%d“, ,主函數(shù),調(diào)用后肯定是4個(gè)數(shù)中最大者,輸出最大者,int 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); ,max4函數(shù),對(duì)max2 函數(shù)聲明,int 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); ,max4函數(shù),a,b中較大者,a,b,c中較大者,a,b,c,d中最大者,int 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); ,max4函數(shù),int max2(int a,int b) if(a=b) return a; else return b; ,max2函數(shù),找a,b中較大者,int 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); ,max4函數(shù),int max2(int a,int b) if(a=b) return a; else return b; ,max2函數(shù),return(ab?a:b);,int 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); ,max4函數(shù),int max2(int a,int b) return(ab?a:b); ,int 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); ,max4函數(shù),m=max2(max2(a,b),c);,int max2(int a,int b) return(ab?a:b); ,int 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); ,max4函數(shù),m=max2(max2(max2(a,b),c),d);,int max2(int a,int b) return(ab?a:b); ,int 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); ,max4函數(shù),ruturn max2(max2(max2(a,b),c),d);,int max2(int a,int b) return(ab?a:b); ,int max4(int a,int b,int c,int d) int max2(int a,int b); ruturn max2(max2(max2(a,b),c),d); ,int max2(int a,int b) return(ab?a:b); ,#include int main() max=max4(a,b,c,d); ,7.6 函數(shù)的遞歸調(diào)用,在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。 語(yǔ)言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。,7.6 函數(shù)的遞歸調(diào)用,int f(int x) int y,z; z=f(y); return (2*z); ,f函數(shù) 調(diào)用f函數(shù),應(yīng)使用if語(yǔ)句控制結(jié)束調(diào)用,直接調(diào)用本函數(shù),f2函數(shù) 調(diào)用f1函數(shù),7.6 函數(shù)的遞歸調(diào)用,f函數(shù) 調(diào)用f函數(shù),f1函數(shù) 調(diào)用f2函數(shù),直接調(diào)用本函數(shù),間接調(diào)用本函數(shù),7.6 函數(shù)的遞歸調(diào)用,例7.6 有5個(gè)學(xué)生坐在一起 問(wèn)第5個(gè)學(xué)生多少歲?他說(shuō)比第4個(gè)學(xué)生大2歲 問(wèn)第4個(gè)學(xué)生歲數(shù),他說(shuō)比第3個(gè)學(xué)生大2歲 問(wèn)第3個(gè)學(xué)生,又說(shuō)比第2個(gè)學(xué)生大2歲 問(wèn)第2個(gè)學(xué)生,說(shuō)比第1個(gè)學(xué)生大2歲 最后問(wèn)第1個(gè)學(xué)生,他說(shuō)是10歲 請(qǐng)問(wèn)第5個(gè)學(xué)生多大,7.6 函數(shù)的遞歸調(diào)用,解題思路: 要求第個(gè)年齡,就必須先知道第個(gè)年齡 要求第個(gè)年齡必須先知道第個(gè)年齡 第個(gè)年齡又取決于第個(gè)年齡 第個(gè)年齡取決于第個(gè)年齡 每個(gè)學(xué)生年齡都比其前個(gè)學(xué)生的年齡大,7.6 函數(shù)的遞歸調(diào)用,解題思路: age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10,age(5) =age(4)+2,age(4) =age(3)+2,age(3) =age(2)+2,age(2) =age(1)+2,age(1) =10,age(2) =12,age(3) =14,age(4) =16,age(5) =18,回溯階段,遞推階段,age(5) =age(4)+2,age(4) =age(3)+2,age(3) =age(2)+2,age(2) =age(1)+2,age(1) =10,age(2) =12,age(3) =14,age(4) =16,age(5) =18,回溯階段,遞推階段,結(jié)束遞歸的條件,#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); ,age(5) 輸出age(5),main,c=age(4)+2,age函數(shù) n=5,c=age(3)+2,age函數(shù) n=4,c=age(1)+2,age函數(shù) n=2,c=age(2)+2,age函數(shù) n=3,c=10,age函數(shù) n=1,age(1)=10,age(2)=12,age(3)=14,age(4)=16,age(5)=18,18,例7.7 用遞歸方法求!。 解題思路: 求!可以用遞推方法:即從開(kāi)始,乘,再乘一直乘到。 遞推法的特點(diǎn)是從一個(gè)已知的事實(shí)(如1!=1)出發(fā),按一定規(guī)律推出下一個(gè)事實(shí)(如2!=1!*2),再?gòu)倪@個(gè)新的已知的事實(shí)出發(fā),再向下推出一個(gè)新的事實(shí)(3!=3*2!)。n!=n*(n-1)!。,例7.7 用遞歸方法求!。 解題思路: 求!也可以用遞歸方法,即!等于!,而!,! 可用下面的遞歸公式表示:,#include int main() int fac(int n); int n; int y; printf(“input an integer number:“); scanf(“%d“, ,int 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); ,注意溢出,fac(5) 輸出fac(5),main,f=fac(4)5,fac函數(shù) n=5,f=fac(3)4,fac函數(shù) n=4,f=fac(1)2,fac函數(shù) n=2,f=fac(2)3,fac函數(shù) n=3,f=1,fac函數(shù) n=1,fac(1)=1,fac(2)=2,fac(3)=6,fac(4)=24,fac(5)=120,120,例7.8 Hanoi(漢諾)塔問(wèn)題。古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開(kāi)始時(shí)座上有64個(gè)盤(pán)子,盤(pán)子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤(pán)子從座移到座,但規(guī)定每次只允許移動(dòng)一個(gè)盤(pán),且在移動(dòng)過(guò)程中在3個(gè)座上都始終保持大盤(pán)在下,小盤(pán)在上。在移動(dòng)過(guò)程中可以利用B座。要求編程序輸出移動(dòng)一盤(pán)子的步驟。,解題思路: 要把64個(gè)盤(pán)子從A座移動(dòng)到C座,需要移動(dòng)大約264 次盤(pán)子。一般人是不可能直接確定移動(dòng)盤(pán)子的每一個(gè)具體步驟的 老和尚會(huì)這樣想:假如有另外一個(gè)和尚能有辦法將上面63個(gè)盤(pán)子從一個(gè)座移到另一座。那么,問(wèn)題就解決了。此時(shí)老和尚只需這樣做:,解題思路: (1) 命令第2個(gè)和尚將63個(gè)盤(pán)子從A座移到B座 (2) 自己將1個(gè)盤(pán)子(最底下的、最大的盤(pán)子)從A座移到C座 (3) 再命令第2個(gè)和尚將63個(gè)盤(pán)子從B座移到C座,A,B,C,將63個(gè)從A到B,第1個(gè)和尚的做法,A,B,C,將63個(gè)從A到B,第1個(gè)和尚的做法,A,B,C,將1個(gè)從A到C,第1個(gè)和尚的做法,A,B,C,將1個(gè)從A到C,第1個(gè)和尚的做法,A,B,C,將63個(gè)從B到C,第1個(gè)和尚的做法,A,B,C,將63個(gè)從B到C,第1個(gè)和尚的做法,A,B,C,將62個(gè)從A到C,第2個(gè)和尚的做法,A,B,C,將62個(gè)從A到C,第2個(gè)和尚的做法,A,B,C,將1個(gè)從A到B,第2個(gè)和尚的做法,A,B,C,將1個(gè)從A到B,第2個(gè)和尚的做法,A,B,C,將62個(gè)從C到B,第2個(gè)和尚的做法,A,B,C,將62個(gè)從C到B,第2個(gè)和尚的做法,第3個(gè)和尚的做法 第4個(gè)和尚的做法 第5個(gè)和尚的做法 第6個(gè)和尚的做法 第7個(gè)和尚的做法 第63個(gè)和尚的做法,第64個(gè)和尚僅做:將1個(gè)從A移到C,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將2個(gè)盤(pán)子從A移到B,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將2個(gè)盤(pán)子從A移到B,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將1個(gè)盤(pán)子從A移到C,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將1個(gè)盤(pán)子從A移到C,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將2個(gè)盤(pán)子從B移到C,A,B,C,將3個(gè)盤(pán)子從A移到C的全過(guò)程,將2個(gè)盤(pán)子從B移到C,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從A移到C,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從A移到C,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從A移到B,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從A移到B,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從C移到B,A,B,C,將2個(gè)盤(pán)子從A移到B的過(guò)程,將1個(gè)盤(pán)子從C移到B,A,B,C,將2個(gè)盤(pán)子從B移到C的過(guò)程,A,B,C,將2個(gè)盤(pán)子從B移到C的過(guò)程,A,B,C,將2個(gè)盤(pán)子從B移到C的過(guò)程,A,B,C,將2個(gè)盤(pán)子從B移到C的過(guò)程,由上面的分析可知:將n個(gè)盤(pán)子從A座移到C座可以分解為以下3個(gè)步驟: (1) 將A上n-1個(gè)盤(pán)借助C座先移到B座上 (2) 把A座上剩下的一個(gè)盤(pán)移到C座上 (3) 將n-1個(gè)盤(pán)從B座借助于座移到C座上,可以將第(1)步和第(3)步表示為: 將“one”座上n-1個(gè)盤(pán)移到“two”座(借助“three”座)。 在第(1)步和第(3)步中,one 、two、three和A、B、C的對(duì)應(yīng)關(guān)系不同。 對(duì)第(1)步,對(duì)應(yīng)關(guān)系是one對(duì)應(yīng)A,two對(duì)應(yīng)B,three對(duì)應(yīng)C。 對(duì)第(3)步,對(duì)應(yīng)關(guān)系是one對(duì)應(yīng)B,two對(duì)應(yīng)C,three對(duì)應(yīng)A。,把上面3個(gè)步驟分成兩類操作: (1) 將n-1個(gè)盤(pán)從一個(gè)座移到另一個(gè)座上(n1)。這就是大和尚讓小和尚做的工作,它是一個(gè)遞歸的過(guò)程,即和尚將任務(wù)層層下放,直到第64個(gè)和尚為止。 (2) 將1個(gè)盤(pán)子從一個(gè)座上移到另一座上。這是大和尚自己做的工作。,編寫(xiě)程序。 用hanoi函數(shù)實(shí)現(xiàn)第1類操作(即模擬小和尚的任務(wù)) 用move函數(shù)實(shí)現(xiàn)第2類操作(模擬大和尚自己移盤(pán)) 函數(shù)調(diào)用hanoi(n,one,two.three)表示將n個(gè)盤(pán)子從“one”座移到“three”座的過(guò)程(借助“two”座) 函數(shù)調(diào)用move(x,y)表示將1個(gè)盤(pán)子從x 座移到y(tǒng) 座的過(guò)程。x和y是代表A、B、C座之一,根據(jù)每次不同情況分別取A、B、C代入,#include int main() void hanoi(int n,char one, char two,char three); int m; printf(“the number of diskes:“); scanf(“%d“, ,void hanoi(int n,char one,char two, char three) void move(char x,char y); if(n=1) move(one,three); else hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); ,void move(char x,char y) printf(“%c%cn“,x,y); ,7.7數(shù)組作為函數(shù)參數(shù),7.7.1數(shù)組元素作函數(shù)實(shí)參 7.7.2數(shù)組名作函數(shù)參數(shù) 7.7.3多維數(shù)組名作函數(shù)參數(shù),7.7.1數(shù)組元素作函數(shù)實(shí)參,例7.9 輸入10個(gè)數(shù),要求輸出其中值最大的元素和該數(shù)是第幾個(gè)數(shù)。,7.7.1數(shù)組元素作函數(shù)實(shí)參,解題思路: 定義數(shù)組a,用來(lái)存放10個(gè)數(shù) 設(shè)計(jì)函數(shù)max,用來(lái)求兩個(gè)數(shù)中的大者 在主函數(shù)中定義變量m,初值為a0,每次調(diào)用max函數(shù)后的返回值存放在m中 用“打擂臺(tái)”算法,依次將數(shù)組元素a1到a9與m比較,最后得到的m值就是10個(gè)數(shù)中的最大者,#include int main() int max(int x,int y); int a10,m,n,i; printf(“10 integer numbers:n“); for(i=0;i10;i+) scanf(“%d“,for(i=1,m=a0,n=0;im) m=max(m,ai); n=i; printf(“l(fā)argest number is %dn“,m); printf(“%dth number.n“,n+1); ,int max(int x,int y) return(xy?x:y); ,7.7.2數(shù)組名作函數(shù)參數(shù),除了可以用數(shù)組元素作為函數(shù)參數(shù)外,還可以用數(shù)組名作函數(shù)參數(shù)(包括實(shí)參和形參) 用數(shù)組元素作實(shí)參時(shí),向形參變量傳遞的是數(shù)組元素的值 用數(shù)組名作函數(shù)實(shí)參時(shí),向形參 傳遞的是數(shù)組首元素的地址,7.7.2數(shù)組名作函數(shù)參數(shù),例7.10 有一個(gè)一維數(shù)組score,內(nèi)放10個(gè)學(xué)生成績(jī),求平均成績(jī)。 解題思路: 用函數(shù)average求平均成績(jī),用數(shù)組名作為函數(shù)實(shí)參,形參也用數(shù)組名 在average函數(shù)中引用各數(shù)組元素,求平均成績(jī)并返回main函數(shù),#include int main() float average(float array10); float score10,aver; int i; printf(“input 10 scores:n“); for(i=0;i10;i+) scanf(“%f“, ,定義實(shí)參數(shù)組,float average(float array10) int i; float aver,sum=array0; for(i=1;i10;i+) sum=sum+arrayi; aver=sum/10; return(aver); ,定義形參數(shù)組,相當(dāng)于score0,相當(dāng)于scorei,例7.11 有兩個(gè)班級(jí),分別有35名和30名學(xué)生,調(diào)用一個(gè)average函數(shù),分別求這兩個(gè)班的學(xué)生的平均成績(jī)。,解題思路: 需要解決怎樣用同一個(gè)函數(shù)求兩個(gè)不同長(zhǎng)度的數(shù)組的平均值的問(wèn)題 定義average函數(shù)時(shí)不指定數(shù)組的長(zhǎng)度,在形參表中增加一個(gè)整型變量i 從主函數(shù)把數(shù)組實(shí)際長(zhǎng)度從實(shí)參傳遞給形參i 這個(gè)i用來(lái)在average函數(shù)中控制循環(huán)的次數(shù) 為簡(jiǎn)化,設(shè)兩個(gè)班的學(xué)生數(shù)分別為5和10,#include int main() float average(float array ,int n); float score15=98.5,97,91.5,60,55; float score210=67.5,89.5,99,69.5, 77,89.5,76.5,54,60,99.5; printf(“%6.2fn”,average(score1,5); printf(“%6.2fn”,average(score2,10); return 0; ,float average(float array ,int n) int i; float aver,sum=array0; for(i=1;in;i+) sum=sum+arrayi; aver=sum/n; return(aver); ,調(diào)用形式為average(score1,5)時(shí),相當(dāng)于score10,相當(dāng)于score1i,相當(dāng)于5,float average(float array ,int n) int i; float aver,sum=array0; for(i=1;in;i+) sum=sum+arrayi; aver=sum/n; return(aver); ,調(diào)用形式為average(score2,10)時(shí),相當(dāng)于score20,相當(dāng)于score2i,相當(dāng)于10,例7.12用選擇法對(duì)數(shù)組中10個(gè)整數(shù)按由小到大排序。 解題思路: 所謂選擇法就是先將10個(gè)數(shù)中最小的數(shù)與a0對(duì)換;再將a1到a9中最小的數(shù)與a1對(duì)換每比較一輪,找出一個(gè)未經(jīng)排序的數(shù)中最小的一個(gè) 共比較9輪,a0 a1 a2 a3 a4,3 6 1 9 4,1 6 3 9 4,1 3 6 9 4,1 3 4 9 6,1 3 4 6 9,小到大排序,#include int main() void sort(int array,int n); int a10,i; printf(“enter array:n“); for(i=0;i10;i+) scanf(“%d“, ,void sort(int array,int n) int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk; arrayk=arrayi; arrayi=t; ,7.7.3多維數(shù)組名作函數(shù)參數(shù),例7.13 有一個(gè)的矩陣,求所有元素中的最大值。 解題思路:先使變量max的初值等于矩陣中第一個(gè)元素的值,然后將矩陣中各個(gè)元素的值與max相比,每次比較后都把“大者”存放在max中,全部元素比較完后,max 的值就是所有元素的最大值。,#include int 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); return 0; ,可以省略,不能省略 要與形參數(shù)組第二維大小相同,int max_value(int array4) int i,j,max; max = array00; for (i=0;imax) max = arrayij; return (max); ,要與實(shí)參數(shù)組第二維大小相同,7.8局部變量和全局變量,7.8.1 局部變量 7.8.2 全局變量,7.8.1 局部變量,定義變量可能有三種情況: 在函數(shù)的開(kāi)頭定義 在函數(shù)內(nèi)的復(fù)合語(yǔ)句內(nèi)定義 在函數(shù)的外部定義,7.8.1 局部變量,在一個(gè)函數(shù)內(nèi)部定義的變量只在本函數(shù)范圍內(nèi)有效 在復(fù)合語(yǔ)句內(nèi)定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效 在函數(shù)內(nèi)部或復(fù)合語(yǔ)句內(nèi)部定義的變量稱為“局部變量”,float f1( int a) int b,c; char f2(int x,int y) int i,j; int main( ) int m,n; return 0; ,a、b、c僅在此函數(shù)內(nèi)有效,x、y、i、j僅在此函數(shù)內(nèi)有效,m、n僅在此函數(shù)內(nèi)有效,float f1( int a) int b,c; char f2(int x,int y) int i,j; int main( ) int a,b; return 0; ,類似于不同班同名學(xué)生,a、b也僅在此函數(shù)內(nèi)有效,int main ( ) int a,b; int c; c=a+b; ,c僅在此復(fù)合語(yǔ)句內(nèi)有效,a、b僅在此復(fù)合語(yǔ)句內(nèi)有效,7.8.2全局變量,在函數(shù)內(nèi)定義的變量是局部變量,而在函數(shù)之外定義的變量稱為外部變量 外部變量是全局變量(也稱全程變量) 全局變量可以為本文件中其他函數(shù)所共用 有效范圍為從定義變量的位置開(kāi)始到本源文件結(jié)束,int p=1,q=5 float f1(int a) int b,c; char c1,c2; char f2 (int x, int y) int i,j; int main ( ) int m,n; return 0; ,p、q、c1、c2為全局變量,int p=1,q=5 float f1(int a) int b,c; char c1,c2; char f2 (int x, int y) int i,j; int main ( ) int m,n; return 0; ,p、q的有效范圍,c1、c2的有效范圍,例7.14 有一個(gè)一維數(shù)組,內(nèi)放10個(gè)學(xué)生成績(jī),寫(xiě)一個(gè)函數(shù),當(dāng)主函數(shù)調(diào)用此函數(shù)后,能求出平均分、最高分和最低分。 解題思路:調(diào)用一個(gè)函數(shù)可以得到一個(gè)函數(shù)返回值,現(xiàn)在希望通過(guò)函數(shù)調(diào)用能得到3個(gè)結(jié)果??梢岳萌肿兞縼?lái)達(dá)到此目的。,#include float Max=0,Min=0; int main() float average(float array ,int n); float ave,score10; int i; printf(“Please enter 10 scores:n“); for(i=0;i10;i+) scanf(“%f“, ,float average(float array ,int n) int i; float aver,sum=array0; Max=Min=array0; for(i=1;iMax) Max=arrayi; else if(arrayiMin) Min=arrayi; sum=sum+arrayi; aver=sum/n; return(aver); ,ave score 10 Max Min,aver array n Max Min,main 函數(shù),average 函數(shù),建議不在必要時(shí)不要使用全局變量,例7.15 若外部變量與局部變量同名,分析結(jié)果。,#include int a=3,b=5; int main() int max(int a,int b); int a=8; printf(“max=%dn”,max(a,b); return 0; int max(int a,int b) int c; c=ab?a:b; return(c); ,a為局部變量,僅在此函數(shù)內(nèi)有效,b為全部變量,#include int a=3,b=5; int main() int max(int a,int b); int a=8; printf(“max=%dn”,max(a,b); return 0; int max(int a,int b) int c; c=ab?a:b; return(c); ,a、b為局部變量,僅在此函數(shù)內(nèi)有效,7.9變量的存儲(chǔ)方式和生存期,7.9.1 動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式 7.9.2 局部變量的存儲(chǔ)類別 7.9.3 全局變量的存儲(chǔ)類別 7.9.4 存儲(chǔ)類別小結(jié),7.9.1動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式,從變量的作用域的角度來(lái)觀察,變量可以分為全局變量和局部變量 從變量值存在的時(shí)間(即生存期)觀察,變量的存儲(chǔ)有兩種不同的方式:靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式 靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間的方式 動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式,程序區(qū) 靜態(tài)存儲(chǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)思維培養(yǎng)的單元課程知識(shí)點(diǎn)體系研究
- 液化天然氣壓縮機(jī)損傷預(yù)防與健康維護(hù)研究-洞察闡釋
- 2025年統(tǒng)計(jì)學(xué)研究生入學(xué)考試題及答案
- 《SMT工藝技術(shù)講座》課件
- 【顆粒食品包裝機(jī)的結(jié)構(gòu)設(shè)計(jì)10000字】
- 書(shū)法年展文化考試題目及答案
- 實(shí)操會(huì)計(jì)考試題庫(kù)及答案
- 2025年中小學(xué)教師資格考試試卷及答案
- 陜西漢中電焊考試題及答案
- 三農(nóng)一扶考試題及答案大全
- ict大數(shù)據(jù)模擬題(附答案解析)
- (王瑞元版本)運(yùn)動(dòng)生理學(xué)-課件-4-第四章-循環(huán)機(jī)能
- 行政管理專科經(jīng)濟(jì)法試題及答案
- 2025合法租房合同范本
- 一例人工耳蝸植入術(shù)護(hù)理查房
- 2025年一級(jí)建造師《市政實(shí)務(wù)》四色筆記
- 【課件】醫(yī)學(xué)研究項(xiàng)目申請(qǐng)書(shū)的撰寫(xiě)-以國(guó)家自然科學(xué)基為例
- 《咖啡的風(fēng)味》課件
- 智能太陽(yáng)能路燈行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2024年云南省嵩明縣事業(yè)單位公開(kāi)招聘教師崗筆試題帶答案
- 小型船舶駕駛員考試復(fù)習(xí)題庫(kù)(濃縮500題)
聯(lián)系客服
本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。人人文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知人人文庫(kù)網(wǎng),我們立即給予刪除!
- 川公網(wǎng)安備: 51019002004831號(hào) | 備案號(hào):蜀ICP備2022000484號(hào)-2 | 經(jīng)營(yíng)許可證: 川B2-20220663
-
Copyright ? 2020-2025 renrendoc.com 人人文庫(kù)版權(quán)所有 違法與不良信息舉報(bào)電話:400-852-1180
評(píng)論
0/150
提交評(píng)論