C語言程序設(shè)計(jì)課件06 函數(shù)_第1頁
C語言程序設(shè)計(jì)課件06 函數(shù)_第2頁
C語言程序設(shè)計(jì)課件06 函數(shù)_第3頁
C語言程序設(shè)計(jì)課件06 函數(shù)_第4頁
C語言程序設(shè)計(jì)課件06 函數(shù)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第六講函數(shù)本講主要內(nèi)容函數(shù)的定義與聲明標(biāo)準(zhǔn)庫函數(shù)強(qiáng)制類型轉(zhuǎn)換函數(shù)的定義與聲明函數(shù)定義的一般形式:functiondefinition返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2

,…,數(shù)據(jù)類型形參n)

{

變量聲明,如有變量;

其他語句;

return(表達(dá)式

);

}形參可缺省,缺省時(shí)為無參函數(shù)。也可用void表明形參缺省??蔀関oid,表明無返回?cái)?shù)據(jù),此時(shí)函數(shù)體不應(yīng)包含return語句。缺省時(shí),表明返回值為int。函數(shù)頭函數(shù)體return

表達(dá)式;傳遞函數(shù)的返回值函數(shù)的定義與聲明

--函數(shù)的定義floatadd(floatnum1,

floatnum2){

floatsum; sum=num1+num2;

returnsum;}函數(shù)的定義與聲明

--函數(shù)的定義include<math.h>doublePi(void){

return2*asin(1.0);}函數(shù)的定義與聲明

--函數(shù)的定義include<stdio.h>voiddisplayChars(char

s,unsigned

int

qty){

unsigned

inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);

printf(“\n”);}函數(shù)原形的一般形式:functionprototype返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2

,…,數(shù)據(jù)類型參數(shù)n);返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型,數(shù)據(jù)類型,…,數(shù)據(jù)類型);函數(shù)原形中的參數(shù)列表必需與函數(shù)定義中的形參列表保持一致:個(gè)數(shù)、順序及各參數(shù)數(shù)據(jù)類型。常用函數(shù)的定義與聲明

--函數(shù)的聲明函數(shù)的定義與聲明

--函數(shù)的聲明floatadd(floatnum1,

floatnum2){

floatsum; sum=num1+num2;

returnsum;}floatadd(floatnum1,

floatnum2);函數(shù)原形:函數(shù)的定義與聲明

--函數(shù)的調(diào)用函數(shù)必需先定義或聲明后方可使用。#include<stdio.h>

float

findMax(float,float);

int

main()

{

float

firstnum,secnum,maxnum;printf("Enteranumber:");scanf("%f",&firstnum);printf("\nGreat!Pleaseenterasecondnumber:");scanf("%f",&secnum);maxnum=findMax(firstnum,

secnum);

printf("\nThemaximumofthetwonumbersenteredis%f.\n",maxnum);

return0;

}函數(shù)原形函數(shù)調(diào)用主調(diào)函數(shù)被調(diào)函數(shù)實(shí)參列表

/*thefollowingisthefunctionfindMax*/float

findMax

(floatx,floaty)/*functionheader*/{/*startoffunctionbody*/

floatmaxnum;/*variabledeclaration*/if(x>=y)/*findthemaximumnumber*/ maxnum=x;else maxnum=y;

return(maxnum);/*returnthevalue*/}函數(shù)的定義與聲明

--函數(shù)的調(diào)用函數(shù)定義返回值形參列表函數(shù)的定義與聲明

--函數(shù)的調(diào)用Storingvaluesintoparameters函數(shù)的傳值調(diào)用:實(shí)參向形參進(jìn)行單向的數(shù)值傳遞。函數(shù)的定義與聲明

--函數(shù)的調(diào)用函數(shù)調(diào)用的執(zhí)行:

/*thefollowingisthefunctionfindMax*/float

findMax

(floatx,floaty)

{

floatmaxnum;if(x>=y) maxnum=x;else maxnum=y;

return(maxnum);}#include<stdio.h>

float

findMax(float,float);

