




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
函數(shù)—C語(yǔ)言程序設(shè)計(jì)目錄contentC語(yǔ)言程序結(jié)構(gòu)及模塊化設(shè)計(jì)1C語(yǔ)言函數(shù)的定義、原型和調(diào)用2變量的存儲(chǔ)類(lèi)型3函數(shù)間的數(shù)據(jù)傳遞4遞歸函數(shù)54.1C語(yǔ)言程序結(jié)構(gòu)及模塊化設(shè)計(jì)
開(kāi)發(fā)一些比較復(fù)雜的軟件時(shí),結(jié)構(gòu)化的開(kāi)發(fā)方法是常采用的方法,基本要點(diǎn)是:
基本思想:把一個(gè)復(fù)雜問(wèn)題的求解過(guò)程分階段進(jìn)行,每個(gè)階段
處理的問(wèn)題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶?/p>
自頂向下
逐步求精
模塊化設(shè)計(jì)
4.1.1結(jié)構(gòu)化軟件及其優(yōu)越性模塊化軟件示意圖矩形框:功能模塊箭頭:模塊間的調(diào)用關(guān)系(箭頭指向的是被調(diào)用模塊)
4.1.1結(jié)構(gòu)化軟件及其優(yōu)越性“工資計(jì)算程序”的自頂向下開(kāi)發(fā)有效地控制了程序設(shè)計(jì)的復(fù)雜性大大提高軟件的可靠性大幅度縮短開(kāi)發(fā)周期避免程序開(kāi)發(fā)的重復(fù)勞動(dòng),有效提高軟件開(kāi)發(fā)效率良好的可維護(hù)性4.1.1結(jié)構(gòu)化軟件及其優(yōu)越性從軟件工程上看,可靠性、效率、可維護(hù)性是軟件質(zhì)量的主要評(píng)價(jià)指標(biāo)。因此,模塊化軟件能夠成為高質(zhì)量的軟件。函數(shù)的調(diào)用關(guān)系4.1.2C語(yǔ)言程序的結(jié)構(gòu)有且僅有一個(gè)函數(shù)稱(chēng)為主函數(shù)main()函數(shù)調(diào)用語(yǔ)句程序的執(zhí)行總是從主函數(shù)開(kāi)始。主函數(shù)中的所有語(yǔ)句按先后順序執(zhí)行完,則程序執(zhí)行結(jié)束。4.2C語(yǔ)言函數(shù)的定義、原型和調(diào)用<存儲(chǔ)類(lèi)型><數(shù)據(jù)類(lèi)型>函數(shù)名(<形式參數(shù)及說(shuō)明>){
說(shuō)明語(yǔ)句;
執(zhí)行語(yǔ)句;}函數(shù)的定義:即編寫(xiě)完成函數(shù)功能的程序塊。函數(shù)頭函數(shù)體函數(shù)定義的一般格式是:4.2.1函數(shù)的定義函數(shù)定義的幾點(diǎn)說(shuō)明:(1)
函數(shù)的存儲(chǔ)類(lèi)型說(shuō)明只有static(靜態(tài))和extern(外部)兩種。存
儲(chǔ)類(lèi)型為static時(shí),對(duì)函數(shù)的調(diào)用局限于所在文件;存儲(chǔ)類(lèi)型為 extern時(shí),可省略,表示此函數(shù)是外部函數(shù),可供其他文件調(diào)用。(2)函數(shù)的數(shù)據(jù)類(lèi)型是函數(shù)返回值的數(shù)據(jù)類(lèi)型,可以是各種基本數(shù)據(jù)類(lèi)
型(char、int、double等)和復(fù)雜數(shù)據(jù)類(lèi)型,包括指針類(lèi)型和結(jié)構(gòu)
體。當(dāng)函數(shù)的數(shù)據(jù)類(lèi)型為int時(shí),可省略。當(dāng)函數(shù)不需要返回值時(shí),
將函數(shù)的數(shù)據(jù)類(lèi)型指定為void。(3)函數(shù)名與變量名一樣也是標(biāo)識(shí)符的一種,與變量名命名規(guī)則類(lèi)似,最
好“見(jiàn)名知意”。由圓括號(hào)包圍的部分稱(chēng)為參數(shù)表,也稱(chēng)形式參數(shù)
表,簡(jiǎn)稱(chēng)形參表。(4)由大括號(hào)括起來(lái)的程序部分稱(chēng)為函數(shù)體。4.2.2函數(shù)的調(diào)用1、
函數(shù)的執(zhí)行過(guò)程
在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)時(shí),程序控制就從調(diào)用函數(shù)中轉(zhuǎn)移到被調(diào)用函數(shù),并且從被調(diào)用函數(shù)的函數(shù)體起始位置開(kāi)始執(zhí)行該函數(shù)的語(yǔ)句。在執(zhí)行完函數(shù)體中的所有語(yǔ)句,或者遇到return語(yǔ)句時(shí),程序控制就返回調(diào)用函數(shù)中原來(lái)的斷點(diǎn)位置繼續(xù)執(zhí)行。4.2.2函數(shù)的調(diào)用2、函數(shù)的原型(也稱(chēng)函數(shù)聲明)在一個(gè)函數(shù)中調(diào)用另外一個(gè)函數(shù)(即被調(diào)用的函數(shù))需要具備下列條件:(1)被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫(kù)函數(shù)或用戶(hù)自己定義的函數(shù))。(2)如果使用庫(kù)函數(shù),在本文件的開(kāi)頭用#include命令將調(diào)用有關(guān)函數(shù)時(shí)所需
要的信息“包含”到本文件中來(lái);如果調(diào)用的是用戶(hù)自己定義的函數(shù),在
主調(diào)函數(shù)所在文件中,對(duì)被調(diào)用函數(shù)進(jìn)行聲明。在C語(yǔ)言中,函數(shù)原型的一般形式為:(1)函數(shù)數(shù)據(jù)類(lèi)型函數(shù)名(參數(shù)類(lèi)型1,參數(shù)類(lèi)型2........);(2)函數(shù)數(shù)據(jù)類(lèi)型函數(shù)名(參數(shù)類(lèi)型1參數(shù)名1,參數(shù)類(lèi)型2參數(shù)名2........);4.2.2函數(shù)的調(diào)用3、函數(shù)調(diào)用時(shí)參數(shù)的使用在調(diào)用一個(gè)函數(shù)時(shí),必須使用具有實(shí)際量的值作為函數(shù)的參數(shù),這時(shí)函數(shù)的參數(shù)稱(chēng)為實(shí)參數(shù)。(1)實(shí)參數(shù)的個(gè)數(shù)和順序必須與函數(shù)定義的形式參數(shù)保持一致;(2)實(shí)參數(shù)據(jù)類(lèi)型必須和相應(yīng)的形式參數(shù)相同??梢赃@樣認(rèn)為:實(shí)
參的值是形參初始化的初值。4.2.2函數(shù)的調(diào)用4、函數(shù)調(diào)用的方式凡是已定義的函數(shù)就可以用如下格式直接調(diào)用它:源程序中可出現(xiàn)以下三種函數(shù)調(diào)用方式:(1)
函數(shù)調(diào)用語(yǔ)句(2)
函數(shù)表達(dá)式(3)
作為函數(shù)的實(shí)參函數(shù)原型:voiddelay(unsignedt);調(diào)用語(yǔ)句:delay(600000);v=volume(3,4,5); c=2*max(a,b);m=max(a,max(b,c));函數(shù)名(實(shí)參表);其中max(b,c)是第一次函數(shù)調(diào)用,它的返回值作為max()第二次調(diào)用的實(shí)參。m的值取a,b,c中最大值。4.2.3參數(shù)數(shù)目可變的函數(shù) C語(yǔ)言中可以定義參數(shù)數(shù)目可變的函數(shù)。定義參數(shù)數(shù)目可變的函數(shù)時(shí),必須至少明確說(shuō)明一個(gè)形參;在列出的最后一個(gè)形參后面用省略符(.....)來(lái)說(shuō)明該函數(shù)的參數(shù)數(shù)目可變。例如: 函數(shù)原型:intprintf(char*format,…..);
調(diào)用形式:printf(格式化字符串,輸出參數(shù)1,輸出參數(shù)2.,....,
輸出參數(shù)n);4.3變量的存儲(chǔ)類(lèi)型C語(yǔ)言中的變量具有兩種屬性:(1)根據(jù)變量所持有數(shù)據(jù)的性質(zhì)不同而分為各種數(shù)據(jù)類(lèi)型。(2)根據(jù)變量的存儲(chǔ)方式不同而分為各種存儲(chǔ)類(lèi)型。
變量的數(shù)據(jù)類(lèi)型決定了該變量所占內(nèi)存單元的大小及形式;變量的存儲(chǔ)類(lèi)型規(guī)定了該變量所在的存儲(chǔ)區(qū)域,因而規(guī)定了該變量作用時(shí)間的長(zhǎng)短,即壽命的長(zhǎng)短,這種性質(zhì)又稱(chēng)為"存在性"。
變量在程序中說(shuō)明的位置決定了該變量的作用域,即在什么范圍內(nèi)可以引用該變量,"可引用"又稱(chēng)為"可見(jiàn)",所以這種性質(zhì)又稱(chēng)為"可見(jiàn)性"。作用域:是該變量可訪(fǎng)問(wèn)的程序部分。變量的生存期:變量從定義開(kāi)始到它所占有的存儲(chǔ)空間被系統(tǒng)收回為止的這段時(shí)間。變量的可見(jiàn)性:在某個(gè)程序區(qū)域,可以對(duì)變量進(jìn)行訪(fǎng)問(wèn)(或稱(chēng)存取)操作,則稱(chēng)該變量在該區(qū)域?yàn)榭梢?jiàn)的,否則為不可見(jiàn)的。全局變量和局部變量:在一個(gè)函數(shù)內(nèi)部或復(fù)合語(yǔ)句內(nèi)部定義的變量叫內(nèi)部變量,又稱(chēng)為"局部變量"。在函數(shù)外定義的變量稱(chēng)為外部變量,又稱(chēng)為"全局變量"。4.3.1——幾個(gè)基本概念動(dòng)態(tài)存儲(chǔ)變量和靜態(tài)存儲(chǔ)變量在程序運(yùn)行期間,所有的變量均需占有內(nèi)存,有的是臨時(shí)占用內(nèi)存,有的是整個(gè)程序運(yùn)行過(guò)程中從頭到尾占用內(nèi)存。對(duì)于在程序運(yùn)行期間根據(jù)需要進(jìn)行臨時(shí)動(dòng)態(tài)分配存儲(chǔ)空間的變量稱(chēng)為“動(dòng)態(tài)存儲(chǔ)變量”,對(duì)于在程序運(yùn)行期間永久性占用內(nèi)存的變量稱(chēng)為“靜態(tài)存儲(chǔ)變量"。4.3.1——幾個(gè)基本概念一個(gè)正在運(yùn)行的程序可將其使用內(nèi)存的情況分為如下三類(lèi):
程序代碼區(qū):程序的指令代碼存放在程序代碼區(qū)。
靜態(tài)存儲(chǔ)區(qū):靜態(tài)存儲(chǔ)變量存放區(qū),包括全局變量。
動(dòng)態(tài)存儲(chǔ)區(qū):存放局部自動(dòng)變量,函數(shù)的形參以及函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。4.3.1——使用內(nèi)存的情況變量定義的一般形式為:<存儲(chǔ)類(lèi)型>數(shù)據(jù)類(lèi)型變量名表;
存儲(chǔ)類(lèi)型包括:auto自動(dòng)型register寄存器型extern外部參照型static靜態(tài)型4.3.1——變量定義與存儲(chǔ)類(lèi)型1.自動(dòng)變量用關(guān)鍵字auto進(jìn)行存儲(chǔ)類(lèi)型聲明4.3.2自動(dòng)型變量voidmain{ autointx,y; autofloatz; ……..}
(1)(2)if(x!=y){inti;for(i=0;i<10;i++){intj;……}}
在主函數(shù)內(nèi)定義了自動(dòng)型int變量x,y和自動(dòng)型float變量z,在函數(shù)內(nèi)或復(fù)合語(yǔ)句中定義自動(dòng)型變量時(shí)auto可缺省在條件判斷后的那個(gè)復(fù)合語(yǔ)句中定義了一個(gè)自動(dòng)型int變量i,在for循環(huán)后的那個(gè)復(fù)合語(yǔ)句中定義了一個(gè)自動(dòng)型int變量j2.
作用域及壽命
由于自動(dòng)型變量只能作內(nèi)部變量,所以自動(dòng)變量只在定義它的函數(shù)或復(fù)合語(yǔ)句內(nèi)有效,即“局部可見(jiàn)”。變量的作用域是指該程序中可以使用該變量名字的范圍。對(duì)于在函數(shù)開(kāi)頭聲明的自動(dòng)變量來(lái)說(shuō),其作用域是聲明該變量的函數(shù)。不同函數(shù)中聲明的具有相同名字的各個(gè)局部變量之間沒(méi)有任何關(guān)系。函數(shù)的參數(shù)也是這樣的,實(shí)際上可以將它看作是局部變量。
4.3.2自動(dòng)型變量4.3.2自動(dòng)型變量#include<stdio.h>voidmain(){intx=5;//auto缺省……….(1)printf("x=%d\t",x);if(x>0){intx=10;//auto缺省…(2)printf("x=%d\t",x);}printf("x=%d\n",x+2);}例4.1自動(dòng)型變量的作用域
運(yùn)行結(jié)果:
x=5x=10x=7#include<stdio.h>voidfunc();voidfunc(){ autointa=0; printf("aoffunc()=%d\n",++a);}voidmain(){ inta=10; func(); printf("aofmain()=%d\n",++a); func(); func();}4.3.2自動(dòng)型變量例4.2下面的例子說(shuō)明了自動(dòng)變量的特性
調(diào)用func()函數(shù)
運(yùn)行結(jié)果:
aoffunc()=1 aofmain()=11 aoffunc()=1 aoffunc()=14.3.2自動(dòng)型變量#include<stdio.h>intn;voidshow();voidshow(){autointi=3;n++;i++;printf("inputthevalue:n=%di=%d\n",n,i);{autointi=10;i++;printf("nowthevaluei=%d\n",i);}printf("thenthevaluei=%d\n",i);}voidmain(){autointi;autointn=1;printf("atfirstn=%d\n",n);for(i=1;i<3;i++){show();}printf("atlastn=%d",n);}
運(yùn)行結(jié)果:atfirstn=1inputthevalue:n=1i=4nowthevaluei=11thenthevaluei=4inputthevalue:n=2i=4nowthevaluei=11thenthevaluei=4atlastn=1
例4.3下面的程序說(shuō)明自動(dòng)變量的初始化和作用域1.定義寄存器型變量在函數(shù)內(nèi)或復(fù)合語(yǔ)句內(nèi)定義,例如:寄存器型變量存儲(chǔ)在CPU的通用寄存器中,因?yàn)閿?shù)據(jù)在寄存器中操作比在內(nèi)存中快得多,因此通常把程序中使用頻率最高的少數(shù)幾個(gè)變量定義為register型,目的是提高運(yùn)行速度,從而節(jié)省了大量的時(shí)間,大大加快了程序的運(yùn)行速度。voidmain(){registerinti;for(i=0;i=<100;i++){………}}4.3.3寄存器型變量
4.3.3寄存器型變量2.分配寄存器的條件(1)有空閑的寄存器;(2)變量所表示的數(shù)據(jù)的長(zhǎng)度不超過(guò)寄存器的位長(zhǎng);3.作用域和壽命作用域和壽命同auto類(lèi)型,也是在定義它的函數(shù)或復(fù)合語(yǔ)句內(nèi)有效,即"局部可見(jiàn)"。
4.3.3寄存器型變量
#include<stdio.h>#defineT10000voiddelay1();voiddelay2();voiddelay1(){registerunsignedi=0;for(;i<T;i++){}}voiddelay2(){unsignedi;for(i=1;i<T;i++){}}
voidmain(){unsignedinti;printf("\a調(diào)用delay1()第一次延時(shí)!\n");for(i=0;i<60000;i++){delay1();}printf(“\a第1次延時(shí)結(jié)束!\n調(diào)用delay2()第2次延時(shí)!\n");for(i=0;i<60000;i++){delay2();}printf("\a第2次延時(shí)結(jié)束!\n");}運(yùn)行結(jié)果:調(diào)用delay1()第一次延時(shí)!第1次延時(shí)結(jié)束!調(diào)用delay2()第2次延時(shí)!第2次延時(shí)結(jié)束!
例4.4用寄存器變量提高程序執(zhí)行速度函數(shù)的形參也可以指定為寄存器變量,一個(gè)函數(shù)一般以擁有2個(gè)寄存器變量為宜4.3.4外部參照型變量[extern]1.定義: extern型變量一般用于在程序的多個(gè)編譯單位之傳送數(shù)據(jù),在這種情況下指定為extern型的變量是其它編譯單位的源程序中定義的,它的存儲(chǔ)空間在靜態(tài)數(shù)據(jù)區(qū),在程序執(zhí)行過(guò)程中長(zhǎng)期占用空間。要訪(fǎng)問(wèn)另一個(gè)文件中定義的跨文件作用域的全局變量,必須進(jìn)行extern說(shuō)明。2.作用域及壽命:
?全局存在,全局可見(jiàn)?
/*file1.c*/externintx;voidmain(){x++;}/*file2.c*/externintx;voidfun1(){x+=3;}/*file3.c*/intx=0;voidfun2(){printf("%d",x);} file1.c和file2.c中的externintx;告訴編譯程序X是外部參照變量,應(yīng)在本文件之外去尋找它的定義。所以上面的x雖在兩個(gè)源文件中,但它們是同一個(gè)變量。在文件之外的file3.c中,定義了intx=0,即為它們調(diào)用的變量。4.3.4外部參照型變量[extern]#include<stdio.h>intn=100;voidhanshu();voidhanshu(void){n-=20;}intmain(void){printf("n=%d\n",n);for(;n>=60;){hanshu();printf("n=%d\n",n);}return0;}例4.5說(shuō)明了外部變量的特性4.3.4外部參照型變量[extern]
運(yùn)行結(jié)果:
n=100n=80n=60n=40例4.6用extern聲明外部變量本程序的作用是給定b的值,輸入a和m,求a*b,和a的值。4.3.4外部參照型變量[extern]文件file1.c中的內(nèi)容為:#include<stdio.h>inta;intm;intpower();voidmain(){intb=3,c,d;printf(“inputthenumberaandits\powerm:\n");scanf("%d,%d",&a,&m);c=a*b;printf("%d*%d=%d\n",a,b,c);d=power();printf("%d**%d=%d",a,m,d);}文件file2.c中的內(nèi)容為:externinta;externintm;intpower();{inti,y=1;for(i=1;i<=m;i++){y*=a;}return(y);}
運(yùn)行結(jié)果:
inputthenumberaanditspowerm: 5,4//輸入 5*3=15//輸出 5**4=6254.3.5靜態(tài)型變量[static]1.定義靜態(tài)型變量既可以在函數(shù)或復(fù)合語(yǔ)句內(nèi)進(jìn)行,也可以在所有函數(shù)之外進(jìn)行。在函數(shù)或復(fù)合語(yǔ)句內(nèi)部定義的靜態(tài)變量稱(chēng)為局部靜態(tài)變量,在函數(shù)外定義的靜態(tài)變量稱(chēng)為全局靜態(tài)變量。staticfloatx;/*定義x全局靜態(tài)變量*/voidmain(){staticinty;/*定義y局部靜態(tài)變量*/……}2.作用域和壽命static類(lèi)型變量
全局壽命全局static變量
全局可見(jiàn)局部static變量
局部可見(jiàn)例4.7考察靜態(tài)變量的值4.3.5靜態(tài)型變量[static]#include<stdio.h>inta=2;intf();intf(){autointb=0;staticintc=3;b++;c++;return(a+b+c);}voidmain(){inti;for(i=0;i<3;i++){printf("%d\t",f());}}
運(yùn)行結(jié)果:789例4.8說(shuō)明外部靜態(tài)變量和外部變量的區(qū)別4.3.5靜態(tài)型變量[static]文件file1.c如下:#include<stdio.h>staticfloatx;floaty;floatf2();floatf1();floatf1(){return(x*x);}voidmain(){x=500;y=100;printf(“f1=%f,\nf2=%f\n",f1(),f2());}文件file2.c如下:externfloaty;floatf2(){return(y*y);}
運(yùn)行結(jié)果:
fl=250000.000000,f2=10000.000000例4.8局部靜態(tài)變量與自動(dòng)變量的區(qū)別4.3.5靜態(tài)型變量[static]#include<stdio.h>voidvalue();voidvalue(){intau=0;staticintst=0;printf("au_variable=%d,st_variable=%d\n",au,st);au++;st++;}voidmain(){inti;for(i=0;i<3;i++){value();}}
運(yùn)行結(jié)果:au_variable=0,st_variable=0au_variable=0,st_variable=1au_variable=0,st_variable=24.4函數(shù)間的數(shù)據(jù)傳遞C程序是由若干個(gè)相對(duì)獨(dú)立的函數(shù)組成的,但是各個(gè)函數(shù)處理的往往是同一批數(shù)據(jù)。所以說(shuō)程序中的函數(shù)雖然是離散的,但被處理的數(shù)據(jù)卻是連續(xù)的(數(shù)據(jù)常常貫穿若干函數(shù)中連續(xù)流動(dòng))。因此,在程序運(yùn)行期間,函數(shù)之間必然存在著數(shù)據(jù)的相互傳遞過(guò)程。使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)使用返回值傳遞數(shù)據(jù)使用全局變量傳遞數(shù)據(jù)函數(shù)間數(shù)據(jù)傳遞實(shí)現(xiàn)的方法:4.4.1使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)
在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)時(shí),實(shí)參數(shù)的值傳遞到形式參數(shù)中,這樣就實(shí)現(xiàn)了把數(shù)據(jù)由調(diào)用函數(shù)傳遞給被調(diào)用函數(shù)。在使用參數(shù)傳遞數(shù)據(jù)時(shí),可以采用兩種不同的方式:值傳遞
和
地址傳遞。
使用值傳遞方式調(diào)用時(shí),實(shí)參可以是常量、已經(jīng)賦值的變量或表達(dá)式值,甚至是另一個(gè)函數(shù),只要它們有一個(gè)確定的值,被調(diào)用函數(shù)的形參就可以使用變量來(lái)接收實(shí)參的值。1、函數(shù)調(diào)用的值傳遞采用這種方式時(shí),每個(gè)參數(shù)只能傳遞一個(gè)數(shù)據(jù)。所以,當(dāng)需要傳遞的數(shù)據(jù)較多時(shí),一般不采以這種方式,而采用地址傳遞方式。#include<stdio.h>intcomp(intx,inty);voidmain(){inta=10,b=20;printf("%d\n",comp(a,b));printf("%d\n",comp(30,b));}intcomp(intx,inty)
{if(x>y)return1;elseif(x<y)return-1;elsereturn0;}函數(shù)原型的聲明采用值傳遞方式在函數(shù)間傳遞數(shù)據(jù)
運(yùn)行結(jié)果:-114.4.1使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)例4.10比較兩個(gè)整數(shù)的大小數(shù)據(jù)復(fù)制方式傳遞數(shù)據(jù)的特點(diǎn):
數(shù)據(jù)在傳遞方和被傳遞方占用不同的內(nèi)存空間,被傳遞數(shù)據(jù)在被調(diào)用的函數(shù)中無(wú)論如何變化,都不會(huì)影響該數(shù)據(jù)在調(diào)用函數(shù)中的值。4.4.1使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)例
實(shí)現(xiàn)兩個(gè)整數(shù)的交換#include”stdio.h”voidmain(){ inta=3,b=5;
printf(”a=%d, b=%d\n”,a,b); swap(a,b);
printf(”a=%d, b=%d\n”,a,b);}voidswap(inta,intb){ inttemp; temp=a; a=b; b=temp;}交換a,b的值運(yùn)行結(jié)果: a=3,b=5 a=3,b=5 ?參數(shù)傳遞的不是數(shù)據(jù)本身,而是數(shù)據(jù)的存儲(chǔ)地址。變量的地址作為參數(shù)調(diào)用一個(gè)函數(shù),而被調(diào)用函數(shù)的形式參數(shù)必須是可以接收地址值的指針變量,并且它的數(shù)據(jù)類(lèi)型必須與被傳遞數(shù)據(jù)的數(shù)據(jù)類(lèi)型相同。把變量的地址傳遞給被調(diào)函數(shù),被調(diào)函數(shù)通過(guò)這個(gè)地址找到該變量的存放位置,直接對(duì)該地址中存放的變量的內(nèi)容進(jìn)行存取操作。因此,在被調(diào)函數(shù)中若修改了地址中的內(nèi)容,實(shí)際上修改了實(shí)參的值。如果想讓形參的改變影響實(shí)參,即函數(shù)返回時(shí)需要獲得幾個(gè)結(jié)果值,應(yīng)采用地址傳遞方式。4.4.1使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)2、地址傳送方式傳遞數(shù)據(jù)例4.11對(duì)三個(gè)整數(shù)a,b,c進(jìn)行從小到大的排序#include<stdio.h>voidswap(int*x,int*y);voidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b) swap(&a,&b); if(a>c) swap(&a,&c);if(b>c) swap(&b,&c);printf("%d\t%d\t%d\n",a,b,c);}voidswap(int*x,int*y){inttemp;temp=*x;
*x=*y; *y=temp;
return;}運(yùn)行結(jié)果: 5,4,8 //輸入 458 //輸出采取傳地址的方式傳遞數(shù)據(jù)4.4.1使用函數(shù)參數(shù)在函數(shù)間傳遞數(shù)據(jù)4.4.2使用返回值傳遞數(shù)據(jù)
函數(shù)被調(diào)用后可以向調(diào)用它的函數(shù)返回一個(gè)返回值。返回值通過(guò)函數(shù)中使用return語(yǔ)句實(shí)現(xiàn):return語(yǔ)句只能把一個(gè)返回值傳遞給調(diào)用函數(shù),當(dāng)要求返回的值多于一個(gè)時(shí)不能使用返回值傳遞。當(dāng)返回值是數(shù)值,調(diào)用函數(shù)需要使用和返回值具有相同數(shù)據(jù)類(lèi)型的變量接收該返回值;而當(dāng)返回值是地址值,應(yīng)使用指針接收。return(表達(dá)式);功能:把程序控制從被調(diào)用函數(shù)返回調(diào)用函數(shù)中,同時(shí)把返回值帶給
調(diào)用函數(shù)。例4.13冪函數(shù)的使用冪函數(shù)的功能是計(jì)算x的n次方。該函數(shù)用形式參數(shù)接收x和n的值,計(jì)算結(jié)果使用return語(yǔ)句傳遞給調(diào)用它的函數(shù)中4.4.2使用返回值傳遞數(shù)據(jù)intpower(intx,intn){intp;for(p=1;n>0;--n)p=p*x;return(p);}使用返回值傳遞數(shù)據(jù)
在return語(yǔ)句可以不帶表達(dá)式部分,即:return;
這種情況下,它僅實(shí)現(xiàn)程序控制的轉(zhuǎn)移,程序從被調(diào)函數(shù)返回主調(diào)函數(shù),而不傳遞任何返回值。
C語(yǔ)言的函數(shù)中不是必需要有return語(yǔ)句,沒(méi)有return語(yǔ)句的C函數(shù),程序控制到達(dá)包圍函數(shù)的下面大括號(hào)}時(shí),自動(dòng)返回調(diào)用函數(shù)。例4.14符號(hào)函數(shù)的使用函數(shù)中可以根據(jù)需要
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保險(xiǎn)解除合同樣本
- 修鄉(xiāng)村道路合同樣本
- 企業(yè)集體合同樣本
- 買(mǎi)房委托中介合同樣本
- 出水果合同標(biāo)準(zhǔn)文本
- 外科護(hù)理人員職業(yè)發(fā)展計(jì)劃
- 出售工地防塵網(wǎng)合同范例
- 出口代理協(xié)議合同樣本
- 產(chǎn)品展示合同樣本
- 班主任如何引導(dǎo)班級(jí)輿論計(jì)劃
- 《道路交通安全法》課件完整版
- 加快形成農(nóng)業(yè)新質(zhì)生產(chǎn)力
- 施工現(xiàn)場(chǎng)應(yīng)急救援知識(shí)
- 飼料行業(yè)業(yè)務(wù)員聘用合同范本
- 全國(guó)園地、林地、草地分等定級(jí)數(shù)據(jù)庫(kù)規(guī)范1123
- 人工智能在教學(xué)動(dòng)畫(huà)設(shè)計(jì)中的應(yīng)用與創(chuàng)新路徑探究
- 護(hù)理中醫(yī)新技術(shù)新項(xiàng)目
- VDA-6.3-2016過(guò)程審核檢查表
- 【MOOC】普通地質(zhì)學(xué)-西南石油大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 《醫(yī)療廢物的處理》課件
- 教育培訓(xùn)合作分成協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論