第5章 C++函數(shù)與程序結(jié)構(gòu)_第1頁(yè)
第5章 C++函數(shù)與程序結(jié)構(gòu)_第2頁(yè)
第5章 C++函數(shù)與程序結(jié)構(gòu)_第3頁(yè)
第5章 C++函數(shù)與程序結(jié)構(gòu)_第4頁(yè)
第5章 C++函數(shù)與程序結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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)介

1、第5章C+函數(shù)與程序結(jié)構(gòu)【內(nèi)容提要】函數(shù)的定義與函數(shù)原型函數(shù)的調(diào)用方法與函數(shù)的參數(shù)傳遞規(guī)則帶有默認(rèn)參數(shù)的函數(shù)內(nèi)聯(lián)函數(shù)函數(shù)重載數(shù)組參數(shù)變量的四種存儲(chǔ)類型、作用域和生存期多文件結(jié)構(gòu)【重點(diǎn)與難點(diǎn)】5.1 函數(shù)的定義與函數(shù)原型5.1.1 函數(shù)的定義在程序中要調(diào)用的每個(gè)函數(shù)都必須給出定義且只能定義一次。定義格式:函數(shù)類型 函數(shù)名(形式參數(shù)列表)函數(shù)體說(shuō)明:函數(shù)的類型就是它的返回值(函數(shù)處理結(jié)果)的類型,其返回值由return語(yǔ)句給出。函數(shù)可以有返回值也可以沒(méi)有返回值,當(dāng)沒(méi)有返回值時(shí),函數(shù)類型聲明為void型。每個(gè)函數(shù)都有類型,如果在定義中沒(méi)有給出類型則默認(rèn)為int型。函數(shù)可以有0個(gè)或多個(gè)參數(shù),無(wú)論有沒(méi)有

2、參數(shù),函數(shù)名后的括號(hào)均不能省略;當(dāng)有多個(gè)形式參數(shù)時(shí),各參數(shù)之間用逗號(hào)隔開(kāi)。每個(gè)形式參數(shù)由參數(shù)類型和參數(shù)名組成。任何情況下不能在一個(gè)函數(shù)中定義另一個(gè)函數(shù)。5.1.2 函數(shù)原型函數(shù)原型告訴編譯器函數(shù)名、函數(shù)類型、函數(shù)參數(shù)個(gè)數(shù)及類型,編譯器可以對(duì)函數(shù)調(diào)用進(jìn)行檢查。格式:函數(shù)類型 函數(shù)名(形式參數(shù)列表);說(shuō)明:如果在首次使用函數(shù)之前已經(jīng)對(duì)函數(shù)進(jìn)行了定義,則不需要函數(shù)原型,函數(shù)定義就作為函數(shù)原型。否則在函數(shù)調(diào)用前必須給出函數(shù)原型說(shuō)明。函數(shù)原型與函數(shù)定義關(guān)于函數(shù)類型、函數(shù)名、參數(shù)類型以及參數(shù)個(gè)數(shù)都是一致的。形式參數(shù)列表中的每個(gè)參數(shù)可以只給出參數(shù)類型,參數(shù)名稱只是為了增強(qiáng)程序可讀性,可以省略。5.2 函數(shù)的

3、調(diào)用方法與函數(shù)的參數(shù)傳遞規(guī)則5.2.1 函數(shù)的調(diào)用方法l 使用函數(shù)(即函數(shù)調(diào)用)主要有三種方式:將函數(shù)用作一個(gè)獨(dú)立的表達(dá)式語(yǔ)句;用作某條語(yǔ)句的一部分;用作另一個(gè)函數(shù)的實(shí)參。l 格式:函數(shù)名(實(shí)際參數(shù)列表)l 函數(shù)調(diào)用的過(guò)程:首先傳遞參數(shù),其次執(zhí)行函數(shù)體,最后返回到調(diào)用該函數(shù)的位置。 5.2.2 參數(shù)傳遞規(guī)則在函數(shù)調(diào)用時(shí),實(shí)參要向形參傳遞信息使形參具有確切的含義(即使形參具有對(duì)應(yīng)的存儲(chǔ)空間和初值)。參數(shù)傳遞主要有兩種方式:按值傳遞和引用傳遞。l 按值傳遞按值傳遞參數(shù)時(shí),生成實(shí)際參數(shù)值的副本并傳遞給被調(diào)用函數(shù)的形式參數(shù),形參值的改變不會(huì)影響到實(shí)參。l 引用傳遞引用傳遞是將形參作為實(shí)參的別名,所以通

4、過(guò)形參可以直接訪問(wèn)實(shí)參數(shù)據(jù),也就是說(shuō)對(duì)形參值的改變就是對(duì)實(shí)參值的改變。引用傳遞中需在定義形式參數(shù)時(shí)在形參前加引用符“&”。l 地址傳遞地址傳遞是將實(shí)參的地址傳遞給形參,所以對(duì)形參所指地址中的內(nèi)容進(jìn)行修改也會(huì)使實(shí)參值發(fā)生改變。按地址傳遞中需將形式參數(shù)的類型定義為指針類型。5.3帶有默認(rèn)參數(shù)的函數(shù)程序員可以指定參數(shù)的默認(rèn)值。當(dāng)調(diào)用程序沒(méi)有給出實(shí)參時(shí),按指定的默認(rèn)值為形參賦值。函數(shù)調(diào)用時(shí)實(shí)參與形參按照從左到右順序匹配,當(dāng)實(shí)參全部匹配而形參還有剩余時(shí),則剩下的形參采用默認(rèn)值。在對(duì)默認(rèn)值進(jìn)行定義時(shí)應(yīng)該從右向左定義,在一個(gè)沒(méi)有默認(rèn)值的參數(shù)的左邊又出現(xiàn)有默認(rèn)值的參數(shù)是錯(cuò)誤的。默認(rèn)參數(shù)應(yīng)在函數(shù)名首次出

