第三章 模塊化程序設(shè)計(jì)01_第1頁
第三章 模塊化程序設(shè)計(jì)01_第2頁
第三章 模塊化程序設(shè)計(jì)01_第3頁
第三章 模塊化程序設(shè)計(jì)01_第4頁
第三章 模塊化程序設(shè)計(jì)01_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章模塊化程序設(shè)計(jì)濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第1頁3.1模塊化程序設(shè)計(jì)思想3.2函數(shù)定義3.3函數(shù)調(diào)用3.4函數(shù)的原型與聲明3.5函數(shù)的嵌套與遞歸3.6庫函數(shù)3.7變量的作用域與存儲類型3.8指針與函數(shù)濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第2頁#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}voidmain(){inta,b,c;scanf("%d%d",&a,&b);

c=max(a,b);printf("max=%d\n",c);}一個完整的函數(shù)一個完整的函數(shù)自定義函數(shù)首部自定義函數(shù)體教材第3頁例1.3函數(shù)首部注意:①程序永遠(yuǎn)從main函數(shù)開始。②max(a,b)是什么?③自定義函數(shù)max()函數(shù)體函數(shù)-模塊化程序設(shè)計(jì)的體現(xiàn)濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第3頁mainabcdefghi結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn):自頂向下、逐步細(xì)化、模塊化C語言程序的基本單位是函數(shù)有且至少有一個函數(shù)main()結(jié)構(gòu)化程序由三種基本結(jié)構(gòu)組成:A模塊B模塊順序結(jié)構(gòu)選擇結(jié)構(gòu)判斷條件成立嗎?成立

不成立A模塊B模塊循環(huán)結(jié)構(gòu)循環(huán)體

循環(huán)條件滿足嗎?3.1模塊化程序設(shè)計(jì)的思想什么是模塊化程序設(shè)計(jì)?

模塊化程序設(shè)計(jì)就是將一個復(fù)雜的大問題,分解為一個個獨(dú)立的簡單的小問題(即模塊),分別解決簡單的小問題,進(jìn)而解決復(fù)雜的大問題。在C語言中,這些獨(dú)立的簡單的模塊就是函數(shù)。

濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第4頁功能分解是一個自頂向下、逐步求精的過程。必須有且只能有一個名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始,在main中結(jié)束函數(shù)不能嵌套定義,可以嵌套調(diào)用(即使用)。階乘模塊fac(n)的實(shí)現(xiàn):

f=1; for(i=1;i<=n;i++) { f=f*i; }濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第5頁例3-1:計(jì)算fac(k)fac(m)+fac(n)mk只需實(shí)現(xiàn)模塊fac()即可#include<stdio.h>//普通設(shè)計(jì)voidmain(){ inti,k,m,n; floatx,y,z; scanf("%d%d%d",&k,&m,&n);

x=1;//fac(k) for(i=1;i<=k;i++) x=x*i;

y=1;//fac(m) for(i=1;i<=m;i++) y=y*i;

z=1;//fac(n) for(i=1;i<=n;i++) z=z*i;

printf("%f\n",x/(y+z));}濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第6頁

x=fac(k);//調(diào)用函數(shù),并賦值給xy=fac(m);

//調(diào)用函數(shù),并賦值給y

z=fac(n);

//調(diào)用函數(shù),并賦值給zfloatfac(intn){ inti; floatf=1; for(i=1;i<=n;i++) f=f*i; returnf;}模塊即函數(shù)3.2函數(shù)定義濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第7頁在C語言中,函數(shù)分為以下兩種:(1)

庫函數(shù)是由系統(tǒng)提供的,用戶不用定義,只需用#include包含其頭文件,即可直接使用。如:printf()、scanf()、sqrt()等。(2)自定義函數(shù):這種函數(shù)是根據(jù)具體需求編寫的,以完成相應(yīng)的功能。函數(shù)定義就是編寫實(shí)現(xiàn)函數(shù)功能的程序模塊。函數(shù)使用之前必須先定義后調(diào)用。

