C語言程序設(shè)計案例式教程-第6章 函數(shù)_第1頁
C語言程序設(shè)計案例式教程-第6章 函數(shù)_第2頁
C語言程序設(shè)計案例式教程-第6章 函數(shù)_第3頁
C語言程序設(shè)計案例式教程-第6章 函數(shù)_第4頁
C語言程序設(shè)計案例式教程-第6章 函數(shù)_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章函數(shù)《C語言程序設(shè)計案例式教程(第2版)》學(xué)習(xí)目標(biāo)/Target了解函數(shù)的概念,能夠說出函數(shù)的作用掌握函數(shù)的定義,能夠通過定義函數(shù)實現(xiàn)功能的封裝掌握函數(shù)的調(diào)用過程和調(diào)用方式,能夠以不同的方式調(diào)用函數(shù)了解函數(shù)三要素,能夠說出函數(shù)名、參數(shù)列表、返回值類型的作用學(xué)習(xí)目標(biāo)/Target掌握遞歸函數(shù)的定義與調(diào)用,能夠通過遞歸函數(shù)解決特定的數(shù)學(xué)問題掌握局部變量與全局變量的定義與調(diào)用,能夠定義局部變量與全局變量實現(xiàn)不同作用域的數(shù)據(jù)描述掌握數(shù)組作為函數(shù)參數(shù)的應(yīng)用,能夠使用數(shù)組傳遞多個數(shù)據(jù)了解多個文件之間的變量引用與多個文件之間的函數(shù)調(diào)用,能夠跨文件引用變量、調(diào)用函數(shù)章節(jié)概述/Summary通過前面幾章的學(xué)習(xí),相信大家會編寫一些簡單的C語言程序了,但是,隨著程序功能的增多,main()函數(shù)中的代碼也會越來越多,導(dǎo)致main()函數(shù)中的代碼繁雜、可讀性太差,維護也變得很困難。此時,可以將功能相同的代碼提取出來,將這些代碼模塊化,在程序需要的時候直接調(diào)用。這就好比組裝機器,需要什么直接裝上就可以了。C語言的函數(shù)類似于機器的組裝部件,它用于實現(xiàn)某些特定的功能,本章將針對函數(shù)的相關(guān)知識進行詳細(xì)地講解。目錄/Contents案例6-1祖國生日快樂案例6-2簡易計算器案例6-3漢諾塔案例6-40.99與1.11的差別目錄/Contents案例6-5遠(yuǎn)水不救近火案例6-6數(shù)據(jù)去重案例6-7體測成績判定祖國生日快樂案例6-1【案例6-1】祖國生日快樂(1)了解函數(shù)的概念,能夠說出函數(shù)的作用(2)掌握函數(shù)的定義,能夠通過定義函數(shù)實現(xiàn)功能的封裝(3)掌握函數(shù)的調(diào)用過程和調(diào)用方式,能夠以不同的方式調(diào)用函數(shù)學(xué)習(xí)目標(biāo)案例描述在國慶節(jié)來臨之際,我們編寫小程序慶祝祖國生日,在小程序中需要多次輸出如下祝福語。 *******************************