5、現(xiàn)時(shí)定義。5.4 內(nèi)聯(lián)函數(shù)當(dāng)程序執(zhí)行到調(diào)用普通函數(shù)時(shí)程序就轉(zhuǎn)去執(zhí)行該函數(shù),執(zhí)行完該被調(diào)用函數(shù)后再返回到調(diào)用函數(shù)。對(duì)于內(nèi)聯(lián)函數(shù)在編譯階段編譯器就把每個(gè)出現(xiàn)調(diào)用該內(nèi)聯(lián)函數(shù)的地方都用該函數(shù)體中的代碼替代。因此內(nèi)聯(lián)函數(shù)的使用會(huì)減少函數(shù)調(diào)用的開(kāi)銷,但是會(huì)增加程序的長(zhǎng)度。定義內(nèi)聯(lián)函數(shù)時(shí)在函數(shù)定義前加關(guān)鍵字inline。內(nèi)聯(lián)函數(shù)適用于經(jīng)常使用的小函數(shù)。對(duì)于內(nèi)聯(lián)函數(shù)的函數(shù)體有一些限制:內(nèi)聯(lián)函數(shù)中不能含有任何循環(huán)以及switch和goto語(yǔ)句;內(nèi)聯(lián)函數(shù)中不能說(shuō)明數(shù)組;遞歸函數(shù)(自己調(diào)用自己的函數(shù))不能定義為內(nèi)聯(lián)函數(shù)。 5.5函數(shù)重載函數(shù)重載是指同一個(gè)函數(shù)名可以對(duì)應(yīng)多個(gè)函數(shù)實(shí)現(xiàn)。也就是說(shuō)這些函數(shù)具有相同的函數(shù)名,

6、完成含義相同的工作,但是它們具有不同的參數(shù)(即參數(shù)個(gè)數(shù)或參數(shù)類型不同),在函數(shù)調(diào)用時(shí)根據(jù)參數(shù)的類型、個(gè)數(shù)決定具體調(diào)用哪個(gè)函數(shù)。函數(shù)重載時(shí)首先進(jìn)行參數(shù)完全匹配,當(dāng)無(wú)法完全匹配時(shí),按隱式數(shù)據(jù)類型轉(zhuǎn)換的方向進(jìn)行匹配,仍無(wú)法匹配時(shí),則報(bào)錯(cuò)。函數(shù)重載解析與函數(shù)定義或聲明的順序無(wú)關(guān)。當(dāng)多個(gè)函數(shù)參數(shù)個(gè)數(shù)及類型均相同,只有函數(shù)返回值類型不同時(shí)則報(bào)錯(cuò)。5.6 數(shù)組參數(shù)數(shù)組作為函數(shù)的參數(shù)時(shí),它傳遞的是數(shù)組中第0個(gè)元素的地址(指針)。因此在被調(diào)用函數(shù)中對(duì)形參數(shù)組值的改變將被應(yīng)用到實(shí)參數(shù)組。數(shù)組長(zhǎng)度不是參數(shù)類型的一部分,函數(shù)不知道傳遞給它的數(shù)組的實(shí)際長(zhǎng)度,當(dāng)編譯器對(duì)實(shí)參類型進(jìn)行參數(shù)類型檢查時(shí)并不檢查數(shù)組的長(zhǎng)度,因此在

7、定義形參時(shí)可以只寫(xiě)數(shù)組名,方括號(hào)中是否寫(xiě)長(zhǎng)度作用相同。有時(shí)在被調(diào)用函數(shù)中需要知道數(shù)組長(zhǎng)度,那么可以采用下面兩種方法傳遞數(shù)組長(zhǎng)度信息。 提供一個(gè)含有數(shù)組長(zhǎng)度的額外參數(shù),即定義一個(gè)用于存放數(shù)組長(zhǎng)度的形參。 將被調(diào)用函數(shù)的形式參數(shù)聲明為數(shù)組的引用,當(dāng)形式參數(shù)是一個(gè)數(shù)組類型的引用時(shí)數(shù)組長(zhǎng)度成為形式參數(shù)類型的一部分,編譯器會(huì)檢查數(shù)組實(shí)參的長(zhǎng)度與在函數(shù)形參類型中指定的長(zhǎng)度是否匹配。5.7變量的作用域與生存期5.7.1 局部變量與全局變量l 程序的內(nèi)存區(qū)域 一個(gè)程序?qū)⒉僮飨到y(tǒng)分配給其運(yùn)行的內(nèi)存塊分為4個(gè)區(qū)域。 代碼區(qū),存放程序的代碼,即程序中各個(gè)函數(shù)中的代碼塊。 全局?jǐn)?shù)據(jù)區(qū),存放程序全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)。 堆

