




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第9章函數(shù)模塊化程序設(shè)計基本思想:將一個大的程序按功能分割成一些小模塊,特點:各模塊相對獨立、功能單一、結(jié)構(gòu)清晰、接口簡單控制了程序設(shè)計的復(fù)雜性提高元件的可靠性縮短開發(fā)周期避免程序開發(fā)的重復(fù)勞動易于維護和功能擴充開發(fā)方法:自上向下,逐步分解,分而治之C是模塊化程序設(shè)計語言C程序結(jié)構(gòu)C是函數(shù)式語言必須有且只能有一個名為main的主函數(shù)C程序的執(zhí)行總是從main函數(shù)開始,在main中結(jié)束函數(shù)不能嵌套定義,可以嵌套調(diào)用9.1函數(shù)分類從用戶角度標(biāo)準(zhǔn)函數(shù)(庫函數(shù)):由系統(tǒng)提供用戶自定義函數(shù)從函數(shù)形式無參函數(shù)有參函數(shù)使用庫函數(shù)應(yīng)注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件6.2函數(shù)的定義一般格式合法標(biāo)識符函數(shù)返回值類型缺省int型無返回值void函數(shù)體函數(shù)類型函數(shù)名(形參類型說明表){
說明部分 語句部分}現(xiàn)代風(fēng)格:例有參函數(shù)(現(xiàn)代風(fēng)格)
intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有參函數(shù)(現(xiàn)代風(fēng)格)
intmax(intx,y){intz;z=x>y?x:y;return(z);}例空函數(shù)
dummy(){}函數(shù)體為空例無參函數(shù)
printstar(){printf(“**********\n”);}或
printstar(void){printf(“**********\n”);}例有參函數(shù)(傳統(tǒng)風(fēng)格)
intmax(x,y)
intx,y;{intz;z=x>y?x:y;return(z);}6.3
函數(shù)的返回值返回語句形式:return(表達式);
或
return表達式;
或
return;功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時把返值帶給調(diào)用函數(shù)說明:函數(shù)中可有多個return語句若無return語句,遇}時,自動返回調(diào)用函數(shù)若函數(shù)類型與return語句中表達式值的類型不一致,按前者為準(zhǔn),自動轉(zhuǎn)換------函數(shù)調(diào)用轉(zhuǎn)換void型函數(shù)例無返回值函數(shù)
voidswap(intx,inty){inttemp;temp=x;x=y;y=temp;}printstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}例函數(shù)帶回不確定值輸出:10voidprintstar(){printf("**********");}main(){inta;a=printstar();printf("%d",a);}編譯錯誤!6.4
函數(shù)的調(diào)用調(diào)用形式函數(shù)名(實參表);說明:實參與形參個數(shù)相等,類型一致,按順序一一對應(yīng)實參表求值順序,因系統(tǒng)而定(TurboC自右向左)調(diào)用方式函數(shù)語句:例printstar();printf(“Hello,World!\n”);函數(shù)表達式:例m=max(a,b)*2;函數(shù)參數(shù):例printf(“%d”,max(a,b));m=max(a,max(b,c));函數(shù)說明對被調(diào)用函數(shù)要求:必須是已存在的函數(shù)庫函數(shù):#include<*.h>用戶自定義函數(shù):函數(shù)類型說明函數(shù)說明一般形式:函數(shù)類型函數(shù)名(形參類型[形參名],…..);
或函數(shù)類型函數(shù)名();作用:告訴編譯系統(tǒng)函數(shù)類型、參數(shù)個數(shù)及類型,以便檢驗函數(shù)定義與函數(shù)說明不同函數(shù)說明位置:程序的數(shù)據(jù)說明部分(函數(shù)內(nèi)或外)下列情況下,可不作函數(shù)說明若函數(shù)返值是char或int型,系統(tǒng)自動按int型處理被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前例函數(shù)說明舉例main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函數(shù)可不作函數(shù)說明(BorlandC++不行)floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不必函數(shù)說明main(){floatadd(float,float);/*functiondeclaration*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}floatadd();1.函數(shù)參數(shù)的傳遞傳值、傳地址2.地址參數(shù)舉例例題:swap(int*p,int*q)convert(inta,intn)
inversionstrcon(chara,charb)sushu(intm)maopao(inta,intn)3.遞歸n!fab(n)4.變量全局局部函數(shù)參數(shù)及其傳遞方式形參與實參形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達式c=max(a,b);(main函數(shù))(max函數(shù))max(intx,inty){intz;z=x>y?x:y;return(z);}例比較兩個數(shù)并輸出大者main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;return(z);}形參實參說明:實參必須有確定的值形參必須指定類型形參與實參類型一致,個數(shù)相同若形參與實參類型不一致,自動按形參類型轉(zhuǎn)換———函數(shù)調(diào)用轉(zhuǎn)換形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放
函數(shù)參數(shù)及其傳遞方式形參與實參形式參數(shù):定義函數(shù)時函數(shù)名后面括號中的變量名實際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括號中的表達式參數(shù)傳遞方式值傳遞方式方式:函數(shù)調(diào)用時,為形參分配單元,并將實參的值復(fù)制到形參中;調(diào)用結(jié)束,形參單元被釋放,實參單元仍保留并維持原值特點:形參與實參占用不同的內(nèi)存單元單向傳遞711x:y:調(diào)用前:調(diào)用結(jié)束:711x:y:例交換兩個數(shù)#include<stdio.h>main(){intx=7,y=11;printf("x=%d,\ty=%d\n",x,y);printf("swapped:\n");
swap(x,y);printf("x=%d,\ty=%d\n",x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}調(diào)用:711a:b:711x:y:swap:711x:y:117a:b:temp地址傳遞方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參特點:形參與實參占用同樣的存儲單元“雙向”傳遞實參和形參必須是地址常量或變量指針變量作為函數(shù)參數(shù)——地址傳遞特點:共享內(nèi)存,“雙向”傳遞swap(intx,inty){inttemp;temp=x;x=y;y=temp;}main(){inta,b;scanf("%d,%d",&a,&b);if(a<b)swap(a,b);printf("\n%d,%d\n",a,b);}例
將數(shù)從大到小輸出…...…...20002008200A2002200420065變量a
變量b(main)9
變量temp
變量y
變量x(swap)55959COPY指針變量作為函數(shù)參數(shù)——地址傳遞特點:共享內(nèi)存,“雙向”傳遞swap(intx,inty){inttemp;temp=x;x=y;y=temp;}main(){inta,b;scanf("%d,%d",&a,&b);if(a<b)swap(a,b);printf("\n%d,%d\n",a,b);}例
將數(shù)從大到小輸出值傳遞…...…...20002008200A2002200420065變量a
變量b(main)9運行結(jié)果:5,9swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}…...20002008200A200220042006200C200E2010...59整型變量a
整型變量b(main)指針pointer_1指針pointer_220002002(swap)指針p1指針p2整型p5920002002COPY5例
將數(shù)從大到小輸出swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);printf("\n%d,%d\n",a,b);}…...20002008200A200220042006200C200E2010...59整型變量a
整型變量b(main)指針pointer_1指針pointer_22000200259例
將數(shù)從大到小輸出運行結(jié)果:9,5地址傳遞運行結(jié)果:5,9例
將數(shù)從大到小輸出swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);printf("%d,%d",*pointer_1,*pointer_2);}…...20002008200A200220042006200C200E2010...59整型a
整型b(main)pointer_1pointer_22000200220002002COPY(swap)指針p1指針p2指針p****2000地址傳遞20002002數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù),是地址傳遞數(shù)組名作函數(shù)參數(shù),實參與形參的對應(yīng)關(guān)系實參形參數(shù)組名指針變量數(shù)組名指針變量數(shù)組名數(shù)組名指針變量指針變量例將數(shù)組a中的n個整數(shù)按相反順序存放ij379110675420123456789ijijijji11760594723實參與形參均用數(shù)組voidinv(intx[],intn){intt,i,j;for(i=0,j=n-1;i<j;i++,j--){ t=x[i];x[i]=x[j];x[j]=t;}}main(){inti,a[10]={3,7,9,11,0,6,7,5,4,2};inv(a,10);printf("Thearrayhasbeenreverted:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}m=4例將數(shù)組a中的n個整數(shù)按相反順序存放voidinv(int*x,intn){intt,*p,*i,*j;
for(i=x,j=x+n-1;;i<=j;i++,j--){t=*i;*i=*j;*j=t;}}main(){inti,a[10]={3,7,9,11,0,6,7,5,4,2};inv(a,10);printf("Thearrayhasbeenreverted:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}實參用數(shù)組,形參用指針變量37911067542a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]xa數(shù)組60711594723ijijijjiji例將數(shù)組a中的n個整數(shù)按相反順序存放voidinv(intx[],intn){intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i; t=x[i];x[i]=x[j];x[j]=t;}}main(){inti,a[10],*p=a;for(i=0;i<10;i++,p++)scanf("%d",p);
p=a;
inv(p,10);printf("Thearrayhasbeenreverted:\n");for(p=arr;p<arr+10;p++)printf("%d",*p);}實參用指針變量,形參用數(shù)組例編寫一個函數(shù)實現(xiàn)兩字符串的鏈接,在主函數(shù)中調(diào)用#include<stdio.h>voidscat(char*p,char*q){while(*p!='\0')p++;while(*q!='\0'){*p=*q;p++;q++;}*q='\0';}main(){chara[80],b[80];printf("請輸入兩個字符串\n");gets(a);gets(b);scat(a,b);printf("合并后的字符串是:\n");puts(a);}HELLO\0world\0函數(shù)的嵌套與遞歸調(diào)用嵌套調(diào)用C規(guī)定:函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)main()調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b例求三個數(shù)中最大數(shù)和最小數(shù)的差值#include<stdio.h>
intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);printf("Max-Min=%d\n",d);}Ch7_202.cintdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)遞歸調(diào)用定義:函數(shù)直接或間接的調(diào)用自身叫函數(shù)的遞歸調(diào)用f()調(diào)f調(diào)f2調(diào)f1f1()f2()intf(intx){inty,z;……
z=f(y);…….return(2*z);}intf1(intx){inty,z;……
z=f2(y);…….return(2*z);}intf2(intt){inta,c;……
c=f1(a);…….return(3+c);}例求n的階乘#include<stdio.h>intfac(intn){intf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}main(){intn,y;printf("Inputaintegernumber:");scanf("%d",&n);
y=fac(n);printf("%d!=%15d",n,y);}例求Fibonaci(n)9.5變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象內(nèi)存…….main(){inta;a=10;printf(“%d”,a);}編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元1020002001程序中使用變量名對內(nèi)存操作變量的屬性數(shù)據(jù)類型:變量所持有的數(shù)據(jù)的性質(zhì)(操作屬性)存儲屬性存儲器類型:寄存器、靜態(tài)存儲區(qū)、動態(tài)存儲區(qū)生存期:變量在某一時刻存在-------靜態(tài)變量與動態(tài)變量作用域:變量在某區(qū)域內(nèi)有效-------局部變量與全局變量變量的存儲類型auto-----自動型register-----寄存器型static------靜態(tài)型extern-----外部型變量定義格式:[存儲類型]數(shù)據(jù)類型變量表;9.5變量的存儲屬性概述變量是對程序中數(shù)據(jù)的存儲空間的抽象如:intsum;
autointa,b,c;
registerinti;
staticfloatx,y;局部變量與全局變量局部變量---內(nèi)部變量定義:在函數(shù)內(nèi)定義,只在本函數(shù)內(nèi)有效說明:main中定義的變量只在main中有效不同函數(shù)中同名變量,占不同內(nèi)存單元形參屬于局部變量可定義在復(fù)合語句中有效的變量floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效例不同函數(shù)中同名變量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}例復(fù)合語句中變量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)
{
inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;
}for(i=0;i<N;i++)printf("%d",a[i]);}全局變量---外部變量定義:在函數(shù)外定義,可為本文件所有函數(shù)共用有效范圍:從定義變量的位置開始到本源文件結(jié)束,及有extern說明的其它源文件>外部變量說明:
extern數(shù)據(jù)類型變量表;若外部變量與局部變量同名,則外部變量被屏蔽intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2的作用范圍p,q的作用范圍externcharc1,c2;externcharc1,c2;c1,c2的作用范圍擴展后c1,c2的作用范圍擴展后局部靜態(tài)變量#in
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣西城軌工程建設(shè)有限公司招聘20人考前自測高頻考點模擬試題及完整答案詳解1套
- 2025年紹興新昌縣衛(wèi)健系統(tǒng)第一次公開招聘人員17人模擬試卷附答案詳解(突破訓(xùn)練)
- 2025廣州醫(yī)科大學(xué)校本部招聘工作人員9人(第二次)考前自測高頻考點模擬試題及參考答案詳解一套
- 2025年杭州市余杭區(qū)衛(wèi)生健康系統(tǒng)事業(yè)單位招聘編外工作人員73人考前自測高頻考點模擬試題及答案詳解一套
- 2025安康石泉縣兩河鎮(zhèn)中心衛(wèi)生院招聘(2人)考前自測高頻考點模擬試題附答案詳解(完整版)
- 2025湖南永州市東安縣招聘第一批就業(yè)見習(xí)崗位121人模擬試卷及答案詳解(必刷)
- 2025貴州省計量測試院參加第十三屆貴州人才博覽會引才4人考前自測高頻考點模擬試題及答案詳解(易錯題)
- 2025年寧波余姚市衛(wèi)生健康事業(yè)單位公開招聘衛(wèi)生技術(shù)人員179人模擬試卷參考答案詳解
- 2025河南許昌市經(jīng)發(fā)控股集團有限公司社會招聘擬聘人員模擬試卷及完整答案詳解一套
- 2025安徽合肥師范學(xué)院高層次人才招聘63人考前自測高頻考點模擬試題完整答案詳解
- 磷化工復(fù)工安全培訓(xùn)總結(jié)課件
- 2025年四川高考真題化學(xué)試題(解析版)
- 海上交通技能安全培訓(xùn)基本試題及答案解析
- 2025-2026學(xué)年高一歷史上學(xué)期第一次月考卷(原卷及解析)(江蘇專用)
- 合同的效力教學(xué)設(shè)計-2025-2026學(xué)年中職專業(yè)課-經(jīng)濟法律法規(guī)-納稅事務(wù)-財經(jīng)商貿(mào)大類
- 遼寧省名校聯(lián)盟2025-2026學(xué)年高三上學(xué)期9月聯(lián)合考試數(shù)學(xué)試題(無答案)
- 2025-2030中國農(nóng)機金融租賃業(yè)務(wù)模式創(chuàng)新與風(fēng)險定價策略報告
- 醫(yī)院感染的爆發(fā)及處理
- 2025年黨建知識應(yīng)知應(yīng)會測試題庫(附答案)
- 脊神經(jīng)支配圖譜-洞察及研究
- 2025年中級社會工作者《工作實務(wù)》模擬鞏固練習(xí)題及答案
評論
0/150
提交評論