祝福祖國生日快樂 *******************************如果你作為小程序開發(fā)團隊一員,請使用C語言完成上述祝福語模塊的編寫。知識需求祝福語模塊,printf()輸出語句實現(xiàn)多次輸出?代碼會重復(fù)、臃腫把祝福模塊語句封裝?需要時拿過來用?函數(shù)知識講解1.函數(shù)的概念函數(shù)的概念將某一項功能的代碼提取出來,封裝在一個{}中,為這段代碼取一個名字,當(dāng)需要這項功能時,直接通過這段代碼的名字調(diào)用這一段代碼就可以,這段提取出來的代碼就稱為函數(shù)。在C語言中,函數(shù)是最簡單的程序模塊。函數(shù)被視為程序設(shè)計的基本邏輯單位。知識講解1.函數(shù)的概念函數(shù)的優(yōu)勢函數(shù)的思路不僅易于理解,便于操作。函數(shù)可以重復(fù)調(diào)用,避免代碼重復(fù)。提高程序開發(fā)運行效率。知識講解1.函數(shù)的概念函數(shù)的分類C語言中的函數(shù)可分為庫函數(shù)與自定義函數(shù)。庫函數(shù):由系統(tǒng)提供,在文件頭部包含相應(yīng)的庫之后就可以直接調(diào)用庫中的函數(shù)。自定義函數(shù):是用戶自行定義的函數(shù),是為了解決用戶自己的業(yè)務(wù)問題。知識講解1.函數(shù)的概念定義和使用函數(shù)時,需要注意以下問題。(1)C程序的執(zhí)行是從main()函數(shù)開始的。(2)一個C程序可以有多個源程序文件。一個源程序文件由一個或多個函數(shù)以及其他有關(guān)內(nèi)容(如指令、數(shù)據(jù)聲明與定義等)組成。(3)函數(shù)不能嵌套定義。知識講解2.函數(shù)的定義函數(shù)定義格式如下。返回值類型函數(shù)名(參數(shù)類型參數(shù)名1,……,參數(shù)類型參數(shù)名n){

執(zhí)行語句 ……… return返回值;}知識講解2.函數(shù)的定義函數(shù)定義格式如下。返回值類型函數(shù)名(參數(shù)類型參數(shù)名1,……,參數(shù)類型參數(shù)名n){

執(zhí)行語句 ……… return返回值;}用于限定函數(shù)的返回值的類型函數(shù)的名稱用于限定參數(shù)的類型知識講解2.函數(shù)的定義函數(shù)定義格式如下。返回值類型函數(shù)名(參數(shù)類型參數(shù)名1,……,參數(shù)類型參數(shù)名n){

執(zhí)行語句 ……… return返回值;}接收傳入數(shù)據(jù)的變量的名稱結(jié)束函數(shù)函數(shù)返回的結(jié)果知識講解2.函數(shù)的定義函數(shù)定義示例:intadd(inta,intb){ intsum; sum=a+b; returnsum;}函數(shù)返回一個int類型的值函數(shù)名稱為add兩個int類型的參數(shù),名稱為a和b將參數(shù)a、b之和返回知識講解2.函數(shù)的定義函數(shù)不能嵌套定義,錯誤示例:intadd(inta,intb){ //定義add()函數(shù) intsum; sum=a+b; returnsum; charsub(intx,inty){ //在add()函數(shù)內(nèi)部定義sub()函數(shù),錯誤 intsum=x-y; returnsum; }}知識講解2.函數(shù)的定義VS函數(shù)的“定義”與“聲明”不是一回事兒?!岸x”是指對函數(shù)功能的確立,函數(shù)的定義是一個完整的、獨立的函數(shù)單位?!奥暶鳌眲t是把函數(shù)名、參數(shù)列表、返回值類型通知編譯系統(tǒng),以便在調(diào)用時系統(tǒng)按照此聲明進行對照檢查。知識講解2.函數(shù)的定義函數(shù)聲明有兩種形式。返回值類型函數(shù)名(參數(shù)類型1參數(shù)名1,參數(shù)類型2參數(shù)名2,…參數(shù)類型n參數(shù)名n);返回值類型函數(shù)名(參數(shù)類型1,參數(shù)類型2,…參數(shù)類型n);函數(shù)聲明示例:intadd(inta,intb);intadd(int,int);知識講解3.函數(shù)的調(diào)用過程函數(shù)調(diào)用:程序在編譯或運行時調(diào)用某個函數(shù)以實現(xiàn)某種功能的過程。調(diào)用一個函數(shù)時,系統(tǒng)就會跳轉(zhuǎn)到函數(shù)內(nèi)部執(zhí)行這個函數(shù),執(zhí)行完畢后再跳轉(zhuǎn)回來接著執(zhí)行下一條指令。系統(tǒng)在函數(shù)調(diào)用之前可以保護好當(dāng)前程序的執(zhí)行“現(xiàn)場”,去執(zhí)行函數(shù),函數(shù)執(zhí)行完畢后,再恢復(fù)當(dāng)前程序的執(zhí)行“現(xiàn)場”。函數(shù)調(diào)用這個過程類似于視頻播放器中的暫停與播放。知識講解3.函數(shù)的調(diào)用過程函數(shù)調(diào)用示例:intfunc(intx,inty){

returnx+y;}傳入?yún)?shù)3、5程序暫停,去執(zhí)行func()函數(shù)知識講解3.函數(shù)的調(diào)用過程函數(shù)調(diào)用示例:intfunc(intx,inty){

returnx+y;}傳入?yún)?shù)3、5在func()內(nèi)部,為形參x、y分配空間,并將3、5賦值給x、y進行運算知識講解3.函數(shù)的調(diào)用過程函數(shù)調(diào)用示例:intfunc(intx,inty){

returnx+y;}傳入?yún)?shù)3、5func()函數(shù)執(zhí)行完畢之后,回到“暫?!碧幚^續(xù)往下執(zhí)行知識講解4.函數(shù)的調(diào)用方式在調(diào)用函數(shù)時,要求實參與形參必須滿足三個條件。123

