簡(jiǎn)介:項(xiàng)目四,項(xiàng)目要點(diǎn)數(shù)組的定義和使用數(shù)組的存儲(chǔ)結(jié)構(gòu)數(shù)組的輸入輸出字符串處理函數(shù)學(xué)習(xí)目標(biāo)使用數(shù)組處理同一類型的大批數(shù)據(jù)使用字符數(shù)組處理字符串使用二維數(shù)組處理字符串,C語(yǔ)言程序設(shè)計(jì),工作任務(wù)導(dǎo)入,工作任務(wù)一個(gè)班上50位學(xué)生參與考試,考了3門課程,現(xiàn)要求按總成績(jī)的高低輸出成績(jī)單引導(dǎo)問題1、課程的成績(jī)?nèi)绾未鎯?chǔ)2、學(xué)生信息如何存儲(chǔ)3、如何對(duì)成績(jī)進(jìn)行排序,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),MAIN{INTI,X,S0FORI0I50I{SCANF“D”,SX}PRINTF“F\N”,S/500},只用了三個(gè)變量就解決了問題,但數(shù)據(jù)沒有保存。,如果需要把成績(jī)按從高到低的順序全部打印出來,怎么辦,計(jì)算50個(gè)學(xué)生成績(jī)的平均分,,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),一維數(shù)組的定義,數(shù)據(jù)類型數(shù)組名常量表達(dá)式;,數(shù)組元素的數(shù)據(jù)類型,遵循C語(yǔ)言標(biāo)識(shí)符規(guī)則,數(shù)組長(zhǎng)度幾個(gè)數(shù)組元素,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),411一維數(shù)組,例如INTA5;,說明常量表達(dá)式表示元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。常量表達(dá)式中可以包括常量和符合常量,不能包含變量。,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),411一維數(shù)組,INTI5INTAI/數(shù)組長(zhǎng)度為變量/,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),411一維數(shù)組,以下對(duì)一維整型數(shù)組A的正確定義的是A、INTA10B、INTN10,ANC、INTNINTAND、DEFINESIZE10SCANF“D”,NINTASIZE,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),412一維數(shù)組的引用,表示引用數(shù)組A中的第2個(gè)元素,數(shù)組名下標(biāo)表達(dá)式;,表示引用數(shù)組A中的第6個(gè)元素,表示引用數(shù)組A中的第16個(gè)元素,,,,若一個(gè)數(shù)組長(zhǎng)度為N,其下標(biāo)值范圍是0~N1,C語(yǔ)言規(guī)定只能逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組。,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),412一維數(shù)組的引用,輸入5個(gè)學(xué)生的數(shù)學(xué)成績(jī),計(jì)算平均分,將平均分輸出到屏幕上。VOIDMAIN{INTI,MATHSCORE5,SUM0FLOATAVERAGEFORI0I5I{SCANF“D“,}FORI0I5I{SUMSUMMATHSCOREI}AVERAGESUM/50PRINTF“F“,AVERAGE},數(shù)組元素的地址也是通過“修改為AVERAGESUM/5結(jié)果如何2、練習(xí)從鍵盤輸入5個(gè)學(xué)生的成績(jī),求出并輸出分?jǐn)?shù)最高的學(xué)生序號(hào)及最高成績(jī)。。,數(shù)組的賦值只能逐個(gè)對(duì)數(shù)組元素賦值,不能直接對(duì)數(shù)組名賦值。因數(shù)組在內(nèi)存占一片連續(xù)的存儲(chǔ)空間,可用循環(huán)語(yǔ)句處理數(shù)組。,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),412一維數(shù)組的引用,(1)在定義數(shù)組時(shí),對(duì)全部數(shù)組元素賦初值此時(shí)可以省略數(shù)組的長(zhǎng)度,任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),413一維數(shù)組的初始化,C語(yǔ)言程序設(shè)計(jì),任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),413一維數(shù)組的初始化,(2)在定義數(shù)組時(shí),對(duì)部分?jǐn)?shù)組元素賦初值,C語(yǔ)言程序設(shè)計(jì),任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),413一維數(shù)組的初始化,(3)當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò),任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),412一維數(shù)組的引用,例用初始化方法,把10個(gè)學(xué)生的數(shù)學(xué)成績(jī)存儲(chǔ)在數(shù)組中,再?gòu)逆I盤輸入一個(gè)考分,查找該分?jǐn)?shù)是否在數(shù)組中,如果是,則輸出它是第幾名學(xué)生的成績(jī)。。VOIDMAIN{INTI,A10{56,65,76,68,92,37,87,51,73,48}INTFINDPRINTF“請(qǐng)輸入要查找的分?jǐn)?shù)\N“SCANF“D“,FORI0I10I{IFAIFIND/查找到了/{PRINTF“D“,I1BREAK}}},任務(wù)1輸入/輸出多個(gè)學(xué)生一門課程的成績(jī),413一維數(shù)組,練習(xí)一個(gè)班50位同學(xué)參加了一次C語(yǔ)言程序設(shè)計(jì)考試,現(xiàn)要輸入全班同學(xué)的成績(jī),并按逆序輸出。,任務(wù)2排序?qū)W生成績(jī),任務(wù)1中已經(jīng)輸入了50個(gè)同學(xué)的成績(jī)到數(shù)組中,現(xiàn)在需要確定如何對(duì)學(xué)生成績(jī)從低到高進(jìn)行排序。,,兩層循環(huán)結(jié)構(gòu)外層循環(huán)每次把操作范圍內(nèi)最大的數(shù)放到最后位置內(nèi)層循環(huán)每次把較大的數(shù)放到靠后的位置,任務(wù)2排序?qū)W生成績(jī),有數(shù)組A,其元素值為7、1、5、6、9、3,現(xiàn)要把該數(shù)組按從小到大的順序排列并輸出。,MAIN{INTA{7,1,5,6,9,3}INTI,J,TPRINTF“THESORTEDNEMBERS\N”FORI0I6IPRINTF“\N”,XI},FORI0IXJ1{TXJXJXJ1XJ1T},任務(wù)2排序?qū)W生成績(jī),任務(wù)2排序?qū)W生成績(jī),421冒泡法排序,1、上例中,如果要按從大到小的順序排序,該如何修改程序呢2、練習(xí)一個(gè)班50位同學(xué)參加了一次C語(yǔ)言程序設(shè)計(jì)考試,現(xiàn)要輸入全班同學(xué)的成績(jī),并按從低到高排序并輸出。,任務(wù)3處理多位學(xué)生多門課程的成績(jī),一個(gè)班上50位學(xué)生參與考試,考了3門課程,現(xiàn)要求按總成績(jī)的高低輸出成績(jī)單。如果僅僅使用一維數(shù)組進(jìn)行上述處理,是很困難的,此時(shí)需要使用二維數(shù)組。,X00X01X02X10X11X12,數(shù)據(jù)類型數(shù)組名常量表達(dá)式1常量表達(dá)式2;,,行,列,,INTA3,4,B3,4;INTC,D34,任務(wù)3處理多位學(xué)生多門課程的成績(jī),431二維數(shù)組,二維數(shù)組的定義,數(shù)組名行下標(biāo)列下標(biāo),A343A1,21,引用,/下標(biāo)越界/,/A121/,任務(wù)3處理多位學(xué)生多門課程的成績(jī),432二維數(shù)組的引用,任務(wù)3處理多位學(xué)生多門課程的成績(jī),練習(xí)輸入5個(gè)同學(xué)三門課程的成績(jī)并輸出,計(jì)算各門課的總分及平均分,并輸出。,432二維數(shù)組的引用,1分行對(duì)二維數(shù)組初始化,INTA23{{1,2,3},{4,5,6}}初始化后123456,任務(wù)3處理多位學(xué)生多門課程的成績(jī),433二維數(shù)組的初始化,INTA23{1,2,3,4,5,6}初始化后123456,2按數(shù)組排列的順序初始化,任務(wù)3處理多位學(xué)生多門課程的成績(jī),433二維數(shù)組的初始化,任務(wù)3處理多位學(xué)生多門課程的成績(jī),433二維數(shù)組的初始化,3對(duì)全部數(shù)組元素初始化,INTA3{1,2,3,4,5,6}初始化后123456,省略行號(hào),用二層循環(huán)語(yǔ)句處理數(shù)組,通常外循環(huán)控制行,內(nèi)循環(huán)控制列。,FOR(I0;I3I)FOR(J0;J4J)AIJIJ;,二維數(shù)組的賦值,0123234345,任務(wù)3處理多位學(xué)生多門課程的成績(jī),433二維數(shù)組的初始化,二維數(shù)組的輸入輸出,INTB34,I,JFORI0I3IFORJ0J4JSCANF“D”,FORI0I3IFORJ0J4JPRINTF“”,BIJ,任務(wù)3處理多位學(xué)生多門課程的成績(jī),433二維數(shù)組的初始化,任務(wù)3處理多位學(xué)生多門課程的成績(jī),練習(xí)用初始化方法,把5個(gè)同學(xué)三門課程成績(jī)存儲(chǔ)在二維數(shù)組中,計(jì)算每位同學(xué)的總成績(jī)和平均分,輸出總分最高的同學(xué)的總成績(jī)。,433二維數(shù)組初始化,練習(xí),下列程序有哪些錯(cuò)誤請(qǐng)解釋錯(cuò)誤原因。(1)MAIN{INTX,A10;FORX0;X10;XSCANF“D”,,任務(wù)4輸入/輸出學(xué)生,一個(gè)班上50位學(xué)生參與考試,需要輸入/輸出學(xué)生的姓名信息。這個(gè)任務(wù)需要解決多個(gè)字符的存放問題。,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,CHAR數(shù)組名常量表達(dá)式;,二維字符數(shù)組,CHAR數(shù)組名常量表達(dá)式1常量表達(dá)式2;,一維字符數(shù)組STR,,,二維字符數(shù)組S1,1用字符常數(shù)初始化,CHARC{‘C’,’H’,’I’,’N’,’A’,’\0’}初始化后,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,CHARC{“CHINA”}CHARC“CHINA”初始化后,2直接用字符串常量初始化,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,1用字符常數(shù)初始化,CHARLAN58{{‘B’,‘A’,‘S’,‘I’,‘C’,‘\0’},{‘F’,‘O’,‘R’,‘T’,‘R’,‘A’,‘N’,‘\0’},{‘P’,‘A’,‘S’,‘C’,‘A’,‘L’,‘\0’},{‘C’,‘\0’},{‘J’,‘A’,‘V’,‘A’,‘\0’}},二維字符數(shù)組的初始化,每行存放一個(gè)字符串,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,二維字符數(shù)組的初始化,CHARA310{“BASIC“,“PASCAL“,“C“},2直接用字符串常量初始化,練習(xí)1、給字符數(shù)組初始化為“HAPPY”,并輸出各個(gè)數(shù)組元素。2、輸出一個(gè)鉆石圖形。如圖所示。,任務(wù)4輸入/輸出學(xué)生,441字符數(shù)組,任務(wù)4輸入/輸出學(xué)生,442字符串,字符串是用雙引號(hào)括起來的若干有效字符序列,字符串可以包括字母、數(shù)字、轉(zhuǎn)義字符等,C語(yǔ)言中,將字符串作為字符數(shù)組來處理。,任務(wù)4輸入/輸出學(xué)生,442字符串,C語(yǔ)言規(guī)定了一個(gè)“字符串結(jié)束標(biāo)志”,以字符‘\0’代表。在處理字符數(shù)組的過程中,一旦遇到結(jié)束符‘\0’,就表示已達(dá)到字符串末尾。,數(shù)組的長(zhǎng)度是6,而不是5。,練習(xí)1、分析以下程序,其運(yùn)行結(jié)果是什么VOIDMAIN{CHARC5{’A’,’B’,’\0’,’C’,’\0’}PRINTF“S\N“,C}2、有字符串“ABCABCDEFDEF”,把該字符串中的小寫字母轉(zhuǎn)換為大寫字母后輸出。,任務(wù)4輸入/輸出學(xué)生,442字符串,任務(wù)4輸入/輸出學(xué)生,443字符串輸入/輸出,1字符數(shù)組的元素逐個(gè)輸入和輸出,用格式輸入輸出函數(shù)SCANF和PRINTF,使用“C”格式符,或用字符輸入輸出函數(shù)GETCHAR和PUTCHAR。每次輸入或輸出一個(gè)字符。,FORI0I10ISCANF“C”,,FORI0I10ICIGETCHAR,注GETCHAR和PUTCHAR定義在標(biāo)題文件“STDIOH”中,使用前要用INCLUDE把它們包含進(jìn)來,任務(wù)4輸入/輸出學(xué)生,443字符串輸入/輸出,2字符數(shù)組整體輸入和輸出,用格式輸入輸出函數(shù)SCANF和PRINTF,使用“S”格式符,輸入和輸出字符串。,(1)一維字符數(shù)組,SCANF“S”,字符數(shù)組名;PRINTF“S”,字符數(shù)組名;,CHARS110SCANF“S”,S1;PRINTF“S”,S1;,不用加SCANF“S”,STR1;PRINTF“S”,STR1;,任務(wù)4輸入/輸出學(xué)生,443字符串輸入/輸出舉例,MAIN{CHARSS310INTIFORI0I3ISCANF“S”,SSI;FORI0I3IPRINTF“S”,SSI;},注意在SCANF和PRINTF的“S”是直接控制字符串的,只要求某個(gè)字符串的起始地址作為參數(shù)。輸入時(shí),SCANF會(huì)自動(dòng)把用戶輸入的回車符、空格或制表符轉(zhuǎn)換成“\0”加在字符串的末尾,PRINTF則在遇到“\0”就結(jié)束輸出,但不能自動(dòng)換行。,MAIN{CHARSTR14SCANF“S”,STRPRINTF“\NS”,STRPRINTF“STRING”},輸入HOWAREYOU↙輸出HOWAREYOU,輸入HOWAREYOU↙輸出HOWSTRING,練習(xí)1、輸入一行字符串,統(tǒng)計(jì)其中大寫字母、小寫字母、數(shù)字以及其他字符的個(gè)數(shù)。,任務(wù)4輸入/輸出學(xué)生,443字符串輸入/輸出,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),①程序中如果調(diào)用下面介紹的4個(gè)字符串處理函數(shù),在程序的開始應(yīng)該寫預(yù)處理命令I(lǐng)NCLUDE②在字符串處理函數(shù)中,凡是用數(shù)組名或字符串首地址作參數(shù)的地方,都可以用指針變量作參數(shù)。指針變量的概念在第6章介紹。,說明,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),1求字符串長(zhǎng)度函數(shù)STRLEN,格式STRLENSTR,功能測(cè)試字符串長(zhǎng)度。函數(shù)值就是STR中字符的個(gè)數(shù)不包含字符串的結(jié)束符“\0”。,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),1求字符串長(zhǎng)度函數(shù)STRLEN,CHARSTR10“CHINA“PRINTF“D“,STRLENSTR或PRINTF“D“,STRLEN“CHINA“,輸出結(jié)果5,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),2字符串復(fù)制函數(shù)STRCPY,格式STRCPYSTR1,STR2,功能將STR2中的字符串復(fù)制到STR1數(shù)組中。,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),2字符串復(fù)制函數(shù)STRCPY,CHARS110,S2“BEIJING“STRCPYS1,S2或STRCPYS1,“BEIJING“,S1的結(jié)果,S1必須足夠大,STRCPYS1,S2,3,表示將S2中的前3個(gè)字符復(fù)制到S1中。,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),3字符串比較函數(shù)STRCMP,格式STRCMPSTR1,STR2,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),3字符串比較函數(shù)STRCMP,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),4字符串連接函數(shù)STRCAT,格式STRCATSTR1,STR2,功能把STR2中的字符串連接到STR1字符串的后面,結(jié)果放在STR1數(shù)組中,函數(shù)值是STR1的值。,任務(wù)5任務(wù)拓展,451字符串處理函數(shù),4字符串連接函數(shù)STRCAT,CHARSTR121“BEIJINGAND“CHARSTR2“SHANGHAI“PRINTF“S“,STRCATSTR1,STR2,輸出結(jié)果BEIJINGANDSHANGHAI,STR1必須足夠大,練習(xí)1、輸出如下的楊輝三角形,要求一共有10行10列。2、從鍵盤輸入5個(gè)字符串,將其中最大的字符串輸出。3、輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔開。,任務(wù)5任務(wù)拓展,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 57
大?。?0.75(MB)
子文件數(shù):
簡(jiǎn)介:C語(yǔ)言程序設(shè)計(jì),第四章函數(shù)41庫(kù)函數(shù)42自定義函數(shù)43函數(shù)的參數(shù)傳遞與返回值44遞歸函數(shù)45局部變量、全局變量與變量作用域46函數(shù)綜合應(yīng)用,學(xué)習(xí)目標(biāo)理解函數(shù)在程序設(shè)計(jì)中的作用和地位掌握函數(shù)的定義、原型聲明和調(diào)用方法熟練掌握函數(shù)的參數(shù)傳遞與返回值理解局部變量、全局變量、靜態(tài)變量和變量的作用域掌握遞歸函數(shù)的編寫技術(shù)理解和掌握結(jié)構(gòu)設(shè)計(jì)和模塊化程序設(shè)計(jì)方法了解地址和指針的概念,了解地址做函數(shù)參數(shù)的特點(diǎn)和作用,為什么要用函數(shù),問題如果程序的功能比較多,規(guī)模比較大,把所有代碼都寫在MAIN函數(shù)中,就會(huì)使主函數(shù)變得龐雜、頭緒不清,閱讀和維護(hù)變得困難有時(shí)程序中要多次實(shí)現(xiàn)某一功能,就需要多次重復(fù)編寫實(shí)現(xiàn)此功能的程序代碼,這使程序冗長(zhǎng),不精煉,解決的方法用模塊化程序設(shè)計(jì)的思路采用“組裝”的辦法簡(jiǎn)化程序設(shè)計(jì)的過程可以使用庫(kù)函數(shù)事先編好一批實(shí)現(xiàn)各種不同功能的函數(shù),把它們保存在函數(shù)庫(kù)中,需要時(shí)直接用可以使用自己編寫的函數(shù)在設(shè)計(jì)一個(gè)較大的程序時(shí),往往把它分為若干個(gè)程序模塊,每一個(gè)模塊包括一個(gè)或多個(gè)函數(shù),每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定的功能,函數(shù)的名字應(yīng)反映其代表的功能C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成,主函數(shù)調(diào)用其他函數(shù),其他函數(shù)也可以互相調(diào)用,同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次在程序設(shè)計(jì)中要善于利用函數(shù),可以減少重復(fù)編寫程序段的工作量,同時(shí)可以方便地實(shí)現(xiàn)模塊化的程序設(shè)計(jì),,導(dǎo)例平方根表1.問題描述輸出100以內(nèi)整數(shù)的平方根表,要求每行輸出10個(gè)。2.問題分析C語(yǔ)言提供了一個(gè)庫(kù)函數(shù)SQRT,使用時(shí)直接調(diào)用該庫(kù)函數(shù)就可以計(jì)算出平方根值。,,3.算法描述(1)定義兩個(gè)整型變量M,N。(2)輸出平方根表時(shí),要注意格式。首先輸出表頭,輸出0~9的整數(shù)。(3)然后按照格式要求輸出平方根表,M為行數(shù)0~9,N為列數(shù)0~9,則表內(nèi)對(duì)應(yīng)第M行第N列的表值為SQRTM10N,每行10個(gè)。,1,1,INCLUDEINCLUDE//數(shù)學(xué)類頭文件INTMAIN{INTM,N,FORN0NYZXELSEZYRETURNZ},定義函數(shù)時(shí),形參調(diào)用函數(shù)時(shí),實(shí)參,函數(shù)的調(diào)用,函數(shù)調(diào)用的形式,對(duì)于實(shí)現(xiàn)計(jì)算功能的函數(shù),函數(shù)調(diào)用通常出現(xiàn)在兩種情況賦值語(yǔ)句VOLUMECYLINDERRADIUS,HEIGHT輸出函數(shù)的實(shí)參PRINTF“F”,CYLINDERRADIUS,HEIGHT,函數(shù)調(diào)用的過程,計(jì)算機(jī)在執(zhí)行程序時(shí),從主函數(shù)MAIN開始執(zhí)行,如果遇到某個(gè)函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的函數(shù),該函數(shù)執(zhí)行完后,將返回主函數(shù),然后再?gòu)脑葧和5奈恢美^續(xù)執(zhí)行。函數(shù)遇RETURN返回主函數(shù),分析函數(shù)調(diào)用的過程,INCLUDEINTMAINVOID{DOUBLEHEIGHT,RADIUS,VOLUMEDOUBLECYLINDERDOUBLER,DOUBLEHPRINTF“ENTERRADIUSANDHEIGHT“SCANF“LFLF“,VOLUMECYLINDERRADIUS,HEIGHTPRINTF“VOLUME3F\N“,VOLUMERETURN0}DOUBLECYLINDERDOUBLER,DOUBLEH{DOUBLERESULTRESULT31415926RRHRETURNRESULT},調(diào)用函數(shù),,,實(shí)參?形參,執(zhí)行函數(shù)中的語(yǔ)句,返回調(diào)用它的地方,,,,,參數(shù)傳遞,函數(shù)定義時(shí)的參數(shù)被稱為形式參數(shù)(簡(jiǎn)稱形參)DOUBLECYLINDERDOUBLER,DOUBLEH;函數(shù)調(diào)用時(shí)的參數(shù)被稱為實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參)VOLUMECYLINDERRADIUS,HEIGHT參數(shù)傳遞實(shí)參?形參在參數(shù)傳遞過程中,實(shí)參把值復(fù)制給形參。形參和實(shí)參一一對(duì)應(yīng)數(shù)量一致,類型一致,順序一致形參變量,用于接受實(shí)參傳遞過來的值實(shí)參常量、變量或表達(dá)式,單向傳遞,函數(shù)結(jié)果返回,完成確定的運(yùn)算,將運(yùn)算結(jié)果返回給主調(diào)函數(shù)。函數(shù)結(jié)果返回的形式RETURN表達(dá)式;RETURN表達(dá)式;,,,,,在執(zhí)行函數(shù)調(diào)用時(shí),實(shí)參把值計(jì)算出來,拷貝給相應(yīng)位置的形參;函數(shù)執(zhí)行完后,通過RETURN,可返回一個(gè)結(jié)果值。實(shí)參與形參有多個(gè)實(shí)參時(shí)形參的改變個(gè)數(shù)相同、類型一致后面的先計(jì)算不影響實(shí)參變量的值只能返回一個(gè)結(jié)果,類型與函數(shù)定義時(shí)一致,,,要調(diào)用函數(shù),必須先要聲明,,,小結(jié),43函數(shù)的參數(shù)傳遞與返回值431導(dǎo)例爬動(dòng)的蠕蟲432導(dǎo)例日K蠟燭圖433函數(shù)的參數(shù)傳遞434函數(shù)的返回值,從函數(shù)是否有參數(shù)和返回值的角度,可以將函數(shù)分為①有參數(shù)有返回值函數(shù)②有參數(shù)無返回值函數(shù)③無參數(shù)有返回值函數(shù)④無參數(shù)無返回值函數(shù),導(dǎo)例判斷素?cái)?shù)的函數(shù),求100以內(nèi)的全部素?cái)?shù),每行輸出10個(gè)。素?cái)?shù)就是只能被1和自身整除的正整數(shù),1不是素?cái)?shù),2是素?cái)?shù)。要求定義和調(diào)用函數(shù)PRIMEM判斷M是否為素?cái)?shù),當(dāng)M為素?cái)?shù)時(shí)返回1,否則返回0。算法描述對(duì)2~100之間的每個(gè)數(shù)進(jìn)行判斷,若是素?cái)?shù),則輸出該數(shù)。FORM2M1,,采用非遞歸方法,程序片段如下FIRST1,SECOND1SCANF“D“,FORI0I1FACTNNFACTN1遞歸公式,,,,實(shí)現(xiàn)階乘遞歸算法的遞歸函數(shù)LONGFACTINTN{IFN0RETURN1ELSERETURNNFACTN1},YFACT3,遞歸函數(shù)的調(diào)用過程,,遞歸程序的內(nèi)部執(zhí)行過程函數(shù)的遞歸調(diào)用類似于多個(gè)函數(shù)的嵌套調(diào)用,只不過調(diào)用函數(shù)和被調(diào)用函數(shù)是同一個(gè)函數(shù)。遞歸調(diào)用的內(nèi)部執(zhí)行過程如下①運(yùn)行開始時(shí),系統(tǒng)設(shè)立工作棧來保存每次調(diào)用的運(yùn)行環(huán)境,包括形參、局部變量和返回地址;②遞歸調(diào)用前,將調(diào)用函數(shù)的形參、局部變量以及調(diào)用后的返回地址進(jìn)棧;③調(diào)用結(jié)束后,將棧頂數(shù)據(jù)出棧,恢復(fù)調(diào)用前的運(yùn)行環(huán)境,使相應(yīng)的形參和局部變量恢復(fù)為調(diào)用前的值,然后從返回地址指定的位置繼續(xù)執(zhí)行調(diào)用函數(shù)。,,444遞歸函數(shù)的效率分析遞歸函數(shù)如果很緩慢地逼近到遞歸結(jié)束條件,會(huì)使性能大大下降。遞歸增加了系統(tǒng)開銷,時(shí)間上,執(zhí)行調(diào)用與返回的額外工作要占用CPU時(shí)間??臻g上,隨著每遞歸一次,棧內(nèi)存就多占一塊,即要分配相應(yīng)的存儲(chǔ)空間,并完成參數(shù)的傳遞、函數(shù)的返回等,在程序的執(zhí)行效率和所消耗的存儲(chǔ)空間上,和非遞歸相比沒有任何優(yōu)勢(shì)。一般的遞歸都可以通過相應(yīng)的方法轉(zhuǎn)化為非遞歸的,所以不推薦使用遞歸,特別是不推薦使用遞歸層次較多的遞歸。,45C局部變量、全局變量與變量作用域451導(dǎo)例富翁與騙子452導(dǎo)例簡(jiǎn)易庫(kù)存存取貨管理453局部變量和全局變量454變量的作用域和生存期,分別輸入2個(gè)復(fù)數(shù)的實(shí)部與虛部,用函數(shù)實(shí)現(xiàn)計(jì)算2個(gè)復(fù)數(shù)之和與之積。,分析若2個(gè)復(fù)數(shù)分別為C1X1Y1I,C2X2Y2I,則C1C2X1X2Y1Y2IC1C2X1X2Y1Y2X1Y2X2Y1I,復(fù)數(shù)運(yùn)算,INCLUDEFLOATRESULT_REAL,RESULT_IMAG/全局變量,用于存放函數(shù)結(jié)果/INTMAINVOID{FLOATIMAG1,IMAG2,REAL1,REAL2/兩個(gè)復(fù)數(shù)的實(shí)、虛部變量//函數(shù)聲明/VOIDCOMPLEX_PRODFLOATREAL1,FLOATIMAG1,FLOATREAL2,FLOATIMAG2VOIDCOMPLEX_ADDFLOATREAL1,FLOATIMAG1,FLOATREAL2,FLOATIMAG2PRINTF“ENTER1STCOMPLEXNUMBERREALANDIMAGINARY“SCANF“FF“,/輸入第一個(gè)復(fù)數(shù)/PRINTF“ENTER2NDCOMPLEXNUMBERREALANDIMAGINARY“SCANF“FF“,/輸入第兩個(gè)復(fù)數(shù)/COMPLEX_ADDREAL1,IMAG1,REAL2,IMAG2/求復(fù)數(shù)之和/PRINTF“ADDITIONOFCOMPLEXISFFI\N“,RESULT_REAL,RESULT_IMAGCOMPLEX_PRODREAL1,IMAG1,REAL2,IMAG2/求復(fù)數(shù)之積/PRINTF“PRODUCTOFCOMPLEXISFFI\N“,RESULT_REAL,RESULT_IMAGRETURN0},運(yùn)行結(jié)果ENTER1STCOMPLEXNUMBERREALANDIMAGINARY11ENTER2NDCOMPLEXNUMBERREALANDIMAGINARY23ADDITIONOFCOMPLEXIS10000004000000IPRODUCTOFCOMPLEXIS50000001000000I,VOIDCOMPLEX_ADDFLOATREAL1,FLOATIMAG1,FLOATREAL2,FLOATIMAG2{RESULT_REALREAL1REAL2RESULT_IMAGIMAG1IMAG2},VOIDCOMPLEX_PRODFLOATREAL1,FLOATIMAG1,FLOATREAL2,FLOATIMAG2{RESULT_REALREAL1REAL2IMAG1IMAG2RESULT_IMAGREAL1IMAG2REAL2IMAG1},局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍本函數(shù)內(nèi)部定義在復(fù)合語(yǔ)句內(nèi)的變量作用范圍復(fù)合語(yǔ)句內(nèi)部全局變量在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍從定義處到源文件結(jié)束(包括各函數(shù)),453局部變量和全局變量,在復(fù)合語(yǔ)句中定義局部變量,INCLUDEINTMAINVOID{INTAA1{/復(fù)合語(yǔ)句開始/INTB2BABAAB}/復(fù)合語(yǔ)句結(jié)束/PRINTF“D“,ARETURN0},B小范圍內(nèi)的臨時(shí)變量,,,輸出4,改成B會(huì)如何,全局變量定義,INCLUDE“STDIOH“INTX/定義全局變量X/INTF{INTX4/X為局部變量/RETURNX}INTMAINVOID{INTA1XA/對(duì)全局變量X賦值/AF/A的值為4/{INTB2BAB/B的值為6/XXB/全局變量運(yùn)算/}PRINTF“DD“,A,XRETURN0},若局部變量與全局變量同名,局部變量?jī)?yōu)先,,,,,輸出4,7,變量作用范圍示例,INTX1VOIDMAIN{INTA2{INTB3}F}INTT4VOIDF{INTX5,B6}INTA7,XAB,B,X5B6T4A沒定義,,,,,,,XBTA,用函數(shù)實(shí)現(xiàn)財(cái)務(wù)現(xiàn)金記賬。先輸入操作類型1收入,2支出,0結(jié)束,再輸入操作金額,計(jì)算現(xiàn)金剩余額,經(jīng)多次操作直到輸入操作為0結(jié)束。要求定義并調(diào)用函數(shù),其中現(xiàn)金收入與現(xiàn)金支出分別用不同函數(shù)實(shí)現(xiàn)。分析設(shè)變量CASH保存現(xiàn)金余額值,由于它被主函數(shù)、現(xiàn)金收入與現(xiàn)金支出函數(shù)共用,任意使用場(chǎng)合其意義與數(shù)值都是明確和唯一的,因此令其為全局變量。,財(cái)務(wù)現(xiàn)金記賬,INCLUDEFLOATCASH/定義全局變量,保存現(xiàn)金余額/INTMAINVOID{INTCHOICEFLOATVALUEVOIDINCOMEFLOATNUMBER,EXPENDFLOATNUMBER/函數(shù)聲明/CASH0/初始金額0/PRINTF“ENTEROPERATECHOICE0END,1INCOME,2EXPEND“SCANF“D“,/輸入操作類型/WHILECHOICE0{/若輸入類型為0,循環(huán)結(jié)束/IFCHOICE1||CHOICE2{PRINTF“ENTERCASHVALUE“/輸入操作現(xiàn)金額/SCANF“F“,IFCHOICE1INCOMEVALUE/函數(shù)調(diào)用,計(jì)算現(xiàn)金收入/ELSEEXPENDVALUE/函數(shù)調(diào)用,計(jì)算現(xiàn)金支出/PRINTF“CURRENTCASH2F\N“,CASH}PRINTF“ENTEROPERATECHOICE0END,1INCOME,2EXPEND“SCANF“D“,/繼續(xù)輸入操作類型/}RETURN0},
下載積分: 4 賞幣
上傳時(shí)間:2024-01-07
頁(yè)數(shù): 97
大小: 1.85(MB)
子文件數(shù):