模塊化程序設(shè)計方法_第1頁
模塊化程序設(shè)計方法_第2頁
模塊化程序設(shè)計方法_第3頁
模塊化程序設(shè)計方法_第4頁
模塊化程序設(shè)計方法_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

模塊化程序設(shè)計方法第1頁,共99頁,2023年,2月20日,星期五模塊化程序設(shè)計方法人們在求解一個復(fù)雜問題時,通常采用的是逐步分解、分而治之的方法也就是把一個大問題分解成若干個比較容易求解的小問題,然后分別求解。設(shè)計一個復(fù)雜的應(yīng)用程序時,往往也是把整個程序劃分為若干功能較為單一的程序模塊,然后分別予以實現(xiàn)稱為模塊化(結(jié)構(gòu)化)程序設(shè)計方法第2頁,共99頁,2023年,2月20日,星期五模塊化程序設(shè)計方法是自頂向下、逐步求精的程序設(shè)計方法程序由程序單元構(gòu)成使用三種基本控制結(jié)構(gòu)(順序、選擇、重復(fù))構(gòu)造程序單元第3頁,共99頁,2023年,2月20日,星期五函數(shù)是C語言的程序模塊在C語言中,函數(shù)是程序的基本組成單位利用函數(shù),可以實現(xiàn)程序的模塊化,使程序設(shè)計簡單和直觀,提高程序的易讀性和可維護(hù)性把程序中常用的一些計算或操作編成通用的函數(shù),以供隨時調(diào)用,大大減輕程序員的代碼實現(xiàn)工作量。第4頁,共99頁,2023年,2月20日,星期五函數(shù)是C語言的重要的語法單位;是C語言程序的組成單元。第5頁,共99頁,2023年,2月20日,星期五劃分函數(shù)的方法1程序中可能有重復(fù)出現(xiàn)的相同或相似的片段;從中抽取出共同的內(nèi)容,定義為函數(shù)使一項功能只定義一次,多次使用縮短程序,提高程序的可讀性和易修改性第6頁,共99頁,2023年,2月20日,星期五劃分函數(shù)的方法2程序中具有邏輯獨(dú)立性的片段即使這種片段只出現(xiàn)一次,也可以定義為函數(shù),在原來需要這段程序的地方寫函數(shù)使用。這種做法的主要作用是分解程序的復(fù)雜性,使之更容易理解和把握。第7頁,共99頁,2023年,2月20日,星期五函數(shù)分類在C語言中可從不同的角度對函數(shù)分類。1.從函數(shù)定義的角度看,函數(shù)可分為庫函數(shù)和用戶定義函數(shù)兩種。庫函數(shù)由C系統(tǒng)提供,只需包含有該函數(shù)定義的頭文件即可在程序中直接調(diào)用。

printf、sqrt、strcat等函數(shù)。第8頁,共99頁,2023年,2月20日,星期五用戶自定義函數(shù):必須通過函數(shù)定義(或函數(shù)說明)才能被調(diào)用由程序員自己定義第9頁,共99頁,2023年,2月20日,星期五2.從功能角度看,又可把函數(shù)分為有返回值函數(shù)和無返回值函數(shù)兩種。(1)有返回值函數(shù)此類函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個執(zhí)行結(jié)果,稱為函數(shù)返回值。由用戶定義的有返回值的函數(shù),必須明確返回值的類型。第10頁,共99頁,2023年,2月20日,星期五(2)無返回值函數(shù)此類函數(shù)用于完成某項特定的處理任務(wù),執(zhí)行完成后沒有計算的結(jié)果。用戶在定義此類函數(shù)時需要指定它的返回類型為空類型---void。第11頁,共99頁,2023年,2月20日,星期五3.從主調(diào)函數(shù)和被調(diào)函數(shù)之間數(shù)據(jù)傳送的角度看可分為無參函數(shù)和有參函數(shù)兩種(1)無參函數(shù)函數(shù)不需要外部信息;可以返回或不返回函數(shù)值。第12頁,共99頁,2023年,2月20日,星期五(2)有參函數(shù)(帶參函數(shù))函數(shù)需要外部信息,通過參數(shù)形式傳遞信息可以返回或不返回函數(shù)值第13頁,共99頁,2023年,2月20日,星期五主函數(shù)每個C程序里必須有一個名為main的特殊函數(shù),稱為主函數(shù)。主函數(shù)規(guī)定了整個程序執(zhí)行的起點(程序入口)程序執(zhí)行從main函數(shù)開始執(zhí)行,一旦它執(zhí)行結(jié)束,整個程序就執(zhí)行結(jié)束。程序不能調(diào)用主函數(shù),它將在程序開始執(zhí)行時被自動調(diào)用。第14頁,共99頁,2023年,2月20日,星期五除了主函數(shù)外,程序里的其他函數(shù)只有在被調(diào)用時才能進(jìn)入執(zhí)行狀態(tài)。一個函數(shù)要在程序執(zhí)行過程中起作用,要么它是被主函數(shù)直接調(diào)用的,要么是被另外一個被調(diào)用正在執(zhí)行的函數(shù)所調(diào)用的。沒有被調(diào)用的函數(shù)在程序執(zhí)行中不會起任何作用。第15頁,共99頁,2023年,2月20日,星期五C不允許函數(shù)嵌套定義。一個函數(shù)中再定義一個函數(shù)是非法的函數(shù)與函數(shù)之間通過傳遞參數(shù)和返回值相聯(lián)系。第16頁,共99頁,2023年,2月20日,星期五6.1函數(shù)定義和調(diào)用6.1.1函數(shù)定義一般形式:

