C語言程序設(shè)計(jì) 第3版 課件 第7章 模塊化程序設(shè)計(jì)_第1頁
C語言程序設(shè)計(jì) 第3版 課件 第7章 模塊化程序設(shè)計(jì)_第2頁
C語言程序設(shè)計(jì) 第3版 課件 第7章 模塊化程序設(shè)計(jì)_第3頁
C語言程序設(shè)計(jì) 第3版 課件 第7章 模塊化程序設(shè)計(jì)_第4頁
C語言程序設(shè)計(jì) 第3版 課件 第7章 模塊化程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第七章模塊化程序設(shè)計(jì)模塊:一個(gè)具有獨(dú)立功能的程序段模塊化程序設(shè)計(jì):按適當(dāng)?shù)脑瓌t把一個(gè)情況復(fù)雜、規(guī)模較大的程序系統(tǒng)劃分為一個(gè)個(gè)較小的、功能相關(guān)而又相對獨(dú)立的模塊,這樣的程序設(shè)計(jì)方法稱為模塊化程序設(shè)計(jì)。模塊化程序設(shè)計(jì)的優(yōu)點(diǎn)復(fù)雜系統(tǒng)化大為小,化繁為簡便于維護(hù)提高系統(tǒng)設(shè)計(jì)效率(便于多人并行開發(fā))在C語言中模塊是由函數(shù)來實(shí)現(xiàn)的。main(){longs;inta,b;scanf("%d%d",&a,&b);s=power(a,b);printf("%ld",s);}longpower(x,y)intx,y;{longsum=1;inti;for(i=0;i<y;i++)sum=sum*x;return(sum);}/*函數(shù)power*//*調(diào)用函數(shù)power*/一、關(guān)于函數(shù)的幾個(gè)概念函數(shù):能夠完成一定功能的程序段函數(shù)的調(diào)用:函數(shù)的使用主調(diào)函數(shù):調(diào)用其他函數(shù)的函數(shù)被調(diào)函數(shù):被其他函數(shù)調(diào)用的函數(shù)程序的執(zhí)行總是從main函數(shù)開始,和函數(shù)的位置無關(guān).7.1函數(shù)二、函數(shù)的分類1、從用戶使用的角度來劃分用戶自定義函數(shù)

系統(tǒng)函數(shù)

clrscr()sin()cos()sqrt()putpixel()2、從函數(shù)的形式來劃分無參函數(shù)

有參函數(shù)

三、函數(shù)的定義1、無參函數(shù)的定義常見的系統(tǒng)無參函數(shù)有:getch();clrscr();exit();無參函數(shù)定義的一般形式為:類型標(biāo)志符函數(shù)名(){聲明部分;執(zhí)行部分;}實(shí)訓(xùn)定義一個(gè)函數(shù)line,能夠用來繪制一條直線。voidline(){inti,driver=VGA;intmode=VGAHI;initgraph(&driver,&mode,"");for(i=0;i<=100;i++)putpixel(i,100,1);}2、有參函數(shù)的定義有參函數(shù)定義的一般形式為:類型標(biāo)志符函數(shù)名(形式參數(shù)表列){聲明部分;執(zhí)行部分;}常見的系統(tǒng)有參函數(shù)有:sin(),cos().Sqrt(),setcolor();putpixel()實(shí)訓(xùn)定義一個(gè)函數(shù)line,能夠用來繪制一條從指定端點(diǎn)出發(fā)的定長直線。。#include"stdio.h"#include"graphics.h"voidline(x,y,l,z)intx,y,l,z;{inti,driver=VGA;intmode=VGAHI;initgraph(&driver,&mode,"");for(i=x;i<=l;i++)putpixel(i,y,z);