3個數(shù)相等順序?qū)?yīng)類型匹配知識講解4.函數(shù)的調(diào)用方式根據(jù)函數(shù)在程序中出現(xiàn)的位置,其調(diào)用方式可以分為以下4種。01將函數(shù)作為表達式調(diào)用將函數(shù)作為表達式調(diào)用時,函數(shù)的返回值參與表達式的運算,此時要求函數(shù)必須有返回值。將函數(shù)作為表達式調(diào)用示例:inta=max(10,20);知識講解4.函數(shù)的調(diào)用方式根據(jù)函數(shù)在程序中出現(xiàn)的位置,其調(diào)用方式可以分為以下4種。02將函數(shù)作為語句調(diào)用函數(shù)以語句的形式出現(xiàn)時,可以將函數(shù)作為一條語句進行調(diào)用。將函數(shù)作為語句調(diào)用示例:printf("helloworld!\n");知識講解4.函數(shù)的調(diào)用方式根據(jù)函數(shù)在程序中出現(xiàn)的位置,其調(diào)用方式可以分為以下4種。03將函數(shù)作為實參調(diào)用將函數(shù)作為實參調(diào)用時,其實就是將函數(shù)返回值作為函數(shù)參數(shù),此時要求函數(shù)必須有返回值。將函數(shù)作為實參調(diào)用示例:printf("%d\n",max(10,20));知識講解4.函數(shù)的調(diào)用方式根據(jù)函數(shù)在程序中出現(xiàn)的位置,其調(diào)用方式可以分為以下4種。04函數(shù)的嵌套調(diào)用在調(diào)用函數(shù)時,可以在一個函數(shù)中調(diào)用另一個函數(shù),這就是函數(shù)的嵌套調(diào)用。函數(shù)嵌套調(diào)用示例:intfunc(intx,inty){

max(10,20); //函數(shù)嵌套調(diào)用

returnx+y;}案例實現(xiàn)1.案例設(shè)計010203定義一個函數(shù)blessing()。在blessing()函數(shù)內(nèi)部調(diào)用printf()函數(shù)輸出對祖國的祝福。在main()函數(shù)中需要輸出祝福語之處調(diào)用blessing()函數(shù)對案例進行分析,案例設(shè)計步驟如下。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-1完整代碼}代碼實現(xiàn)簡易計算器案例6-2【案例6-2】簡易計算器(1)了解函數(shù)三要素,能夠說出函數(shù)名、參數(shù)列表、返回值類型的作用學(xué)習(xí)目標(biāo)案例描述計算工具的使用歷史非常悠久,最早的計算工具是中國古代的算籌,后來算籌演變?yōu)樗惚P,算盤先后流傳至日本、朝鮮、東南亞國家,后傳入西方,成為世界上公認(rèn)最早的計算工具。1946年,第一臺電子計算機ENIAC誕生,人類進入計算機時代,現(xiàn)在電子計算器已經(jīng)普及我們生活的各個角落。案例描述本案例要求編寫一個程序?qū)崿F(xiàn)一個簡易的計算器,能夠進行簡單的整數(shù)加減乘除運算,具體要求如下。(1)從鍵盤輸入一個表達式,如12+3。(2)根據(jù)表達式選擇相應(yīng)的函數(shù),完成表達式的運算,并將結(jié)果輸出到控制臺。知識需求實現(xiàn)四則運算定義四個函數(shù)需要知識:參數(shù)、返回值等。函數(shù)三要素實現(xiàn)加減乘除四則運算,每種運算可以定義一個函數(shù)單獨完成,因為函數(shù)要完成數(shù)據(jù)的四則運算,所以定義函數(shù)時要有參數(shù)、返回值等,這就需要學(xué)習(xí)函數(shù)的函數(shù)名、參數(shù)列表、返回值等相關(guān)知識。知識講解1.函數(shù)名函數(shù)名函數(shù)名是一個指針常量,記錄了函數(shù)代碼在內(nèi)存中的地址。函數(shù)代碼存儲在內(nèi)存代碼區(qū),有入口地址,這個入口地址就保存在函數(shù)名當(dāng)中。函數(shù)被調(diào)用時,函數(shù)名負(fù)責(zé)告訴調(diào)用者函數(shù)的入口地址,實現(xiàn)函數(shù)的調(diào)用。知識講解1.函數(shù)名使用printf()函數(shù)直接輸出函數(shù)名時,其結(jié)果是一個地址。輸出函數(shù)名示例:printf("%p\n",add);//輸出add()函數(shù)代碼的存儲地址對函數(shù)名的非法操作。給函數(shù)名賦值比較兩個函數(shù)大小sizeof計算函數(shù)大小注意:在書面用語中,函數(shù)后面的小括號()不能省略。知識講解2.參數(shù)列表參數(shù)列表:函數(shù)中的“(參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,…,參數(shù)類型參數(shù)名n)”被稱作參數(shù)列表。參數(shù)列表為空的函數(shù)稱為無參函數(shù)。參數(shù)列表不為空的函數(shù)稱為有參函數(shù)。知識講解2.參數(shù)列表(1)無參函數(shù)無參函數(shù)就是參數(shù)列表為空的函數(shù)。voidfunc(){ printf("這是一個無參函數(shù)!\n");}參數(shù)列表為空參數(shù)列表為空時,小括號()也不能省略。知識講解2.參數(shù)列表(2)有參函數(shù)有參函數(shù)的參數(shù)列表不為空。參數(shù)相當(dāng)于就是一個變量,用于接收調(diào)用者傳入的數(shù)據(jù)。函數(shù)參數(shù)在定義時只是一個形式上的變量,并不真實存在,即編譯器不會為其分配內(nèi)存,因此參數(shù)列表中的參數(shù)名被稱為形式參數(shù),簡稱為形參。調(diào)用有參函數(shù)時,調(diào)用者會向函數(shù)傳入具體的數(shù)據(jù),這些數(shù)據(jù)是實際存在的,也被稱為實際參數(shù),簡稱為實參。形參和實參之間的數(shù)據(jù)傳遞是單向的,即只能由實參傳遞給形參,不能由形參傳遞給實參。知識講解2.參數(shù)列表有參函數(shù)定義與調(diào)用示例。charswap(charch){ charc; if(97<=ch&&ch<=122) c=ch-32;

