C語(yǔ)言程序設(shè)計(jì)(第二版)課件第5章 函數(shù)與預(yù)處理_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第5章 函數(shù)與預(yù)處理_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第5章 函數(shù)與預(yù)處理_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第5章 函數(shù)與預(yù)處理_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第二版)課件第5章 函數(shù)與預(yù)處理_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本章導(dǎo)讀在第一章中已經(jīng)介紹過(guò),C源程序是由函數(shù)組成的。雖然在前面各章的程序中都只有一個(gè)主函數(shù)main(),但實(shí)用程序往往由多個(gè)函數(shù)組成。函數(shù)是C源程序的基本模塊,通過(guò)對(duì)函數(shù)模塊的調(diào)用實(shí)現(xiàn)特定的功能。C語(yǔ)言中的函數(shù)相當(dāng)于其它高級(jí)語(yǔ)言的子程序。C語(yǔ)言不僅提供了極為豐富的庫(kù)函數(shù)(如TurboC,MSC都提供了三百多個(gè)庫(kù)函數(shù)),還允許用戶建立自己定義的函數(shù)。用戶可把自己的算法編成一個(gè)個(gè)相對(duì)獨(dú)立的函數(shù)模塊,然后用調(diào)用的方法來(lái)使用函數(shù)。由于采用了函數(shù)模塊式的結(jié)構(gòu),C語(yǔ)言易于實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)。使程序的層次結(jié)構(gòu)清晰,便于程序的編寫、閱讀、調(diào)試?!禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本書目錄第5章函數(shù)與預(yù)處理《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本書目錄第5章函數(shù)與預(yù)處理本章主要知識(shí)點(diǎn)

(1)函數(shù)應(yīng)用的C程序?qū)嵗?/p>

(2)函數(shù)的定義

(3) 函數(shù)調(diào)用

(4)函數(shù)的嵌套調(diào)用和遞歸調(diào)用

(5) 內(nèi)聯(lián)函數(shù)和重載函數(shù)

(6)作用域

(7)變量及函數(shù)的存儲(chǔ)類型

(8) 編譯預(yù)處理第5章函數(shù)與預(yù)處理《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章導(dǎo)讀5.2函數(shù)的定義5.3函數(shù)調(diào)用5.5內(nèi)聯(lián)函數(shù)和重載函數(shù)5.4函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.1函數(shù)應(yīng)用的C程序?qū)嵗?.6作用域5.7變量及函數(shù)的存儲(chǔ)類型5.8編譯預(yù)處理《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.1.1函數(shù)應(yīng)用的C程序?qū)嵗?.1函數(shù)應(yīng)用的C程序?qū)嵗禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄2.C程序?qū)嵗?2)1.C程序?qū)嵗?1)5.1.1函數(shù)應(yīng)用的C程序?qū)嵗?.1.1C程序?qū)嵗?)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄1.C程序?qū)嵗?【例5.1】簡(jiǎn)單的函數(shù)調(diào)用的例子/*功能:定義兩個(gè)輸出函數(shù)并在主函數(shù)中調(diào)用*//*程序代碼文件名:l5_1.cpp/#include"stdio.h"voidprintst()/*printst函數(shù)*/{printf("****************\n");}voidprint_hello()/*print_hello函數(shù)*/{printf("Hello!\n");}程序演示5.1.1C程序?qū)嵗?)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄main(){printst();/*調(diào)用prigtst函數(shù)*/print_hello();/*調(diào)用print_hello函數(shù)*/printst();/*調(diào)用prigtst函數(shù)*/}程序運(yùn)行情況如下:****************Hello!****************程序演示[例5.1]程序演示單擊運(yùn)行輸入源程序彈出運(yùn)行結(jié)果窗口運(yùn)行結(jié)果返回例題返回本節(jié)目錄5.1.1C程序?qū)嵗?)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.C程序?qū)嵗?【例5.2】定義一個(gè)函數(shù),用于求兩個(gè)數(shù)中的大數(shù)。/*程序代碼文件名:l5_2cpp//*功能:定義一個(gè)求較大數(shù)的函數(shù)并在主函數(shù)中調(diào)用*/

#include"stdio.h"intmax(intn1,intn2) /*定義一個(gè)函數(shù)max()*/{return(n1>n2?n1:n2);}main(){intmax(intn1,intn2); /*函數(shù)說(shuō)明*/intnum1,num2;printf("inputtwonumbers:\n");scanf("%d%d",&num1,&num2);printf("max=%d\n",max(num1,num2));}

程序運(yùn)行結(jié)果為:inputtwonumbers:5 6<CR>max=6返回本節(jié)目錄程序演示[例5.2]程序演示單擊運(yùn)行輸入源程序彈出運(yùn)行結(jié)果窗口運(yùn)行結(jié)果返回例題返回本節(jié)目錄《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.2.2函數(shù)原型5.2.1函數(shù)的定義5.2函數(shù)的定義5.2.1函數(shù)的定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.無(wú)參函數(shù)的一般形式