int

main()

{

float

firstnum,secnum,maxnum;printf("Enteranumber:");scanf("%f",&firstnum);printf("\nGreat!Pleaseenterasecondnumber:");scanf("%f",&secnum);maxnum=findMax(firstnum,

secnum);

printf("\nThemaximumofthetwonumbersenteredis%f.\n",maxnum);

return0;

}函數(shù)的定義與聲明

--函數(shù)的調(diào)用函數(shù)的定義與聲明

--函數(shù)的調(diào)用按照函數(shù)在程序中出現(xiàn)的位置來分;作為表達(dá)式出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,參與運(yùn)算。

如:a=sqrt(b);作為一條獨(dú)立的語句完成特定的操作。

如:gets(string1);作為函數(shù)的參數(shù)被其他函數(shù)調(diào)用。

如:h=sqrt(abs(theta));函數(shù)調(diào)用的三種方式:函數(shù)的傳址調(diào)用include<stdio.h>voiddisplayChars(char

s,unsigned

int

qty){

unsigned

inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);

printf(“\n”);}傳值調(diào)用函數(shù)的傳址調(diào)用#include<stdio.h>voidsortnum(double*,double*);intmain(){doublefirstnum,secnum;printf("Entertwonumbers:");scanf("%lf%lf",&firstnum,&secnum);

sortnum(&firstnum,&secnum);printf("Thesmallernumberis%6.2f",firstnum);printf("\nThelargernumberis%6.2f\n",secnum);return0;}voidsortnum(double*nm1Addr,double*nm2Addr){doubletemp;if(*nm1Addr>*nm2Addr){temp=*nm1Addr;/*savefirstnum'svalue*/

*nm1Addr=*nm2Addr;

*nm2Addr=temp;/*changesecnum'svalue*/}return;}函數(shù)的傳址調(diào)用Storingaddressesinparameters函數(shù)的傳址調(diào)用Indirectlystoringfirstnum’svalue函數(shù)的傳址調(diào)用Indirectlychangingfirstnum’svalue函數(shù)的傳址調(diào)用Indirectlychangingsecnum’svalue#include

預(yù)處理說明#define

符號(hào)常量名表達(dá)式函數(shù)原形intmain(){

變量定義語句;

其他語句;

return0;}函數(shù)定義C程序語句的排列:回顧#include

預(yù)處理說明#define

符號(hào)常量名表達(dá)式函數(shù)原形intmain(){

變量定義語句;

其他語句;

return0;}函數(shù)定義C程序語句的排列:回顧函數(shù)定義的一般形式:functiondefinition返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型形參1,數(shù)據(jù)類型形參2

,…,數(shù)據(jù)類型形參n)

{

變量聲明,如有變量;

其他語句;

return(表達(dá)式

);

}void回顧函數(shù)原形的一般形式:functionprototype返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2

,…,數(shù)據(jù)類型參數(shù)n);返回值數(shù)據(jù)類型函數(shù)名(數(shù)據(jù)類型,數(shù)據(jù)類型,…,數(shù)據(jù)類型);函數(shù)原形中的參數(shù)列表必需與函數(shù)定義中的形參列表保持一致:個(gè)數(shù)、順序及各參數(shù)數(shù)據(jù)類型。回顧按照函數(shù)在程序中出現(xiàn)的位置來分;作為表達(dá)式出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,參與運(yùn)算。

如:a=sqrt(b);作為一條獨(dú)立的語句完成特定的操作。

如:gets(string1);作為函數(shù)的參數(shù)被其他函數(shù)調(diào)用。

如:h=sqrt(abs(theta));函數(shù)調(diào)用的三種方式:編程的基本知識(shí)

—編程任一模塊所完成的功能在C語言中,使用函數(shù)來實(shí)現(xiàn)模塊化。編程的基本知識(shí)

—編程向printf()

傳遞信息printf()是一種標(biāo)準(zhǔn)輸出函數(shù),由C編譯系統(tǒng)的系統(tǒng)函數(shù)庫提供。編程的基本知識(shí)