elseif(65<=ch&&ch<=90)

c=ch+32;

else

printf("傳入的字符不是英文字母!\n"); returnc;

}intmain(){ charc=swap('a'); //調(diào)用swap()函數(shù),將返回值保存到變量c中 printf("%c\n",c); //輸出轉(zhuǎn)換后的結(jié)果為A return0;

}形參實參知識講解3.返回值類型函數(shù)的返回值是指函數(shù)被調(diào)用之后,返回給調(diào)用者的值,由return關(guān)鍵字返回。return表達式;(1)return后面表達式的類型和函數(shù)定義返回值的類型應(yīng)保持一致。(2)如果函數(shù)沒有返回值,可以直接在return語句后面加分號或省略return語句。(3)如果函數(shù)沒有返回值,函數(shù)返回值類型要定義為void。(4)return結(jié)束函數(shù)執(zhí)行,return后面的代碼語句不會再執(zhí)行。知識講解3.返回值類型return應(yīng)用示例。intcompare(intx,inty) //定義compare()函數(shù){ if(x>y)

returnx; //調(diào)用return語句 elseif(x<y)

returny; //調(diào)用return語句 else

return0; //調(diào)用return語句}案例實現(xiàn)1.案例設(shè)計案例設(shè)計定義4個函數(shù),分別實現(xiàn)四則運算。每個函數(shù)的參數(shù)列表設(shè)置兩個形式參數(shù),接收兩個操作數(shù)。010203在main()函數(shù)中,定義一個字符變量記錄用戶輸入的運算符,將運算符傳遞到switch()語句中,讓程序判斷選擇要使用的函數(shù)。在main()函數(shù)中,使用while(1)語句使程序循環(huán)執(zhí)行,可以使計算器一直使用。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-2完整代碼}代碼實現(xiàn)漢諾塔案例6-3【案例6-3】漢諾塔(1)掌握遞歸函數(shù)的定義與調(diào)用,能夠通過遞歸函數(shù)解決特定的數(shù)學(xué)問題學(xué)習(xí)目標(biāo)案例描述漢諾塔是一種源自印度古老傳說的益智玩具,玩具有三根柱子,其中一根柱子從下到上疊放著一摞由大到小的多個黃金盤。案例描述要求把A座上的黃金盤移動到C座,中間可以借助B座。但規(guī)定每次只允許移動一個盤,且在移動過程中,3個座上都始終保持大盤在下,小盤在上的排列順序。這雖然是個玩具,但蘊含著深刻的數(shù)學(xué)知識,千百年來吸引著無數(shù)的數(shù)學(xué)家及愛好者,探索不同數(shù)量的黃金盤需移動的次數(shù)。本案例就要求編寫一個程序計算n個黃金盤需要移動的次數(shù)。知識需求當(dāng)n=1時,只需要將圓盤從A座移動到C座,f(1)=1;假設(shè)有n個圓盤,移動次數(shù)是f(n),則n取不同值時,移動次數(shù)規(guī)律如下。當(dāng)n=2時,將上面的圓盤移動到B座,A座上第二個圓盤移動到C座,B座上的圓盤再移動到C座,則f(2)=3;當(dāng)n=3時,將A座上第一個圓盤移到到C座,第二個圓盤移動到B座,C座上的圓盤移動到B座,A座上的圓盤移動到C座,B座上的第一個圓盤移動到A座,第二個圓盤移動到C座,A座上的圓盤移動到C座,一共移動了7次,f(3)=7;┈