(返回值)類型說明符函數(shù)名(形式參數(shù)表){

類型說明執(zhí)行語句

}函數(shù)體函數(shù)原型\函數(shù)首部(頭)第17頁,共99頁,2023年,2月20日,星期五函數(shù)原型類型說明符是指函數(shù)返回值的數(shù)據(jù)類型。函數(shù)名—給自定義的函數(shù)取的名字。形式參數(shù)表—函數(shù)被調(diào)用時,接收調(diào)用函數(shù)傳遞的實參數(shù)。函數(shù)體—說明語句、執(zhí)行語句塊。通過return語句返回函數(shù)計算結(jié)果。第18頁,共99頁,2023年,2月20日,星期五定義函數(shù)時必須指明返回值類型(缺省時,為int)如果函數(shù)沒有返回值,函數(shù)返回類型應(yīng)該為void第19頁,共99頁,2023年,2月20日,星期五1.無參函數(shù)的一般形式類型說明符函數(shù)名()

{類型說明執(zhí)行語句

}第20頁,共99頁,2023年,2月20日,星期五無參函數(shù)

voidSay_Hello(){

printf("Hello,howdoyoudo.\n");

return;}第21頁,共99頁,2023年,2月20日,星期五無參函數(shù)voidshow-five-row-stars(){inti;for(i=1;i<=5;i++)printf(“%s\n”,“******”);

return;}第22頁,共99頁,2023年,2月20日,星期五2有參函數(shù)的一般形式類型說明符函數(shù)名(形式參數(shù)表){類型說明語句}以“,”隔開形參說明

type形參變量名第23頁,共99頁,2023年,2月20日,星期五有參函數(shù)voidshow-many-row-stars(intn){inti;for(i=1;i<=n;i++)printf(“%s\n”,“******”);

return;}第24頁,共99頁,2023年,2月20日,星期五有參函數(shù)intabs(inta){return((a>0)?a:-a);}第25頁,共99頁,2023年,2月20日,星期五有參函數(shù)

intarea_s(inta,intb){return(a*b);

}第26頁,共99頁,2023年,2月20日,星期五求兩個數(shù)中較小的數(shù)intmin(inta,intb){if(a>b)returnb;

elsereturna;}第27頁,共99頁,2023年,2月20日,星期五對于用戶自己定義的函數(shù)函數(shù)需要先定義,再調(diào)用。否則,需要對函數(shù)進(jìn)行聲明。第28頁,共99頁,2023年,2月20日,星期五函數(shù)聲明

函數(shù)聲明:函數(shù)原型;

返回類型函數(shù)名(形參表);

參數(shù)表省略變量名

intmin(inta,intb);

intmin(int,int);第29頁,共99頁,2023年,2月20日,星期五注意:如果使用庫函數(shù),必須在源文件前部用#include命令包含必要的頭文件。對所有未能在使用前給出定義的函數(shù),都應(yīng)給出函數(shù)原型聲明。把函數(shù)聲明放在所有函數(shù)的定義之前(不要寫在函數(shù)內(nèi)部)第30頁,共99頁,2023年,2月20日,星期五6.1.2函數(shù)調(diào)用通過對函數(shù)的調(diào)用來執(zhí)行對應(yīng)的函數(shù)體