8、區(qū),存放程序的動(dòng)態(tài)數(shù)據(jù)。 棧區(qū),存放程序的局部數(shù)據(jù),即各個(gè)函數(shù)中的數(shù)據(jù)。l 局部變量在一個(gè)函數(shù)內(nèi)部說(shuō)明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。也就是說(shuō),只有在包含變量說(shuō)明的函數(shù)內(nèi)部,才能使用被說(shuō)明的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱“局部變量”。l 全局變量在函數(shù)外部定義的變量稱為外部變量。外部變量不屬于任何一個(gè)函數(shù),其作用域是:從外部變量的定義位置開(kāi)始,到本文件結(jié)束為止。外部變量可被作用域內(nèi)的所有函數(shù)直接引用,所以外部變量又稱全局變量。說(shuō)明: 在同一源文件中,允許外部變量和內(nèi)部變量同名。在內(nèi)部變量的作用域內(nèi),外部變量將被屏蔽而不起作用。 外部變量的作用域是從定義點(diǎn)到本

9、文件結(jié)束。如果定義點(diǎn)之前的函數(shù)需要引用這些外部變量時(shí),需要在函數(shù)內(nèi)對(duì)被引用的外部變量進(jìn)行說(shuō)明。外部變量說(shuō)明的一般形式為:extern 數(shù)據(jù)類型 外部變量,外部變量2; 外部變量的定義,必須在所有的函數(shù)之外,且只能定義一次。而外部變量的說(shuō)明,出現(xiàn)在要使用該外部變量的函數(shù)內(nèi),而且可以出現(xiàn)多次。5.7.2靜態(tài)變量l 靜態(tài)局部變量定義格式: static 數(shù)據(jù)類型 內(nèi)部變量表;存儲(chǔ)特點(diǎn): 靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)。在程序執(zhí)行過(guò)程中,即使所在函數(shù)調(diào)用結(jié)束也不釋放。換句話說(shuō),在程序執(zhí)行期間,靜態(tài)內(nèi)部變量始終存在,但其它函數(shù)是不能引用它們的。 定義但不初始化,則自動(dòng)賦以""(整型和實(shí)型)

10、或'0'(字符型);且每次調(diào)用它們所在的函數(shù)時(shí),不再重新賦初值,只是保留上次調(diào)用結(jié)束時(shí)的值!l 靜態(tài)全局變量 在全局變量前加一個(gè)static,使該變量只在這個(gè)源文件中可用,稱之為全局靜態(tài)變量。全局靜態(tài)變量就是靜態(tài)全局變量。 靜態(tài)全局變量對(duì)組成該程序的其他源文件是無(wú)效的。5.7.3 生命期l 靜態(tài)生命期 這種生命期與程序的運(yùn)行期相同,只要程序一開(kāi)始運(yùn)行,這種生命期的變量就存在,當(dāng)程序結(jié)束時(shí),其生命期就結(jié)束。l 局部生命期 在函數(shù)內(nèi)部聲明的變量或者是塊中聲明的變量具有局部生命期。l 動(dòng)態(tài)生命期 這種生命期由程序中特定的函數(shù)調(diào)用(malloc()和free())或操作符(new和de

11、lete)來(lái)創(chuàng)建和釋放?!镜湫屠}】例題1:下列函數(shù)定義語(yǔ)句正確的是( )。(a)void fun1(int i,int j);cout<<i+j;(b)void fun1(int i,int j)void fun2()cout<<”This is fun2.”<<endl;cout<<i+j;(c)void fun1(int i,int j)cout<<i+j;return 1;(d)void fun1(int i,int j)cout<<i+j;解答:本題主要考查對(duì)函數(shù)定義方法的掌握。函數(shù)定義的形式為函數(shù)類型 函數(shù)名(

12、形式參數(shù)列表)函數(shù)體選項(xiàng)a中多了一個(gè)分號(hào);函數(shù)可以嵌套調(diào)用但是不能嵌套定義,選項(xiàng)b在函數(shù)內(nèi)部定義函數(shù)是錯(cuò)誤的;若果函數(shù)類型定義為void型,則該函數(shù)沒(méi)有返回值,選項(xiàng)c定義了void型函數(shù)卻有返回值,這是錯(cuò)誤的。答案為:d例題2:下列關(guān)于C+函數(shù)的敘述中,正確的是( )。(a)每個(gè)函數(shù)至少要具有一個(gè)參數(shù) (b)每個(gè)函數(shù)都必須返回一個(gè)值(c)函數(shù)在被調(diào)用之前必須先聲明或定義 (d)函數(shù)不能自己調(diào)用自己解答:本題主要考查對(duì)函數(shù)的要素及其調(diào)用方法的理解。函數(shù)可以有參數(shù),也可以沒(méi)有參數(shù)(無(wú)參函數(shù)),選項(xiàng)a錯(cuò)誤;函數(shù)可以有返回值,也可以沒(méi)有返回值,當(dāng)沒(méi)有返回值時(shí)將這個(gè)函數(shù)定義為void型,選項(xiàng)b錯(cuò)誤;如果

