版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章模塊化程序設(shè)計(jì)技術(shù)第一頁(yè),共65頁(yè)。自頂向下的設(shè)計(jì)方法
將一個(gè)抽象問(wèn)題分解成多個(gè)抽象級(jí)別較低的子問(wèn)題。在某個(gè)層面上解決子問(wèn)題時(shí),又引入了抽象層次更低的子問(wèn)題,這種由高到底逐步引入子問(wèn)題,直到全部問(wèn)題被解決的過(guò)程和方法被稱(chēng)為自頂向下的設(shè)計(jì)方法。 實(shí)現(xiàn)自頂向下的程序設(shè)計(jì)的一種手段是編寫(xiě)自己的函數(shù)。通常將分解的一個(gè)個(gè)子問(wèn)題編寫(xiě)成一個(gè)個(gè)函數(shù)子程序。
第二頁(yè),共65頁(yè)。
前面幾章我們使用過(guò)printf()、scanf()、sqrt()等C語(yǔ)言系統(tǒng)自帶的一些函數(shù),但是都不知道這些函數(shù)是如何編寫(xiě)出來(lái)的。本章我們重點(diǎn)討論如何編寫(xiě)一個(gè)函數(shù),并利用函數(shù)作為工具來(lái)進(jìn)行自頂向下的程序設(shè)計(jì)。
第三頁(yè),共65頁(yè)。本章學(xué)習(xí)要點(diǎn)怎樣定義函數(shù)?如何調(diào)用函數(shù)?如何聲明函數(shù)?什么是函數(shù)的參數(shù)?在函數(shù)調(diào)用時(shí),參數(shù)是如何傳遞的?在使用函數(shù)的過(guò)程中,要注意哪些問(wèn)題?怎樣確定函數(shù)的參數(shù)?如何使用局部變量和全局變量?什么是靜態(tài)變量?
第四頁(yè),共65頁(yè)。6.1函數(shù)的定義及其原型聲明例1輸入圓柱體的高和半徑,求圓柱體積, volume=π*r2*h。 要求定義和調(diào)用函數(shù)cylinder(r,h)計(jì)算圓柱體的體積。
第五頁(yè),共65頁(yè)。1函數(shù)的定義
函數(shù)是指完成一個(gè)特定工作的獨(dú)立程序模塊。庫(kù)函數(shù):由C語(yǔ)言系統(tǒng)提供定義如scanf()、sqrt()等函數(shù)自定義函數(shù):需要用戶(hù)自己定義如計(jì)算圓柱體體積函數(shù)cylinder()程序中一旦調(diào)用了某個(gè)函數(shù),該函數(shù)就會(huì)完成一些特定的工作,然后返回到調(diào)用它的地方。
第六頁(yè),共65頁(yè)。doublecylinder(doubler,doubleh)/*函數(shù)首部*/{doubleresult; result=3.1415926*r*r*h;/*計(jì)算圓柱體積*/ returnresult; /*返回運(yùn)算結(jié)果*/}Cylinder()函數(shù)的定義函數(shù)類(lèi)型函數(shù)名形參表與函數(shù)類(lèi)型一致
第七頁(yè),共65頁(yè)。2不返回運(yùn)算結(jié)果的函數(shù)定義void函數(shù)名(參數(shù)表) { 函數(shù)實(shí)現(xiàn)過(guò)程}表示不返回結(jié)果不能省略否則函數(shù)類(lèi)型被默認(rèn)定義為int
第八頁(yè),共65頁(yè)。6.2函數(shù)調(diào)用及其數(shù)據(jù)傳遞方式
定義一個(gè)函數(shù)后,就可以在程序中調(diào)用這個(gè)函數(shù)。調(diào)用標(biāo)準(zhǔn)庫(kù)函數(shù)時(shí),在程序的最前面用#include命令包含相應(yīng)的頭文件。調(diào)用自定義函數(shù)時(shí),程序中必須有與調(diào)用函數(shù)相對(duì)應(yīng)的函數(shù)定義。
第九頁(yè),共65頁(yè)。1.函數(shù)調(diào)用的過(guò)程計(jì)算機(jī)在執(zhí)行程序時(shí),從主函數(shù)main開(kāi)始執(zhí)行,如果遇到某個(gè)函數(shù)調(diào)用,主函數(shù)被暫停執(zhí)行,轉(zhuǎn)而執(zhí)行相應(yīng)的函數(shù),該函數(shù)執(zhí)行完后,將返回主函數(shù),然后再?gòu)脑葧和5奈恢美^續(xù)執(zhí)行。函數(shù)遇return或最后的大括號(hào),返回主函數(shù)。
第十頁(yè),共65頁(yè)。分析函數(shù)調(diào)用的過(guò)程#include<stdio.h>intmain(void){doubleheight,radius,v;
doublecylinder(doubler,doubleh);
printf("Enterradiusandheight:"); scanf("%lf%lf",&radius,&height); v=
cylinder(radius,height);
printf("Volume=%.3f\n",v); return0;}doublecylinder(doubler,doubleh)
{ doubleresult; result=3.1415926*r*r*h;
returnresult;
}調(diào)用函數(shù)實(shí)參形參執(zhí)行函數(shù)中的語(yǔ)句返回調(diào)用它的地方
第十一頁(yè),共65頁(yè)。2.參數(shù)傳遞函數(shù)定義時(shí)的參數(shù)被稱(chēng)為形式參數(shù)(簡(jiǎn)稱(chēng)形參)doublecylinder(doubler,doubleh)函數(shù)調(diào)用時(shí)的參數(shù)被稱(chēng)為實(shí)際參數(shù)(簡(jiǎn)稱(chēng)實(shí)參)v=cylinder(radius,height);實(shí)參形參在參數(shù)傳遞過(guò)程中,實(shí)參把值復(fù)制給形參。形參和實(shí)參一一對(duì)應(yīng):數(shù)量一致,類(lèi)型一致,順序一致形參:變量,用于接受實(shí)參傳遞過(guò)來(lái)的值實(shí)參:常量、變量或表達(dá)式
第十二頁(yè),共65頁(yè)。3.函數(shù)結(jié)果返回函數(shù)返回的兩種情況完成確定的運(yùn)算,有一個(gè)運(yùn)算結(jié)果返回給主調(diào)函數(shù)。完成指定工作,沒(méi)有確定的運(yùn)算結(jié)果需返回給主調(diào)函數(shù)(函數(shù)類(lèi)型void)。函數(shù)結(jié)果返回的形式:return表達(dá)式;return(表達(dá)式);
第十三頁(yè),共65頁(yè)。4.函數(shù)原型聲明函數(shù)類(lèi)型函數(shù)名(參數(shù)表);doublecylinder(doubler,doubleh);函數(shù)必須先定義后調(diào)用,將主調(diào)函數(shù)放在被調(diào)函數(shù)的后面,就像變量先定義后使用一樣。如果自定義函數(shù)在主調(diào)函數(shù)的后面,就需要在函數(shù)調(diào)用前,加上函數(shù)原型聲明。只寫(xiě)函數(shù)定義中的第1行(函數(shù)首部),并以分號(hào)結(jié)束。
第十四頁(yè),共65頁(yè)。//函數(shù)原型聲明#include<stdio.h>intmain(void){doubleheight,radius,v;
doublecylinder(doubler,doubleh);
printf("Enterradiusandheight:"); scanf("%lf%lf",&radius,&height); v=
cylinder(radius,height); printf("Volume=%.3f\n",v); return0;}doublecylinder(doubler,doubleh)
{ doubleresult; result=3.1415926*r*r*h;
returnresult;
}#include<stdio.h>doublecylinder(doubler,doubleh)
{ doubleresult; result=3.1415926*r*r*h;
returnresult;
}intmain(void){doubleheight,radius,v;
doublecylinder(doubler,doubleh);
printf("Enterradiusandheight:"); scanf("%lf%lf",&radius,&height); v=
cylinder(radius,height); printf("Volume=%.3f\n",v); return0;}//函數(shù)原型聲明
第十五頁(yè),共65頁(yè)。#include<stdio.h>voidmain(){intmax(intx,inty);inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“max=%d\n”,c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}例2定義一個(gè)函數(shù),比較并返回兩個(gè)數(shù)據(jù)的較大者
第十六頁(yè),共65頁(yè)。例3定義判斷奇偶數(shù)的函數(shù)even(n)定義一個(gè)判斷奇偶數(shù)的函數(shù)even(n),當(dāng)n為偶數(shù)時(shí)返回1,否則返回0。inteven(intn) {if(n%2==0)
return1;
else
return0;
} intmain(){intn;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&n);if(even(n)==1)printf("是偶數(shù)");elseprintf("是奇數(shù)");return0;}
第十七頁(yè),共65頁(yè)。#include<stdio.h>intmain(void){ intn; intfactorial(intn); printf("請(qǐng)輸入n的值:"); scanf("%d",&n); printf("%d\n",factorial(n));return0;}例4求階乘問(wèn)題。輸入一個(gè)正整數(shù) n,輸出n!。intfactorial(intn){inti,fact=1;for(i=1;i<=n;i++) fact=fact*i;returnfact;}
第十八頁(yè),共65頁(yè)。例5判斷素?cái)?shù)的函數(shù)求100以?xún)?nèi)的全部素?cái)?shù),每行輸出10個(gè)素?cái)?shù),要求定義和調(diào)用函數(shù)prime(m)判斷m是否為素?cái)?shù),當(dāng)m為素?cái)?shù)時(shí)返回1,否則返回0。
算法描述:對(duì)2~100之間的每個(gè)數(shù)進(jìn)行判斷,若是素?cái)?shù),則輸出該數(shù)。for(m=2;m<=100;m++)if(m是素?cái)?shù))printf("%d",m);prime(m)!=0
第十九頁(yè),共65頁(yè)。#include<stdio.h>#include<math.h>intmain(){intcount,m;
intprime(intm);count=0;for(m=2;m<=100;m++){if(prime(m)!=0
) {printf("%6d",m); count++; if(count%10==0) printf("\n");} } printf("\n");}intprime(intm){inti,n;if(m==1)return0;
n=sqrt(m);for(i=2;i<=n;i++)if(m%i==0){return0;}
return
1;}
第二十頁(yè),共65頁(yè)。使用結(jié)構(gòu)化程序設(shè)計(jì)方法解決復(fù)雜的問(wèn)題把大問(wèn)題分解成若干小問(wèn)題,小問(wèn)題再進(jìn)一步分解成若干更小的問(wèn)題;寫(xiě)程序時(shí),用main()調(diào)用解決小問(wèn)題的函數(shù);這些函數(shù)又進(jìn)一步調(diào)用解決更小問(wèn)題的函數(shù),從而形成函數(shù)的嵌套調(diào)用6.3函數(shù)的嵌套調(diào)用
第二十一頁(yè),共65頁(yè)。main()函數(shù)1函數(shù)2……函數(shù)m函數(shù)1_1函數(shù)1_2函數(shù)m_1函數(shù)m_n……程序結(jié)構(gòu)
第二十二頁(yè),共65頁(yè)。例6設(shè)計(jì)一個(gè)常用圓形體體積計(jì)算器,采用命令方式輸入1、2、3,分別選擇計(jì)算球體、圓柱體、圓錐體的體積,并輸入計(jì)算所需相應(yīng)參數(shù)。分析:輸入1、2、3選擇計(jì)算3種體積,其他輸入結(jié)束計(jì)算;設(shè)計(jì)一個(gè)控制函數(shù)cal(),經(jīng)它辨別圓形體的類(lèi)型再調(diào)用計(jì)算球體、圓柱體、圓錐體體積的函數(shù);設(shè)計(jì)單獨(dú)的函數(shù)計(jì)算不同圓形體的體積程序解析-計(jì)算常用圓形體體積
第二十三頁(yè),共65頁(yè)。3層結(jié)構(gòu),5個(gè)函數(shù)降低程序的構(gòu)思、編寫(xiě)、調(diào)試的復(fù)雜度可讀性好程序結(jié)構(gòu)main()cal()vol_ball()vol_cylind()vol_cone()
第二十四頁(yè),共65頁(yè)。#definePI3.141592654#include<stdio.h>voidcal(intsel);
intmain(void){intsel;
while(1){printf("1-計(jì)算球體體積\n"); printf("2-計(jì)算圓柱體積\n"); printf("3-計(jì)算圓錐體積\n"); printf("其他-退出程序運(yùn)行\(zhòng)n"); printf("請(qǐng)輸入計(jì)算命令:"); scanf("%d",&sel); if(sel<1||sel>3)
break; /*輸入非1~3,循環(huán)結(jié)束*/ else
cal(sel); /*輸入1~3,調(diào)用cal()*/ }return0;}
第二十五頁(yè),共65頁(yè)。voidcal(intsel){doublevol_ball(void);doublevol_cylind(void);doublevol_cone(void);switch(sel){case1:printf("球體積為:%.2f\n",vol_ball());break; case2:printf("圓柱體積為:%.2f\n",vol_cylind()); break;case3:printf("圓錐體積為:%.2f\n",vol_cone());break; }}/*計(jì)算球體體積V=4/3*PI*r*r*r*/doublevol_ball(){doubler;printf("請(qǐng)輸入球的半徑:");scanf("%lf",&r);return(4.0/3.0*PI*r*r*r);}/*計(jì)算圓柱體積V=PI*r*r*h*/doublevol_cylind(){doubler,h;printf("請(qǐng)輸入圓柱的底圓半徑和高:");scanf("%lf%lf",&r,&h);return(PI*r*r*h);}/*計(jì)算圓錐體積V=h/3*PI*r*r*/doublevol_cone(){doubler,h;printf("請(qǐng)輸入圓錐的底圓半徑和高:");scanf("%lf%lf",&r,&h);return(PI*r*r*h/3.0);}
第二十六頁(yè),共65頁(yè)。函數(shù)的嵌套調(diào)用在一個(gè)函數(shù)中再調(diào)用其它函數(shù)的情況稱(chēng)為函數(shù)的嵌套調(diào)用。如果函數(shù)A調(diào)用函數(shù)B,函數(shù)B再調(diào)用函數(shù)C,一個(gè)調(diào)用一個(gè)地嵌套下去,構(gòu)成了函數(shù)的嵌套調(diào)用。具有嵌套調(diào)用函數(shù)的程序,需要分別定義多個(gè)不同的函數(shù)體,每個(gè)函數(shù)體完成不同的功能,它們合起來(lái)解決復(fù)雜的問(wèn)題。
第二十七頁(yè),共65頁(yè)。1.遞歸函數(shù)基本概念6.4函數(shù)的遞歸調(diào)用
第二十八頁(yè),共65頁(yè)。例8求階乘問(wèn)題。輸入一個(gè)正整數(shù)n,輸出n!。方法一:使用循環(huán)結(jié)構(gòu)n!=1*2*3*....*nfor(result=1,i=1;i<=n;i++)result=result*i;2.遞歸函數(shù)應(yīng)用舉例
第二十九頁(yè),共65頁(yè)。#include<stdio.h>intmain(void){ intn; intfact(intn); printf("請(qǐng)輸入n的值:"); scanf("%d",&n); printf("%d\n",fact(n));return0;}方法一intfact(intn){inti,result=1;for(i=1;i<=n;i++)
result=result*i;returnresult;}
第三十頁(yè),共65頁(yè)。遞歸法遞歸定義n!=n*(n-1)!(n>1)n!=1(n=0,1)遞歸函數(shù)fact(n)方法二:遞歸法求階乘
第三十一頁(yè),共65頁(yè)。#include<stdio.h>intfact(intn);intmain(void){intn;printf("請(qǐng)輸入n的值:");scanf("%d",&n);printf("%d",fact(n));return0;}intfact(intn) {intresult;if(n==1||n==0) result=1;elseresult=n*fact(n-1);returnresult;}
第三十二頁(yè),共65頁(yè)。main()fact(3)fact(2)fact(1){....{....{....{....printf(fact(3))f=3*fact(2)f=2*fact(1)f=1}return(f)return(f)return(f)}}}遞歸函數(shù)fact(n)的實(shí)現(xiàn)過(guò)程fact(3)=3*fact(2)=
2*fact(1)=
fact(1)=12*1=23*2=6
第三十三頁(yè),共65頁(yè)。例9編程計(jì)算下面的表達(dá)式fib(g)=0g=0fib(g)=2g=1,2fib(g)=fib(g-1)+fib(g-2)g>=3計(jì)算并輸出第n項(xiàng)的值
第三十四頁(yè),共65頁(yè)。#include<stdio.h>longfib(intg){if(g==0)return(0);elseif(g==1||g==2)return(2);elsereturn(fib(g-1)+fib(g-2));}voidmain(){longk,n;printf("請(qǐng)輸入n的值(n>=0):"); scanf("%d",&n); k=fib(n);printf("k=%ld\n",k);}
第三十五頁(yè),共65頁(yè)。6.5變量與函數(shù)1局部變量和全局變量局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍:本函數(shù)內(nèi)部定義在復(fù)合語(yǔ)句內(nèi)的變量作用范圍:復(fù)合語(yǔ)句內(nèi)部全局變量 在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍:從定義處到源文件結(jié)束(包括各函數(shù))
第三十六頁(yè),共65頁(yè)。例10在復(fù)合語(yǔ)句中定義局部變量。#include<stdio.h>intmain(void){inta;a=1;
{ /*復(fù)合語(yǔ)句開(kāi)始*/intb=2;b=a+b;a=a+b;
}
printf("%d",a); return0;}b:小范圍內(nèi)的臨時(shí)變量
第三十七頁(yè),共65頁(yè)。例11全局變量定義#include"stdio.h"intx; /*定義全局變量x*/intf(){intx=4;/*x為局部變量*/returnx;}intmain(void){inta=1;x=a; /*對(duì)全局變量x賦值*/a=f(); /*a的值為4*/{intb=2;
b=a+b; /*b的值為6*/
x=x+b; /*全局變量運(yùn)算*/}printf("%d%d",a,x);return0;}若局部變量與全局變量同名,局部變量?jī)?yōu)先
第三十八頁(yè),共65頁(yè)。自動(dòng)變量(auto):普通的局部變量intx,y;
autointx,y;charc1;
autocharc1;函數(shù)調(diào)用時(shí),定義變量,分配存儲(chǔ)單元。函數(shù)調(diào)用結(jié)束,收回存儲(chǔ)單元。全局變量:從程序執(zhí)行開(kāi)始,到程序的結(jié)束,存儲(chǔ)單元始終保持。變量生命周期變量從定義開(kāi)始分配存儲(chǔ)單元,到運(yùn)行結(jié)束存儲(chǔ)單元被回收的整個(gè)過(guò)程。2變量生命周期和靜態(tài)局部變量
第三十九頁(yè),共65頁(yè)。static
類(lèi)型名變量表作用范圍:局部變量生命周期:全局變量靜態(tài)局部變量
第四十頁(yè),共65頁(yè)。例12靜態(tài)局部變量示例#include<stdio.h>voidfun(intk);intmain(void){intk;for(k=1;k<=3;k++)fun(k);return0;}voidfun(intk){staticinta=0;a+=k;printf("%d,",a);
}1,3,6靜態(tài)變量會(huì)記住前一次調(diào)用時(shí)留下來(lái)的值靜態(tài)變量的初值為0
第四十一頁(yè),共65頁(yè)。6.6函數(shù)與指針
討論了將函數(shù)實(shí)參傳遞給形參的傳遞方式以及函數(shù)值的返回方式,這些方式傳遞的都是數(shù)據(jù)對(duì)象的值。本節(jié)來(lái)討論如何在函數(shù)之間傳遞一個(gè)數(shù)據(jù)對(duì)象的地址?把數(shù)據(jù)對(duì)象的地址在函數(shù)之間傳遞有什么作用?
第四十二頁(yè),共65頁(yè)。1.用指針做函數(shù)的形式參數(shù)
在前面的學(xué)習(xí)中,我們發(fā)現(xiàn):函數(shù)的實(shí)參是主調(diào)函數(shù)中的局部變量,形參是被調(diào)函數(shù)中的局部變量,它們?cè)趦?nèi)存中占據(jù)著不同的存儲(chǔ)單元。這樣在被調(diào)函數(shù)中對(duì)形參的任何改變都不會(huì)影響與其相對(duì)應(yīng)的實(shí)參。然而,有些問(wèn)題希望在函數(shù)內(nèi)部對(duì)形參的改變也能反映到與其相對(duì)應(yīng)的實(shí)參中;另外可知,函數(shù)只能返回一個(gè)計(jì)算結(jié)果,有時(shí)人們希望函數(shù)一次性的將多個(gè)計(jì)算結(jié)果返回到主調(diào)函數(shù)中。
第四十三頁(yè),共65頁(yè)。
例13輸入a和b兩個(gè)整數(shù),按先大后小的順序輸出a和b。解題思路:用指針?lè)椒▉?lái)處理這個(gè)問(wèn)題。不交換整型變量的值,而是交換兩個(gè)指針變量的值。
第四十四頁(yè),共65頁(yè)。#include<stdio.h>intmain(){int*p1,*p2,*p,a,b;printf(“integernumbers:");scanf(“%d,%d”,&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf(“a=%d,b=%d\n”,a,b);printf(“%d,%d\n”,*p1,*p2);return0;}abp1p2p59&a&b成立
第四十五頁(yè),共65頁(yè)。指針變量作為函數(shù)參數(shù)
例14題目要求同例13,即對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出?,F(xiàn)用函數(shù)處理,而且用指針類(lèi)型的數(shù)據(jù)作函數(shù)參數(shù)。解題思路:定義一個(gè)函數(shù)swap,將指向兩個(gè)整型變量的指針變量作為實(shí)參傳遞給swap函數(shù)的形參指針變量,在函數(shù)中通過(guò)指針實(shí)現(xiàn)交換兩個(gè)變量的值。
第四十六頁(yè),共65頁(yè)。#include<stdio.h>intmain(){voids*p1,int*p2);inta,b;int*pointer_1,*pointer_2;printf("pleaseenteraandb:");scanf(“%d,%d”,&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)s);printf(“max=%d,min=%d\n”,a,b);return0;}abpointer_159&a&bpointer_2
第四十七頁(yè),共65頁(yè)。voids*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}abpointer_159&a&bpointer_2p1&ap2&b95
第四十八頁(yè),共65頁(yè)。voids*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voids*p1,int*p2){int*temp;
*temp=*p1;*p1=*p2;*p2=*temp;}錯(cuò)?。?!無(wú)確定的指向
第四十九頁(yè),共65頁(yè)。解題思路:嘗試調(diào)用swap函數(shù)來(lái)實(shí)現(xiàn)題目要求。在函數(shù)中改變形參(指針變量)的值,希望能由此改變實(shí)參(指針變量)的值例15對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出。
第五十頁(yè),共65頁(yè)。#include<stdio.h>intmain(){voids*p1,int*p2);inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)s);printf("max=%d,min=%d\n",a,b);return0;}voids*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}錯(cuò)!??!只交換形參指向
第五十一頁(yè),共65頁(yè)。注意:函數(shù)的調(diào)用可以(而且只可以)得到一個(gè)返回值(即函數(shù)值),而使用指針變量作參數(shù),可以得到多個(gè)變化了的值。如果不用指針變量是難以做到這一點(diǎn)的。要善于利用指針?lè)ā?/p>
第五十二頁(yè),共65頁(yè)。2.返回指針值的函數(shù)指針類(lèi)型的數(shù)據(jù)能夠作為函數(shù)的參數(shù),也能作為函數(shù)的返回值,也就是說(shuō)函數(shù)的值可以是一個(gè)變量的地址。返回指針值的函數(shù)定義形式如下:FunctionType*FunctionName(FormalParameterTypeList){functionbody;}
第五十三頁(yè),共65頁(yè)。例題6-5返回指針值的函數(shù)編寫(xiě)測(cè)試實(shí)例。#include"stdio.h"#include"stdlib.h"int*plus(int,int); /*聲明求最大值函數(shù)原型*/voidmain(){ inta=5,b=7,*pf; pf=plus(a,b); printf("a=%d,b=%d,*pf=%d\n",a,b,*pf);}int*plus(intx,inty) {int*p; p=(int*)malloc(sizeof(int)); /*動(dòng)態(tài)申請(qǐng)存儲(chǔ)單元*/*p=x+y; returnp; }
第五十四頁(yè),共65頁(yè)。3指向函數(shù)的指針(1)什么是函數(shù)指針
如果在程序中定義了一個(gè)函數(shù),在編譯時(shí),編譯系統(tǒng)為函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的起始地址,稱(chēng)為這個(gè)函數(shù)的指針。
第五十五頁(yè),共65頁(yè)。什么是函數(shù)指針(續(xù))
可以定義一個(gè)指向函數(shù)的指針變量,用來(lái)存放某一函數(shù)的起始地址,這就意味著此指針變量指向該函數(shù)。例如:int(*p)(int,int);定義p是指向函數(shù)的指針變量,它可以指向類(lèi)型為整型且有兩個(gè)整型參數(shù)的函數(shù)。p的類(lèi)型用int(*)(int,int)表示
第五十六頁(yè),共65頁(yè)。(2)用函數(shù)指針變量調(diào)用函數(shù)例16用函數(shù)求整數(shù)a和b中的大者。解題思路:定義一個(gè)函數(shù)max,實(shí)現(xiàn)求兩個(gè)整數(shù)中的大者。在主函數(shù)調(diào)用max函數(shù),除了可以通過(guò)函數(shù)名調(diào)用外,還可以通過(guò)指向函數(shù)的指針變量來(lái)實(shí)現(xiàn)。分別編程并作比較。
第五十七頁(yè),共65頁(yè)。#include<stdio.h>intmain(){intmax(int,int);inta,b,c;printf("p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年真人秀節(jié)目制作與傳播項(xiàng)目可行性研究報(bào)告
- 2025年大數(shù)據(jù)分析與運(yùn)營(yíng)服務(wù)項(xiàng)目可行性研究報(bào)告
- 2025年氫能汽車(chē)推廣項(xiàng)目可行性研究報(bào)告
- 2025年城市水務(wù)管理優(yōu)化與創(chuàng)新項(xiàng)目可行性研究報(bào)告
- 2025年AI助手在企業(yè)中的應(yīng)用可行性研究報(bào)告
- 紙業(yè)購(gòu)銷(xiāo)合同范本
- 臨時(shí)補(bǔ)償協(xié)議書(shū)
- 煤礦買(mǎi)賣(mài)合同協(xié)議
- 部編版歷史中考試題附答案
- 綜合執(zhí)法考試題目及答案
- 自動(dòng)化生產(chǎn)線調(diào)試與安裝試題及答案
- 2025年國(guó)家開(kāi)放大學(xué)《法學(xué)導(dǎo)論》期末考試備考題庫(kù)及答案解析
- 物業(yè)公司動(dòng)火安全管理制度
- 一堂有趣的實(shí)驗(yàn)課作文(6篇)
- 幕墻創(chuàng)優(yōu)工程匯報(bào)材料
- 2025年鐵嶺銀行見(jiàn)習(xí)生招聘50人筆試備考試題及答案解析
- 老年人穿衣搭配課件
- 【2025年】嘉興市委宣傳部所屬事業(yè)單位選聘工作人員考試試卷及參考答案
- 二手房意向金合同范本
- 充電樁與后臺(tái)服務(wù)器通訊協(xié)議V2G
- 抵御宗教極端思想課件
評(píng)論
0/150
提交評(píng)論