綜合實(shí)訓(xùn)編寫一個(gè)程序,能夠?qū)崿F(xiàn)當(dāng)從鍵盤輸入x和y時(shí),求出xy的結(jié)果。xy=x*x*x*x*x*x*x……*x解析:y個(gè)x1、定義變量s、x、y、i;3、變量初始化:s=1;i=0;2、輸入x和y;4、當(dāng)i<y時(shí)s=s*x;i=i+1;5、輸出s;longs,x,y;inti;scanf(“%ld%ld”,&x,&y);s=1;i=0;while(i<y){s=s*x;i=i+1;}printf(“%ld”,s);main(){}main(){longs,x,y;inti;scanf("%ld%ld",&x,&y);s=1;i=0;while(i<y){s=s*x;i=i+1;}printf("%ld“,s);}power(longx,longy)longs;inti;main(){longa,b;a=234;b=456;power(a,b);}power(234,456);power(a+2,b*2);}超鏈接超鏈接四、函數(shù)的參數(shù)1、形式參數(shù)(形參)被調(diào)函數(shù)中的參數(shù)2、實(shí)際參數(shù)(實(shí)參)主調(diào)函數(shù)傳送給被調(diào)函數(shù)的實(shí)際參數(shù)小結(jié):形式參數(shù)和實(shí)際參數(shù)之間的關(guān)系形參沒有固定的值,在實(shí)際運(yùn)算時(shí),形參接收來自實(shí)參的值進(jìn)行運(yùn)算處理.實(shí)參和形參在進(jìn)行值傳遞時(shí)是一一對應(yīng)關(guān)系,所以其個(gè)數(shù)應(yīng)該相同,對應(yīng)的類型也應(yīng)該相同形式參數(shù)和實(shí)際參數(shù)之間的值傳遞是單向傳遞只有子函數(shù)被調(diào)用時(shí),才為形參分配內(nèi)存單元,用完即釋放.實(shí)參不但可以是變量,也可以是常量,還可以是表達(dá)式,但是一定要有確定的值.五、函數(shù)的返回值1、return的作用將被調(diào)函數(shù)中得到的結(jié)果帶回到主調(diào)函數(shù)中.2、return的使用return表達(dá)式;3、返回值的類型和函數(shù)類型一致;如果不一致,以函數(shù)類型為準(zhǔn)如果函數(shù)沒有類型,則用void表示無類型六、函數(shù)的調(diào)用1、無參函數(shù)的調(diào)用一般形式:函數(shù)名();例clrscr();getch();2、有參函數(shù)的調(diào)用一般形式:函數(shù)名(實(shí)參表列);sum=power(34,4)+power(3,98);例七、函數(shù)的聲明1、使用輸入輸出函數(shù)getchar()putchar()時(shí)#include”stdio.h”2、使用數(shù)學(xué)函數(shù)sin()cos()sqrt()等時(shí)#include”math.h”3、使用繪圖函數(shù)putpixel()arc()circle()等時(shí)#include”graphics.h”4、那么自定義函數(shù)該如何聲明呢?小結(jié):1、所謂聲明,就是把函數(shù)的類型、函數(shù)的名字、函數(shù)形參的類型及個(gè)數(shù)、順序通知編譯系統(tǒng),便于在調(diào)用時(shí)進(jìn)行檢查。又稱函數(shù)原型2、函數(shù)的聲明也可以不寫形參的名字,只寫出類型即可3、函數(shù)原型的一般形式:函數(shù)類型函數(shù)名(參數(shù)類型1,參數(shù)類型2…,參數(shù)類型n);

八、函數(shù)使用實(shí)訓(xùn)實(shí)例1:編寫程序可以實(shí)現(xiàn)求x的正弦值、余弦值、正切值、余切值。要求界面如下:**********************************

1:sin()

2:cos()

3:tan()

4:ctan()**********************************請選擇您要進(jìn)行的計(jì)算:printf("***************************\n");printf("1:sin()2:cos()\n");printf("3:tan()4:ctan()\n");printf("***************************\n");printf("請選擇你要進(jìn)行何種計(jì)算:\n");scanf(“%d”,&s);printf(“請輸入您要計(jì)算的數(shù)字:\n");scanf(“%f”,&x);switch(s){case1:result=sin(x);break;case2:result=cos(x);break;case3:result=tan(x);break;case4:result=1/tan(x);break;default:printf(“Inputerror!”);}printf(“result=%f”,result);}實(shí)例2編寫一函數(shù),求n!解析:0!=11!=12!=1*2=1!*23!=1*2*3=2!*34!=1*2*3*4=3!*4……n!=(n-1)!*n1(n=0,1)n!=n*(n-1)!(n>1)longf(intn){longs;if(n==0||n==1)s=1;elses=f(n-1)*n;return(s);}main(){intn;longy;printf(“pleaseinputanumber:\n”);scanf(“%d”,&n);y=f(n);printf(“%d!=%ld\n”,n,y);}結(jié)論:在調(diào)用一個(gè)函數(shù)的過程中,又出現(xiàn)直接或間接調(diào)用該函數(shù)本身,稱為遞歸調(diào)用。7.2變量的作用域根據(jù)變量的作用域劃分局部變量全局變量作用域:

變量在什么范圍內(nèi)有效在函數(shù)內(nèi)定義,只在本函數(shù)范圍內(nèi)有效的變量在函數(shù)外定義,并不從屬于某個(gè)函數(shù),可以被文件中的其他函數(shù)使用。一、局部變量實(shí)例1:下面這個(gè)程序有錯嗎?如果沒錯,當(dāng)輸入12,34,56時(shí),輸出是什么;如果有錯,為什么呢?main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);if(b<a){intt;t=b;b=a;a=t;}if(c<a){t=c;c=a;a=t;}printf("%d",a);}二、全局變量實(shí)例2:下面這個(gè)程序的輸出結(jié)果是什么?進(jìn)入程序intmax;max_min(inta,intb){intmin;max=min=a;if(b>max)max=b;if(b<min)min=b;return(min);}main(){intm,n,minmize;m=520;n=888;minmize=max_min(m,n);printf(“max=%d,min=%d",max,minmize);}maxmnminmizeabmin520888520888520520888520關(guān)于全局變量的總結(jié)當(dāng)在函數(shù)外定義了一個(gè)全局變量后,定義點(diǎn)之后的函數(shù)都可以使用該變量.當(dāng)全局變量的值在一個(gè)函數(shù)中改變后,另一個(gè)函數(shù)使用的就是改變后的值.從定義開始到程序結(jié)束,全局變量自始至終占用存儲空間.全局變量的使用使函數(shù)間的聯(lián)系加強(qiáng),與程序設(shè)計(jì)”低耦合”的原則相違背,所以很少使用.inta=5;main(){inta=3,b=4,sum;sum=a+b;printf(“%d”,sum);}思考

總結(jié):在局部變量的范圍內(nèi),局部變量將起作用,外部變量將被屏蔽掉而失去作用。intmax,min;max_min(intn1,intn2,intn3){intmax;if(n2>n1){max=n2;min=n1;}else{max=n1;min=n2;}if(n3>max)max=n3;if(n3<min)min=n3;}main(){intnum1,num2,num3;scanf("%d%d%d",&num1,&num2,&num3);max_min(num1,num2,num3);printf("max=%d,min=%d",max,min);}7.3變量的存儲類別根據(jù)變量的存儲類別劃分靜態(tài)存儲方式動態(tài)存儲方式在整個(gè)程序運(yùn)行期間分配固定的存儲單元,直到整個(gè)程序運(yùn)行結(jié)束后才釋放變量的存儲單元在程序運(yùn)行期間根據(jù)需要動態(tài)的分配存儲空間,使用完即釋放。全局變量屬于靜態(tài)存儲方式,而局部變量一般屬于動態(tài)存儲方式。一、動態(tài)存儲方式的聲明1、用auto聲明動態(tài)局部變量例:autointa;將變量a定義為整型局部自動變量特點(diǎn):函數(shù)調(diào)用結(jié)束,該種變量即被釋放,屬于動態(tài)存儲方式。inta;2、用register聲明寄存器變量例:registerinta;將變量a定義為整型寄存器變量特點(diǎn):加快運(yùn)算速度,函數(shù)運(yùn)行完即消失、使用有限二、靜態(tài)存儲方式的聲明1、用static聲明靜態(tài)局部變量intincent(intx){inty,z;y=0;y=y+1;z=x+y;return(z);}main(){inti;for(i=0;i<5;i++)printf(“%d”,incent(i));}例intincent(intx){intz;staticinty=0;y=y+1;z=x+y;return(z);}main(){inti;for(i=0;i<5;i++)printf(“%d”,incent(i));}思考:比較兩種程序結(jié)果的不同。靜態(tài)局部變量的特點(diǎn):(1)靜態(tài)局部變量每次函數(shù)調(diào)用結(jié)束后能夠保留調(diào)用結(jié)束后的值不變,留待下一次調(diào)用。(2)靜態(tài)局部變量只限于被本函數(shù)使用,不能被其他函數(shù)使用(3)靜態(tài)局部變量屬于靜態(tài)存儲類別,在整個(gè)程序運(yùn)行期間都不釋放;而動態(tài)存儲變量屬于動態(tài)存儲類別,函數(shù)調(diào)用結(jié)束即釋放。(4)在定義靜態(tài)局部變量時(shí),如果不賦初值,系統(tǒng)自動賦值為0或空字符(對字符型變量);而相應(yīng)的情況下,系統(tǒng)會給其賦一個(gè)不確定的值。2、用static聲明外部變量static定義的變量叫靜態(tài)外部變量,限制其只能被本文件所使用,而不能被其他文件所使用。例時(shí)俊.cintnumber;sort(){…………}劉剛.cintnumber;delete(){…………}staticstatic3、用extern聲明外部變量張林.cInsert(){……}inta;query(){}externa;print(){……}modify(){}李敏.cexterna;聲明語句小結(jié)按照作用范圍分類,變量分為局部變量和外部變量.按照存儲類別分類,變量分為靜態(tài)存儲方式和動態(tài)存儲方式.7.4函數(shù)的作用范圍根據(jù)函數(shù)的作用范圍劃分內(nèi)部函數(shù)外部函數(shù)只能被本文件所使用可以被其他文件使用一、內(nèi)部函數(shù)intsum(intx,inty){intsum;sum=x+y;returnsum;}staticxietianwen.cxubosheng.cmain(){inta,b,s;scanf(“%d%d”,&a,&b);s=sum(a,b);printf(“%d”,s);}用static定義的函數(shù)只能被本文件中的其他函數(shù)所調(diào)用,不能被其他文件所使用,稱為內(nèi)部函數(shù)。#include”xietianwen.c”二、外部函數(shù)intsum(intx,inty){intsum;sum=x+y;returnsum;}externxietianwen.cxubosheng.cmain(){inta,b,s;scanf(“%d%d”,&a,&b);s=sum(a,b);printf(“%d”,s);}用extern定義的函數(shù)可以被其他文件所使用,稱為外部函數(shù),extern可以省略。#include”xietianwen.c”main(){floatd,s,v,r;printf(“請輸入圓的半徑:”);scanf(“%f”,&r);d=2*3.1415926*r;s=3.1415926*r*r;v=3.0/4*3.1415926*r*r*r;printf(“d=2*3.1415926*r=%f”,d);printf(“s=3.1415926*r*r=%f”,s);printf(“v=3.0/4*3.1415926*r*r*r=%f”,v);}#definePI3.1415926PIPIPI宏定義:用#define定義一個(gè)標(biāo)志符來表示一個(gè)字符串或數(shù)字。

PI稱為宏名,展開過程稱為宏替換。宏定義的注意事項(xiàng):1、宏名,即標(biāo)志符名一般用大寫字母表示,但也可以用小

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論