C語言中,函數(shù)調(diào)用的一般形式為:函數(shù)名(實際參數(shù)表)對無參函數(shù)調(diào)用時則無實參表實參可以是常數(shù)、變量及表達(dá)式各實參之間用逗號分隔。第31頁,共99頁,2023年,2月20日,星期五函數(shù)調(diào)用過程執(zhí)行流程轉(zhuǎn)向由函數(shù)名指定的被調(diào)用函數(shù)實參一一對應(yīng)地傳遞給函數(shù)的形參執(zhí)行函數(shù)定義中的函數(shù)體。執(zhí)行結(jié)束,通過return語句將值返回到調(diào)用處執(zhí)行流程返回調(diào)用處;執(zhí)行后面的語句第32頁,共99頁,2023年,2月20日,星期五

函數(shù)B函數(shù)調(diào)用及返回函數(shù)Areturn…callBendA返回地址第33頁,共99頁,2023年,2月20日,星期五函數(shù)調(diào)用的幾種情況(1)函數(shù)表達(dá)式函數(shù)調(diào)用作為表達(dá)式中的一個操作數(shù),以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。

z=min(x,y)*2;第34頁,共99頁,2023年,2月20日,星期五(2)函數(shù)語句函數(shù)調(diào)用加上分號即構(gòu)成函數(shù)語句。這種方式要求函數(shù)沒有返回值。

printf("%d",a);

show-five-row-stars();第35頁,共99頁,2023年,2月20日,星期五(3)函數(shù)實參函數(shù)作為另一個函數(shù)調(diào)用的實參。要求該函數(shù)必須是有返回值的

a=min(min(x,y),z);第36頁,共99頁,2023年,2月20日,星期五實參的求值順序在函數(shù)調(diào)用中還應(yīng)該注意的一個問題是求值順序的問題。所謂求值順序是指對實參表中各量是自左至右使用呢,還是自右至左使用。對此,各系統(tǒng)的規(guī)定不一定相同。第37頁,共99頁,2023年,2月20日,星期五函數(shù)返回值被調(diào)用之后,將執(zhí)行函數(shù)體中的程序段,取得并返回給主調(diào)函數(shù)一個值,稱這個值為函數(shù)返回值,函數(shù)計算結(jié)構(gòu)只能通過return語句返回return語句的一般形式為:

return表達(dá)式;或return(表達(dá)式);第38頁,共99頁,2023年,2月20日,星期五return語句在函數(shù)中允許有多個return語句但每次調(diào)用只能有一個return語句被執(zhí)行,因此只能返回一個函數(shù)值。第39頁,共99頁,2023年,2月20日,星期五參數(shù)匹配(2)函數(shù)值的類型和函數(shù)定義中函數(shù)的類型應(yīng)保持一致。如果兩者不一致,則以函數(shù)定義類型為準(zhǔn),自動進(jìn)行類型轉(zhuǎn)換。(3)不返回函數(shù)值的函數(shù),可以明確定義為void。第40頁,共99頁,2023年,2月20日,星期五6.2函數(shù)參數(shù)傳遞主調(diào)函數(shù)和被調(diào)函數(shù)之間通過參數(shù)傳遞數(shù)據(jù)C語言參數(shù)傳遞方式為傳值調(diào)用。函數(shù)的參數(shù)分為形參和實參兩種。實參的值單向傳遞給函數(shù)的形參,作為形參的值實參形參值第41頁,共99頁,2023年,2月20日,星期五變量的作用域能夠訪問變量的程序范圍—變量的作用域變量按作用域分為全局變量和局部變量全局變量:任何函數(shù)外定義的變量作用域為整個程序局部變量:函數(shù)內(nèi)部定義的變量和形參作用域為:定義該變量的函數(shù)第42頁,共99頁,2023年,2月20日,星期五變量的作用域還可以在符合語句中定義變量作用域僅為該復(fù)合語句第43頁,共99頁,2023年,2月20日,星期五形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。實參出現(xiàn)在主調(diào)函數(shù)中,進(jìn)入被調(diào)函數(shù)后,實參變量也不能使用。第44頁,共99頁,2023年,2月20日,星期五函數(shù)的形參和實參的特點形參只有在被調(diào)用時才分配內(nèi)存單元函數(shù)結(jié)束時,釋放所分配的內(nèi)存單元形參只有在函數(shù)內(nèi)部有效。實參可以是常量、變量、表達(dá)式和函數(shù)調(diào)用函數(shù)調(diào)用時,實參必須具有確定的值第45頁,共99頁,2023年,2月20日,星期五函數(shù)的形參和實參的特點

