函數(shù)與模塊設(shè)計_第1頁
函數(shù)與模塊設(shè)計_第2頁
函數(shù)與模塊設(shè)計_第3頁
函數(shù)與模塊設(shè)計_第4頁
函數(shù)與模塊設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

函數(shù)與模塊設(shè)計第一頁,共二十七頁,2022年,8月28日第七章

函數(shù)與模塊設(shè)計學(xué)習(xí)目標(biāo)理解模塊化是程序設(shè)計的重要原則,函數(shù)是C語言實(shí)現(xiàn)模塊化的途徑掌握C語言中函數(shù)的定義形式,能夠?qū)崿F(xiàn)自定義函數(shù)理解函數(shù)調(diào)用過程中函數(shù)原型的作用掌握函數(shù)調(diào)用過程中實(shí)際參數(shù)與形式參數(shù)的值傳遞規(guī)則理解函數(shù)返回值的和函數(shù)類型之間的關(guān)系理解C語言中函數(shù)調(diào)用機(jī)制理解C語言中的作用域規(guī)則,理解變量的存儲類型第二頁,共二十七頁,2022年,8月28日7.1函數(shù)概述函數(shù)是模塊化的基本單位主調(diào)函數(shù)與被調(diào)函數(shù)程序、源文件與函數(shù)關(guān)系程序中各模塊關(guān)系第三頁,共二十七頁,2022年,8月28日7.1函數(shù)概述模塊在C語言中主要是通過函數(shù)實(shí)現(xiàn)。模塊的組織是通過函數(shù)間的調(diào)用而完成。一個可實(shí)際運(yùn)行的程序可由一個或多個源程序文件組成,其中有且只能有一個源程序文件中包含main函數(shù)。第四頁,共二十七頁,2022年,8月28日7.2函數(shù)分類函數(shù)按用戶使用的角度來分可分為標(biāo)準(zhǔn)函數(shù):系統(tǒng)定義提供的函數(shù),無需用戶定義,直接使用。自定義函數(shù):用戶根據(jù)自己解決問題的需要定義的函數(shù)。函數(shù)的返回值可分為有返回值無返回值函數(shù)的參數(shù)形式來分可分為無參函數(shù):函數(shù)定義時無需給出任何參數(shù),引用時也不用指定參數(shù)。有參函數(shù):函數(shù)定義時需要給出參數(shù),這個參數(shù)參與函數(shù)體中的數(shù)值運(yùn)算。從是否可被其他編譯單位調(diào)用的角度函數(shù)可分為外部函數(shù)內(nèi)部函數(shù)第五頁,共二十七頁,2022年,8月28日7.2函數(shù)的聲明、定義與調(diào)用函數(shù)聲明函數(shù)定義函數(shù)調(diào)用第六頁,共二十七頁,2022年,8月28日函數(shù)聲明函數(shù)聲明格式格式:函數(shù)返回值類型名函數(shù)名(形式參數(shù)表);示例一:intInc(intx);示例二:intAdd(intx,inty);示例三:voidSwap(intx,inty);示例四:voidCompute();函數(shù)聲明的目的將函數(shù)的具體形式呈現(xiàn)給使用它的函數(shù)或模塊一般出現(xiàn)在頭文件中第七頁,共二十七頁,2022年,8月28日注意:1、函數(shù)一般會有一個返回值,如果沒有值函數(shù)沒有返回值,可以用無值型(void)來表示函數(shù)的返回值類型。2、函數(shù)聲明的列表中也可以省略形參名稱,但不建議這樣定義。如:intadd(int,int);

voidswap(int,int);3、函數(shù)如果沒有形參,函數(shù)聲明時可以只有括號,但括號不能省略,也可以用void來表示該函數(shù)沒有參數(shù)。如:intcopmute();或intcompute(void);4、在編程中,一般會先定義頭文件,將該程序用到的所有函數(shù)都聲明在該頭文件中,如果沒有放在頭文件中,那么可以直接放在#include之后,也可以直接放在被調(diào)函數(shù)中。5、函數(shù)聲明后應(yīng)該加分號。第八頁,共二十七頁,2022年,8月28日函數(shù)定義函數(shù)定義:實(shí)現(xiàn)該函數(shù)函數(shù)的定義格式:數(shù)據(jù)類型函數(shù)名([形參表]){