返回本節(jié)目錄類型說(shuō)明符函數(shù)名(){類型說(shuō)明語(yǔ)句}其中類型說(shuō)明符和函數(shù)名稱為函數(shù)頭。類型說(shuō)明符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。該類型說(shuō)明符與第二章介紹的各種說(shuō)明符相同。函數(shù)名是由用戶定義的標(biāo)識(shí)符,函數(shù)名后有一個(gè)空括號(hào),其中無(wú)參數(shù),但括號(hào)不可少。{}中的內(nèi)容稱為函數(shù)體。在函數(shù)體中也有類型說(shuō)明,這是對(duì)函數(shù)體內(nèi)部所用到的變量的類型說(shuō)明。【例4.1】中的printst(),print_hello()函數(shù)都是無(wú)參函數(shù)。在很多情況下都不要求無(wú)參函數(shù)有返回值,因此可以不寫類型說(shuō)明符。5.2.1函數(shù)的定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.有參函數(shù)的一般形式

類型說(shuō)明符函數(shù)名(形式參數(shù)表)形式參數(shù)類型說(shuō)明{類型說(shuō)明語(yǔ)句}

有參函數(shù)比無(wú)參函數(shù)多了兩個(gè)內(nèi)容,其一是形式參數(shù)表,其二是形式參數(shù)類型說(shuō)明。在形參表中給出的參數(shù)稱為形式參數(shù),它們可以是各種類型的變量,各參數(shù)之間用逗號(hào)間隔。在進(jìn)行函數(shù)調(diào)用時(shí),主調(diào)函數(shù)將賦予這些形式參數(shù)實(shí)際的值。形參既然是變量,當(dāng)然必須給以類型說(shuō)明。返回本節(jié)目錄5.2.1函數(shù)的定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)3.說(shuō)明

(1)函數(shù)定義不允許嵌套。在C語(yǔ)言中,所有函數(shù)(包括主函數(shù)main())都是平行的。一個(gè)函數(shù)的定義,可以放在程序中的任意位置,主函數(shù)main()之前或之后。但在一個(gè)函數(shù)的函數(shù)體內(nèi),不能再定義另一個(gè)函數(shù),即不能嵌套定義。(2)空函數(shù)──既無(wú)參數(shù)、函數(shù)體又為空的函數(shù)。其一般形式為:[函數(shù)類型]函數(shù)名(void){}(3)在老版本C語(yǔ)言中,參數(shù)類型說(shuō)明允許放在函數(shù)說(shuō)明部分的第2行單獨(dú)指定。返回本節(jié)目錄5.2.2函數(shù)原型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄在ANSIC新標(biāo)準(zhǔn)中,采用函數(shù)原型方式,對(duì)被調(diào)用函數(shù)進(jìn)行說(shuō)明,其一般格式如下:函數(shù)類型函數(shù)名(數(shù)據(jù)類型[參數(shù)名][,數(shù)據(jù)類型[參數(shù)名2]…]);例如intputlll(intx,inty,intz,intcolor,char*p)/*說(shuō)明一個(gè)整型函數(shù)*/char*name(void);/*說(shuō)明一個(gè)字符串指什函數(shù)*/voidstudent(intn,char*str);/*說(shuō)明一個(gè)不返回值的函數(shù)*/floatcalculate();/*說(shuō)明一個(gè)浮點(diǎn)型函數(shù)*/

C語(yǔ)言同時(shí)又規(guī)定,在以下2種情況下,可以省去對(duì)被調(diào)用函數(shù)的說(shuō)明:①當(dāng)被調(diào)用函數(shù)的函數(shù)定義出現(xiàn)在調(diào)用函數(shù)之前時(shí)。因?yàn)樵谡{(diào)用之前,編譯系統(tǒng)已經(jīng)知道了被調(diào)用函數(shù)的函數(shù)類型、參數(shù)個(gè)數(shù)、類型和順序。②如果在所有函數(shù)定義之前,在函數(shù)外部(例如文件開(kāi)始處)預(yù)先對(duì)各個(gè)函數(shù)進(jìn)行了說(shuō)明,則在調(diào)用函數(shù)中可缺省對(duì)被調(diào)用函數(shù)的說(shuō)明。注意:

如果一個(gè)函數(shù)沒(méi)有說(shuō)明就被調(diào)用,編譯程序并不認(rèn)為出錯(cuò),而將此函數(shù)默認(rèn)為整型(int)函數(shù)。因此當(dāng)一個(gè)函數(shù)返回其它類型,又沒(méi)有事先說(shuō)明,編譯時(shí)將會(huì)出錯(cuò)?!禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.3.2函數(shù)傳值調(diào)用5.3.1函數(shù)調(diào)用5.3函數(shù)調(diào)用5.3.3

函數(shù)返回值5.3.1函數(shù)調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)

函數(shù)調(diào)用的一般形式為:函數(shù)名([實(shí)際參數(shù)表])