實參和形參在數(shù)量上、類型上和順序上應(yīng)嚴(yán)格一致第46頁,共99頁,2023年,2月20日,星期五函數(shù)調(diào)用例子intcube(intx)/*自定義函數(shù)*/{intcb;cb=x*x*x;return(cb);}/*函數(shù)返回值*/voidmain(){inti,v;scanf(”%d”,&i);

v=cube(i);/*函數(shù)調(diào)用返回值賦給變量v*/printf(”cube=%d\n”,v);}第47頁,共99頁,2023年,2月20日,星期五兩個電阻的串聯(lián)值和并聯(lián)值floatseries(float,float);floatparallel(float,float);voidmain(){floatr1,r2,se,pa;scanf(”%f%f”,&r1,&r2);se=series(r1,r2);/*函數(shù)調(diào)用*/pa=parallel(r1,r2);/*函數(shù)調(diào)用*/printf(“%f%f\n”,se,pa);}第48頁,共99頁,2023年,2月20日,星期五floatseries(floatrs1,floatrs2)/*自定義函數(shù)*/{floatrs;rs=rs1+rs2;return(rs);}floatparallel(floatrp1,floatrp2)/*自定義函數(shù)*/{floatrp;rp=(rp1*rp2)/(rp1+rp2);return(rp);}第49頁,共99頁,2023年,2月20日,星期五函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的只能把實參的值傳送給形參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。第50頁,共99頁,2023年,2月20日,星期五voidswap(intx,inty){inttemp=x;x=y;y=temp;}swap(a,b)第51頁,共99頁,2023年,2月20日,星期五如果函數(shù)需要對實參進(jìn)行修改,則形參的類型應(yīng)該為指針類型:指針做參數(shù);實參的值應(yīng)該為地址。參數(shù)傳遞傳的是地址值通過修改形參指向的目標(biāo)變量,達(dá)到修改實參數(shù)據(jù)的目的(間接訪問方式)。第52頁,共99頁,2023年,2月20日,星期五voidswap(int*x,int*y){inttemp=*x;*x=*y;*y=temp;}swap(&a,&b)第53頁,共99頁,2023年,2月20日,星期五完整程序#include<stdio.h>voidswap(int*,int*);/*函數(shù)聲明*/voidmain(){inta=3,b=8;printf(”a=%d,b=%d\n”,a,b);

swap(&a,&b);/*函數(shù)調(diào)用*/printf(”a=%d,b=%d\n”,a,b);}voidswap(int*x,int*y)/*函數(shù)定義,形參定義為指針*/{inttemp=*x;*x=*y;*y=temp;}第54頁,共99頁,2023年,2月20日,星期五6.3函數(shù)與數(shù)組數(shù)組可以作為函數(shù)的實參有兩種形式:數(shù)組元素(下標(biāo)變量)作為實參;數(shù)組名作為函數(shù)的實參第55頁,共99頁,2023年,2月20日,星期五6.3.1數(shù)組元素作函數(shù)實參數(shù)組元素作為實參與普通變量作為實參是完全相同的在發(fā)生函數(shù)調(diào)用時,把作為實參的數(shù)組元素的值傳送給形參,實現(xiàn)單向的值傳送第56頁,共99頁,2023年,2月20日,星期五6.3.2數(shù)組作為函數(shù)參數(shù)實參是數(shù)組名;形參是數(shù)組;用數(shù)組作函數(shù)參數(shù)時,則要求形參和實參都必須是類型相同的數(shù)組。形參數(shù)組和實參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間。對形參數(shù)組的操作就是對實參數(shù)組的操作第57頁,共99頁,2023年,2月20日,星期五floataver(floata[5]){inti;floatav,s=a[0];for(i=1;i<5;i++)s=s+a[i];av=s/5;returnav;}voidmain(){floatsco[5],av;inti;for(i=0;i<5;i++)scanf("%f",&sco[i]);av=aver(sco);printf("%6.2f\n",av);}第58頁,共99頁,2023年,2月20日,星期五形參數(shù)組和實參數(shù)組的長度可以不相同,

voidnzp(inta[8]);…intb[5];nzp(b);第59頁,共99頁,2023年,2月20日,星期五形參也可以不指定數(shù)組的長度

voidnzp(inta[])或用一個變量來表示數(shù)組元素的個數(shù)。

