版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
函數(shù)《計(jì)算機(jī)軟件基礎(chǔ)》01.函數(shù)的概念02.函數(shù)的調(diào)用03.局部變量和全局變量主要內(nèi)容04.函數(shù)的遞歸調(diào)用05.函數(shù)應(yīng)用舉例本章重點(diǎn)難點(diǎn)本章重點(diǎn):函數(shù)的定義和調(diào)用方法;實(shí)參與形參的對(duì)應(yīng)關(guān)系;調(diào)用函數(shù)時(shí)數(shù)據(jù)的傳遞方式;變量的作用域;變量的生存期;遞歸調(diào)用過(guò)程;編寫含有自定義函數(shù)、遞歸函數(shù)的程序。本章難點(diǎn):調(diào)用函數(shù)時(shí)數(shù)據(jù)的傳遞方式;遞歸調(diào)用過(guò)程;編寫含有自定義函數(shù)、遞歸函數(shù)的程序。模塊化程序設(shè)計(jì)思想:
為了降低開發(fā)大規(guī)模軟件的復(fù)雜度,往往需將大規(guī)模的問(wèn)題分解為若干個(gè)小問(wèn)題,小問(wèn)題再分解為更小的問(wèn)題。模塊:一個(gè)具有獨(dú)立功能的程序段。函數(shù)是C語(yǔ)言中模塊化程序設(shè)計(jì)的最小單位01函數(shù)的概念函數(shù)是構(gòu)成程序的基本模塊1.函數(shù)的分類1)庫(kù)函數(shù):要用預(yù)編譯命令“#include”將指定頭文件。輸入、輸出類。例如,程序中凡是出現(xiàn)getchar()、putchar()、printf()、scanf()、gets()、puts()等函數(shù)時(shí),在程序的開頭必須寫上預(yù)編譯命令:
#include"stdio.h"或#include<stdio.h>字符串處理類。例如,程序中出現(xiàn)strlen()、strcpy()、strcat()、strcmp()等函數(shù)時(shí),在程序的開頭必須寫上預(yù)編譯命令:#include"string.h"或#include<string.h>數(shù)學(xué)類。例如,程序中出現(xiàn)fabs()、sqrt()、sin()、cos()等數(shù)學(xué)類函數(shù)時(shí),在程序的開頭必須寫上預(yù)編譯命令:#include"math.h"或#include<math.h>2)用戶自定義函數(shù)函數(shù)在使用之前必須定義。函數(shù)定義的基本格式為:返回值類型函數(shù)名(類型1形式參數(shù)1,類型2形式參數(shù)2,…) /*函數(shù)頭部*/{/*花括號(hào){}之間為函數(shù)體,花括號(hào)為函數(shù)體的定界符*/
說(shuō)明部分;/*對(duì)函數(shù)體內(nèi)所有變量和即將要調(diào)用的函數(shù)作聲明*/
語(yǔ)句部分;/*可執(zhí)行語(yǔ)句序列*/}函數(shù)可以分為:有參函數(shù),無(wú)參函數(shù)。C語(yǔ)言不允許函數(shù)的嵌套定義。2.函數(shù)的定義02函數(shù)的調(diào)用函數(shù)的使用1.函數(shù)調(diào)用和實(shí)參一個(gè)完整的C程序可由一個(gè)主函數(shù)main()組成,或由一個(gè)主函數(shù)和若干子函數(shù)構(gòu)成。主函數(shù)可以調(diào)用子函數(shù),子函數(shù)不能調(diào)用主函數(shù)。子函數(shù)之間可以相互調(diào)用。若A函數(shù)調(diào)用B函數(shù),一般情況下,B函數(shù)在A的前面定義。若要將B放在A的后面定義,則需要在A函數(shù)體的說(shuō)明部分對(duì)B進(jìn)行聲明。形參和實(shí)參總的來(lái)講是一一對(duì)應(yīng)的關(guān)系,具體是:①個(gè)數(shù)相等。②順序一致。③類型相符(或?qū)崊⒖梢越o形參正確的賦值)……f1();f2();……main()……f3()………………f1()f2()…………f3()2.函數(shù)調(diào)用和返回值1)無(wú)返回值函數(shù)的調(diào)用若函數(shù)中return語(yǔ)句后面無(wú)表達(dá)式或者函數(shù)無(wú)return語(yǔ)句,這時(shí)函數(shù)沒(méi)有返回值。沒(méi)有返回值的函數(shù),其類型定義空類型,用類型名void表示。intmain(){voidmax(int,int); …max(a,b); /*無(wú)返回值函數(shù)調(diào)用*/return0;} /*無(wú)返回值函數(shù)定義*/voidmax(intx,inty){}對(duì)函數(shù)max的調(diào)用聲明兩個(gè)形式參數(shù)x,y兩個(gè)實(shí)際參數(shù)a,b2)有返回值函數(shù)的調(diào)用若函數(shù)中有“return(表達(dá)式);”語(yǔ)句或“return表達(dá)式;”語(yǔ)句,則該函數(shù)一定有返回值。return后面表達(dá)式值的類型應(yīng)以所在函數(shù)返回值類型為準(zhǔn)。當(dāng)函數(shù)類型為int時(shí),可以不寫,系統(tǒng)默認(rèn)為int。intmain(){intmax(int,int); …c=max(a,b);/*有返回值函數(shù)調(diào)用*/return0;} /*無(wú)返回值函數(shù)定義*/intmax(intx,inty){…returnz;}對(duì)函數(shù)max的調(diào)用聲明兩個(gè)形式參數(shù)x,y兩個(gè)實(shí)際參數(shù)a,b返回值z(mì)3.函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞數(shù)據(jù)傳遞方式有4種:?jiǎn)蜗蛑祩鬟f方式地址傳遞方式返回值傳遞方式全局變量傳遞方式1)單向值傳遞方式單向值傳遞方式是調(diào)用函數(shù)時(shí),將實(shí)參值計(jì)算出來(lái)賦給對(duì)應(yīng)的形參,即數(shù)據(jù)只能從實(shí)參單向傳給形參。單向值傳遞的調(diào)用過(guò)程①形參和實(shí)參各占一個(gè)獨(dú)立的存儲(chǔ)空間。②形參的存儲(chǔ)空間是在函數(shù)調(diào)用時(shí)才分配的,調(diào)用前是不占存儲(chǔ)的。調(diào)用開始,系統(tǒng)為形參開辟一個(gè)臨時(shí)存儲(chǔ)區(qū),然后將各實(shí)參值傳給對(duì)應(yīng)的形參,這時(shí)形參就得到了實(shí)參的值。③函數(shù)執(zhí)行完返回時(shí),形參的臨時(shí)存儲(chǔ)區(qū)被回收。單向值傳遞調(diào)用的特點(diǎn)①函數(shù)中對(duì)形參的操作不會(huì)影響到主調(diào)函數(shù)中的實(shí)參。②單向值傳遞時(shí)實(shí)參可以是常數(shù)、已有值的變量和表達(dá)式,而形參一般是變量。2)地址傳遞方式在函數(shù)調(diào)用中,把實(shí)參數(shù)組的起始地址傳給形參,這樣兩個(gè)數(shù)組就共占同一段內(nèi)存空間(形參數(shù)組是不分配內(nèi)存的)。傳遞了數(shù)組的首地址后,被調(diào)函數(shù)就能夠準(zhǔn)確的知道該數(shù)組的存儲(chǔ)位置。形參數(shù)組中各元素值如發(fā)生變化會(huì)使這個(gè)實(shí)參數(shù)組的值同時(shí)發(fā)生變化。也稱為雙向傳遞,即不僅能將主調(diào)函數(shù)中的數(shù)據(jù)帶到被調(diào)函數(shù),而且能把被調(diào)函數(shù)變化了的數(shù)據(jù)帶回主調(diào)函數(shù)。注意:
①以一維數(shù)組名作參數(shù)時(shí),實(shí)參數(shù)組必須定義為具有確定長(zhǎng)度的數(shù)組,而形參可以不定義長(zhǎng)度。
②使用形參數(shù)組時(shí),其下標(biāo)不要超過(guò)實(shí)參數(shù)組的長(zhǎng)度。
③實(shí)參數(shù)組與相應(yīng)的形參數(shù)組類型應(yīng)一致。03局部變量和全局變量作用域:變量在什么范圍內(nèi)有效根據(jù)作用域不同,分為:局部變量全局變量1.局部變量在函數(shù)內(nèi)定義,只在本函數(shù)范圍內(nèi)有效的變量。局部變量只是當(dāng)其所在的函數(shù)被調(diào)用時(shí)才具有確定的存儲(chǔ)空間主函數(shù)main中定義的局部變量只在主函數(shù)中有效,主函數(shù)不能使用其他函數(shù)中定義的局部變量。不同函數(shù)中可以使用相同的變量名,但它們有各自的作用域,互不干擾。作用:增強(qiáng)了函數(shù)模塊的獨(dú)立性。如例4-7。2.全局變量在函數(shù)外部定義的量,可以為程序中各個(gè)函數(shù)所引用,其作用域是整個(gè)程序。從程序運(yùn)行開始起就占據(jù)內(nèi)存,僅在程序結(jié)束時(shí)才將其釋放。優(yōu)點(diǎn):使函數(shù)之間的數(shù)據(jù)交換更容易,也更高效。缺點(diǎn):全局變量在程序的執(zhí)行過(guò)程中一直占用存儲(chǔ)空間,降低了空間利用率。各函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹?,程序易出錯(cuò),降低了程序的可讀性。全局變量的作用牽制了各個(gè)函數(shù),降低了各函數(shù)之間的相對(duì)獨(dú)立性。建議程序設(shè)計(jì)過(guò)程中盡量不使用全局變量。如例4-9。3.變量的生存期變量的生存期是指變量從生產(chǎn)到被撤銷的時(shí)間段,實(shí)際上就是變量占用內(nèi)存的時(shí)間。
變量的生存期是由變量的存儲(chǔ)類型聲明的。其一般聲明方式如下:存儲(chǔ)類型數(shù)據(jù)類型變量名表;C語(yǔ)言中提供的存儲(chǔ)類型主要有四種:auto(自動(dòng)變量)register(寄存器變量)static(靜態(tài)變量)extern(外部變量)1)用auto聲明的自動(dòng)變量變量定義時(shí)缺少存儲(chǔ)類型說(shuō)明則系統(tǒng)默認(rèn)為自動(dòng)變量。例如:autointa=2,b=3;等價(jià)于:inta=2,b=3;特點(diǎn):函數(shù)調(diào)用結(jié)束,該種變量即被釋放,屬于動(dòng)態(tài)存儲(chǔ)方式。2)用register聲明的寄存器變量寄存器是CPU內(nèi)部的一種容量有限但速度極快的存儲(chǔ)器。
寄存器的存取速度高于內(nèi)存的存取速度?,F(xiàn)代編譯程序能自動(dòng)優(yōu)化程序,自動(dòng)把普通變量?jī)?yōu)化為寄存器變量,并且可以忽略用戶的register指定,所以一般無(wú)需特別聲明變量為寄存器變量。3)用extern聲明的外部變量如果在所有函數(shù)之外定義的變量沒(méi)有指定其存儲(chǔ)類別,那么它就是一個(gè)外部變量。外部變量是全局變量。
沒(méi)有顯示初始化的外部變量由編譯程序自動(dòng)初始化為0。file2.cexterna;print(){……}modify(){……c=a*2;}file1.cinsert(){
externa;……
}inta;query(){……}/*在定義點(diǎn)之前*//*在其他文件中*/4)用static聲明的靜態(tài)變量這種變量的值在函數(shù)結(jié)束后占用的存儲(chǔ)空間不回收,在下一次調(diào)用該函數(shù)時(shí),變量的值仍保持上一次退出函數(shù)前所擁有的值。優(yōu)點(diǎn):提高了程序的運(yùn)行效率。缺點(diǎn):對(duì)于相同的輸入?yún)?shù)輸出不同的結(jié)果,因此建議盡量少用靜態(tài)局部變。C語(yǔ)言規(guī)定在定義局部靜態(tài)變量時(shí),如不賦初值,自動(dòng)賦初值,數(shù)值型變量則賦0值,字符型變量賦空字符。04函數(shù)的遞歸調(diào)用調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。函數(shù)是可以嵌套調(diào)用的,如下圖所示,main可以調(diào)用函數(shù)A,函數(shù)A繼續(xù)調(diào)用函數(shù)B。main函數(shù){............調(diào)用函數(shù)A;............}函數(shù)A{............調(diào)用函數(shù)B;............}函數(shù)B{..............................}調(diào)用返回調(diào)用返回求n的階乘n!
longfactn(4){longfac;......fac=4*factn(3);returnfac;}返回6longfactn(3){longfac;......fac=3*factn(2);returnfac;}返回2longfactn(2){longfac;......fac=2*factn(1);returnfac;}返回1longfactn(1){longfac;if(n==1)return1;......}intmain(){…w=factn(4);printf(“4!=%1d\n”,w);return0;}返回24以求4!為例,遞歸調(diào)用執(zhí)行過(guò)程如下:當(dāng)?main?函數(shù)開始調(diào)用?factn(4)?時(shí),開始遞歸過(guò)程,依次調(diào)用?factn(3)?,?factn(2?),?factn(1)?。這個(gè)過(guò)程就是函數(shù)的嵌套調(diào)用,比較容易理解。longfactn(4){longfac;......fac=4*factn(3);returnfac;}返回6longfactn(3){longfac;......fac=3*factn(2);returnfac;}返回2longfactn(2){longfac;......fac=2*factn(1);returnfac;}返回1longfactn(1){longfac;if(n==1)return1;......}intmain(){…w=factn(4);printf(“4!=%1d\n”,w);return0;}返回24以求4!為例,遞歸調(diào)用執(zhí)行過(guò)程如下:最重要的是當(dāng)執(zhí)行?factn(1)?時(shí),因?yàn)闈M足?n==1?,執(zhí)行?return(1)?,遞歸調(diào)用被終止,但程序沒(méi)有結(jié)束。它將返回值1傳遞給調(diào)用它的?factn(2)?,以此類推,最終?factn(4)?將計(jì)算結(jié)果24返回給?main?函數(shù),得到期望的結(jié)果。longfactn(4){longfac;......fac=4*factn(3);returnfac;}返回6longfactn(3){longfac;......fac=3*factn(2);returnfac;}返回2longfactn(2){longfac;......fac=2*factn(1);returnfac;}返回1longfactn(1){longfac;if(n==1)return1;......}intmain(){…w=factn(4);printf(“4!=%1d\n”,w);return0;}返回24以求4!為例,遞歸調(diào)用執(zhí)行過(guò)程如下:總而言之,調(diào)用的過(guò)程容易被理解,但是初學(xué)者往往容易忽視返回的過(guò)程。遞歸優(yōu)點(diǎn):思路簡(jiǎn)潔清晰(因?yàn)榫唧w的實(shí)施過(guò)程不需要編程者
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度數(shù)據(jù)中心機(jī)房租賃及IT設(shè)備租賃合同3篇
- 西安高新科技職業(yè)學(xué)院《非線性編輯》2023-2024學(xué)年第一學(xué)期期末試卷
- 溫州醫(yī)科大學(xué)《民法前沿問(wèn)題專論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度在線醫(yī)療咨詢用戶隱私保護(hù)合同3篇
- 二零二五年教室租賃及教育資源共享與校園環(huán)境維護(hù)協(xié)議3篇
- 二零二五年度道路交通事故預(yù)防責(zé)任合同書范本2篇
- 2024版建筑工程一切險(xiǎn)保險(xiǎn)合同
- 2024股權(quán)轉(zhuǎn)讓協(xié)議完整模板
- 唐山幼兒師范高等專科學(xué)?!渡镄畔W(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版光伏發(fā)電站鋪裝工程合同
- 綠色簡(jiǎn)潔商務(wù)匯總報(bào)告PPT模板課件
- 下肢皮牽引護(hù)理PPT課件(19頁(yè)P(yáng)PT)
- 臺(tái)資企業(yè)A股上市相關(guān)資料
- 電 梯 工 程 預(yù) 算 書
- 參會(huì)嘉賓簽到表
- 形式發(fā)票格式2 INVOICE
- 2.48低危胸痛患者后繼治療評(píng)估流程圖
- 人力資源管理之績(jī)效考核 一、什么是績(jī)效 所謂績(jī)效簡(jiǎn)單的講就是對(duì)
- 山東省醫(yī)院目錄
- 云南地方本科高校部分基礎(chǔ)研究
- 廢品管理流程圖
評(píng)論
0/150
提交評(píng)論