函數(shù)體;}說明:函數(shù)體是一個程序段,也可以是一個復(fù)合語句,函數(shù)可長可短。函數(shù)的定義類型必須和函數(shù)聲明的完全一致,函數(shù)聲明后不加分號。形參表可以沒有參數(shù),稱無參函數(shù),否則為有參函數(shù),如果出現(xiàn)多個參數(shù)應(yīng)該用;隔開。第九頁,共二十七頁,2022年,8月28日函數(shù)定義有些情況下,我們需要先定義一個空的函數(shù)待以后實(shí)現(xiàn)其具體功能,這樣的函數(shù)定義格式如下:類型說明函數(shù)名(){};自定義函數(shù)名和變量名相似,一旦定義函數(shù),主函數(shù)就可以通過函數(shù)名調(diào)用該函數(shù)了。函數(shù)的數(shù)據(jù)類型主要是指函數(shù)有返回值的數(shù)據(jù)類型,對于無確切返回值的函數(shù)通常用void來定義。函數(shù)的返回值:被調(diào)函數(shù)向主函數(shù)通過return語句返回一個值,且只能返回一個值。Return語句的格式為:

Return(表達(dá)式);或return表達(dá)式;

Return語句的作用有兩個:一個結(jié)束函數(shù)的運(yùn)行,而是帶著返回值返回主函數(shù)。第十頁,共二十七頁,2022年,8月28日函數(shù)定義示例一自定義函數(shù)Add()

求兩個整數(shù)之和intAdd(intx,inty){intz;

z=x+y;returnz;}第十一頁,共二十七頁,2022年,8月28日函數(shù)定義示例二自定義函數(shù)

Cmp()比較兩個整型數(shù)據(jù)x、y的大小,如果x等于y函數(shù)返回0,如果x大于y返回1,如果x小于y返回–1intCmp(intx,inty){intz;if(x==y)z=0;elseif(x>y)z=1;elsez=–1;returnz;}第十二頁,共二十七頁,2022年,8月28日函數(shù)定義示例三編寫函數(shù)實(shí)現(xiàn)交換兩個整型數(shù)據(jù)值并將交換前和交換后的值輸出voidSwap(intx,inty){inttemp;

printf(”x=%d,y=%d\n”,x,y);

temp=x;

x=y;

y=temp;

printf(”x=%d,y=%d\n”,x,y);return;/*此語句可以省略*/}第十三頁,共二十七頁,2022年,8月28日函數(shù)調(diào)用函數(shù)調(diào)用的一般格式為:函數(shù)名([實(shí)參列表])按函數(shù)在程序中出現(xiàn)的位置來分,有兩種函數(shù)調(diào)用方式:

1、函數(shù)語句把函數(shù)作為一條語句,主函數(shù)不要求被調(diào)函數(shù)返回值,只要求被調(diào)函數(shù)完成一步操作。如:printfstar();2、函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個表達(dá)式中,要求函數(shù)返回一個確定的值以參加表達(dá)式的運(yùn)算。如:z=2*max(x,y);第十四頁,共二十七頁,2022年,8月28日函數(shù)調(diào)用注意:當(dāng)C語言只有一個源程序時,函數(shù)的位置會影響編譯系統(tǒng)對源文件的編譯。被調(diào)函數(shù)放在調(diào)用函數(shù)之前時,調(diào)用函數(shù)中可以不加被調(diào)函數(shù)的申明;被調(diào)函數(shù)放在調(diào)用函數(shù)之后時,調(diào)用函數(shù)中要申明被調(diào)函數(shù),或者直接在函數(shù)的外部做函數(shù)申明,則各個主調(diào)函數(shù)中不必對被調(diào)函數(shù)再做申明了。第十五頁,共二十七頁,2022年,8月28日函數(shù)參數(shù)與返回值形參和實(shí)參形參:在函數(shù)定義時寫在函數(shù)名的后面的參數(shù)。實(shí)參:在調(diào)用函數(shù)時寫在函數(shù)名后面的參數(shù)。形式函數(shù)與實(shí)際參數(shù)形式參數(shù)在函數(shù)調(diào)用發(fā)生時獲得內(nèi)存空間,進(jìn)而接受相應(yīng)實(shí)際參數(shù)的值函數(shù)調(diào)用發(fā)生前計算每個實(shí)際參數(shù)的值實(shí)際參數(shù)與形式參數(shù)在數(shù)目、類型、順序上保持一致或賦值兼容實(shí)際參數(shù)僅將值拷貝給形式參數(shù),這是一個單向值傳遞過程,函數(shù)內(nèi)部對形式參數(shù)值的改變不會對實(shí)際參數(shù)產(chǎn)生任何影響返回值使用return語句返回值,沒有返回值則可以省略第十六頁,共二十七頁,2022年,8月28日函數(shù)調(diào)用示例編寫程序,在main()

