《編程基礎(chǔ)-C語(yǔ)言》項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第1頁(yè)
《編程基礎(chǔ)-C語(yǔ)言》項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第2頁(yè)
《編程基礎(chǔ)-C語(yǔ)言》項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第3頁(yè)
《編程基礎(chǔ)-C語(yǔ)言》項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第4頁(yè)
《編程基礎(chǔ)-C語(yǔ)言》項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目七 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用任務(wù)描述:請(qǐng)編程實(shí)現(xiàn):輸入任意兩條鐵路線的長(zhǎng)度,輸出較長(zhǎng)的高速鐵路線,要求使用函數(shù)完成。案例分析:先定義一個(gè)函數(shù)max,求出大者在主函數(shù)中調(diào)用max函數(shù),輸出較大者7.1函數(shù)的定義1.函數(shù)定義的一般形式函數(shù)定義的一般形式為:類型名函數(shù)名(形式參數(shù)列表){函數(shù)體}函數(shù)體包括聲明部分和語(yǔ)句部分。任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用7.2函數(shù)的調(diào)用1.

函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參列表);如果是調(diào)用無(wú)參函數(shù),則“實(shí)參表列”可以沒有,但括號(hào)不能省略。如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)隔開。任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用7.3函數(shù)的參數(shù)和返回值

函數(shù)在定義的時(shí)候通過參數(shù)列表來(lái)指定參數(shù)的數(shù)量和類型,參數(shù)使得函數(shù)變得更加靈活,傳入不同的參數(shù)可以讓函數(shù)實(shí)現(xiàn)更為豐富的功能。比如,現(xiàn)在要造一輛車,那么這個(gè)車輪就使用一個(gè)函數(shù)來(lái)生產(chǎn),但如果所有型號(hào)的汽車的車輪都一樣,那就沒辦法個(gè)性化銷售了。所以函數(shù)要支持個(gè)性化定制,讓車輪可以是圓的,也可以是……不對(duì),車輪都應(yīng)該是圓的,那就定制圖案,可以是梅花的,可以是五角星的,等等。這就是參數(shù)的用法。任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用1.形參和實(shí)參形參就是形式參數(shù),函數(shù)定義的時(shí)候?qū)懙膮?shù)就叫形參,因?yàn)槟菚r(shí)候它只是作為一個(gè)占位符而已。而實(shí)參就是在真正調(diào)用這個(gè)函數(shù)的時(shí)候,傳遞進(jìn)去的數(shù)值,是一個(gè)實(shí)實(shí)在在的值。實(shí)參可以是常量、變量或表達(dá)式。形參和實(shí)參的功能其實(shí)就是用作數(shù)據(jù)傳送。2.形參和實(shí)參間的數(shù)據(jù)傳遞在調(diào)用函數(shù)過程中,系統(tǒng)會(huì)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參?;蛘哒f,形參從實(shí)參得到一個(gè)值。該值在函數(shù)調(diào)用期間有效,可以參加該函數(shù)中的運(yùn)算。在調(diào)用函數(shù)過程中發(fā)生的實(shí)參與形參間的數(shù)據(jù)傳遞稱為“虛實(shí)結(jié)合”。如下例輸出兩個(gè)整數(shù)中的較大值,要求用函數(shù)來(lái)實(shí)現(xiàn)。3.函數(shù)的返回值函數(shù)的返回值是通過函數(shù)中的return語(yǔ)句獲得的,return語(yǔ)句的一般形式為:return(表達(dá)式);或者return表達(dá)式;任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用任務(wù)實(shí)施:#include<stdio.h>intmax(intx,inty){intz;z=x>y?x:y;return(z);}main(){intmax(intx,inty);inta,b,c;printf("請(qǐng)輸入兩條鐵路線的長(zhǎng)度:");scanf("%d,%d",&a,&b);c=max(a,b);printf("較長(zhǎng)的鐵路線為:%4d公里\n",c);}任務(wù)總結(jié):

本任務(wù)將知識(shí)融于騰飛的中國(guó)高鐵案例中,了解中國(guó)高鐵飛速發(fā)展的同時(shí),升騰起對(duì)國(guó)家的熱愛之情。同時(shí)在本任務(wù)中掌握了函數(shù)的定義和調(diào)用的相關(guān)知識(shí)。任務(wù)拓展:編寫一個(gè)函數(shù),要求函數(shù)能打印“***我愛你中國(guó)***”。任務(wù)20輸出里程較長(zhǎng)的中國(guó)高鐵線——函數(shù)的定義與調(diào)用任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用任務(wù)描述:用遞歸方法求n!,n!=n×(n-1)×(n-2)×……×2×1。案例分析:正整數(shù)階乘是指所有小于及等于該數(shù)的所有正整數(shù)的積根據(jù)階乘的性質(zhì)可知,n!=(n-1)!×n,而(n-1)!=(n-2)!×(n-1),……,1!=1第1階段是“回溯”,即將n!表示為(n-1)!……直到1!此時(shí)1!=1,回溯結(jié)束第2階段“遞推”,從1!推算出2!=1!×2=2,……一直推算出n!7.4函數(shù)的嵌套調(diào)用和遞歸調(diào)用