13、一個(gè)函數(shù)自己調(diào)用自己則稱為遞歸調(diào)用,這是允許的。選項(xiàng)d錯(cuò)誤。函數(shù)在調(diào)用之前必須已經(jīng)聲明或定義過(guò)。答案為:c。例題3:下面的函數(shù)聲明語(yǔ)句正確的是( )。(a) int fun(int var1=1,char* var2=”Beijing”,double var3);(b) int fun(int,char* =”Beijing”,double =3.14159);(c) int fun(int var1=1,char* var2=”Beijing”,double var3=3.14159);int fun(int,char*,double var3= 12.34);(d) int fun(int

14、 var1=1,char*,double var3=3.14159);解答:本題主要考查帶默認(rèn)參數(shù)的函數(shù)原型聲明方法。函數(shù)調(diào)用時(shí)實(shí)參與形參按照從左到右順序匹配,在對(duì)默認(rèn)值進(jìn)行定義時(shí)應(yīng)該從右向左定義。選項(xiàng)a和d都沒(méi)有遵從對(duì)默認(rèn)值定義時(shí)應(yīng)該從右向左定義的原則,即對(duì)于第一個(gè)有默認(rèn)值的參數(shù)而言,它后面還有參數(shù)沒(méi)有定義默認(rèn)值這是錯(cuò)誤的。選項(xiàng)c對(duì)函數(shù)中第3個(gè)參數(shù)定義了兩次,錯(cuò)誤。答案為:b本題考查默認(rèn)參數(shù)問(wèn)題。例題4:運(yùn)行下列程序結(jié)果為_(kāi)。#include <iostream.h>int f(int ,int);void main()int a=-1,3,5,-7,9,-11; cout<

15、;<f(a,6)<<endl;int f(int a,int size)int i,t=1; for(i=0;i<size;i+) if(ai>0) t*=ai;return t;解答:本題主要考查對(duì)數(shù)組參數(shù)的理解與應(yīng)用。本程序的作用是計(jì)算數(shù)組中元素值為正數(shù)的元素的乘積。函數(shù)f含有兩個(gè)形式參數(shù),第一個(gè)參數(shù)存放一個(gè)整型數(shù)組的首地址,第二個(gè)參數(shù)存放該數(shù)組的長(zhǎng)度,在該函數(shù)中仍然通過(guò)數(shù)組名下標(biāo)的方式對(duì)數(shù)組元素進(jìn)行引用。在主函數(shù)中定義了一個(gè)數(shù)組a,然后調(diào)用函數(shù)f,傳遞實(shí)參時(shí)第一個(gè)實(shí)參a(數(shù)組名)為數(shù)組a的首地址,第二個(gè)參數(shù)6為數(shù)組a的長(zhǎng)度。答案為:135例題5:運(yùn)行下列程序

16、結(jié)果為( )。#include<string.h>#include<iostream.h>void main( )char str10="vb","pascal","c+",s10;strcpy(s,(strcmp(str0,str1)<0?str0:str1);if (strcmp(str2,s)<0) strcpy(s,str2);cout<<s<<endl;解答:本程序的作用是將"vb","pascal","c+&quo

17、t;三個(gè)字符串中最小的一個(gè)放入數(shù)組s,并輸出s。采用二維數(shù)組str存放三個(gè)字符串,則str0、str1、str2中分別存放三個(gè)字符串的首地址,strcmp()函數(shù)用于比較兩個(gè)字符串的大小,strcpy()函數(shù)用于將第二個(gè)參數(shù)所指字符串復(fù)制到第一個(gè)參數(shù)所指數(shù)組。C+中有一些操作字符串的標(biāo)準(zhǔn)的庫(kù)函數(shù),頭文件string.h包含所有字符串處理函數(shù)的說(shuō)明。常用的一些函數(shù)如下: strcpy(char destination, const char source);/把第二個(gè)字符串拷貝到第一個(gè)字符串strncpy(char destination, const char source, int numc

18、hars);strcat(char target, const char source);strncat(char target, const char source, int numchars);int strcmp(const char firststring, const char secondstring);/比較兩個(gè)字符串是否相等strlen( const char string );/返回字符串長(zhǎng)度本題答案為:c+例題6:運(yùn)行下列程序的結(jié)果為_(kāi)。#include<iostream.h>void fun1(const double& i)cout<<i

19、<<endl;void fun2(double &j)cout<<j<<endl;void fun3(double k)cout<<k<<endl;void main()fun1('a');fun2('a');fun3('a');(a)97 (b)97 (c)a(d)程序出錯(cuò),無(wú)法運(yùn)行。 97 a a 97 97 a解答:文字量、常量和需要類型轉(zhuǎn)換的參數(shù)都可以傳遞給const&參數(shù),但不能傳遞給非const的引用參數(shù)。也就是說(shuō)對(duì)非const引用參數(shù)不允許做類型轉(zhuǎn)換。本題中

20、對(duì)于函數(shù)fun1以及fun3在調(diào)用時(shí)參數(shù)都發(fā)生了隱形數(shù)據(jù)類型轉(zhuǎn)換,而對(duì)于函數(shù)fun2它的參數(shù)為非const的引用參數(shù),不允許作類型轉(zhuǎn)換,所以對(duì)fun2的調(diào)用出錯(cuò)。因此程序出錯(cuò)無(wú)法運(yùn)行。答案為:d。例題7:運(yùn)行下列程序的結(jié)果為_(kāi)。#include<iostream.h>#include<iomanip.h>int findmax(int Iarg);float findmax(float Farg);double findmax(double Darg);main() int Iarg6=15,88,34,12,31,10; float Farg6=145.5,32.3,

