版權(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ì)2022/12/19第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)2022/12/14第7章用函17.1為什么要用函數(shù)問(wèn)題:如果程序的功能比較多,規(guī)模比較大,把所有代碼都寫在main函數(shù)中,就會(huì)使主函數(shù)變得龐雜、頭緒不清,閱讀和維護(hù)變得困難有時(shí)程序中要多次實(shí)現(xiàn)某一功能,就需要多次重復(fù)編寫實(shí)現(xiàn)此功能的程序代碼,這使程序冗長(zhǎng),不精煉第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)問(wèn)題:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)27.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路采用“組裝”的辦法簡(jiǎn)化程序設(shè)計(jì)的過(guò)程事先編好一批實(shí)現(xiàn)各種不同功能的函數(shù)把它們保存在函數(shù)庫(kù)中,需要時(shí)直接用第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路第7章37.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路函數(shù)就是功能每一個(gè)函數(shù)用來(lái)實(shí)現(xiàn)一個(gè)特定的功能函數(shù)的名字應(yīng)反映其代表的功能第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)解決的方法:用模塊化程序設(shè)計(jì)的思路第7章47.1為什么要用函數(shù)在設(shè)計(jì)一個(gè)較大的程序時(shí),往往把它分為若干個(gè)程序模塊,每一個(gè)模塊包括一個(gè)或多個(gè)函數(shù),每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)在設(shè)計(jì)一個(gè)較大的程序時(shí),往往把它分為若干57.1為什么要用函數(shù)mainabcfghdeie第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)mainabcfghdeie第7章用函數(shù)67.1為什么要用函數(shù)可以使用庫(kù)函數(shù)可以使用自己編寫的函數(shù)在程序設(shè)計(jì)中要善于利用函數(shù),可以減少重復(fù)編寫程序段的工作量,同時(shí)可以方便地實(shí)現(xiàn)模塊化的程序設(shè)計(jì)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)可以使用庫(kù)函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序77.1為什么要用函數(shù)例7.1輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)。******************Howdoyoudo!******************第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)例7.1輸出以下的結(jié)果,用函數(shù)調(diào)用實(shí)現(xiàn)87.1為什么要用函數(shù)解題思路:在輸出的文字上下分別有一行“*”號(hào),顯然不必重復(fù)寫這段代碼,用一個(gè)函數(shù)print_star來(lái)實(shí)現(xiàn)輸出一行“*”號(hào)的功能。再寫一個(gè)print_message函數(shù)來(lái)輸出中間一行文字信息用主函數(shù)分別調(diào)用這兩個(gè)函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.1為什么要用函數(shù)解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)9#include<stdio.h>intmain(){voidprint_star();voidprint_message();
print_star();print_message();
print_star();return0;}voidprint_star(){printf(“******************\n”);}voidprint_message(){printf(“Howdoyoudo!\n”);}輸出16個(gè)*輸出一行文字第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>voidprint_s10#include<stdio.h>intmain(){voidprint_star();voidprint_message();
print_star();print_message();
print_star();return0;}voidprint_star(){printf(“******************\n”);}voidprint_message(){printf(“Howdoyoudo!\n”);}聲明函數(shù)定義函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>voidprint_s11#include<stdio.h>intmain(){voidprint_star();voidprint_message();
print_star();print_message();
print_star();return0;}voidprint_star(){printf(“******************\n”);}voidprint_message(){printf(“Howdoyoudo!\n”);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>voidprint_s12說(shuō)明:(1)一個(gè)C程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件。對(duì)較大的程序,一般不希望把所有內(nèi)容全放在一個(gè)文件中,而是將它們分別放在若干個(gè)源文件中,由若干個(gè)源程序文件組成一個(gè)C程序。這樣便于分別編寫、分別編譯,提高調(diào)試效率。一個(gè)源程序文件可以為多個(gè)C程序共用。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)13說(shuō)明:(2)一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其他有關(guān)內(nèi)容(如預(yù)處理指令、數(shù)據(jù)聲明與定義等)組成。一個(gè)源程序文件是一個(gè)編譯單位,在程序編譯時(shí)是以源程序文件為單位進(jìn)行編譯的,而不是以函數(shù)為單位進(jìn)行編譯的。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)14說(shuō)明:(3)C程序的執(zhí)行是從main函數(shù)開(kāi)始的,如果在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)15說(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)用的。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)16說(shuō)明:(5)從用戶使用的角度看,函數(shù)有兩種。庫(kù)函數(shù),它是由系統(tǒng)提供的,用戶不必自己定義而直接使用它們。應(yīng)該說(shuō)明,不同的C語(yǔ)言編譯系統(tǒng)提供的庫(kù)函數(shù)的數(shù)量和功能會(huì)有一些不同,當(dāng)然許多基本的函數(shù)是共同的。用戶自己定義的函數(shù)。它是用以解決用戶專門需要的函數(shù)。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)17說(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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)說(shuō)明:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)187.2怎樣定義函數(shù)7.2.1為什么要定義函數(shù)7.2.2定義函數(shù)的方法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2怎樣定義函數(shù)7.2.1為什么要定義函數(shù)第7章用函數(shù)197.2.1為什么要定義函數(shù)C語(yǔ)言要求,在程序中用到的所有函數(shù),必須“先定義,后使用”指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實(shí)現(xiàn)的功能以及參數(shù)的個(gè)數(shù)與類型,將這些信息通知編譯系統(tǒng)。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.1為什么要定義函數(shù)C語(yǔ)言要求,在程序中用到的所有函207.2.1為什么要定義函數(shù)指定函數(shù)的名字,以便以后按名調(diào)用指定函數(shù)類型,即函數(shù)返回值的類型指定函數(shù)參數(shù)的名字和類型,以便在調(diào)用函數(shù)時(shí)向它們傳遞數(shù)據(jù)指定函數(shù)的功能。這是最重要的,這是在函數(shù)體中解決的第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.1為什么要定義函數(shù)指定函數(shù)的名字,以便以后按名調(diào)用217.2.1為什么要定義函數(shù)對(duì)于庫(kù)函數(shù),程序設(shè)計(jì)者只需用#include指令把有關(guān)的頭文件包含到本文件模塊中即可程序設(shè)計(jì)者需要在程序中自己定義想用的而庫(kù)函數(shù)并沒(méi)有提供的函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.1為什么要定義函數(shù)對(duì)于庫(kù)函數(shù),程序設(shè)計(jì)者只需用#i227.2.2定義函數(shù)的方法1.定義無(wú)參函數(shù)定義無(wú)參函數(shù)的一般形式為:類型名函數(shù)名(void)
{函數(shù)體}類型名函數(shù)名(){函數(shù)體}包括聲明部分和語(yǔ)句部分包括聲明部分和語(yǔ)句部分第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.2定義函數(shù)的方法1.定義無(wú)參函數(shù)類型名函數(shù)名(237.2.2定義函數(shù)的方法1.定義無(wú)參函數(shù)定義無(wú)參函數(shù)的一般形式為:類型名函數(shù)名(void)
{函數(shù)體}類型名函數(shù)名(){函數(shù)體}指定函數(shù)值的類型指定函數(shù)值的類型第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.2定義函數(shù)的方法1.定義無(wú)參函數(shù)類型名函數(shù)名(247.2.2定義函數(shù)的方法2.定義有參函數(shù)定義有參函數(shù)的一般形式為:類型名函數(shù)名(形式參數(shù)表列){函數(shù)體}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.2定義函數(shù)的方法2.定義有參函數(shù)第7章用函數(shù)實(shí)現(xiàn)模257.2.2定義函數(shù)的方法3.定義空函數(shù)定義空函數(shù)的一般形式為:類型名函數(shù)名(){}先用空函數(shù)占一個(gè)位置,以后逐步擴(kuò)充好處:程序結(jié)構(gòu)清楚,可讀性好,以后擴(kuò)充新功能方便,對(duì)程序結(jié)構(gòu)影響不大第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.2.2定義函數(shù)的方法3.定義空函數(shù)第7章用函數(shù)實(shí)現(xiàn)模267.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3調(diào)用函數(shù)7.3.1函數(shù)調(diào)用的形式第7章用函數(shù)實(shí)現(xiàn)模塊277.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.1函數(shù)調(diào)用的形式函數(shù)調(diào)用的一般形式為:第7章用函數(shù)實(shí)287.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式:1.函數(shù)調(diào)用語(yǔ)句把函數(shù)調(diào)用單獨(dú)作為一個(gè)語(yǔ)句如printf_star();這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)297.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式:2.函數(shù)表達(dá)式函數(shù)調(diào)用出現(xiàn)在另一個(gè)表達(dá)式中如c=max(a,b);這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)307.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)分,可以有以下3種函數(shù)調(diào)用方式:3.函數(shù)參數(shù)函數(shù)調(diào)用作為另一函數(shù)調(diào)用時(shí)的實(shí)參如m=max(a,max(b,c));其中max(b,c)是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.1函數(shù)調(diào)用的形式按函數(shù)調(diào)用在程序中出現(xiàn)的形式和位置來(lái)317.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞1.形式參數(shù)和實(shí)際參數(shù)第7章327.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞2.實(shí)參和形參間的數(shù)據(jù)傳遞337.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞例7.2輸入兩個(gè)整數(shù),347.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞先編寫max函數(shù):intmax(intx,inty){intz;z=x>y?x:y;return(z);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞先編寫max函數(shù):第7章用函357.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞在max函數(shù)上面,再編寫主函數(shù)#include<stdio.h>intmain(){intmax(intx,inty);inta,b,c;printf(“twointegernumbers:");scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}實(shí)參可以是常量、變量或表達(dá)式第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞在max函數(shù)上面,再編寫主函367.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞
c=max(a,b);(main函數(shù))intmax(intx,inty)(max函數(shù)){intz;z=x>y?x:y;return(z);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.2函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞c=max(a,b377.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)存單元。2a3bxy23實(shí)參形參第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.3函數(shù)調(diào)用的過(guò)程在定義函數(shù)中指定的形參,在未出現(xiàn)函387.3.3函數(shù)調(diào)用的過(guò)程調(diào)用結(jié)束,形參單元被釋放實(shí)參單元仍保留并維持原值,沒(méi)有改變?nèi)绻趫?zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參的值發(fā)生改變,不會(huì)改變主調(diào)函數(shù)的實(shí)參的值2a3bxy23實(shí)參形參第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.3函數(shù)調(diào)用的過(guò)程調(diào)用結(jié)束,形參單元被釋放2a3bx397.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.4.函數(shù)的返回值通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能407.3.4.函數(shù)的返回值通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)值(函數(shù)的返回值)(2)函數(shù)值的類型。應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.4.函數(shù)的返回值通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能417.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.4.函數(shù)的返回值通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能427.3.4.函數(shù)的返回值例7.3將例7.2稍作改動(dòng),將在max函數(shù)中定義的變量z改為float型。函數(shù)返回值的類型與指定的函數(shù)類型不同,分析其處理方法。解題思路:如果函數(shù)返回值的類型與指定的函數(shù)類型不同,按照賦值規(guī)則處理。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.3.4.函數(shù)的返回值例7.3將例7.2稍作改動(dòng),將在m43#include<stdio.h>intmain(){intmax(floatx,floaty);floata,b;intc;scanf("%f,%f,",&a,&b);c=max(a,b);printf("maxis%d\n",c);return0;}intmax(floatx,floaty){floatz;z=x>y?x:y;return(z);}1.52.62.62變?yōu)?第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>1.52.62.62變?yōu)?47.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)457.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型例7.4輸入兩個(gè)實(shí)467.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型分別編寫add函數(shù)和main函數(shù),它們組成一個(gè)源程序文件main函數(shù)的位置在add函數(shù)之前在main函數(shù)中對(duì)add函數(shù)進(jìn)行聲明第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.4對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型分別編寫add函數(shù)和mai47#include<stdio.h>intmain(){floatadd(floatx,floaty);floata,b,c;printf("Pleaseenteraandb:");scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f\n",c);return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);}求兩個(gè)實(shí)數(shù)之和,函數(shù)值也是實(shí)型對(duì)add函數(shù)聲明第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>floatadd(fl48#include<stdio.h>intmain(){floatadd(floatx,floaty);floata,b,c;printf("Pleaseenteraandb:");scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f\n",c);return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);}只差一個(gè)分號(hào)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>floatadd(fl49#include<stdio.h>intmain(){floatadd(floatx,floaty);floata,b,c;printf("Pleaseenteraandb:");scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f\n",c);return0;}floatadd(floatx,floaty){floatz;z=x+y;return(z);}定義add函數(shù)調(diào)用add函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>floatadd(fl50函數(shù)原型的一般形式有兩種:如floatadd(floatx,floaty);floatadd(float,float);原型說(shuō)明可以放在文件的開(kāi)頭,這時(shí)所有函數(shù)都可以使用此函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)函數(shù)原型的一般形式有兩種:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)517.5函數(shù)的嵌套調(diào)用C語(yǔ)言的函數(shù)定義是互相平行、獨(dú)立的即函數(shù)不能嵌套定義但可以嵌套調(diào)用函數(shù)即調(diào)用一個(gè)函數(shù)的過(guò)程中,又可以調(diào)用另一個(gè)函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.5函數(shù)的嵌套調(diào)用C語(yǔ)言的函數(shù)定義是互相平行、獨(dú)立的第7527.5函數(shù)的嵌套調(diào)用main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧b函數(shù)⑤④⑥第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.5函數(shù)的嵌套調(diào)用main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③537.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é)果第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.5函數(shù)的嵌套調(diào)用例7.5輸入4個(gè)整數(shù),找出其中54#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數(shù)對(duì)max4
函數(shù)聲明第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>主函數(shù)對(duì)max4函數(shù)聲55#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數(shù)輸入4個(gè)整數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>主函數(shù)輸入4個(gè)整數(shù)第7章56#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf(“4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max4(a,b,c,d);printf("max=%d\n",max);return0;}主函數(shù)調(diào)用后肯定是4個(gè)數(shù)中最大者輸出最大者第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>主函數(shù)調(diào)用后肯定是4個(gè)數(shù)57intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)對(duì)max2
函數(shù)聲明第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int58intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;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中最大者第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int59intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)intmax2(inta,intb){if(a>=b)returna;elsereturnb;}max2函數(shù)找a,b中較大者第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int60intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)intmax2(inta,intb){if(a>=b)returna;elsereturnb;}max2函數(shù)return(a>b?a:b);第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int61intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)intmax2(inta,intb){
return(a>b?a:b);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int62intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)m=max2(max2(a,b),c);intmax2(inta,intb){
return(a>b?a:b);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int63intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)m=max2(max2(max2(a,b),c),d);intmax2(inta,intb){
return(a>b?a:b);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int64intmax4(inta,intb,intc,intd){intmax2(inta,intb);intm;m=max2(a,b);m=max2(m,c);m=max2(m,d);return(m);}max4函數(shù)ruturnmax2(max2(max2(a,b),c),d);intmax2(inta,intb){
return(a>b?a:b);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int65intmax4(inta,intb,intc,intd){intmax2(inta,intb);ruturnmax2(max2(max2(a,b),c),d);}intmax2(inta,intb){return(a>b?a:b);}#include<stdio.h>intmain(){……max=max4(a,b,c,d);……}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax4(inta,intb,intc,int667.6函數(shù)的遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。C語(yǔ)言的特點(diǎn)之一就在于允許函數(shù)的遞歸調(diào)用。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.6函數(shù)的遞歸調(diào)用在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接67f2函數(shù)調(diào)用f1函數(shù)7.6函數(shù)的遞歸調(diào)用intf(intx){inty,z;z=f(y);return(2*z);}f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)應(yīng)使用if語(yǔ)句控制結(jié)束調(diào)用直接調(diào)用本函數(shù)間接調(diào)用本函數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)f2函數(shù)7.6函數(shù)的遞歸調(diào)用intf(intx)687.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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.6函數(shù)的遞歸調(diào)用例7.6有5個(gè)學(xué)生坐在一起第7章697.6函數(shù)的遞歸調(diào)用解題思路:要求第5個(gè)年齡,就必須先知道第4個(gè)年齡要求第4個(gè)年齡必須先知道第3個(gè)年齡第3個(gè)年齡又取決于第2個(gè)年齡第2個(gè)年齡取決于第1個(gè)年齡每個(gè)學(xué)生年齡都比其前1個(gè)學(xué)生的年齡大2第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.6函數(shù)的遞歸調(diào)用解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)707.6函數(shù)的遞歸調(diào)用解題思路:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.6函數(shù)的遞歸調(diào)用解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)71age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18回溯階段遞推階段第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)age(5)age(4)age(3)72age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18回溯階段遞推階段結(jié)束遞歸的條件第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)age(5)age(4)age(3)73#include<stdio.h>intmain(){intage(intn);printf("NO.5,age:%d\n",age(5));return0;}
intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程74age(5)輸出age(5)mainc=age(4)+2age函數(shù)n=5c=age(3)+2age函數(shù)n=4c=age(1)+2age函數(shù)n=2c=age(2)+2age函數(shù)n=3c=10age函數(shù)n=1age(1)=10age(2)=12age(3)=14age(4)=16age(5)=1818第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)age(5)mainc=age(4)+2age函數(shù)c=age75例7.7用遞歸方法求n!。解題思路:求n!可以用遞推方法:即從1開(kāi)始,乘2,再乘3……一直乘到n。遞推法的特點(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章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)例7.7用遞歸方法求n!。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)76例7.7用遞歸方法求n!。解題思路:求n!也可以用遞歸方法,即5!等于4!×5,而4?。剑?!×4…,1?。剑笨捎孟旅娴倪f歸公式表示:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)例7.7用遞歸方法求n!。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)77#include<stdio.h>intmain(){intfac(intn);intn;inty;printf("inputanintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%d\n",n,y);return0;}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程78intfac(intn){intf;if(n<0) printf("n<0,dataerror!");elseif(n==0||n==1) f=1;elsef=fac(n-1)*n;return(f);}注意溢出第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intfac(intn)注意溢出第7章用函數(shù)實(shí)現(xiàn)模塊化79fac(5)輸出fac(5)mainf=fac(4)×5fac函數(shù)n=5f=fac(3)×4fac函數(shù)n=4f=fac(1)×2fac函數(shù)n=2f=fac(2)×3fac函數(shù)n=3f=1fac函數(shù)n=1fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=120120第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)fac(5)mainf=fac(4)×5fac函數(shù)f=fac80例7.8Hanoi(漢諾)塔問(wèn)題。古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開(kāi)始時(shí)A座上有64個(gè)盤子,盤子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤子從A座移到C座,但規(guī)定每次只允許移動(dòng)一個(gè)盤,且在移動(dòng)過(guò)程中在3個(gè)座上都始終保持大盤在下,小盤在上。在移動(dòng)過(guò)程中可以利用B座。要求編程序輸出移動(dòng)一盤子的步驟。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)例7.8Hanoi(漢諾)塔問(wèn)題。古代有一個(gè)梵塔,塔81ABC第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)82解題思路:要把64個(gè)盤子從A座移動(dòng)到C座,需要移動(dòng)大約264次盤子。一般人是不可能直接確定移動(dòng)盤子的每一個(gè)具體步驟的老和尚會(huì)這樣想:假如有另外一個(gè)和尚能有辦法將上面63個(gè)盤子從一個(gè)座移到另一座。那么,問(wèn)題就解決了。此時(shí)老和尚只需這樣做:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)83解題思路:(1)命令第2個(gè)和尚將63個(gè)盤子從A座移到B座(2)自己將1個(gè)盤子(最底下的、最大的盤子)從A座移到C座(3)再命令第2個(gè)和尚將63個(gè)盤子從B座移到C座第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)84ABC……將63個(gè)從A到B第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將63個(gè)從A到B第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模85……ABC將63個(gè)從A到B第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)……ABC將63個(gè)從A到B第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模86……ABC將1個(gè)從A到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)……ABC將1個(gè)從A到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊87……ABC將1個(gè)從A到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)……ABC將1個(gè)從A到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊88……ABC將63個(gè)從B到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)……ABC將63個(gè)從B到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模89……ABC將63個(gè)從B到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)……ABC將63個(gè)從B到C第1個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模90ABC……將62個(gè)從A到C第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將62個(gè)從A到C第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模91ABC……將62個(gè)從A到C第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將62個(gè)從A到C第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模92ABC……將1個(gè)從A到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將1個(gè)從A到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊93ABC……將1個(gè)從A到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將1個(gè)從A到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊94ABC……將62個(gè)從C到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將62個(gè)從C到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模95ABC……將62個(gè)從C到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC……將62個(gè)從C到B第2個(gè)和尚的做法第7章用函數(shù)實(shí)現(xiàn)模96第3個(gè)和尚的做法第4個(gè)和尚的做法第5個(gè)和尚的做法第6個(gè)和尚的做法第7個(gè)和尚的做法……第63個(gè)和尚的做法第64個(gè)和尚僅做:將1個(gè)從A移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)第3個(gè)和尚的做法第64個(gè)和尚僅做:將1個(gè)從A移到C第7章用函97ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從A移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從A移到B第7章98ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從A移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從A移到B第7章99ABC將3個(gè)盤子從A移到C的全過(guò)程將1個(gè)盤子從A移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將1個(gè)盤子從A移到C第7章100ABC將3個(gè)盤子從A移到C的全過(guò)程將1個(gè)盤子從A移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將1個(gè)盤子從A移到C第7章101ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從B移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從B移到C第7章102ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從B移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將3個(gè)盤子從A移到C的全過(guò)程將2個(gè)盤子從B移到C第7章103ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到C第7章用104ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到C第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到C第7章用105ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到B第7章用106ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從A移到B第7章用107ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從C移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從C移到B第7章用108ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從C移到B第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從A移到B的過(guò)程將1個(gè)盤子從C移到B第7章用109ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)110ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)111ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)112ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)ABC將2個(gè)盤子從B移到C的過(guò)程第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)113由上面的分析可知:將n個(gè)盤子從A座移到C座可以分解為以下3個(gè)步驟:(1)將A上n-1個(gè)盤借助C座先移到B座上(2)把A座上剩下的一個(gè)盤移到C座上(3)將n-1個(gè)盤從B座借助于A座移到C座上第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)由上面的分析可知:將n個(gè)盤子從A座移到C座可以分解為以下3個(gè)114可以將第(1)步和第(3)步表示為:將“one”座上n-1個(gè)盤移到“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。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)可以將第(1)步和第(3)步表示為:第7章用函數(shù)實(shí)現(xiàn)模塊化程115把上面3個(gè)步驟分成兩類操作:(1)將n-1個(gè)盤從一個(gè)座移到另一個(gè)座上(n>1)。這就是大和尚讓小和尚做的工作,它是一個(gè)遞歸的過(guò)程,即和尚將任務(wù)層層下放,直到第64個(gè)和尚為止。(2)將1個(gè)盤子從一個(gè)座上移到另一座上。這是大和尚自己做的工作。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)把上面3個(gè)步驟分成兩類操作:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)116編寫程序。用hanoi函數(shù)實(shí)現(xiàn)第1類操作(即模擬小和尚的任務(wù))用move函數(shù)實(shí)現(xiàn)第2類操作(模擬大和尚自己移盤)函數(shù)調(diào)用hanoi(n,one,two.three)表示將n個(gè)盤子從“one”座移到“three”座的過(guò)程(借助“two”座)函數(shù)調(diào)用move(x,y)表示將1個(gè)盤子從x座移到y(tǒng)座的過(guò)程。x和y是代表A、B、C座之一,根據(jù)每次不同情況分別取A、B、C代入第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)編寫程序。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)117#include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf(“thenumberofdiskes:");scanf("%d",&m);printf("move%ddiskes:\n",m);
hanoi(m,'A','B','C');}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程118voidhanoi(intn,charone,chartwo,charthree){voidmove(charx,chary);if(n==1)
move(one,three);else{hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);}}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)voidhanoi(intn,charone,char119voidmove(charx,chary){printf("%c-->%c\n",x,y);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)voidmove(charx,chary)第7章用1207.7數(shù)組作為函數(shù)參數(shù)7.7.1數(shù)組元素作函數(shù)實(shí)參7.7.2數(shù)組名作函數(shù)參數(shù)7.7.3多維數(shù)組名作函數(shù)參數(shù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7數(shù)組作為函數(shù)參數(shù)7.7.1數(shù)組元素作函數(shù)實(shí)參第7章用函1217.7.1數(shù)組元素作函數(shù)實(shí)參例7.9輸入10個(gè)數(shù),要求輸出其中值最大的元素和該數(shù)是第幾個(gè)數(shù)。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7.1數(shù)組元素作函數(shù)實(shí)參例7.9輸入10個(gè)數(shù),要求1227.7.1數(shù)組元素作函數(shù)實(shí)參解題思路:定義數(shù)組a,用來(lái)存放10個(gè)數(shù)設(shè)計(jì)函數(shù)max,用來(lái)求兩個(gè)數(shù)中的大者在主函數(shù)中定義變量m,初值為a[0],每次調(diào)用max函數(shù)后的返回值存放在m中用“打擂臺(tái)”算法,依次將數(shù)組元素a[1]到a[9]與m比較,最后得到的m值就是10個(gè)數(shù)中的最大者第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7.1數(shù)組元素作函數(shù)實(shí)參解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化123#include<stdio.h>intmain(){intmax(intx,inty);inta[10],m,n,i;printf(“10integernumbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程124for(i=1,m=a[0],n=0;i<10;i++){if(max(m,a[i])>m) {m=max(m,a[i]); n=i; }}printf(“l(fā)argestnumberis%d\n",m);printf(“%dthnumber.\n“,n+1);}intmax(intx,inty){return(x>y?x:y);}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)for(i=1,m=a[0],n=0;i<10;i++1257.7.2數(shù)組名作函數(shù)參數(shù)除了可以用數(shù)組元素作為函數(shù)參數(shù)外,還可以用數(shù)組名作函數(shù)參數(shù)(包括實(shí)參和形參)用數(shù)組元素作實(shí)參時(shí),向形參變量傳遞的是數(shù)組元素的值用數(shù)組名作函數(shù)實(shí)參時(shí),向形參傳遞的是數(shù)組首元素的地址第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7.2數(shù)組名作函數(shù)參數(shù)除了可以用數(shù)組元素作為函數(shù)參數(shù)外,1267.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ù)第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7.2數(shù)組名作函數(shù)參數(shù)例7.10有一個(gè)一維數(shù)組sc127#include<stdio.h>intmain(){floataverage(floatarray[10]);
floatscore[10],aver;inti;printf("input10scores:\n");for(i=0;i<10;i++)scanf("%f",&score[i]);printf("\n");aver=average(score);printf("%5.2f\n",aver);return0;}定義實(shí)參數(shù)組第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>定義實(shí)參數(shù)組第7章用函數(shù)128floataverage(float
array[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}定義形參數(shù)組相當(dāng)于score[0]相當(dāng)于score[i]第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)floataverage(floatarray[10])129例7.11有兩個(gè)班級(jí),分別有35名和30名學(xué)生,調(diào)用一個(gè)average函數(shù),分別求這兩個(gè)班的學(xué)生的平均成績(jī)。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)例7.11有兩個(gè)班級(jí),分別有35名和30名學(xué)生,調(diào)用130解題思路:需要解決怎樣用同一個(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第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)解題思路:第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)131#include<stdio.h>intmain(){floataverage(floatarray[],intn);floatscore1[5]={98.5,97,91.5,60,55};floatscore2[10]={67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5};printf(“%6.2f\n”,average(score1,5));printf(“%6.2f\n”,average(score2,10));return0;}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程132floataverage(floatarray[],intn){inti;floataver,sum=array[0];for(i=1;i<n;i++)sum=sum+array[i];aver=sum/n;return(aver);}調(diào)用形式為average(score1,5)時(shí)相當(dāng)于score1[0]相當(dāng)于score1[i]相當(dāng)于5第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)floataverage(floatarray[],i133floataverage(floatarray[],intn){inti;floataver,sum=array[0];for(i=1;i<n;i++)sum=sum+array[i];aver=sum/n;return(aver);}調(diào)用形式為average(score2,10)時(shí)相當(dāng)于score2[0]相當(dāng)于score2[i]相當(dāng)于10第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)floataverage(floatarray[],i134例7.12用選擇法對(duì)數(shù)組中10個(gè)整數(shù)按由小到大排序。解題思路:所謂選擇法就是先將10個(gè)數(shù)中最小的數(shù)與a[0]對(duì)換;再將a[1]到a[9]中最小的數(shù)與a[1]對(duì)換……每比較一輪,找出一個(gè)未經(jīng)排序的數(shù)中最小的一個(gè)共比較9輪第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)例7.12用選擇法對(duì)數(shù)組中10個(gè)整數(shù)按由小到大排序。第135a[0]a[1]a[2]a[3]a[4]36194
16394
1
3694
1
3
496
1
3
4
69小到大排序第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)a[0]a[1]a[2]a[3]a[136#include<stdio.h>intmain(){voidsort(intarray[],intn);inta[10],i;printf("enterarray:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);
sort(a,10);printf("Thesortedarray:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");return0;}第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>第7章用函數(shù)實(shí)現(xiàn)模塊化程137voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j; t=array[k];
array[k]=array[i];
array[i]=t; }}在sort[i]~sort[9]中,最小數(shù)與sort[i]對(duì)換第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)voidsort(intarray[],intn)在s1387.7.3多維數(shù)組名作函數(shù)參數(shù)例7.13有一個(gè)3×4的矩陣,求所有元素中的最大值。解題思路:先使變量max的初值等于矩陣中第一個(gè)元素的值,然后將矩陣中各個(gè)元素的值與max相比,每次比較后都把“大者”存放在max中,全部元素比較完后,max的值就是所有元素的最大值。第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.7.3多維數(shù)組名作函數(shù)參數(shù)例7.13有一個(gè)3×4的139#include<stdio.h>intmain(){intmax_value(intarray[][4]);inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf(“Maxvalueis%d\n”,
max_value(a));return0;}可以省略不能省略要與形參數(shù)組第二維大小相同第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)#include<stdio.h>可以省略不能省略第7章用140intmax_value(intarray[][4]){inti,j,max;max=array[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(array[i][j]>max)max=array[i][j];return(max);}要與實(shí)參數(shù)組第二維大小相同第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)intmax_value(intarray[][4])要1417.8局部變量和全局變量7.8.1局部變量7.8.2全局變量第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.8局部變量和全局變量7.8.1局部變量第7章用函數(shù)實(shí)現(xiàn)1427.8.1局部變量定義變量可能有三種情況:在函數(shù)的開(kāi)頭定義在函數(shù)內(nèi)的復(fù)合語(yǔ)句內(nèi)定義在函數(shù)的外部定義第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.8.1局部變量定義變量可能有三種情況:第7章用函數(shù)實(shí)現(xiàn)1437.8.1局部變量在一個(gè)函數(shù)內(nèi)部定義的變量只在本函數(shù)范圍內(nèi)有效在復(fù)合語(yǔ)句內(nèi)定義的變量只在本復(fù)合語(yǔ)句范圍內(nèi)有效在函數(shù)內(nèi)部或復(fù)合語(yǔ)句內(nèi)部定義的變量稱為“局部變量”第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)7.8.1局部變量在一個(gè)函數(shù)內(nèi)部定義的變量只在本函數(shù)范圍內(nèi)144floatf1(inta){intb,c;……}charf2(intx,inty){inti,j;……}intmain(){intm,n;……return0;}a、b、c僅在此函數(shù)內(nèi)有效x、y、i、j僅在此函數(shù)內(nèi)有效m、n僅在此函數(shù)內(nèi)有效第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)floatf1(inta)a、b、c僅在此145floatf1(inta){intb,c;……}charf2(intx,inty){inti,j;……}intmain(){inta,b;……return0;}類似于不同班同名學(xué)生a、b也僅在此函數(shù)內(nèi)有效第7章用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)floatf1(inta)類似于不同班同名146intmain(){inta,b;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版建筑工程泥工施工勞務(wù)合同
- 二手商品房買賣合同范本2024年版(買賣雙方權(quán)益保障)
- 二零二五版廣東教育機(jī)構(gòu)勞務(wù)派遣服務(wù)協(xié)議3篇
- 二零二五年建筑公司項(xiàng)目管理團(tuán)隊(duì)勞動(dòng)合同3篇
- 2025年房產(chǎn)社交媒體營(yíng)銷合同3篇
- 二零二五年文化旅游產(chǎn)業(yè)PPP項(xiàng)目特許經(jīng)營(yíng)合同3篇
- 二零二五年度高效復(fù)合肥生產(chǎn)與銷售合作框架協(xié)議3篇
- 個(gè)性化2024版民間資金借貸擔(dān)保協(xié)議版B版
- 二零二五版光纖熔接項(xiàng)目融資服務(wù)合同范本3篇
- 2025年人工智能技術(shù)研發(fā)與應(yīng)用銷售合同書3篇
- 福建省廈門市2023-2024學(xué)年高二上學(xué)期期末考試語(yǔ)文試題(解析版)
- 三年級(jí)語(yǔ)文下冊(cè)教案-14 蜜蜂3-部編版
- 蘇教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)全冊(cè)教案
- DB51T2939-2022 彩燈(自貢)制作工藝通用規(guī)范
- 押金收據(jù)條(通用版)
- 藥理治療中樞神經(jīng)系統(tǒng)退行性疾病藥.pptx
- 強(qiáng)三基反三違除隱患促安全百日專項(xiàng)行動(dòng)實(shí)施方案
- 新人教版七年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)專項(xiàng)訓(xùn)練大全
- 標(biāo)準(zhǔn)預(yù)防--ppt課件
- 壓力管道氬電聯(lián)焊作業(yè)指導(dǎo)書
- 審計(jì)資料封面(共6頁(yè))
評(píng)論
0/150
提交評(píng)論