C語(yǔ)言的函數(shù)定義是相互獨(dú)立的,也就是說,在定義函數(shù)時(shí),一個(gè)函數(shù)內(nèi)不能再定義另一個(gè)函數(shù),即不能嵌套定義,但函數(shù)的調(diào)用是可以嵌套的,即在調(diào)用一個(gè)函數(shù)的過程中,又調(diào)用另一個(gè)函數(shù)。如果在調(diào)用函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用任務(wù)實(shí)施:任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用#include<stdio.h>longfact(intn){longresult;if(num>0){result=n*fact(n-1);}else{result=1;}returnresult;}main(){longfact(intn);intn;longy;printf("請(qǐng)輸入一個(gè)正整數(shù):");scanf("%d",&n);y=fact(n);printf("%d的階乘是:%ld\n",n,y);}任務(wù)總結(jié):

從本任務(wù)可以看出,使用遞歸的關(guān)鍵在于找出遞歸關(guān)系和遞歸終止條件。而對(duì)初學(xué)者來(lái)說,最容易出現(xiàn)的就是沒有設(shè)置遞歸終止的條件,程序會(huì)無(wú)休止地調(diào)用函數(shù)本身而停不下來(lái),直至內(nèi)存耗盡而崩潰。在有些問題上,用遞歸實(shí)現(xiàn)更易于操作,如漢諾塔程序,但有些問題用遞歸實(shí)現(xiàn)會(huì)大大增加程序的運(yùn)行時(shí)間并消耗大量?jī)?nèi)存,此時(shí)盡量不使用遞歸函數(shù)。任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用任務(wù)拓展:

Hanoi(漢諾)塔問題。這是一個(gè)古典的數(shù)學(xué)問題,是一個(gè)用遞歸方法解題的典型例子。問題是這樣的:古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A,B,C.開始時(shí)A座上有64個(gè)盤子,盤子大小不等,大的在下,小的在上。有一個(gè)老和尚想把這64個(gè)盤子從A座移到C座,但規(guī)定每次只允許移動(dòng)一個(gè)盤,且在移動(dòng)過程中在3個(gè)座上都始終保持大盤在下,小盤在上。在移動(dòng)過程中可以利用B座。要求編程序輸出移動(dòng)盤子的步驟。任務(wù)21求階乘——函數(shù)的嵌套調(diào)用和遞歸調(diào)用任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)任務(wù)描述:請(qǐng)編程實(shí)現(xiàn):輸入任意兩條鐵路線的長(zhǎng)度,輸出較長(zhǎng)的高速鐵路線,要求使用函數(shù)完成。任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)案例分析:定義一個(gè)數(shù)組a,長(zhǎng)度為10,用來(lái)存放10個(gè)數(shù)設(shè)計(jì)一個(gè)函數(shù)max,用來(lái)求兩個(gè)數(shù)中的大者在主函數(shù)中定義一個(gè)變量m,m的初值為a[0],假定第1個(gè)元素a[0]是最大值依次將數(shù)組元素a[1]~a[9]與m比較最后得到的m值就是10個(gè)數(shù)中的最大者任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)知識(shí)準(zhǔn)備:7.5數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)參數(shù)數(shù)組元素可以用作函數(shù)實(shí)參,但是不能用作形參。在用數(shù)組元素作函數(shù)實(shí)參時(shí),把實(shí)參的值傳給形參,是“值傳遞”方式。數(shù)據(jù)傳遞的方向是從實(shí)參傳到形參,單向傳遞。任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)知識(shí)準(zhǔn)備:7.5數(shù)組作為函數(shù)參數(shù)2.一維數(shù)組名作函數(shù)參數(shù)除了可以用數(shù)組元素作函數(shù)參數(shù)外,還可以用數(shù)組名作函數(shù)參數(shù)(包括實(shí)參和形參),作為實(shí)參的數(shù)組名將數(shù)組元素首地址傳遞給形參所表示的數(shù)組名,即實(shí)參傳給形參的是地址。3.多維數(shù)組名作函數(shù)參數(shù)可以用多維數(shù)組名作為函數(shù)的實(shí)參和形參,這里只以二維數(shù)組為例來(lái)介紹。在被調(diào)用函數(shù)中對(duì)形參數(shù)組定義時(shí)可以指定每一維的大小,也可以省略第一維的大小說明。任務(wù)實(shí)施:#include<stdio.h>main(){intmax(intx,inty);