voidnzp(inta[],intn)

形參數(shù)組由n值動態(tài)地表示數(shù)組的長度。

n的值由主調(diào)函數(shù)的實參進(jìn)行傳送。第60頁,共99頁,2023年,2月20日,星期五

多維數(shù)組也可以作為函數(shù)的參數(shù)。在函數(shù)定義時對形參數(shù)組可以指定每一維的長度,也可省去第一維的長度。

intfun(inta[3][10])或

intfun(inta[][10])第61頁,共99頁,2023年,2月20日,星期五指針作為形參實參是變量地址voidswap(int*x,int*y){inttemp=*x;*x=*y;*y=temp;}swap(&a,&b)第62頁,共99頁,2023年,2月20日,星期五指針作為形參,實參是數(shù)組名數(shù)組名就是數(shù)組的首地址實參向形參傳送數(shù)組的地址值形參得到該地址后也指向同一數(shù)組第63頁,共99頁,2023年,2月20日,星期五求數(shù)組各項的累加和。#include<stdio.h>voidsum(int*array,intn);voidmain(){inta[10]={1,2,3,4,5,6,7,8,9,10};sum(a,6);}voidsum(int*array,intn){intsum=0;for(inti=0;i<n;i++){sum+=*array;array++;}printf(”%d\n”,sum);}第64頁,共99頁,2023年,2月20日,星期五6.4函數(shù)與指針返回指針的函數(shù)和指向函數(shù)的指針。第65頁,共99頁,2023年,2月20日,星期五6.4.1返回指針的函數(shù)函數(shù)的返回類型可以指針類型該函數(shù)返回的是地址返回指針的函數(shù)稱為指針型函數(shù)第66頁,共99頁,2023年,2月20日,星期五類型說明符

*

函數(shù)名(形參表){…/*函數(shù)體*/}類型說明符表示了返回的指針值所指向的數(shù)據(jù)類型第67頁,共99頁,2023年,2月20日,星期五例在一個字符串中查找一個給定的字符若找到,則從該字符開始打印余下的字符,及該字符是字符串的第幾個字符否則輸出“nomatchfound”。第68頁,共99頁,2023年,2月20日,星期五#include<stdio.h>intcount;char*match(charc,char*sp);/*指針型函數(shù)*/voidmain(){chars[80],ch,*p;gets(s);ch=getchar();p=match(ch,s);/*函數(shù)調(diào)用,返回地址賦p指針*/if(p)printf(”%s%d\n”,p,(count+1));elseprintf(”nomatchfound”);}第69頁,共99頁,2023年,2月20日,星期五char*match(charc,char*sp){/*定義指針型函數(shù)*/count=0;while(c!=sp[count]&&sp[count]!=‘\0’)count++;if(!sp[count])return(0);return(&sp[count]);}/*返回子字符串的地址*/輸入:programminga

輸出:amming6第70頁,共99頁,2023年,2月20日,星期五6.5.2指向函數(shù)的指針(函數(shù)指針)略第71頁,共99頁,2023年,2月20日,星期五6.5函數(shù)與結(jié)構(gòu)結(jié)構(gòu)可以整體賦值可以將結(jié)構(gòu)作為值參數(shù)傳遞給函數(shù),也可以定義返回結(jié)構(gòu)值的函數(shù)。1.將結(jié)構(gòu)成員的值傳遞給函數(shù)--結(jié)構(gòu)成員參數(shù)2.將整個結(jié)構(gòu)作為參數(shù)值傳遞給函數(shù),將這種參數(shù)稱做結(jié)構(gòu)參數(shù)。3.將結(jié)構(gòu)的地址傳給函數(shù),也就是說傳遞指向結(jié)構(gòu)的指針值,這稱為結(jié)構(gòu)指針參數(shù)。第72頁,共99頁,2023年,2月20日,星期五后兩種方式把結(jié)構(gòu)作為整體處理兩種參數(shù)的作用方式和效果不同第73頁,共99頁,2023年,2月20日,星期五6.6.1結(jié)構(gòu)指針在ANSIC標(biāo)準(zhǔn)中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行整體傳送。但是這種傳送要將全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴(yán)重地降低了程序的效率。最好的辦法就是使用指針做參數(shù);實參傳向形參的只是地址值,從而減少了時間和空間的開銷。第74頁,共99頁,2023年,2月20日,星期五一組學(xué)生的平均成績和不及格人數(shù)structstu{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5}, {103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};voidave(structstu*ps);第75頁,共99頁,2023年,2月20日,星期五voidmain(){ voidave(structstu*ps); ave(boy);}第76頁,共99頁,2023年,2月20日,星期五voidave(structstu*ps){intc=0,i;floatave,s=0; for(i=0;i<5;i++,ps++){s+=ps->score; if(ps->score<60)c+=1; }printf("s=%f\n",s);ave=s/5; printf("average=%f\nNopass%d\n",ave,c);}第77頁,共99頁,2023年,2月20日,星期五6.5.2結(jié)構(gòu)型函數(shù)結(jié)構(gòu)型函數(shù):返回類型為結(jié)構(gòu)類型的函數(shù)略第78頁,共99頁,2023年,2月20日,星期五6.6遞歸函數(shù)函數(shù)的遞歸調(diào)用是指調(diào)用一個函數(shù)的過程中直接或間接的調(diào)用該函數(shù)自身這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù),執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。第79頁,共99頁,2023年,2月20日,星期五遞歸調(diào)用的過程分為:①遞歸過程:將原始問題不斷轉(zhuǎn)化為規(guī)模小了一級的新問題,從未知向已知推進(jìn),最終達(dá)到遞歸終結(jié)條件;②回溯過程:從已知條件出發(fā),沿遞歸的逆過程,逐一求值返回,直至遞歸初始處,完成遞歸調(diào)用。第80頁,共99頁,2023年,2月20日,星期五例如:求n的階乘