切記:實(shí)參的個(gè)數(shù)、類型和順序,應(yīng)該與被調(diào)用函數(shù)所要求的參數(shù)個(gè)數(shù)、類型和順序一致,才能正確地進(jìn)行數(shù)據(jù)傳遞。在C語(yǔ)言中,可以用以下幾種方式調(diào)用函數(shù):(1)函數(shù)表達(dá)式。函數(shù)作為表達(dá)式的一項(xiàng),出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。(2)函數(shù)語(yǔ)句。C語(yǔ)言中的函數(shù)可以只進(jìn)行某些操作而不返回函數(shù)值,這時(shí)的函數(shù)調(diào)用可作為一條獨(dú)立的語(yǔ)句。(3)函數(shù)實(shí)參。函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。返回本節(jié)目錄5.3.1函數(shù)調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)說(shuō)明:(1)調(diào)用函數(shù)時(shí),函數(shù)名稱必須與具有該功能的自定義函數(shù)名稱完全一致。(2)實(shí)參在類型上按順序與形參,必須一一對(duì)應(yīng)和匹配。如果類型不匹配,C編譯程序?qū)促x值兼容的規(guī)則進(jìn)行轉(zhuǎn)換。如果實(shí)參和形參的類型不賦值兼容,通常并不給出出錯(cuò)信息,且程序仍然繼續(xù)執(zhí)行,只是得不到正確的結(jié)果。(3)如果實(shí)參表中包括多個(gè)參數(shù),對(duì)實(shí)參的求值順序隨系統(tǒng)而異。有的系統(tǒng)按自左向右順序求實(shí)參的值,有的系統(tǒng)則相反。返回本節(jié)目錄5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄1.函數(shù)的參數(shù)分為形參和實(shí)參兩種,作用是實(shí)現(xiàn)數(shù)據(jù)傳送。

形參出現(xiàn)在函數(shù)定義中,只能在該函數(shù)體內(nèi)使用。發(fā)生函數(shù)調(diào)用時(shí),調(diào)用函數(shù)把實(shí)參的值復(fù)制1份,傳送給被調(diào)用函數(shù)的形參,從而實(shí)現(xiàn)調(diào)用函數(shù)向被調(diào)用函數(shù)的數(shù)據(jù)傳送?!纠?.3】

實(shí)參對(duì)形參的數(shù)據(jù)傳遞。/*實(shí)參對(duì)形參的數(shù)據(jù)傳遞。*//*程序代碼文件名:l5_3.cpp/#include"stdio.h"voidmain(){voidso(intn);/*說(shuō)明函數(shù)*/intn=100;/*定義實(shí)參n,并初始化*/so(n);/*調(diào)用函數(shù)*/5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

printf("n_so=%d\n",n);/*輸出調(diào)用后實(shí)參的值,便于進(jìn)行比較*/}voidso(intn){inti;printf("n_x=%d\n",n);/*輸出改變前形參的值*/for(i=n-1;i>=1;i--)n=n+i;/*改變形參的值*/printf("n_x=%d\n",n);/*輸出改變后形參的值*/}程序運(yùn)行結(jié)果為:n_x=100n_x=5050n_x=1005.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄說(shuō)明:(1)實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。因此,應(yīng)預(yù)先用賦值、輸入等辦法,使實(shí)參獲得確定的值。(2)形參變量只有在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在該函數(shù)內(nèi)有效。調(diào)用結(jié)束,返回調(diào)用函數(shù)后,則不能再使用該形參變量。(3)實(shí)參對(duì)形參的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。(4)實(shí)參和形參占用不同的內(nèi)存單元,即使同名也互不影響。5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄2.數(shù)組元素作為函數(shù)參數(shù)

數(shù)組元素就是下標(biāo)變量,它與普通變量并無(wú)區(qū)別。數(shù)組元素只能用作函數(shù)實(shí)參,其用法與普通變量完全相同:在發(fā)生函數(shù)調(diào)用時(shí),把數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向值傳送。說(shuō)明:(1)用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參類型一致即可,并不要求函數(shù)的形參也是下標(biāo)變量。換句話說(shuō),對(duì)數(shù)組元素的處理是按普通變量對(duì)待的。(2)在普通變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí)發(fā)生的值傳送,是把實(shí)參變量的值賦予形參變量。5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄3.數(shù)組名作為函數(shù)參數(shù)用數(shù)組名作函數(shù)參數(shù)與用數(shù)組元素作實(shí)參有幾點(diǎn)不同:(1).用數(shù)組元素作實(shí)參時(shí),只要數(shù)組類型和函數(shù)的形參變量的類型一致,那么作為下標(biāo)變量的數(shù)組元素的類型也和函數(shù)形參變量的類型是一致的。因此,并不要求函數(shù)的形參也是下標(biāo)變量。用數(shù)組名作函數(shù)參數(shù)時(shí),則要求形參和相對(duì)應(yīng)的實(shí)參都必須是類型相同的數(shù)組,都必須有明確的數(shù)組說(shuō)明。當(dāng)形參和實(shí)參二者不一致時(shí),即會(huì)發(fā)生錯(cuò)誤。(2).在普通變量或下標(biāo)變量作函數(shù)參數(shù)時(shí),形參變量和實(shí)參變量是由編譯系統(tǒng)分配的兩個(gè)不同的內(nèi)存單元。在函數(shù)調(diào)用時(shí)發(fā)生的值傳送是把實(shí)參變量的值賦予形參變量。在用數(shù)組名作函數(shù)參數(shù)時(shí),不是進(jìn)行值的傳送,即不是把實(shí)參數(shù)組的每一個(gè)元素的值都5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