//函數(shù)聲明inta[10],m,n,i;printf("請(qǐng)輸入10個(gè)整數(shù):");//輸入10個(gè)數(shù)給a[0]~a[9]for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");m=a[0];for(i=1;i<10;i++)m=max(m,a[i]);//max函數(shù)返回的值取代m原值printf("最大值是

%d\n",m);}intmax(intx,inty)//定義max函數(shù){return(x>y?x:y);}//返回x和y中的大者任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)任務(wù)總結(jié):數(shù)組元素也可以用作函數(shù)實(shí)參,其用法與變量相同,向形參傳遞數(shù)組元素的值。此外,數(shù)組名也可以作實(shí)參和形參,傳遞的是數(shù)組第一個(gè)元素的地址。任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)任務(wù)拓展:用選擇法對(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è)。)任務(wù)22找出數(shù)組中的最大值——數(shù)組作為函數(shù)參數(shù)任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域任務(wù)描述:請(qǐng)編程實(shí)現(xiàn):輸入長(zhǎng)方體的長(zhǎng)、寬、高,求其體積及三個(gè)側(cè)面的側(cè)面積。案例分析:由于return語(yǔ)句只能從函數(shù)中帶回一個(gè)返回值,所以體積和三個(gè)側(cè)面積不可能都由return語(yǔ)句返回利用全局變量的特點(diǎn)來(lái)解決這個(gè)問題使用return語(yǔ)句返回一個(gè)數(shù)值(體積)其他數(shù)據(jù)則通過全局變量來(lái)傳遞任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域知識(shí)準(zhǔn)備:7.6函數(shù)的作用域局部變量局部變量是在函數(shù)內(nèi)部聲明的變量,這包括函數(shù)的形參。它們僅在包含該變量聲明的函數(shù)中才起作用,在函數(shù)外不能使用這些變量。另外在復(fù)合語(yǔ)句內(nèi)部定義的變量,其作用范圍僅限于復(fù)合語(yǔ)句內(nèi)部。任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域知識(shí)準(zhǔn)備:7.6函數(shù)的作用域2.全局變量在函數(shù)外面定義的變量稱為外部變量,也叫全局變量。有時(shí)候,可能需要在多個(gè)函數(shù)中使用同一個(gè)變量,那么就會(huì)用到全局變量,因?yàn)槿肿兞靠梢员槐境绦蛑衅渌瘮?shù)所共用。任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域知識(shí)準(zhǔn)備:7.7變量的存儲(chǔ)類別根據(jù)變量的作用域(空間角度)的不同,可將變量分為局部變量和全局變量。根據(jù)變量的生存期(時(shí)間角度)的不同,可將變量分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。1.自動(dòng)變量在代碼塊中聲明的變量默認(rèn)的存儲(chǔ)類型就是自動(dòng)變量(auto),使用關(guān)鍵字auto來(lái)描述。任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域知識(shí)準(zhǔn)備:7.7變量的存儲(chǔ)類別2.寄存器變量寄存器是存在于CPU內(nèi)部的,CPU對(duì)寄存器的讀取和存儲(chǔ)可以說幾乎沒有任何延時(shí)。將一個(gè)變量聲明為寄存器變量(register),那么該變量就有可能被存放于CPU的寄存器中。3.靜態(tài)局部變量如果使用static來(lái)聲明局部變量,那么就可以將局部變量指定為靜態(tài)局部變量(static)。static使得局部變量具有靜態(tài)存儲(chǔ)期,所以它的生存期與全局變量一樣,存儲(chǔ)空間直到程序結(jié)束才釋放。任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域知識(shí)準(zhǔn)備:7.7變量的存儲(chǔ)類別4.外部變量如果外部變量不在文件的開頭定義,其有效的作用范圍只限于定義處到文件結(jié)束。在定義點(diǎn)之前的函數(shù)不能引用該外部變量。如果由于某種考慮,在定義點(diǎn)之前的函數(shù)需要引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量作“外部變量聲明”,表示把該外部變量的作用域擴(kuò)展到此位置。任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域任務(wù)實(shí)施:任務(wù)23求長(zhǎng)方體體積及側(cè)面積——函數(shù)的作用域#include<stdio.h>ints1,s2,s3;intvs(inta,intb,intc){ intv; v=a*b*c; s1=a*b;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論