21、363.2,19.3,70.1,35.4; double Darg6=15.54323,2.47763,63.29876,19.67863,78.34541,35.44009; cout<<"largest value in the Iarg is "<<(findmax(Iarg)<<"n" cout<<"largest value in the Farg is "<<(findmax(Farg)<<"n" cout<<"

22、;largest value in the Darg is "<<(findmax(Darg)<<"n" return 0;int findmax(int Iarg) int max=0; for(int i=0;i<6;i+) if(Iargi>max) max=Iargi; return max;float findmax(float Farg) float max=0; for(int i=0;i<6;i+) if(Fargi>max) max=Fargi; return max;double findmax(

23、double Darg) double max=0; for(int i=0;i<6;i+) if(Dargi>max) max=Dargi; return max;解答:本題主要考查函數(shù)重載。本程序用于求解并輸出一個(gè)整型數(shù)組的最大元素、一個(gè)浮點(diǎn)型數(shù)組的最大元素和一個(gè)雙精度型數(shù)組的最大元素。在主函數(shù)中調(diào)用三次findmax()函數(shù),根據(jù)傳遞實(shí)參數(shù)組類型不同,自動(dòng)調(diào)用不同的函數(shù)完成求解操作,這里findmax()函數(shù)實(shí)現(xiàn)了重載。答案為:largest value in the Iarg is 88largest value in the Farg is 363.2largest va

24、lue in the Darg is 78.3454例題8:運(yùn)行下列程序的結(jié)果為_(kāi)。#include<iostream.h>int fun(int,int);void main() cout<<"n="<<fun(0,0)<<endl;int fun(int n,int s) int s1,n1; s1=s+n*n; if(s1<100) n1=n+1; fun(n1,s1); else return n-1;解答:本題主要考查對(duì)遞歸調(diào)用程序的理解。fs1n1f(7,91)f(6,55)917f(5,30)556f(4,

25、14)305f(3,5)144f(2,1)53f(1,0)12f(0,0)01壓棧情況如上圖所示。當(dāng)調(diào)用f(7,91)時(shí)返回7-1=6程序結(jié)束。答案為:n=6例題9:運(yùn)行下列程序結(jié)果為_(kāi)。#include<iostream.h>void fun()for(int i=1;i<=3;i+)static int var1=1;int var2=1;cout<<"var1="<<var1+<<",var2="<<var2+<<endl;void main()fun();解答:本題考查

26、對(duì)靜態(tài)局部變量的理解。靜態(tài)局部變量存放在內(nèi)存的全局?jǐn)?shù)據(jù)區(qū)。函數(shù)結(jié)束時(shí),靜態(tài)局部變量不會(huì)消失,每次函數(shù)調(diào)用時(shí),也不會(huì)為它重新分配空間,它始終駐留在全局?jǐn)?shù)據(jù)區(qū),直到程序運(yùn)行結(jié)束。靜態(tài)局部變量只在第一次調(diào)用時(shí)被初始化。在本程序中for循環(huán)3次,但是對(duì)靜態(tài)變量var1的初始化只在第一次循環(huán)時(shí)完成,后兩次循環(huán)不執(zhí)行初始化。而變量var2在三次循環(huán)中都會(huì)被初始化。答案為:var1=1,var2=1var1=2,var2=1var1=3,var2=1例題10:#include<iostream.h>void fun1(int);void main()void fun1(double);fun1(

27、1);void fun1(int i)cout<<"int:"<<i<<endl;void fun1(double i)cout<<"double:"<<i<<endl;解答:本題主要考查重載與作用域的關(guān)系問(wèn)題。本程序中雖然定義了重載函數(shù)fun1。但是在主函數(shù)中僅聲明了參數(shù)類型為double的函數(shù)fun1,然后就對(duì)fun1進(jìn)行調(diào)用(調(diào)用前沒(méi)有看到以整型數(shù)據(jù)作為形參的fun1函數(shù)的定義或聲明)。那么盡管調(diào)用時(shí)賦的實(shí)參1是整型,也無(wú)法調(diào)用以整型數(shù)據(jù)作為形參的fun1函數(shù)。只能通過(guò)隱式數(shù)據(jù)

28、類型轉(zhuǎn)換與以double類型作為形參的fun1函數(shù)匹配。也就是說(shuō),在這里實(shí)際上沒(méi)有實(shí)現(xiàn)重載。所以,結(jié)果為:double:1。例題11:運(yùn)行下列程序的結(jié)果為 var1=300,var2=400var1=_,var2=_。#include<iostream.h>void output(int var1,int var2)cout<<"var1="<<var1<<",var2="<<var2<<endl;var1=100;var2=200;void main()int var1=300;i

29、nt var2=400;output(var1,var2);cout<<"var1="<<var1<<",var2="<<var2<<endl;解答:本題主要考查變量的作用域問(wèn)題。在主函數(shù)中定義的變量var1和var2其作用域?yàn)楸境绦蚍秶?,在函?shù)output中形參var1和var2的作用域在output函數(shù)范圍內(nèi),因?yàn)樗椭骱瘮?shù)中定義的變量同名,所以在該函數(shù)范圍內(nèi)會(huì)屏蔽主函數(shù)中定義的同名變量,其中的訪問(wèn)變量var1和var2的操作都是針對(duì)于形參變量,與主函數(shù)中定義的變量無(wú)關(guān)。當(dāng)對(duì)output函數(shù)