本章學(xué)習(xí)的內(nèi)容voidmain(){ intk,m,n; floatx,y,z; scanf("%d%d%d",&k,&m,&n);

x=fac(k); y=fac(m); z=fac(n);

printf("%f\n",x/(y+z)); }濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第8頁函數(shù)定義格式:

函數(shù)返回值類型函數(shù)名(形參表){函數(shù)體;}#include<stdio.h>floatfac(intn){

inti; floatf=1; for(i=1;i<=n;i++) f=f*i; returnf;}函數(shù)調(diào)用格式:函數(shù)名(實(shí)參表);例如:x=fac(k);例如:floatfac(intn){…}01二月2023濟(jì)南大學(xué)·信息學(xué)院1、函數(shù)定義的形式:函數(shù)類型函數(shù)名(數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2,……){

其它變量聲明部分語句部分}2、說明:①、函數(shù)由兩部分構(gòu)成:函數(shù)首部和函數(shù)體;②、函數(shù)返回值類型:即函數(shù)值(返回值)的類型

若函數(shù)無返回值,函數(shù)定義時應(yīng)寫上void③、函數(shù)名的命名規(guī)則與變量一樣,同一個文件中函數(shù)名不能重復(fù)!intmax(intx,inty){

……}voidmain(){

……}濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第10頁④、參數(shù)(形參)列表:需說明參數(shù)的個數(shù)和類型,多個參數(shù)間用逗號間隔,也可以無參數(shù),但括號不能省。書寫格式

:

每一個形參都要寫上數(shù)據(jù)類型和參數(shù)名;參數(shù)之間以逗號分隔,無參數(shù)時函數(shù)值返回值一般寫上void

。函數(shù)名后的括號一定要有。floataverage(floata1,floata2,floata3){……}形參不能寫成:floata1,a2,a3

×濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第11頁⑤、函數(shù)體:由左右花括號括起來的部分。包括說明部分和語句部分,是實(shí)現(xiàn)函數(shù)的核心部分

說明部分:定義函數(shù)內(nèi)除形參以外的其它變量等;

語句部分:實(shí)現(xiàn)函數(shù)功能的執(zhí)行語句;函數(shù)返回值類型函數(shù)名(形參表){

變量說明部分;

語句部分;}注意:不要在函數(shù)體中再次定義參數(shù)列表中出現(xiàn)的變量。濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第12頁C語言不允許在一個函數(shù)內(nèi)定義另一個函數(shù),即不能嵌套定義。所有函數(shù)在書寫時都是平行的,通常寫在main上方。main(){floata,b,s;scanf(“%f%f”,&a,&b);

s=area(a,b);printf("s=%f",s);}floatarea(floata,floatb){floats;s=a*b;returns;}應(yīng)為平行關(guān)系:floatarea(floata,floatb){……}main(){……}×嵌套定義注意濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第13頁voidmain(){ intk,m,n; floatx,y,z; scanf("%d%d%d",&k,&m,&n);

x=fac(k); y=fac(m); z=fac(n);

printf("%f\n",x/(y+z)); }#include<stdio.h>floatfac(intn){

inti; floatf=1; for(i=1;i<=n;i++) f=f*i;

returnf;}主函數(shù)函數(shù)調(diào)用函數(shù)定義,通常寫在main函數(shù)上方濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第14頁例:①、編寫一個函數(shù),函數(shù)中打印一行信息“Howdoyoudo!”printf("Howdoyoudo!\n");____dayin(____){}void