,得出規(guī)律:f(n+1)=2*f(n)+1知識需求根據(jù)上述規(guī)律,當(dāng)要移動64個圓盤時,需要先將A柱上最大(最底層)的盤子移動到C柱,而在此之前要先將之上的63個圓盤先從A移動到B,在此之后才能將當(dāng)前處于B上的63個圓盤移動到C柱上。而要將B柱上的63個圓盤移動到C柱上,需要先將B上層的62個圓盤移動到A柱上,然后將B柱上最大的圓盤移動到C上……以此類推,之后需要移動62個盤子、61個盤子……直到A或B柱上只剩下一個圓盤,此時將這個圓盤移動到C柱,移動結(jié)束。在這個過程中,只有完成n=1時的任務(wù),才能完成n=2時的任務(wù),每次計算需要用到上一次計算結(jié)果,這種規(guī)律稱為遞歸,因此要想順利實現(xiàn)本案例,需要學(xué)習(xí)遞歸的相關(guān)知識。知識講解遞歸函數(shù)一種計算過程,如果其中每一步都要用到前一步或前幾步的結(jié)果,這個計算就是可遞歸的。用遞歸過程定義的函數(shù),稱為遞歸函數(shù)。要計算1~n之間自然數(shù)之和,就需要先計算1加2的結(jié)果,用這個結(jié)果加3再得到一個結(jié)果,用新得到的結(jié)果加4,……,以此類推,直到用1~(n-1)之間所有數(shù)的和加n,就得到了1~n之間的自然數(shù)之和。知識講解遞歸函數(shù)定義計算1~n之間自然數(shù)之和的遞歸函數(shù),示例如下。intgetsum(intn){ intsum=0; sum=getsum(n-1);

//調(diào)用函數(shù)本身 returnsum+n; //返回sum+n結(jié)果,即getsum(n-1)+n結(jié)果}知識講解遞歸函數(shù)但上述getsum()函數(shù)是一個無止境的函數(shù),即調(diào)用沒有結(jié)束條件,調(diào)用時,系統(tǒng)會拋出“棧溢出”異常。例如,傳入數(shù)值4,其調(diào)用過程如右圖。當(dāng)傳入n=4時沒有結(jié)束條件,函數(shù)會一直遞歸調(diào)用下去知識講解遞歸函數(shù)函數(shù)調(diào)用本身,且每一次調(diào)用本身時,必須是更接近于解。0102遞歸必須有結(jié)束條件。如果沒有停止條件,遞歸就是一個內(nèi)存開銷較大的無限循環(huán)。由此可以得出,遞歸函數(shù)要滿足兩個條件:01知識講解遞歸函數(shù)修改getsum()函數(shù)的定義,添加終止條件。intgetsum(intn){

if(n==1)

//終止條件:n=1

return1; //n=1時,和為1 inttemp=getsum(n-1);//調(diào)用函數(shù)本身 returntemp+n; //返回sum+n結(jié)果,即getsum(n-1)+n結(jié)果}知識講解遞歸函數(shù)修改之后的getsum()函數(shù)中,添加了遞歸結(jié)束條件:n=1,當(dāng)n從4遞減至1時,函數(shù)遞歸結(jié)束。假如傳入?yún)?shù)為4,則getsum(4)的遞歸過程如下所示。1234n=4,getsum(4)=temp+4=getsum(3)+4。n=3,getsum(3)=temp+3=getsum(2)+3。n=2,getsum(2)=temp+2=getsum(1)+2。n=1,getsum(1)=1,即temp值為1。知識講解遞歸函數(shù)遞歸到n=1時,getsum(1)值為1,將上述過程反推,最終得出1~4之間的自然數(shù)之和為10。123n=4,getsum(4)=temp+4=getsum(3)+4。n=3,getsum(3)=temp+3=getsum(2)+3。n=2,getsum(2)=temp+2=getsum(1)+2。知識講解遞歸函數(shù)getsum(4)的遞歸調(diào)用過程。案例實現(xiàn)1.案例設(shè)計根據(jù)案例分析可知,求解的每一步中都在求其更小規(guī)模的解,已知遞推公式為f(n+1)=2f(n)+1,終止條件為n=1,符合遞歸算法的思想,所以本例使用遞歸來實現(xiàn)。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-3完整代碼}代碼實現(xiàn)0.99與1.11的差別案例6-4【案例6-4】0.99與1.11的差別鞏固前面所學(xué)知識,能夠利用前面所學(xué)知識實現(xiàn)案例6-4。學(xué)習(xí)目標(biāo)案例描述陶淵明語:勤學(xué)如春起之苗,不見其增,日有所長;輟學(xué)如磨刀之石,不見其損,日有所虧。知識來源于日常的點滴積累,學(xué)習(xí)如同逆水行舟,不進則退。案例描述假如學(xué)習(xí)標(biāo)準(zhǔn)為1,如果一個人每天退步一點,學(xué)習(xí)程度為0.99,而另一個人每天進步一點,學(xué)習(xí)程度為1.11,則3年之后,兩個人的差別是非常巨大的。這種微小的差別最終會導(dǎo)致學(xué)習(xí)效果的南轅北轍,這說明了學(xué)習(xí)積累的重要性,同時也很好的詮釋了量變導(dǎo)致質(zhì)變的規(guī)律。本案例要求編寫一個程序?qū)崿F(xiàn)上面所描述的場景,即計算0.99n與1.11n的差別,n表示天數(shù)。案例實現(xiàn)計算0.99n與1.11n的差別,可以定義一個函數(shù)實現(xiàn)相應(yīng)功能,可以使用前面學(xué)習(xí)過的函數(shù)的定義與調(diào)用的相關(guān)知識。定義一個函數(shù)power(),第一個參數(shù)定義為float類型,即0.99或1.11;第二個參數(shù)定義為int類型,表示天數(shù)。01在函數(shù)內(nèi)部,使用循環(huán)語句做0.99或1.11的累積,最后返回累積。02案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-4完整代碼}代碼實現(xiàn)遠(yuǎn)水不救近火案例6-5【案例6-5】遠(yuǎn)水不救近火掌握局部變量與全局變量的定義與調(diào)用,能夠定義局部變量與全局變量實現(xiàn)不同作用域的數(shù)據(jù)描述學(xué)習(xí)目標(biāo)案例描述在C語言中,不同的變量也有其不同的作用范圍。若將C語言中的變量比作“水”與“火”,那么定義在不同代碼段中的變量之間也有遠(yuǎn)近之分。本案例要求編寫一個程序,在程序中不同位置定義“水”與“火”的相關(guān)變量,模擬遠(yuǎn)水救近火、近水救近火的場景,以此演示代碼中不同位置變量的定義與使用。知識需求起火了近水遠(yuǎn)水局部變量全局變量局部變量和全局變量在內(nèi)存中的存儲位置不同,作用范圍也有差異,在實現(xiàn)案例之前,我們需要先學(xué)習(xí)局部變量和全局變量的相關(guān)知識。知識講解1.局部變量定義在函數(shù)內(nèi)部的變量稱為局部變量,這些變量的作用域僅限于函數(shù)內(nèi)部,函數(shù)執(zhí)行完畢之后,這些變量就失去作用。知識講解1.局部變量局部變量定義與使用示例。intfun(){

inta=10; //func()函數(shù)中的局部變量 returna;

}intmain(){

inta=5; //main()函數(shù)中的局部變量 intb=fun(); printf("a=%d,b=%d\n",a,b);

return0;}此處調(diào)用的是main()函數(shù)中定義的局部變量a知識講解1.局部變量{}可以起到劃分代碼塊的作用,{}中定義的變量,作用域就局限于{}內(nèi)。intmain(){

{

inta=10; //作用域在本代碼塊內(nèi),即它所屬的{}范圍 printf("a=%d\n",a); }

{

inta=5; //作用域在本代碼塊內(nèi),即它所屬的{}范圍 printf("a=%d\n",a); } return0;}知識講解2.全局變量在所有函數(shù)(包括main()函數(shù))外部定義的變量稱為全局變量,它不屬于某個函數(shù),而是屬于源程序,因此全局變量可以被程序中的所有函數(shù)共用,它的有效范圍為從源程序定義開始處到源程序結(jié)束。若在同一個文件中,局部變量和全局變量同名,則全局變量會被屏蔽。知識講解2.全局變量全局變量與局部變量定義、使用示例。inta=10;

//全局變量aintmain(){ {

inta=5;

//局部變量a printf("a=%d",a); //全局變量a被屏蔽 } //局部變量a失效 printf(",a=%d\n",a); //全局變量a生效 return0;} //全局變量a失效案例實現(xiàn)1.案例設(shè)計全局變量的作用范圍為整個程序。局部變量的作用范圍從定義處開始,到所在層的“}”處結(jié)束。若變量名相同,全局變量將被局部變量屏蔽。案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-5完整代碼}代碼實現(xiàn)數(shù)據(jù)去重案例6-6【案例6-6】數(shù)據(jù)去重掌握數(shù)組作為函數(shù)參數(shù)的應(yīng)用,能夠使用數(shù)組傳遞多個數(shù)據(jù)學(xué)習(xí)目標(biāo)案例描述本案例要求編寫一個程序,實現(xiàn)數(shù)組元素的去重處理,案例具體要求如下。(1)從鍵盤輸入一組數(shù)據(jù)。(2)對輸入的數(shù)據(jù)進行去重處理,將去重后的數(shù)據(jù)輸出到控制臺。知識需求從鍵盤輸入一組數(shù)據(jù),可以使用數(shù)組存儲這組數(shù)據(jù)。數(shù)據(jù)去重功能可以定義成一個函數(shù)。傳遞數(shù)組作為參數(shù)需要學(xué)習(xí)數(shù)組作為函數(shù)參數(shù)的相關(guān)知識。知識講解數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)時,必須要保證形參與實參的數(shù)組是相同的類型,且有明確的數(shù)組說明,如數(shù)組維數(shù)、數(shù)組大小等。數(shù)組作為函數(shù)參數(shù)時,傳遞的就是數(shù)組所在內(nèi)存塊的地址,形參與實參操作的是同一塊內(nèi)存。在形參中改變數(shù)組中的元素,實參的數(shù)組也會改變。知識講解數(shù)組作為函數(shù)參數(shù)以數(shù)組作為參數(shù)的函數(shù)聲明。voidfunc1(intarr[5]);voidfunc2(intarr[],intn);傳入數(shù)組調(diào)用函數(shù)。func1(arr[5]); func2(arr,5);知識講解數(shù)組作為函數(shù)參數(shù)多維數(shù)組作為函數(shù)參數(shù)時,可以指定每一維的長度,也可以省去第一維的長度。voidfunc1(intarr[3][4]);voidfucn2(intarr[][4],intn);傳入數(shù)組調(diào)用以多維數(shù)組作為參數(shù)的函數(shù)。func1(arr[3][4]);fucn2(arr,3);案例實現(xiàn)1.案例設(shè)計定義兩個大小為10的int類型數(shù)組arr1和arr2,arr2用于存儲去重后的元素。定義函數(shù)func()實現(xiàn)去重功能,以數(shù)組arr1和arr2及其大小作為參數(shù),在函數(shù)內(nèi)部,取arr1數(shù)組中的元素,逐一與arr2數(shù)組中的元素比對,如果arr2數(shù)組中沒有與之相等的元素,就將獲取的arr1數(shù)組的元素存儲到數(shù)組arr2中,否則就丟棄。在main()函數(shù)中,調(diào)用func()函數(shù)進行去重,去重之后,輸出arr2數(shù)組中的元素。(1)(2)(3)案例設(shè)計案例實現(xiàn)2.完整代碼本案例中可以實現(xiàn)的效果圖如下。intmain(){請參考案例6-6完整代碼}代碼實現(xiàn)體測成績判定案例6-7【案例6-7】體測成績判定了解多個文件之間的變量引用與多個文件之間的函數(shù)調(diào)用,能夠跨文件引用變量、調(diào)用函數(shù)學(xué)習(xí)目標(biāo)案例描述2014年秋季起,我國執(zhí)行學(xué)生體質(zhì)健康測試的新標(biāo)準(zhǔn),大學(xué)生體測低于50分將不能畢業(yè),按結(jié)業(yè)或肄業(yè)處理。體測所含項目與每項所占比重如下表。背景介紹單項指標(biāo)權(quán)重體重指數(shù)(BMI)15肺活量1550米20坐位體前屈10立定跳遠(yuǎn)10引體向上(男)/仰臥起坐(女)101000米(男)/800米(女)20案例描述男生與女生的測試項目略有不同。根據(jù)“大學(xué)生體質(zhì)健康評分標(biāo)準(zhǔn)(2014年修訂版)”,男生女生的判斷標(biāo)準(zhǔn)也有所差異。男女生各項指標(biāo)評分細(xì)則如下表。背景介紹

項目成績體重指數(shù)(25%)肺活量(35%)引體向上(男)(40%)仰臥起坐(女)(40%)10017.9~23.9男>4800男>19>5617.2~23.9女>3400女800~17.8/24.0~27.9男4181~4800男16~1953~560~17.1/24.0~27.9女3001~3400女60≥28.0男3101~4180男10~1525~52≥28.0女2051~3000女30

男0~3100男0~90~16

女0~2050女案例描述體測成績判定細(xì)則如下表。背景介紹優(yōu)秀良好及格不及格95~10080~9460~79<60總成績的計算方式為:各項成績與其所占比重相乘,將相乘后的成績相加。男生體重指數(shù)×25%+肺活量×35%+引體向上×40%女生體重指數(shù)×25%+肺活量×35%+仰臥起坐×40%案例描述本案例要求根據(jù)前面所述背景知識,編寫程序?qū)崿F(xiàn)一個簡單的體測成績判定系統(tǒng),目的在于模擬體測成績的判定機制,不要求實現(xiàn)所有項目成績的判定,根據(jù)以上分類,結(jié)合案例,對將要設(shè)計的程序,作如下要求。(1)根據(jù)評分表,分別實現(xiàn)體重指數(shù)、肺活量、引體向上、仰臥起坐這四項指標(biāo)的計算功能。(2)可以根據(jù)用戶的選擇,進行單向指標(biāo)的成績換算。(3)實現(xiàn)總成績的計算功能,并根據(jù)表6-3對總成績進行判定(優(yōu)秀、良好、及格、不及格)。(4)以菜單的形式向用戶展示所有功能。知識需求體測成績判定系統(tǒng)源文件1源文件3源文件2源文件4體測項目代碼較多,需要定義多個函數(shù),如果函數(shù)較多,為便于閱讀,可以使用多個文件存儲不同的代碼,這就需要學(xué)習(xí)多文件之間的變量引用、多文件之間的函數(shù)調(diào)用等相關(guān)知識。知識講解1.多文件之間的變量引用局部變量無法跨文件引用,能跨文件引用的是全局變量。全局變量要跨文件引用,定義文件與引用文件中,全局變量前面都要加上extern關(guān)鍵字。test.c文件demo.c文件extern

inta=100;extern

a; intmain(){printf("%d\n",a);return0;}demo.c文件引用test.c文件中的全局變量a。知識講解1.多文件之間的變量引用現(xiàn)在編譯器默認(rèn)源文件中的全局變量可以被其他源文件引用,因此在定義時可以不加extern關(guān)鍵字。test.c文件demo.c文件inta=100;extern

a; intmain(){printf("%d\n",a);return0;}demo.c文件引用test.c文件中的全局變量a。知識講解1.多文件之間的變量引用如果本文件定義的全局變量不想被其他文件引用,可以在全局變量前添加static關(guān)鍵字修飾,這樣的全局變量稱為靜態(tài)全局變量。靜態(tài)全局變量無法跨文件引用。test.c文件demo.c文件staticintcount=100;externcount;intmain(){printf("%d\n",

count);return0;

}demo.c文件引用test.c文件中的靜態(tài)全局變量count。編譯器報錯知識講解1.多文件之間的變量引用如果本文件定義的全局變量不想被其他文件引用,可以在全局變量前添加static關(guān)鍵字修飾,這樣的全局變量稱為靜態(tài)全局變量。靜態(tài)全局變量無法跨文件引用。知識講解1.多文件之間的變量引用如果本文件定義的全局變量不想被其他文件引用,可以在全局變量前添加static關(guān)鍵字修飾,這樣的全局變量稱為靜態(tài)全局變量。靜態(tài)全局變量無法跨文件引用。由此可以得出,static除了保護全局變量不被其他文件引用,還可以解決重名問題,即兩個源文件可以定義重名的全局變量,使用static關(guān)鍵字可以解決重名問題。知識講解2.多個文件之間的函數(shù)調(diào)用多文件之間也可以進行函數(shù)的相互調(diào)用,根據(jù)函數(shù)能否被其他源文件調(diào)用,可以將函數(shù)分為外部函數(shù)和內(nèi)部函數(shù)。外部函數(shù)可以被其他源文件調(diào)用的函數(shù)稱為外部函數(shù)。定義外部函數(shù):在函數(shù)返回

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論