—編程在C語言程序中,函數(shù)main()標(biāo)志著程序的開始點(diǎn)與結(jié)束點(diǎn)?;仡檹?qiáng)制類型轉(zhuǎn)換運(yùn)算符:?jiǎn)文俊?、右向左

(類型)表達(dá)式floatx=5.8,y=10.3(int)x+y

(int)(x+y)變量的作用域變量的生命期函數(shù)的傳址調(diào)用變量的作用域變量的作用域:在變量占用存儲(chǔ)空間的時(shí)間內(nèi)是否能夠被引用,即變量作用的有效范圍。局部變量/內(nèi)部變量全局變量/外部變量變量的作用域局部變量在一個(gè)函數(shù)內(nèi)部定義的變量(內(nèi)部變量),它只在此函數(shù)范圍內(nèi)有效,在此函數(shù)以外不能被使用。局部變量的有效范圍:從定義變量的位置開始直到該函數(shù)結(jié)束。形參也是局部變量。在一個(gè)函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在該復(fù)合語句中有效。這種復(fù)合語句稱為“分程序”或“程序塊”。不同函數(shù)中使用同名變量?變量的作用域設(shè)置全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。全局變量在函數(shù)外部定義的變量(外部變量)。全局變量的有效范圍:從定義變量的位置開始直到本源文件結(jié)束。函數(shù)執(zhí)行時(shí)若需要使用一個(gè)變量值,將首先查找局部變量區(qū);找不到時(shí),再到全局變量區(qū)查找。變量的作用域#include<stdio.h>intfirstnum;voidvalfun();intmain(){intsecnum;firstnum=10;secnum=20;printf("\nFrommain():firstnum=%d",firstnum);printf("\nFrommain():secnum=%d\n",secnum);

valfun();printf("\nFrommain()again:firstnum=%d",firstnum);printf("\nFrommain()again:secnum=%d\n",secnum);return0;}voidvalfun(){intsecnum;secnum=30;printf("\nFromvalfun():firstnum=%d",firstnum);printf("\nFromvalfun():secnum=%d\n",secnum);

firstnum=40;return;}變量的作用域Thethreestorageareascreatedbytheprogram變量的作用域#include<stdio.h>intfirstnum=10;voiddisplay();intmain(){intfirstnum=20;display();printf("\nFrommain():firstnum=%d\n",firstnum);

return0;}voiddisplay(){printf("\nFromdisplay():firstnum=%d\n",firstnum);}變量的作用域在程序設(shè)計(jì)中,應(yīng)盡量避免使用全局變量。全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開辟單元。使函數(shù)的可靠性和通用性降低。使用全局變量過多,會(huì)降低程序的清晰性。變量的生命期變量的生命期:變量占用存儲(chǔ)空間的時(shí)限,由變量的存儲(chǔ)類型決定。C語言中,變量的存儲(chǔ)類型符有四種:autostaticexternregisterC語言規(guī)定:存貯類型符放在變量定義的最前面。例:staticinta,b;變量的生命期缺省時(shí)為auto。例:autointa,b;局部變量的存儲(chǔ)類型只允許有三種:autostaticregisterinta,b;auto自動(dòng)局部變量的生命期:在變量定義時(shí)獲取存儲(chǔ)空間(alive);函數(shù)返回后,釋放存儲(chǔ)空間(die)。變量的生命期#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)

testauto();return0;}voidtestauto(){intnum=0;

printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}staticintnum=0;變量的生命期static靜態(tài)局部變量的生命期:在變量定義時(shí)獲取存儲(chǔ)空間(alive);程序執(zhí)行結(jié)束時(shí),釋放存儲(chǔ)空間(die)。(變量定義只做一次。)Static靜態(tài)局部變量:在變量定義時(shí),賦初值;若缺省,初值為0。初值只允許為常量或常量表達(dá)式。#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)