voidmain(){}dayin();#include<stdio.h>經(jīng)驗(yàn)1:數(shù)據(jù)已知或固定則不需要作為參數(shù)傳遞;值事先不確定則需要參數(shù)傳遞!經(jīng)驗(yàn)2:不要求計(jì)算結(jié)果或沒有計(jì)算出一個數(shù)值則不需要返回值。主函數(shù)函數(shù)調(diào)用函數(shù)定義3.3函數(shù)調(diào)用(函數(shù)使用)濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第15頁3.3.1函數(shù)調(diào)用的形式1、形式:函數(shù)名(實(shí)參表列);2、說明①、實(shí)參表列由0到多個實(shí)參名組成,實(shí)參之間用逗號分隔②、實(shí)參與形參的個數(shù)應(yīng)相等,類型應(yīng)一致,順序要一一對應(yīng)③、調(diào)用無參函數(shù)的格式為:

函數(shù)名();例如:dayin();#include<stdio.h>intmax(intx,inty

){intz;if(x>y)z=x;elsez=y;return(z);}voidmain(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b

);printf("max=%d\n",c);}函數(shù)調(diào)用形參實(shí)參濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第16頁3、函數(shù)調(diào)用的方式①、函數(shù)調(diào)用語句:–無返回值函數(shù)的調(diào)用

由函數(shù)調(diào)用加上分號構(gòu)成,在主調(diào)函數(shù)中可作為一個獨(dú)立的語句;此時不要求函數(shù)帶回返回值②、函數(shù)表達(dá)式:

函數(shù)調(diào)用作為一個運(yùn)算對象出現(xiàn)在表達(dá)式中,此時要求函數(shù)帶回一個確定的值以參加表達(dá)式的運(yùn)算c=max(a,b);y=2*pow(x,2.5);③、函數(shù)參數(shù):

函數(shù)調(diào)用作為另一個函數(shù)的實(shí)參,其值作為一個實(shí)際參數(shù)傳給被調(diào)函數(shù)的形參;此時也要求函數(shù)帶回一個確定值m=max(a,max(b,c));printf("%d\n",max(a,b));3.3.2函數(shù)間的參數(shù)傳遞濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第17頁把需要參數(shù)的函數(shù)稱為“有參函數(shù)”,不需要參數(shù)的函數(shù)稱為“無參函數(shù)”。

形式參數(shù):定義函數(shù)時函數(shù)名后面括號內(nèi)的變量,簡稱形參

實(shí)際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號內(nèi)的變量,簡稱實(shí)參#include<stdio.h>intmax(intx,inty){return(x>y?x:y);}voidmain(){inta,b,c;scanf("%d%d",&a,&b);c=max(a,b);printf("Max=%d.\n",c);}形參實(shí)參函數(shù)調(diào)用的說明濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第18頁運(yùn)行期間,只有當(dāng)函數(shù)被調(diào)用時,形式參數(shù)才被分配存儲空間;調(diào)用結(jié)束后,形參所占的空間將被釋放;實(shí)參與形參一一對應(yīng)。

可以是常量,變量或表達(dá)式;實(shí)參和形參的類型應(yīng)相同或賦值相容;實(shí)參對形參的數(shù)據(jù)傳遞是“值傳遞”,

即單向傳遞;

即函數(shù)內(nèi)形參的值無法傳給實(shí)參。實(shí)參行參01二月2023濟(jì)南大學(xué)·信息學(xué)院#include<stdio.h>voidsum(intx,inty,intz){x=10;y=20;z=x+y;printf("x=%d,y=%d,z=%d\n",x,y,z);}voidmain(){inta=1,b=2,c=0;sum(a,b,c);printf("a=%d,b=%d,c=%d\n",a,b,c);}x=10,y=20,z=30a=1,b=2,c=0EG305.C濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第20頁定義函數(shù)時需要解決的問題:有沒有參數(shù)?即:需要從主調(diào)函數(shù)中傳遞數(shù)據(jù)嗎?參數(shù)的個數(shù):參數(shù)的類型:int、float、double、char或指針是否有返回值?即:是否向主調(diào)函數(shù)返回計(jì)算結(jié)果?返回值的類型:void?其它int、float?3.3.3函數(shù)的返回值濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第21頁intmax(intx,inty){intz;z=x>y?x:y;

