第5章C++函數與程序結構_第1頁
第5章C++函數與程序結構_第2頁
第5章C++函數與程序結構_第3頁
第5章C++函數與程序結構_第4頁
第5章C++函數與程序結構_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章C+函數與程序結構【內容提要】函數的定義與函數原型函數的調用方法與函數的參數傳遞規則帶有默認參數的函數內聯函數函數重載數組參數變量的四種存儲類型、作用域和生存期多文件結構【重點與難點】5.1 函數的定義與函數原型5.1.1 函數的定義在程序中要調用的每個函數都必須給出定義且只能定義一次。定義格式:函數類型 函數名(形式參數列表)函數體說明:函數的類型就是它的返回值(函數處理結果)的類型,其返回值由return語句給出。函數可以有返回值也可以沒有返回值,當沒有返回值時,函數類型聲明為void型。每個函數都有類型,如果在定義中沒有給出類型則默認為int型。函數可以有0個或多個參數,無論有沒有

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

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

4、過形參可以直接訪問實參數據,也就是說對形參值的改變就是對實參值的改變。引用傳遞中需在定義形式參數時在形參前加引用符“&”。l 地址傳遞地址傳遞是將實參的地址傳遞給形參,所以對形參所指地址中的內容進行修改也會使實參值發生改變。按地址傳遞中需將形式參數的類型定義為指針類型。5.3帶有默認參數的函數程序員可以指定參數的默認值。當調用程序沒有給出實參時,按指定的默認值為形參賦值。函數調用時實參與形參按照從左到右順序匹配,當實參全部匹配而形參還有剩余時,則剩下的形參采用默認值。在對默認值進行定義時應該從右向左定義,在一個沒有默認值的參數的左邊又出現有默認值的參數是錯誤的。默認參數應在函數名首次出

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

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

7、定義形參時可以只寫數組名,方括號中是否寫長度作用相同。有時在被調用函數中需要知道數組長度,那么可以采用下面兩種方法傳遞數組長度信息。 提供一個含有數組長度的額外參數,即定義一個用于存放數組長度的形參。 將被調用函數的形式參數聲明為數組的引用,當形式參數是一個數組類型的引用時數組長度成為形式參數類型的一部分,編譯器會檢查數組實參的長度與在函數形參類型中指定的長度是否匹配。5.7變量的作用域與生存期5.7.1 局部變量與全局變量l 程序的內存區域 一個程序將操作系統分配給其運行的內存塊分為4個區域。 代碼區,存放程序的代碼,即程序中各個函數中的代碼塊。 全局數據區,存放程序全局數據和靜態數據。 堆

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

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

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