testauto();return0;}voidtestauto(){staticintnum=0;

printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}變量的生命期num=1;變量的生命期register寄存器局部變量的生命期:和自動(dòng)局部變量相同。只是存儲(chǔ)的位置,不在內(nèi)存,而在CPU的寄存器中。(不常用)可以把使用頻率高的變量定義為register,提高程序執(zhí)行的速度。寄存器變量只能用于整型和字符型。變量的個(gè)數(shù)受CPU寄存器數(shù)目的限制。超限時(shí),編譯器將其轉(zhuǎn)換為自動(dòng)局部變量。變量的生命期全局變量的存儲(chǔ)類型只允許有兩種:staticextern比較大型的程序,通常由多個(gè)文件組成。變量的生命期比較大型的程序,通常由多個(gè)源文件組成。變量的生命期比較大型的程序,通常由多個(gè)源文件組成。變量的生命期全局變量的存儲(chǔ)類型只允許有兩種:使用extern對(duì)全局變量做擴(kuò)展聲明:若在函數(shù)體外,有效范圍為:從聲明時(shí)致該文件結(jié)束。若在函數(shù)體內(nèi),有效范圍為:從聲明時(shí)致該函數(shù)結(jié)束。static靜態(tài)全局變量:不可以被其他文件使用。試圖extern一個(gè)靜態(tài)全局變量,將導(dǎo)致編譯錯(cuò)誤。在定義時(shí),若無賦值說明,將賦其初值為0。函數(shù)的傳址調(diào)用include<stdio.h>voiddisplayChars(char

s,unsigned

int

qty){

unsigned

inti; printf(“\n”); for(i=0,i<qty,++i) printf(“%c”,s);

printf(“\n”);}傳值調(diào)用函數(shù)的傳址調(diào)用#include<stdio.h>voidsortnum(double*,double*);intmain(){doublefirstnum,secnum;printf("Entertwonumbers:");scanf("%lf%lf",&firstnum,&secnum);

sortnum(&firstnum,&secnum);printf("Thesmallernumberis%6.2f",firstnum);printf("\nThelargernumberis%6.2f\n",secnum);return0;}voidsortnum(double*nm1Addr,double*nm2Addr){doubletemp;if(*nm1Addr>*nm2Addr){temp=*nm1Addr;/*savefirstnum'svalue*/

*nm1Addr=*nm2Addr;

*nm2Addr=temp;/*changesecnum'svalue*/}return;}函數(shù)的傳址調(diào)用Storingaddressesinparameters函數(shù)的傳址調(diào)用Indirectlystoringfirstnum’svalue函數(shù)的傳址調(diào)用Indirectlychangingfirstnum’svalue函數(shù)的傳址調(diào)用Indirectlychangingsecnum’svalue回顧#include

預(yù)處理說明#define