賦予形參數(shù)組的各個(gè)元素。因?yàn)閷?shí)際上形參數(shù)組并不存在,編譯系統(tǒng)不為形參數(shù)組分配內(nèi)存。那么,數(shù)據(jù)的傳送是如何實(shí)現(xiàn)的呢?在第三章中我們?cè)榻B過(guò),數(shù)組名就是數(shù)組的首地址。因此在數(shù)組名作函數(shù)參數(shù)時(shí)所進(jìn)行的傳送只是地址的傳送,也就是說(shuō)把實(shí)參數(shù)組的首地址賦予形參數(shù)組名。形參數(shù)組名取得該首地址之后,也就等于有了實(shí)在的數(shù)組。實(shí)際上是形參數(shù)組和實(shí)參數(shù)組為同一數(shù)組,共同擁有一段內(nèi)存空間?!纠?.4】數(shù)組a中存放了一個(gè)學(xué)生5門課程的成績(jī),求平均成績(jī)。/*程序代碼文件名:l5_4.cpp//*功能:數(shù)組名作為函數(shù)實(shí)參*/floataver(floata[5]){inti;floatav,s=a[0];for(i=1;i<5;i++)s=s+a[i];5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

av=s/5;returnav;}#include"stdio.h"voidmain(){floatsco[5],av;inti;printf("\ninput5scores:");for(i=0;i<5;i++)scanf("%f",&sco[i]);av=aver(sco);printf("averagescoreis%5.2f",av);}

5.3.2函數(shù)傳值調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄程序運(yùn)行結(jié)果為:input5scores:8965.078.89990.5<CR>averagescoreis84.46程序說(shuō)明:

本程序首先定義了一個(gè)實(shí)型函數(shù)aver,有一個(gè)形參為實(shí)型數(shù)組a,長(zhǎng)度為5。在函數(shù)aver中,把各元素值相加求出平均值,返回給主函數(shù)。主函數(shù)main中首先完成數(shù)組sco的輸入,然后以sco作為實(shí)參調(diào)用aver函數(shù),函數(shù)返回值送av,最后輸出av值。從運(yùn)行情況可以看出,程序?qū)崿F(xiàn)了所要求的功能用數(shù)組名作為函數(shù)參數(shù)時(shí)還應(yīng)注意以下幾點(diǎn):a形參數(shù)組和實(shí)參數(shù)組的類型必須一致,否則將引起錯(cuò)誤。b形參數(shù)組和實(shí)參數(shù)組的長(zhǎng)度可以不相同,因?yàn)樵谡{(diào)用時(shí),只傳送首地址而不檢查形參數(shù)組的長(zhǎng)度。當(dāng)形參數(shù)組的長(zhǎng)度與實(shí)參數(shù)組不一致時(shí),雖不至于出現(xiàn)語(yǔ)法錯(cuò)誤(編譯能通過(guò)),但程序執(zhí)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。

5.3.3函數(shù)返回值《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄1函數(shù)返回值與return語(yǔ)句。有參函數(shù)的返回值,是通過(guò)函數(shù)中的return語(yǔ)句來(lái)獲得的。(1)return語(yǔ)句的一般格式:return(返回值表達(dá)式); (2)return語(yǔ)句的功能:返回調(diào)用函數(shù),并將“返回值表達(dá)式”的值帶給調(diào)用函數(shù)。【例5.5】函數(shù)返回值的例子/*程序代碼文件名:l5_5.cpp//*功能:求最大值*/

#include"stdio.h"main(){intmaxmum(intx,inty,intz);/*說(shuō)明一個(gè)用戶自定義函數(shù)*/inti,j,k,max;

5.3.3函數(shù)返回值《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

scanf("%d%d%d",&i,&j,&k);max=maxmum(i,j,k); /*調(diào)用子函數(shù),并將返回值賦給max*/printf("Themaxmumvalueis%d\n",max);}intmaxmum(intx,inty,intz){intmax;max=x>y?x:y; /*求最大值*/max=max>z?max:z;return(max); /*返回最大值*/}程序運(yùn)行情況如下:779956<CR>Themaxmumvalueis99valueis99

5.3.3函數(shù)返回值《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄2關(guān)于返回語(yǔ)句的說(shuō)明

(1)函數(shù)的返回值只能有一個(gè)。

(2)當(dāng)函數(shù)中不需要指明返回值時(shí),可以寫成:

return;也可以不寫。函數(shù)運(yùn)行到右花括號(hào)自然結(jié)束。

(3)一個(gè)函數(shù)體內(nèi)可以有多個(gè)返回語(yǔ)句,不論執(zhí)行到哪一個(gè),函數(shù)都結(jié)束,回到主調(diào)函數(shù)。

(4)當(dāng)函數(shù)沒(méi)有指明返回值,即return;或沒(méi)有返回語(yǔ)句時(shí),函數(shù)執(zhí)行后實(shí)際上不是沒(méi)有返回值,而是返回一個(gè)不確定的值,有可能給程序帶來(lái)某種意外的影響。5.3.3函數(shù)返回值《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄3、關(guān)于函數(shù)返回值的類型

函數(shù)定義時(shí)的類型就是函數(shù)返回值的類型。從理論上,C語(yǔ)言要求函數(shù)定義的類型應(yīng)當(dāng)與返回語(yǔ)句中表達(dá)式的類型保持一致。當(dāng)兩者不一致時(shí),系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換,將函數(shù)返回語(yǔ)句中表達(dá)式的類型轉(zhuǎn)換為函數(shù)定義時(shí)的類型?!禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.4.2函數(shù)的遞歸調(diào)用5.4.1函數(shù)的嵌套調(diào)用5.4函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.4.1函數(shù)的嵌套調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)