11、lete)來創建和釋放。【典型例題】例題1:下列函數定義語句正確的是( )。(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;解答:本題主要考查對函數定義方法的掌握。函數定義的形式為函數類型 函數名(

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

13、一個函數自己調用自己則稱為遞歸調用,這是允許的。選項d錯誤。函數在調用之前必須已經聲明或定義過。答案為:c。例題3:下面的函數聲明語句正確的是( )。(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);解答:本題主要考查帶默認參數的函數原型聲明方法。函數調用時實參與形參按照從左到右順序匹配,在對默認值進行定義時應該從右向左定義。選項a和d都沒有遵從對默認值定義時應該從右向左定義的原則,即對于第一個有默認值的參數而言,它后面還有參數沒有定義默認值這是錯誤的。選項c對函數中第3個參數定義了兩次,錯誤。答案為:b本題考查默認參數問題。例題4:運行下列程序結果為_。#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;解答:本題主要考查對數組參數的理解與應用。本程序的作用是計算數組中元素值為正數的元素的乘積。函數f含有兩個形式參數,第一個參數存放一個整型數組的首地址,第二個參數存放該數組的長度,在該函數中仍然通過數組名下標的方式對數組元素進行引用。在主函數中定義了一個數組a,然后調用函數f,傳遞實參時第一個實參a(數組名)為數組a的首地址,第二個參數6為數組a的長度。答案為:135例題5:運行下列程序

16、結果為( )。#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;三個字符串中最小的一個放入數組s,并輸出s。采用二維數組str存放三個字符串,則str0、str1、str2中分別存放三個字符串的首地址,strcmp()函數用于比較兩個字符串的大小,strcpy()函數用于將第二個參數所指字符串復制到第一個參數所指數組。C+中有一些操作字符串的標準的庫函數,頭文件string.h包含所有字符串處理函數的說明。常用的一些函數如下: strcpy(char destination, const char source);/把第二個字符串拷貝到第一個字符串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);/比較兩個字符串是否相等strlen( const char string );/返回字符串長度本題答案為:c+例題6:運行下列程序的結果為_。#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)程序出錯,無法運行。 97 a a 97 97 a解答:文字量、常量和需要類型轉換的參數都可以傳遞給const&參數,但不能傳遞給非const的引用參數。也就是說對非const引用參數不允許做類型轉換。本題中

20、對于函數fun1以及fun3在調用時參數都發生了隱形數據類型轉換,而對于函數fun2它的參數為非const的引用參數,不允許作類型轉換,所以對fun2的調用出錯。因此程序出錯無法運行。答案為:d。例題7:運行下列程序的結果為_。#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;解答:本題主要考查函數重載。本程序用于求解并輸出一個整型數組的最大元素、一個浮點型數組的最大元素和一個雙精度型數組的最大元素。在主函數中調用三次findmax()函數,根據傳遞實參數組類型不同,自動調用不同的函數完成求解操作,這里findmax()函數實現了重載。答案為:largest value in the Iarg is 88largest value in the Farg is 363.2largest va

24、lue in the Darg is 78.3454例題8:運行下列程序的結果為_。#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;解答:本題主要考查對遞歸調用程序的理解。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壓棧情況如上圖所示。當調用f(7,91)時返回7-1=6程序結束。答案為:n=6例題9:運行下列程序結果為_。#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、對靜態局部變量的理解。靜態局部變量存放在內存的全局數據區。函數結束時,靜態局部變量不會消失,每次函數調用時,也不會為它重新分配空間,它始終駐留在全局數據區,直到程序運行結束。靜態局部變量只在第一次調用時被初始化。在本程序中for循環3次,但是對靜態變量var1的初始化只在第一次循環時完成,后兩次循環不執行初始化。而變量var2在三次循環中都會被初始化。答案為: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;解答:本題主要考查重載與作用域的關系問題。本程序中雖然定義了重載函數fun1。但是在主函數中僅聲明了參數類型為double的函數fun1,然后就對fun1進行調用(調用前沒有看到以整型數據作為形參的fun1函數的定義或聲明)。那么盡管調用時賦的實參1是整型,也無法調用以整型數據作為形參的fun1函數。只能通過隱式數據

28、類型轉換與以double類型作為形參的fun1函數匹配。也就是說,在這里實際上沒有實現重載。所以,結果為:double:1。例題11:運行下列程序的結果為 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;解答:本題主要考查變量的作用域問題。在主函數中定義的變量var1和var2其作用域為本程序范圍,在函數output中形參var1和var2的作用域在output函數范圍內,因為它和主函數中定義的變量同名,所以在該函數范圍內會屏蔽主函數中定義的同名變量,其中的訪問變量var1和var2的操作都是針對于形參變量,與主函數中定義的變量無關。當對output函數

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

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

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

33、應包含頭文件math.h。這個程序中要實現求整型的兩點之間距離和雙精度型的兩點之間距離,作用相同,但操作的對象類型不同,結果類型不同,所以用函數重載解決。參考程序如下:#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<<"兩個int 型數的點間距離:"cout<<disi<<endl;double disd=distance(xd1,yd1,xd2,yd2);cout<<"兩個double 型數的點間距離:"cout<<disd<<endl;double distance(int a1,int b1,int a2,int b2)cout<<"n調用計算兩個int型數的點間距離函數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調用計算兩個double型數的點間距離函數n"return sqrt(a1-a2)*(a1-a2)+(b1-b2)*(b1-b2);例題14:使用遞歸函數求解并輸出fibonacci數列的前十項。解答:本題主要考查對遞歸函數的應用。對于fibonacci數列在前邊已經介紹,這里使用遞歸完成,請讀者對比遞歸于非遞歸編程的方法。參考程序如下:#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:打印某一年的年歷。解答:關于本題的編程細節請參見程序中的注釋。參考程序如下:#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<<"請輸入您想要打印的年份:n"cin>>year;if(year<1900)cerr<<"年份不能小于1900。n"return;weekDay=FirstDayOfYear(year);/一年的第一天星期幾/打印年標題cout<<"nnnnn "&l

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

39、天時判斷是否換行cout<<endl;cout<<" "/行首空格/打印月標題void PrintHead(int m)cout<<"nn"<<setw(6)<<m<<"月 日 一 二 三 四 五 六n"cout<<" "for(int i=0;i<weekDay;i+)cout<<" "/判斷某月天數的函數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);/判斷某年的第一天/因為每年都是52個整星期多一天,因此n年多出的天數還是n天,/再加上1900年到year年間因閏年多出來的天數,/再加上1900年元旦

41、的星期序號1與7取模便得出是第幾天。由于2000年正好是閏年,所/以可以計算到2099年。int FirstDayOfYear(int y)int n=y-1900;n=n+(n-1)/4+1;n=n%7;return n;【習題】一、選擇題1.下列函數定義語句正確的是( )。(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+語言程序中,main()函數必須在其它函數之前,函數內可以嵌套定義函數。(b)C+語言程序中,main()函數的位置沒有限制,函數內不可以嵌套定義函數。(c)C+語言程序中,main()函數必須在其它函數之前,函數內不可以嵌套定義函數。(d)C+語言程序中,main()函數必須在其它函數之后,函數內可以嵌套調用函數。3.下列對return語句敘述錯誤的是( )。(a)在函數定義中可能有return語句,

43、也可能沒有return語句。(b)在函數定義中可以有多條return語句。(c)在函數定義中每條return語句可能返回多個值。(d)如果函數類型不是void型,則函數定義中必須有return語句。4.C+語言中函數返回值的類型是由( )決定的。(a)return語句中的表達式類型 (b)調用該函數的主調函數類型(c)定義函數時所指定的函數類型 (d)以上說法都不正確5.C+中,關于參數默認值的描述正確的是( )。(a)只能在函數定義時設置參數默認值(b)設置參數默認值時,應當從右向左設置(c)設置參數默認值時,應當全部設置 (d)設置參數默認值后,調用函數不能再對參數賦值6.使用重載函數編程

44、序的目的是( )。(a)使用相同的函數名調用功能相似但參數不同的函數 (b)共享程序代碼(c)提高程序的運行速度 (d)節省存儲空間7.系統在調用重載函數時,下列不能作為確定調用哪個重載函數的依據的選項是( )。(a)函數名 (b)參數個數 (c)函數類型 (d)參數類型8.運行下列程序結果為( )。#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.數組作為函數的形參,把數組名作為函數的實參時,傳遞給函數的是( )。(a)數組中各元素的值(b)數組中元素的個數(c)數組中第0個元素的值(d)該數組的首地址10.運行下列程序結果為( )。#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.運行下列程序的輸出結果為( )。#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.一個C+語言程序總是從_開始執行。2._使編譯器可以檢查傳入函數的參數個數、類型和順序。3.在函數原型說明中必須包含的要素有函數類型(如果省略則默認為int型)、_、_。4._限定符聲明只瀆變量。5.若某個函數沒有返回值,則該函數的類型應定義為_類型。6.一個函數直接或間接地調用自身,這種現象稱為函數的_。7.在一個函數的定義或聲明前加上關鍵字_則就把該函數定義為內聯函數,它主要是解決_問題。8.函數的參數傳遞的方式分為兩類,分別是_方式和_方式。9.在c+中,可以有多個同

48、名而處理不同參數類型或個數的函數,稱為函數_。10.標識符的四種作用域是_、_、_、_。11.要讓函數中的局部變量在函數調用之間保持其數值,則要用存儲類說明符_聲明。12.運行下列程序的結果為_。#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.運行下列程序的結果為_。#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.運行下列程序,若輸入1 2 3 4 5則輸出結果為_。#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. 運行下列程序結果為_。#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.運行下列程序結果為_。 #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. 編寫函數將華氏溫度轉換為攝氏溫度,公式為;并在主函數中調用。2. 編寫函數利用全局變量統計數組中奇數和偶數的個數。3. 利用重載編寫求整數絕對值和求實數絕對值兩個函數。4. 編寫函數利用遞歸的方法計算x的n階勒讓德多項式的值。該公式如下:5.編寫程序,驗證哥德巴赫猜想:任何大于2的偶數都是兩個素數之和(在1000以內驗證)。【參考答案】一、選擇題1. c 2. b3. c4. c5. b6. a7. c8. b9. d10. d11. c二、填空題1. main函數2. 函數原型3. 函數名、參數

溫馨提示

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

評論

0/150

提交評論