n!=n(n-1)!(當(dāng)n>1時)n!=1(當(dāng)n=0,1時)longfact(intn){if(n==1)return1;elsereturn(n*fact(n-1));}第81頁,共99頁,2023年,2月20日,星期五由于自調(diào)用過程在函數(shù)內(nèi)必須設(shè)置某些條件,當(dāng)條件成立時終止自調(diào)用過程,并使程序控制逐步從函數(shù)中返回。遞歸調(diào)用機(jī)制是棧數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的。函數(shù)之間由參數(shù)傳遞和返回值聯(lián)系。第82頁,共99頁,2023年,2月20日,星期五n等于3遞歸調(diào)用過程如下;

fact(3)=3*fact(2)2*fact(1)1*fact(0)1

1*123*26第83頁,共99頁,2023年,2月20日,星期五圖6-2遞歸調(diào)用示意圖第84頁,共99頁,2023年,2月20日,星期五大多數(shù)遞歸函數(shù)都能用非遞歸函數(shù)代替例如:求兩個整數(shù)a,b的最大公約數(shù)遞歸:longgcd1(inta,intb){if(a%b==0)returnb;returngcd1(b,a%b);}第85頁,共99頁,2023年,2月20日,星期五非遞歸longgcd2(inta,intb){inttemp;while(b!=0){temp=a%b;a=b;b=temp;}returna;}

使用遞歸函數(shù)簡化了程序設(shè)計提高程序的可讀性,但增加系統(tǒng)開銷。第86頁,共99頁,2023年,2月20日,星期五6.7命令行參數(shù)main()函數(shù)也可以帶有參數(shù)。從操作系統(tǒng)傳遞信息到main()中最常用的方法是使用命令行參數(shù)。使用命令行參數(shù),可以使一個可執(zhí)行程序的執(zhí)行過程,像使用操作系統(tǒng)命令一樣,在命令行中提供運(yùn)行參數(shù)。第87頁,共99頁,2023年,2月20日,星期五使用命令行參數(shù)的形式為:voidmain(intargc,char*argv[]){……}argc參數(shù)個數(shù),比實際參數(shù)個數(shù)多1;*argv[]字符型指針數(shù)組每個元素是指向參數(shù)(字符串常量)的指針

第88頁,共99頁,2023年,2月20日,星期五打印命令行參數(shù)。/*cla.c*/#include<stdio.h>main(intargc,char*argv[]){inticount=0;while(icount<argc){printf(“arg%d;%s\n”,icount,argv[icount]);icount++;}}第89頁,共99頁,2023年,2月20日,星期五編譯、連接,生成可執(zhí)行文件cla.exeC>cla.exedataelementstatement運(yùn)行結(jié)果:arg0:claarg1:dataarg2:elementarg3:statement第90頁,共99頁,2023年,2月20日,星期五6.8標(biāo)準(zhǔn)庫函數(shù)標(biāo)準(zhǔn)庫函數(shù)是指由C

溫馨提示

  • 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

提交評論