C語(yǔ)言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級(jí)函數(shù)和下一級(jí)函數(shù)的問(wèn)題。但是C語(yǔ)言允許在一個(gè)函數(shù)的定義中出現(xiàn)對(duì)另一個(gè)函數(shù)的調(diào)用。這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。其關(guān)系可表示如下圖:其執(zhí)行過(guò)程是:執(zhí)行main函數(shù)中調(diào)用f1函數(shù)的語(yǔ)句時(shí),即轉(zhuǎn)去執(zhí)行f1函數(shù),在f1函數(shù)中調(diào)用f2函數(shù)時(shí),又轉(zhuǎn)去執(zhí)行f2函數(shù),f2函數(shù)執(zhí)行完畢返回f1函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行,f1函數(shù)執(zhí)行完畢返回main函數(shù)的斷點(diǎn)繼續(xù)執(zhí)行返回本節(jié)目錄5.4.1函數(shù)的嵌套調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)【例5.6】計(jì)算s=1k+2k+3k+……+Nk

/*程序代碼文件名:l5_6.cpp//*功能:函數(shù)的嵌套調(diào)用*/#defineK4#defineN5#include"stdio.h"longf1(intn,intk) /*計(jì)算n的k次方*/{longpower=n;inti;for(i=1;i<k;i++)power*=n;returnpower;}longf2(intn,intk) /*計(jì)算1到n的k次方之累加和*/{longsum=0;

返回本節(jié)目錄5.4.1函數(shù)的嵌套調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)

inti;for(i=1;i<=n;i++)sum+=f1(i,k);returnsum;}main(){printf("Sumof%dpowersofintegersfrom1to%ld=",K,N);printf("%d\n",f2(N,K));

}程序運(yùn)行結(jié)果為:Sumof4powersofintegersfrom1to5=979說(shuō)明:本題編寫了兩個(gè)函數(shù),一個(gè)是用來(lái)計(jì)算n的k次方的函數(shù)f1,另一個(gè)是用來(lái)計(jì)算1到n的k次方之累加和函數(shù)f2。主函數(shù)先調(diào)f1計(jì)算n的k次方,再在f1中以為n的k次方實(shí)參,調(diào)用f2計(jì)算其累加和,然后返回f1,再返回主函數(shù)。返回本節(jié)目錄5.4.2函數(shù)的遞歸調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)

一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身。例如有函數(shù)f如下:

intf(intx){inty;z=f(y);returnz;}這個(gè)函數(shù)是一個(gè)遞歸函數(shù)。但是運(yùn)行該函數(shù)將無(wú)休止地調(diào)用其自身,這當(dāng)然是不正確的。為了防止遞歸調(diào)用無(wú)終止地進(jìn)行,必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。返回本節(jié)目錄5.4.2函數(shù)的遞歸調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)例5.7】用遞歸法計(jì)算n!。/*程序代碼文件名:l5_7.cpp//*功能:通過(guò)函數(shù)的遞歸調(diào)用計(jì)算階乘*/#include"stdio.h"longpower(intn){longf;if(n>1)f=power(n-1)*n;elsef=1;return(f);}main(){intn;longy;返回本節(jié)目錄5.4.2函數(shù)的遞歸調(diào)用《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)

printf("inputainteagernumber:");scanf("%d",&n);y=power(n);printf("%d!=%ld\n",n,y);}

程序運(yùn)行情況如下:inputainteagernumber:5<CR>5!=120程序說(shuō)明:

程序中給出的函數(shù)power是一個(gè)遞歸函數(shù)。主函數(shù)調(diào)用power后即進(jìn)入函數(shù)power執(zhí)行,如果n<0,n==0或n=1時(shí)都將結(jié)束函數(shù)的執(zhí)行,否則就遞歸調(diào)用power函數(shù)自身。由于每次遞歸調(diào)用的實(shí)參為n-1,即把n-1的值賦予形參n,最后當(dāng)n-1的值為1時(shí)再作遞歸調(diào)用,形參n的值也為1,將使遞歸終止。然后可逐層退回。返回本節(jié)目錄《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.5.2重載函數(shù)5.5.1內(nèi)聯(lián)函數(shù)5.5內(nèi)聯(lián)函數(shù)和重載函數(shù)5.5.1內(nèi)聯(lián)函數(shù) 《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

調(diào)用函數(shù)時(shí)需要一定的時(shí)間,如果有的函數(shù)需要頻繁使用,則所用時(shí)間會(huì)很長(zhǎng),從而降低程序的執(zhí)行效率。C十十提供一種提高效率的方法,即在編譯時(shí)將所調(diào)用函數(shù)的代碼嵌入到主調(diào)函數(shù)中。這種嵌入到主調(diào)函數(shù)中的函數(shù)稱為內(nèi)聯(lián)函數(shù)(inlinefunction),又稱內(nèi)嵌函數(shù)。指定內(nèi)聯(lián)函數(shù)的方法很簡(jiǎn)單,只需在函數(shù)首行的左端加一個(gè)關(guān)鍵字inline即可?!纠?.8】將函數(shù)指定為內(nèi)聯(lián)函數(shù)。/*程序代碼文件名:l5_8.cpp//*功能:通過(guò)內(nèi)置函數(shù)求3個(gè)整數(shù)中的最大者*/#include<iostream.h>inlineintmax(inta.intb,intc)//這是一個(gè)內(nèi)置函數(shù),求3個(gè)整數(shù)中的最大者{if(b>a)a=b;5.5.1內(nèi)聯(lián)函數(shù) 《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