return(z);}1、函數(shù)的返回值是通過return語句獲得的。return語句的作用是終止當(dāng)前函數(shù)的執(zhí)行并將一個確定值帶回主調(diào)函數(shù)中return語句的一般形式是:return(表達(dá)式);或:return

表達(dá)式;2、函數(shù)返回值的類型:在定義函數(shù)時指定intmax(intx,inty)doublepower(intx,inty)C語言規(guī)定,凡不指定類型的函數(shù),自動按整型(int)處理。max(intx,inty)intmax(intx,inty)濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第22頁

函數(shù)值的類型與return語句中表達(dá)式的類型應(yīng)一致;若不一致,則以函數(shù)類型為準(zhǔn)(自動轉(zhuǎn)換)。intmax(doublex,doubley){return(x>y?x:y);}3、一個函數(shù)可以有多個return語句,但每個return后的表達(dá)式類型要相同;當(dāng)執(zhí)行到其中任何一個return語句時會立即返回主調(diào)函數(shù)4、對于有返回值的函數(shù),若return語句后面沒有表達(dá)式,或沒有return語句,此時帶回一個不確定的返回值。return;5、為了明確表示“不帶回值”,可以用void定義“無類型”(或稱“空類型”,即無返回值)。voidmain(){…}濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第23頁例:輸入圓的半徑r,用自定義函數(shù)area實(shí)現(xiàn)圓的面積,并在主函數(shù)中輸出最終的結(jié)果。也可以這樣思考:area(){}main(){intr;floata;scanf(“%d”,&r);a=3.14*r*r;printf(“theareais%f”,a);}實(shí)參,可以和形參重名

floats;s=3.14*m*m;returns;

a=area(r);intmfloat編寫函數(shù)的技巧:濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第24頁主函數(shù)的內(nèi)容:主要就是函數(shù)調(diào)用。voidmain(){}自定義函數(shù)的內(nèi)容:主要就是程序功能的完成,,然后返回值。函數(shù)返回值類型函數(shù)名(形參){

除形參外的其它變量定義;執(zhí)行語句;

函數(shù)返回語句;}變量定義輸入實(shí)參函數(shù)調(diào)用輸出結(jié)果01二月2023濟(jì)南大學(xué)·信息學(xué)院sum函數(shù):有沒有參數(shù):有參數(shù)的個數(shù):2參數(shù)的數(shù)據(jù)類型:float或int是否有返回值:有返回值的類型:float或int主函數(shù):函數(shù)調(diào)用sum函數(shù):實(shí)現(xiàn)求和的計(jì)算。例題:編寫函數(shù)sum,它的功能是計(jì)算a+|b|,a和b都要從主函數(shù)中輸入,計(jì)算結(jié)果也要在主函數(shù)中輸出。例題:編寫函數(shù)sum,它的功能是計(jì)算a+|b|,a和b都要從主函數(shù)中輸入,計(jì)算結(jié)果也要在主函數(shù)中輸出。參考程序:#include<stdio.h>#include<math.h>

sum(){}voidmain(){floata,b,s;

printf("\nPleaseinputtwonum:");

scanf("%f%f",&a,&b);

s=sum(a,b);

printf("\n%f\n”,s);}floatfloatx,floatyfloatz;z=a+fabs(b);returnz;濟(jì)南大學(xué)-信息學(xué)院C語言程序設(shè)計(jì)第27頁例3.2輸入兩個整數(shù),計(jì)算其平均值。要求用函數(shù)實(shí)現(xiàn)平均值的計(jì)算。average函數(shù):有沒有參數(shù):有參數(shù)的個數(shù):2參數(shù)的數(shù)據(jù)類型:int是否有返回值:有返回值的類型:float或doublefloataverage(intx,inty){floatresult;result=(x+y)

溫馨提示

  • 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

提交評論