函數(shù)中使用

Add()函數(shù)將從鍵盤輸入的兩個整數(shù)相加并打印和#include<stdio.h>intAdd(intx,inty);注意申明語句的位置voidmain(){inta,b,sum;

printf(”Inputaandb:”);scanf(”%d%d”,&a,&b);

sum=Add(a,b);

printf(”a=%d,b=%d,a+b=%d”,a,b,sum);}intAdd(intx,inty){intz;z=x+y;returnz;}第十七頁,共二十七頁,2022年,8月28日函數(shù)的嵌套調(diào)用

一個程序可能由一個主函數(shù)和多個子函數(shù)組成,主函數(shù)調(diào)用某個函數(shù),該函數(shù)又調(diào)用其他的函數(shù),函數(shù)之間的調(diào)用形成一層一層的關(guān)系。在一個被調(diào)用的函數(shù)中再調(diào)用其他函數(shù)稱為函數(shù)的嵌套。第十八頁,共二十七頁,2022年,8月28日嵌套調(diào)用舉例求1?。??。??。玭!,n由鍵盤輸入。#include<stdio.h>doublefac(intn){doublej=1.0;inti;for(i=1;i<=n;i++)j*=i;returnj;}doubleSfac(intn){doubles=0;inti;for(i=1;i<=n;i++)s+=fac(i);//fac函數(shù)在本函數(shù)之前定義,不需聲明returns;}第十九頁,共二十七頁,2022年,8月28日嵌套調(diào)用舉例main(){doubles;intn;printf("\ninputn:");scanf("%d",&n);s=Sfac(n);/*Sfac函數(shù)在本函數(shù)之前定義,不需聲明*/printf("\n1!+2!+...+%d!=%f",n,s);}第二十頁,共二十七頁,2022年,8月28日變量的作用域和存儲類型變量定義的三種地方函數(shù)內(nèi)部函數(shù)外部函數(shù)形參形式第二十一頁,共二十七頁,2022年,8月28日變量的作用域和存儲類型內(nèi)部變量定義只能出現(xiàn)在函數(shù)的開始的位置作用范圍(即生存期)從定義到該函數(shù)的結(jié)束外部變量定義出現(xiàn)在所有函數(shù)外作用范圍從定義到程序結(jié)束

floata,b;//外部變量

sub1(intx){inti;…}inta1,b1;//外部變量

sub2(inty){intj;…}main(){…}第二十二頁,共二十七頁,2022年,8月28日變量的作用域和存儲類型內(nèi)部變量和外部變量區(qū)別#include<stdio.h>inta=1,b=2;//外部變量a,bvoidfac(){inta=3;//內(nèi)部變量a與外部變量a同名

printf("\nfac:a=%d,b=%d\n",a,b);}main(){intb=4;//內(nèi)部變量b與外部變量b同名

fac();printf("main:a=%d,b=%d\n",a,b);}第二十三頁,共二十七頁,2022年,8月28日變量的存儲類型自動型(auto)寄存器類型(register)靜態(tài)變量類型(static)外部變量類型(extern)第二十四頁,共二十七頁,2022年,8月28日應(yīng)用舉例編寫函數(shù)LeapYear,判斷參數(shù)y是否為閏年,若是返回1,否則返回0。intLeapYear(inty){if(y%4==0&&y%100!=0||y%400==0)return1;elsereturn0;}第二十五頁,共二十七頁,2022年,8月28日應(yīng)用舉例編程求S=a+aa+aaa+……+aa…aa(最后一項含n個a)的值,其中a是一個數(shù)字。例如,若a=2,n=5時,S=2+22+222+2222+22222,其值應(yīng)為24690。longsub(inta,intn){longm=0;inti;for(i=1;i<=n;i++)m=m*10+a;//循環(huán)n次,每次增加1位a值,

returnm;}main(){intA,N,i;longs=0;printf("\ninputA,N:");scanf("%d%d",&A,&N);for(i=1;i<=N;i++)s+=sub(A,i);printf("S=%ld\n",s);}第二十六頁,共二十七頁,2022年,8月28日應(yīng)用舉例編寫兩個函數(shù),分別用來求兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù),主函數(shù)中,輸入這兩個正整數(shù),通過函數(shù)調(diào)用求出結(jié)果并輸出。

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論