if(c>a)a=c;returna;}voidmain(){inti=7,j=10,k=25,m;m=max(i,j,k);cout<<”max=”<<m<<endl;}

由于在定義函數(shù)時(shí)指定它為內(nèi)聯(lián)函數(shù),因此編譯系統(tǒng)在遇到函數(shù)調(diào)用max(i,j,k)時(shí),就用max函數(shù)體的代碼代替max(i,j,k),同時(shí)將實(shí)參代替形參。這樣,m=max(i,j,k);就被置換成if(j>i)i=j;if(k>i)i=k;m=i;5.5.2重載函數(shù)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

在C++中用到了插入運(yùn)算符<<和提取運(yùn)算符>>。這兩個(gè)運(yùn)算符本來(lái)是左移運(yùn)算符和右移運(yùn)算符,現(xiàn)在把它作為輸入輸出運(yùn)算符。即允許一個(gè)運(yùn)算符用于不同場(chǎng)合,有不同的含義,這就叫運(yùn)算符的“重載”(overloading),即重新賦予它新的含義。函數(shù)也可以重載。C++允許在同一作用域中用同一函數(shù)名定義多個(gè)函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型不同。這就是函數(shù)的重載,即一個(gè)函數(shù)名多用。5.5.2重載函數(shù)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄【例5.9】求n個(gè)整數(shù)中的最大數(shù)。n的值為2和3。/*程序代碼文件名:l5_9.cpp//*功能:通過(guò)函數(shù)的重載求n個(gè)整數(shù)中的最大者*/#include<iostream.h>intmax(inta,intb,intc)//求3個(gè)整數(shù)中的最大者

{if(b>a)a=b;if(c>a)a=c;returna;}intmax(inta,intb)//求2個(gè)整數(shù)中的最大者

{if(a>b)returna;elsereturnb*}5.5.2重載函數(shù)《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄voidmain(){inta=7,b=4,c=11;cout<<max(a,b,c)<<endl;//輸出3個(gè)整數(shù)中的最大者

cout<<max(a,b)<<endl;//輸出2個(gè)整數(shù)中的最大者}運(yùn)行結(jié)果如下:117

兩次調(diào)用max函數(shù)的參數(shù)個(gè)數(shù)不同,系統(tǒng)會(huì)根據(jù)參數(shù)的個(gè)數(shù)找到與之匹配的函數(shù)并調(diào)用它。參數(shù)的個(gè)數(shù)和類型可以都不同。應(yīng)當(dāng)注意:重載函數(shù)的參數(shù)個(gè)數(shù)或類型必須至少有一者不同,函數(shù)返回值類型可以相同也可以不同。但不允許參數(shù)個(gè)數(shù)和類型都相同而只有返回值類型不同,因?yàn)橄到y(tǒng)無(wú)法從函數(shù)的調(diào)用形式上判斷哪一個(gè)函數(shù)與之匹配?!禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.6.2全局變量和局部變量5.6.1

作用域5.6作用域5.6.1作用域《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

在討論函數(shù)的形參變量時(shí)曾經(jīng)提到,形參變量只在被調(diào)用期間才分配內(nèi)存單元,調(diào)用結(jié)束立即釋放。這一點(diǎn)表明形參變量只有在函數(shù)內(nèi)才是有效的,離開(kāi)該函數(shù)就不能再使用了。這種變量有效性的范圍稱變量的作用域。不僅對(duì)于形參變量,C語(yǔ)言中所有的量都有自己的作用域。變量說(shuō)明的方式不同,其作用域也不同。C語(yǔ)言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。5.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.局部變量

返回本節(jié)目錄

在一個(gè)函數(shù)內(nèi)部說(shuō)明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。也就是說(shuō),只有在包含變量說(shuō)明的函數(shù)內(nèi)部,才能使用被說(shuō)明的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱“局部變量”。例如:intf1(inta)/*函數(shù)f1*/{intb,c;……} /*a,b,c作用域:僅限于函數(shù)f1()中*/intf2(intx)/*函數(shù)f2*/{inty,z;……} /*x,y,z作用域:僅限于函數(shù)f2()中*/main(){intm,n;……} /*m,n作用域:僅限于函數(shù)main()中*/5.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.全局變量

返回本節(jié)目錄

全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于一個(gè)源程序文件。其作用域是整個(gè)源程序。在函數(shù)中使用全局變量,一般應(yīng)作全局變量說(shuō)明。只有在函數(shù)內(nèi)經(jīng)過(guò)說(shuō)明的全局變量才能使用。全局變量的說(shuō)明符為extern。但在一個(gè)函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以說(shuō)明。例如:inta,b;/*外部變量*/voidf1()/*函數(shù)f1*/{……}5.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄floatx,y;/*外部變量*/intfz()/*函數(shù)fz*/{……}main()/*主函數(shù)*/{……}/*全局變量x,y作用域全局變量a,b作用域*/從上例可以看出a、b、x、y都是在函數(shù)外部定義的外部變量,都是全局變量。但x,y定義在函數(shù)f1之后,而在f1內(nèi)又無(wú)對(duì)x,y的說(shuō)明,所以它們?cè)趂1內(nèi)無(wú)效。a,b定義在源程序最前面,因此在f1,f2及main內(nèi)不加說(shuō)明也可使用。5.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄【例5.10】輸入長(zhǎng)方體的長(zhǎng)寬高l,w,h。求體積及三個(gè)面x*y,x*z,y*z的面積。/*程序代碼文件名:l5_10.cpp//*功能:求長(zhǎng)方體體積及三個(gè)面x*y,x*z,y*z的面積。*/#include<stdio.h>