符號(hào)常量名表達(dá)式函數(shù)原形全局變量定義語句;intmain(){

局部變量定義語句;

其他語句;

return0;}函數(shù)定義C程序語句的排列:回顧變量的作用域:在變量占用存儲(chǔ)空間的時(shí)間內(nèi)是否能夠被引用,即變量作用的有效范圍。局部變量/內(nèi)部變量:在一個(gè)函數(shù)內(nèi)部定義的變量(內(nèi)部變量)。有效范圍:從定義變量的位置開始直到該函數(shù)結(jié)束。全局變量/外部變量:在函數(shù)外部定義的變量(外部變量)。有效范圍:從定義變量的位置開始直到本源文件結(jié)束?;仡欁兞康纳冢鹤兞空加么鎯?chǔ)空間的時(shí)限,由變量的存儲(chǔ)類型決定。C語言規(guī)定:存貯類型符放在變量定義的最前面。例:staticinta,b;局部變量的存儲(chǔ)類型只允許有三種:autostaticregister回顧全局變量的存儲(chǔ)類型允許有兩種:使用extern對(duì)全局變量做擴(kuò)展聲明:若在函數(shù)體外,有效范圍為:從聲明時(shí)致該文件結(jié)束。若在函數(shù)體內(nèi),有效范圍為:從聲明時(shí)致該函數(shù)結(jié)束。static靜態(tài)全局變量:不可以被其他文件使用。試圖extern一個(gè)靜態(tài)全局變量,將導(dǎo)致編譯錯(cuò)誤。在定義時(shí),若無賦值說明,將賦其初值為0。本講主要內(nèi)容變量的作用域變量的生命期函數(shù)的傳址調(diào)用變量的作用域變量的作用域:在變量占用存儲(chǔ)空間的時(shí)間內(nèi)是否能夠被引用,即變量作用的有效范圍。局部變量/內(nèi)部變量全局變量/外部變量變量的作用域局部變量在一個(gè)函數(shù)內(nèi)部定義的變量(內(nèi)部變量),它只在此函數(shù)范圍內(nèi)有效,在此函數(shù)以外不能被使用。局部變量的有效范圍:從定義變量的位置開始直到該函數(shù)結(jié)束。形參也是局部變量。在一個(gè)函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在該復(fù)合語句中有效。這種復(fù)合語句稱為“分程序”或“程序塊”。不同函數(shù)中使用同名變量?變量的作用域設(shè)置全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。全局變量在函數(shù)外部定義的變量(外部變量)。全局變量的有效范圍:從定義變量的位置開始直到本源文件結(jié)束。函數(shù)執(zhí)行時(shí)若需要使用一個(gè)變量值,將首先查找局部變量區(qū);找不到時(shí),再到全局變量區(qū)查找。變量的作用域#include<stdio.h>intfirstnum;voidvalfun();intmain(){intsecnum;firstnum=10;secnum=20;printf("\nFrommain():firstnum=%d",firstnum);printf("\nFrommain():secnum=%d\n",secnum);

valfun();printf("\nFrommain()again:firstnum=%d",firstnum);printf("\nFrommain()again:secnum=%d\n",secnum);return0;}voidvalfun(){intsecnum;secnum=30;printf("\nFromvalfun():firstnum=%d",firstnum);printf("\nFromvalfun():secnum=%d\n",secnum);

firstnum=40;return;}變量的作用域Thethreestorageareascreatedbytheprogram變量的作用域#include<stdio.h>intfirstnum=10;voiddisplay();intmain(){intfirstnum=20;display();printf("\nFrommain():firstnum=%d\n",firstnum);

return0;}voiddisplay(){printf("\nFromdisplay():firstnum=%d\n",firstnum);}變量的作用域在程序設(shè)計(jì)中,應(yīng)盡量避免使用全局變量。全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開辟單元。使函數(shù)的可靠性和通用性降低。使用全局變量過多,會(huì)降低程序的清晰性。變量的生命期變量的生命期:變量占用存儲(chǔ)空間的時(shí)限,由變量的存儲(chǔ)類型決定。C語言中,變量的存儲(chǔ)類型符有四種:autostaticexternregisterC語言規(guī)定:存貯類型符放在變量定義的最前面。例:staticinta,b;變量的生命期缺省時(shí)為auto。例:autointa,b;局部變量的存儲(chǔ)類型只允許有三種:autostaticregisterinta,b;auto自動(dòng)局部變量的生命期:在變量定義時(shí)獲取存儲(chǔ)空間(alive);函數(shù)返回后,釋放存儲(chǔ)空間(die)。變量的生命期#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)

testauto();return0;}voidtestauto(){intnum=0;

printf("Thevalueoftheautomaticvariablenumis%d\n",num);++num;return;}staticintnum=0;變量的生命期static靜態(tài)局部變量的生命期:在變量定義時(shí)獲取存儲(chǔ)空間(alive);程序執(zhí)行結(jié)束時(shí),釋放存儲(chǔ)空間(die)。(變量定義只做一次。)Static靜態(tài)局部變量:在變量定義時(shí),賦初值;若缺省,初值為0。初值只允許為常量或常量表達(dá)式。#include<stdio.h>voidtestauto();/*functionprototype*/intmain(){intcount;/*createtheautovariablecount*/for(count=1;count<=3;++count)

testauto();return

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論