30、的調(diào)用結(jié)束后,形參變量消失,返回主函數(shù),在主函數(shù)中訪問(wèn)的變量var1和var2仍為主函數(shù)中所定義的變量。所以,答案為:300、400例題12:寫(xiě)一個(gè)函數(shù),它以一個(gè)名字作為命令行參數(shù),打印輸出“hello,name”(其中name為輸入命令行參數(shù))。解答:本程序主要考查對(duì)命令行參數(shù)的理解及使用。說(shuō)明:void main(int argc,char* argv)即是說(shuō),除按通常的那種無(wú)參方式來(lái)使用main函數(shù)外,如果需要的話,main函數(shù)還可帶有兩個(gè)上述格式以及數(shù)據(jù)類型的形式參數(shù)。main帶有形式參數(shù)時(shí),其對(duì)應(yīng)實(shí)參值由用戶在執(zhí)行該程序時(shí)指定,而后通過(guò)操作系統(tǒng)將它們傳遞給main函數(shù)。main函數(shù)所

31、含兩個(gè)參數(shù)的含義如下:argc-第一參數(shù),記錄命令行參數(shù)的個(gè)數(shù)(其值為實(shí)際命令行參數(shù)的個(gè)數(shù)加1);argv-第二參數(shù),為字符串?dāng)?shù)組,存放執(zhí)行程序名以及各實(shí)際命令行參數(shù)。各數(shù)組元素的含義為:argv0:本執(zhí)行程序的文件名argv1:第1個(gè)實(shí)際命令行參數(shù)(如果有);argvargc-1:第argc-1個(gè)實(shí)際命令行參數(shù)。在vc6.0開(kāi)發(fā)環(huán)境下設(shè)置命令行參數(shù)方法如下:projectàsettingsàdebugà”program arguments:”中,輸入以空格分隔的各參數(shù)。在命令提示符環(huán)境中,可通過(guò)如下形式運(yùn)行程序:程序文件名 參數(shù)1 參數(shù)之間用空格隔開(kāi)。 參考程序

32、為:#include<iostream.h>void main(int argc,char* argv)cout<<"hello,"<<argv1<<endl;例題13:使用重載函數(shù)的方法定義兩個(gè)函數(shù),用來(lái)分別求出兩個(gè)int型數(shù)的點(diǎn)間距離和double型數(shù)的點(diǎn)間距離。兩個(gè)int 型點(diǎn)分別為A(5,8),B(12,15);兩個(gè)double型點(diǎn)分別為C(1.5,5.2),D(3.7,4.6)。解答:本題主要考查重載函數(shù)的應(yīng)用。假設(shè)有兩點(diǎn)A(x1,y1),B(x2,y2)則兩點(diǎn)之間距離為。函數(shù)sqrt()的作用是求平方根,使用該函數(shù)

33、應(yīng)包含頭文件math.h。這個(gè)程序中要實(shí)現(xiàn)求整型的兩點(diǎn)之間距離和雙精度型的兩點(diǎn)之間距離,作用相同,但操作的對(duì)象類型不同,結(jié)果類型不同,所以用函數(shù)重載解決。參考程序如下:#include<iostream.h>#include<math.h> void main()double distance(int,int,int,int);double distance(double,double,double,double);int x1=5,y1=8,x2=12,y2=15;double xd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6;double disi=d

34、istance(x1,y1,x2,y2);cout<<"兩個(gè)int 型數(shù)的點(diǎn)間距離:"cout<<disi<<endl;double disd=distance(xd1,yd1,xd2,yd2);cout<<"兩個(gè)double 型數(shù)的點(diǎn)間距離:"cout<<disd<<endl;double distance(int a1,int b1,int a2,int b2)cout<<"n調(diào)用計(jì)算兩個(gè)int型數(shù)的點(diǎn)間距離函數(shù)n"double s=sqrt(a1

35、-a2)*(a1-a2)+(b1-b2)*(b1-b2);return s;double distance(double a1,double b1,double a2,double b2)cout<<"n調(diào)用計(jì)算兩個(gè)double型數(shù)的點(diǎn)間距離函數(shù)n"return sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);例題14:使用遞歸函數(shù)求解并輸出fibonacci數(shù)列的前十項(xiàng)。解答:本題主要考查對(duì)遞歸函數(shù)的應(yīng)用。對(duì)于fibonacci數(shù)列在前邊已經(jīng)介紹,這里使用遞歸完成,請(qǐng)讀者對(duì)比遞歸于非遞歸編程的方法。參考程序如下:#include<

36、iostream.h>#include<iomanip.h>int fib(int n)if(n<3) return 1;return (fib(n-2)+fib(n-1);void main()for(int i=1;i<=10;i+)cout<<setw(5)<<fib(i);例題15:打印某一年的年歷。解答:關(guān)于本題的編程細(xì)節(jié)請(qǐng)參見(jiàn)程序中的注釋。參考程序如下:#include<iostream.h>#include<iomanip.h>int FirstDayOfYear(int y);int DaysOfMo