ints1,s2,s3;intvs(inta,intb,intc){intv;v=a*b*c;s1=a*b;s2=b*c;s3=a*c;returnv;}5.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄main(){intv,l,w,h;printf("\ninputlength,widthandheight:");scanf("%d%d%d",&l,&w,&h);v=vs(l,w,h);printf("v=%ds1=%ds2=%ds3=%d\n",v,s1,s2,s3);}程序運(yùn)行結(jié)果如下:inputlength,widthandheight:456<CR>v=120s1=20s2=30s3=245.6.2全局變量和局部變量《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄

程序說(shuō)明:

本程序中定義了三個(gè)外部變量s1,s2,s3,用來(lái)存放三個(gè)面積,其作用域?yàn)檎麄€(gè)程序。函數(shù)vs用來(lái)求正方體體積和三個(gè)面積,函數(shù)的返回值為體積v。由主函數(shù)完成長(zhǎng)寬高的輸入及結(jié)果輸出。由于C語(yǔ)言規(guī)定函數(shù)返回值只有一個(gè),當(dāng)需要增加函數(shù)的返回?cái)?shù)據(jù)時(shí),用外部變量是一種很好的方式。本例中,如不使用外部變量,在主函數(shù)中就不可能取得v,s1,s2,s3四個(gè)值。而采用了外部變量,在函數(shù)vs中求得的s1,s2,s3值在main中仍然有效。因此外部變量是實(shí)現(xiàn)函數(shù)之間數(shù)據(jù)通訊的有效手段?!禖語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.7.2函數(shù)的存儲(chǔ)類型5.7.1變量的存儲(chǔ)類型5.7變量及函數(shù)的存儲(chǔ)類型5.7.1變量的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.自動(dòng)變量

返回本節(jié)目錄自動(dòng)變量的類型說(shuō)明符為auto這種存儲(chǔ)類型是C語(yǔ)言程序中使用最廣泛的一種類型。C語(yǔ)言規(guī)定,函數(shù)內(nèi)凡未加存儲(chǔ)類型說(shuō)明的變量均視為自動(dòng)變量,也就是說(shuō)自動(dòng)變量可省去說(shuō)明符auto。在前面各章的程序中所定義的變量凡未加存儲(chǔ)類型說(shuō)明符的都是自動(dòng)變量。例如:{inta,b,k;charc;……}等價(jià)于:{autointa,b,k;autocharc;……}5.7.1變量的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄自動(dòng)變量具有以下特點(diǎn):自動(dòng)變量的作用域僅限于定義該變量的個(gè)體內(nèi)。自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)方式,只有在使用它,即定義該變量的函數(shù)被調(diào)用時(shí)才給它分配存儲(chǔ)單元,開(kāi)始它的生存期。函數(shù)調(diào)用結(jié)束,釋放存儲(chǔ)單元,結(jié)束生存期。因此函數(shù)調(diào)用結(jié)束之后,自動(dòng)變量的值不能保留。由于自動(dòng)變量的作用域和生存期都局限于定義它的個(gè)體內(nèi)(函數(shù)或復(fù)合語(yǔ)句內(nèi)),因此不同的個(gè)體中允許使用同名的變量而不會(huì)混淆。對(duì)構(gòu)造類型的自動(dòng)變量如數(shù)組等,不可作初始化賦值。5.7.1變量的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.外部變量

返回本節(jié)目錄外部變量的類型說(shuō)明符為extern。在前面介紹全局變量時(shí)已介紹過(guò)外部變量。這里再補(bǔ)充說(shuō)明外部變量的幾個(gè)特點(diǎn):(1)外部變量和全局變量是對(duì)同一類變量的兩種不同角度的提法。全局變量是從它的作用域提出的,外部變量從它的存儲(chǔ)方式提出的,表示了它的生存期。(2)當(dāng)一個(gè)源程序由若干個(gè)源文件組成時(shí),在一個(gè)源文件中定義的外部變量在其它的源文件中也有效。5.7.1變量的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)3.靜態(tài)變量

返回本節(jié)目錄靜態(tài)變量的類型說(shuō)明符是static。靜態(tài)變量當(dāng)然是屬于靜態(tài)存儲(chǔ)方式,但是屬于靜態(tài)存儲(chǔ)方式的量不一定就是靜態(tài)變量,例如外部變量雖屬于靜態(tài)存儲(chǔ)方式,但不一定是靜態(tài)變量,必須由static加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量。對(duì)于自動(dòng)變量,前面已經(jīng)介紹它屬于動(dòng)態(tài)存儲(chǔ)方式。但是也可以用static定義它為靜態(tài)自動(dòng)變量,或稱靜態(tài)局部變量。4.寄存器變量寄存器變量的說(shuō)明符是register

。這種變量存放在CPU的寄存器中,使用時(shí),不需要訪問(wèn)內(nèi)存,而直接從寄存器中讀寫,這樣可提高效率。5.7.2函數(shù)的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.內(nèi)部函數(shù)(又稱靜態(tài)函數(shù))

返回本節(jié)目錄如果在一個(gè)源文件中定義的函數(shù),只能被本文件中的函數(shù)調(diào)用,而不能被同一程序其它文件中的函數(shù)調(diào)用,這種函數(shù)稱為內(nèi)部函數(shù)。定義一個(gè)內(nèi)部函數(shù),只需在函數(shù)類型前再加一個(gè)“static”關(guān)鍵字即可,如下所示:static函數(shù)類型函數(shù)名(函數(shù)參數(shù)表){……}關(guān)鍵字“static”,譯成中文就是“靜態(tài)的”,所以內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。但此處“static”的含義不是指存儲(chǔ)方式,而是指對(duì)函數(shù)的作用域僅局限于本文件。使用內(nèi)部函數(shù)的好處是:不同的人編寫不同的函數(shù)時(shí),不用擔(dān)心自己定義的函數(shù),是否會(huì)與其它文件中的函數(shù)同名,因?yàn)橥矝](méi)有關(guān)系。5.7.2函數(shù)的存儲(chǔ)類型《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.外部函數(shù)

返回本節(jié)目錄外部函數(shù)的定義:在定義函數(shù)時(shí),如果沒(méi)有加關(guān)鍵字“static”,冠以關(guān)鍵字“extern”,表示此函數(shù)是外部函數(shù):[extern]函數(shù)類型函數(shù)名(函數(shù)參數(shù)表){……}調(diào)用外部函數(shù)時(shí),需要對(duì)其進(jìn)行說(shuō)明:[extern]函數(shù)類型函數(shù)名(參數(shù)類型表)[,函數(shù)名2(參數(shù)類型表2)……];《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄所謂預(yù)處理:指在進(jìn)行編譯的第一遍掃描(詞法掃描和語(yǔ)法分析)之前所作的工作。它由預(yù)處理程序負(fù)責(zé)完成。以“#”號(hào)開(kāi)頭的預(yù)處理命令。一般都放在源文件的前面,它們稱為預(yù)處理部分。分類:C語(yǔ)言提供了多種預(yù)處理功能,如宏定義、文件包含、

條件編譯等。作用:合理使用預(yù)處理功能編寫的程序便于閱讀、修改、

移植和調(diào)試,也有利于模塊化程序設(shè)計(jì)。5.8編譯預(yù)處理《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本章目錄5.8.2文件包含5.8.1宏定義5.8編譯預(yù)處理5.8.3條件編譯5.8.1宏定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)返回本節(jié)目錄宏:在C語(yǔ)言源程序中用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串。宏名:被定義為“宏”的標(biāo)識(shí)符稱為“宏名”。宏代換:在編譯預(yù)處理時(shí),對(duì)程序中所有出現(xiàn)的“宏名”,都用宏定義中的字符串去代換,

這稱為“宏代換”或“宏展開(kāi)”。

宏定義是由源程序中的宏定義命令完成的。宏代換是由預(yù)處理程序自動(dòng)完成的。分類:無(wú)參宏、有參宏5.8.1宏定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.無(wú)參宏定義

返回本節(jié)目錄定義:無(wú)參宏的宏名后不帶參數(shù)。一般形式為:#define標(biāo)識(shí)符字符串說(shuō)明:“#”表示是一條預(yù)處理命令。凡是以“#”開(kāi)頭的為預(yù)處理命令?!癲efine”為宏定義命令?!皹?biāo)識(shí)符”為所定義的宏名?!白址笨梢允浅?shù)、表達(dá)式、格式串等。應(yīng)用:符號(hào)常量程序中反復(fù)使用的表達(dá)式5.8.1宏定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)1.無(wú)參宏定義

返回本節(jié)目錄說(shuō)明:(1)

只是一種簡(jiǎn)單的代換,預(yù)處理程序?qū)λ蛔魅魏螜z查。如有錯(cuò)誤,只能在編譯已被宏展開(kāi)后的源程序時(shí)發(fā)現(xiàn)。(2)

宏定義不是說(shuō)明或語(yǔ)句,在行末不必加分號(hào)(3)

宏定義必須寫在函數(shù)之外,其作用域?yàn)楹甓x命令起到源程序結(jié)

束。如要終止其作用域可使用#

undef命令,(4)

宏名在源程序中若用引號(hào)括起來(lái),則預(yù)處理程序不對(duì)其作宏代換。(5)

宏定義允許嵌套,在宏展開(kāi)時(shí)由預(yù)處理程序?qū)訉哟鷵Q。例如:(6)

習(xí)慣上宏名用大寫字母表示,但也允許用小寫字母。(7)

可用宏定義表示數(shù)據(jù)類型,使書寫方便。(8)

對(duì)“輸出格式”作宏定義,可以減少書寫麻煩。5.8.1宏定義《C語(yǔ)言程序設(shè)計(jì)》

(VisualC++6.0環(huán)境)2.帶參宏定義

返回本節(jié)目錄C語(yǔ)言允許宏帶有參數(shù)。在宏定義中的參數(shù)稱為-----形式參數(shù),在宏調(diào)用中的參數(shù)稱為-----實(shí)際參數(shù)。對(duì)帶參數(shù)的宏,調(diào)用中,要宏展開(kāi),

還要用實(shí)參去代換形參。②帶參宏定義形式:

#define

宏名(形參表)

字符串

在字符串中含有各個(gè)形參。③帶參宏調(diào)用的一般形式為:

宏名(實(shí)參表);5.8.1宏定義《

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論