37、nth(int m);void PrintMonth(int m);void PrintHead(int m);bool IsLeapYear(int y);int weekDay;int year;void main()cerr<<"請(qǐng)輸入您想要打印的年份:n"cin>>year;if(year<1900)cerr<<"年份不能小于1900。n"return;weekDay=FirstDayOfYear(year);/一年的第一天星期幾/打印年標(biāo)題cout<<"nnnnn "&l

38、t;<year<<" 年日歷n"cout<<"n ="/打印每個(gè)月for(int i=1;i<=12;i+)PrintMonth(i);cout<<endl;/某個(gè)月打印函數(shù)void PrintMonth(int m)PrintHead(m); /打印月標(biāo)題int days=DaysOfMonth(m); /該月的天數(shù)for(int i=1;i<=days;i+)cout<<setw(6)<<i;weekDay=(weekDay+1)%7;if(weekDay=0) /打印下一

39、天時(shí)判斷是否換行cout<<endl;cout<<" "/行首空格/打印月標(biāo)題void PrintHead(int m)cout<<"nn"<<setw(6)<<m<<"月 日 一 二 三 四 五 六n"cout<<" "for(int i=0;i<weekDay;i+)cout<<" "/判斷某月天數(shù)的函數(shù)int DaysOfMonth(int m)switch(m)case 1:case 3

40、:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;case 2:if(IsLeapYear(year) return 29; else return 28;return 0;/判斷是否為閏年bool IsLeapYear(int y)return(y%4=0&&y%100!=0)|year%400=0);/判斷某年的第一天/因?yàn)槊磕甓际?2個(gè)整星期多一天,因此n年多出的天數(shù)還是n天,/再加上1900年到y(tǒng)ear年間因閏年多出來(lái)的天數(shù),/再加上1900年元旦

41、的星期序號(hào)1與7取模便得出是第幾天。由于2000年正好是閏年,所/以可以計(jì)算到2099年。int FirstDayOfYear(int y)int n=y-1900;n=n+(n-1)/4+1;n=n%7;return n;【習(xí)題】一、選擇題1.下列函數(shù)定義語(yǔ)句正確的是( )。(a)void fun(int var1)int var1=0;cout<<var1<<endl;(b)void fun(int var1,var2)cout<<var1+var2<<endl;(c)int fun(int var1)if(var1)return 1;els

42、e return 0;(d)int fun(int var1)if(var1)return 1;elsecout<<0<<endl;2.下列敘述中正確的是( )(a)C+語(yǔ)言程序中,main()函數(shù)必須在其它函數(shù)之前,函數(shù)內(nèi)可以嵌套定義函數(shù)。(b)C+語(yǔ)言程序中,main()函數(shù)的位置沒(méi)有限制,函數(shù)內(nèi)不可以嵌套定義函數(shù)。(c)C+語(yǔ)言程序中,main()函數(shù)必須在其它函數(shù)之前,函數(shù)內(nèi)不可以嵌套定義函數(shù)。(d)C+語(yǔ)言程序中,main()函數(shù)必須在其它函數(shù)之后,函數(shù)內(nèi)可以嵌套調(diào)用函數(shù)。3.下列對(duì)return語(yǔ)句敘述錯(cuò)誤的是( )。(a)在函數(shù)定義中可能有return語(yǔ)句,

43、也可能沒(méi)有return語(yǔ)句。(b)在函數(shù)定義中可以有多條return語(yǔ)句。(c)在函數(shù)定義中每條return語(yǔ)句可能返回多個(gè)值。(d)如果函數(shù)類型不是void型,則函數(shù)定義中必須有return語(yǔ)句。4.C+語(yǔ)言中函數(shù)返回值的類型是由( )決定的。(a)return語(yǔ)句中的表達(dá)式類型 (b)調(diào)用該函數(shù)的主調(diào)函數(shù)類型(c)定義函數(shù)時(shí)所指定的函數(shù)類型 (d)以上說(shuō)法都不正確5.C+中,關(guān)于參數(shù)默認(rèn)值的描述正確的是( )。(a)只能在函數(shù)定義時(shí)設(shè)置參數(shù)默認(rèn)值(b)設(shè)置參數(shù)默認(rèn)值時(shí),應(yīng)當(dāng)從右向左設(shè)置(c)設(shè)置參數(shù)默認(rèn)值時(shí),應(yīng)當(dāng)全部設(shè)置 (d)設(shè)置參數(shù)默認(rèn)值后,調(diào)用函數(shù)不能再對(duì)參數(shù)賦值6.使用重載函數(shù)編程

44、序的目的是( )。(a)使用相同的函數(shù)名調(diào)用功能相似但參數(shù)不同的函數(shù) (b)共享程序代碼(c)提高程序的運(yùn)行速度 (d)節(jié)省存儲(chǔ)空間7.系統(tǒng)在調(diào)用重載函數(shù)時(shí),下列不能作為確定調(diào)用哪個(gè)重載函數(shù)的依據(jù)的選項(xiàng)是( )。(a)函數(shù)名 (b)參數(shù)個(gè)數(shù) (c)函數(shù)類型 (d)參數(shù)類型8.運(yùn)行下列程序結(jié)果為( )。#include<iostream.h>inline int abs(int x) return x<0?-x:x;void main() int var1=10,var2=-10; cout<<”|var1|+|var2|=”<<abs(var1)+ab

45、s(var2)<<endl;(a) |var1|+|var2|=0(b) |var1|+|var2|=20 (c) |var1|+|var2|=10 (d) |var1|+|var2|=-109.數(shù)組作為函數(shù)的形參,把數(shù)組名作為函數(shù)的實(shí)參時(shí),傳遞給函數(shù)的是( )。(a)數(shù)組中各元素的值(b)數(shù)組中元素的個(gè)數(shù)(c)數(shù)組中第0個(gè)元素的值(d)該數(shù)組的首地址10.運(yùn)行下列程序結(jié)果為( )。#include <iostream.h>int f(int3,int,int);void main()int a3=0,1,2,3,4,5,6,7,8; cout<<f(a,3

46、,3)<<endl;int f(int a3,int row,int col)int i,j,t=1; for(i=0;i<row;i+) for(j=0;j<col;j+) aij+; if(i=j) t*=aij; return t;(a)0 (b)48 (c)105 (d)4511.運(yùn)行下列程序的輸出結(jié)果為( )。#include<iostream.h>int var;main() int var=2; :var=0; if(var>1) int var=5; cout<<var; cout<<var;cout<&l

47、t;:var<<endl;return 0;(a)20 (b)000 (c)520 (d)500二、填空題1.一個(gè)C+語(yǔ)言程序總是從_開(kāi)始執(zhí)行。2._使編譯器可以檢查傳入函數(shù)的參數(shù)個(gè)數(shù)、類型和順序。3.在函數(shù)原型說(shuō)明中必須包含的要素有函數(shù)類型(如果省略則默認(rèn)為int型)、_、_。4._限定符聲明只瀆變量。5.若某個(gè)函數(shù)沒(méi)有返回值,則該函數(shù)的類型應(yīng)定義為_(kāi)類型。6.一個(gè)函數(shù)直接或間接地調(diào)用自身,這種現(xiàn)象稱為函數(shù)的_。7.在一個(gè)函數(shù)的定義或聲明前加上關(guān)鍵字_則就把該函數(shù)定義為內(nèi)聯(lián)函數(shù),它主要是解決_問(wèn)題。8.函數(shù)的參數(shù)傳遞的方式分為兩類,分別是_方式和_方式。9.在c+中,可以有多個(gè)同

48、名而處理不同參數(shù)類型或個(gè)數(shù)的函數(shù),稱為函數(shù)_。10.標(biāo)識(shí)符的四種作用域是_、_、_、_。11.要讓函數(shù)中的局部變量在函數(shù)調(diào)用之間保持其數(shù)值,則要用存儲(chǔ)類說(shuō)明符_聲明。12.運(yùn)行下列程序的結(jié)果為_(kāi)。#include <iostream.h>void swap(int &,int &);void main() int a=66,b=4; cout<<"a="<<a<<",b=“ <<b<<endl; swap(a,b); cout<<"a="<

49、<a<<",b=“ <<b<<endl;void swap(int &x,int &y) int t=x; x=y; y=t; 13.運(yùn)行下列程序的結(jié)果為_(kāi)。#include <iostream.h>#include <iomanip.h>void fun(int array ,int n);void main( )int a10=1,1;int i;fun(a,10);for(i=0;i<10;i+) cout<<setw(4)<<ai;cout<<

50、endl;void fun(int array ,int n)int i;for(i=2;i<n;i+) arrayi=arrayi-1+arrayi-2;14.運(yùn)行下列程序,若輸入1 2 3 4 5則輸出結(jié)果為_(kāi)。#include<iostream.h>void rev(int n)int x;cin>>x;if(n=1)cout<<x;elserev(n-1);cout<<x;void main()rev(5);15. 運(yùn)行下列程序結(jié)果為_(kāi)。#include<iostream.h>void fun(char PrChar=&

51、#39;$',int num=10);main() char ch; int num; ch='#' num=20; fun(ch,num); fun(); fun('&'); return 0;void fun(char ch,int num) for(int i=0;i<num;i+) cout<<ch; cout<<"n"16.運(yùn)行下列程序結(jié)果為_(kāi)。 #include <iostream.h>void fun( );void main( )int i;for(i=0;i<5

52、;i+) fun();void fun( )static int m=0;cout<<m+;三、編程題1. 編寫(xiě)函數(shù)將華氏溫度轉(zhuǎn)換為攝氏溫度,公式為;并在主函數(shù)中調(diào)用。2. 編寫(xiě)函數(shù)利用全局變量統(tǒng)計(jì)數(shù)組中奇數(shù)和偶數(shù)的個(gè)數(shù)。3. 利用重載編寫(xiě)求整數(shù)絕對(duì)值和求實(shí)數(shù)絕對(duì)值兩個(gè)函數(shù)。4. 編寫(xiě)函數(shù)利用遞歸的方法計(jì)算x的n階勒讓德多項(xiàng)式的值。該公式如下:5.編寫(xiě)程序,驗(yàn)證哥德巴赫猜想:任何大于2的偶數(shù)都是兩個(gè)素?cái)?shù)之和(在1000以內(nèi)驗(yàn)證)?!緟⒖即鸢浮恳弧⑦x擇題1. c 2. b3. c4. c5. b6. a7. c8. b9. d10. d11. c二、填空題1. main函數(shù)2. 函數(shù)原型3. 函數(shù)名、參數(shù)

溫馨提示

  • 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)論