清華大學計算機系C++期末考試題及答案_第1頁
清華大學計算機系C++期末考試題及答案_第2頁
清華大學計算機系C++期末考試題及答案_第3頁
清華大學計算機系C++期末考試題及答案_第4頁
清華大學計算機系C++期末考試題及答案_第5頁
已閱讀5頁,還剩3頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、c+期末考試題一、 填空題(25小題,共50分)(以下每小題1分,共10分)1 在c+中,函數的參數有兩種傳遞方式,它們是值傳遞和_。地址或指針或引用傳遞 2 當一個成員函數被調用時,該成員函數的 _指向調用它的對象。this指針 3 在基類和派生類中,派生類可以定義其基類中不具備的數據和操作。對兩個有相同名字的數據成員進行訪問時,如果沒有 _,對此數據成員的訪問將出現歧義。作用域分隔符限定時4 拷貝構造函數使用 _作為參數初始化創建中的對象。引用5 在公有繼承的情況下,基類數據成員在派生類中的訪問權限 _。保持不變6 描述命題"a小于b或小于c"的表達式為 _。a<

2、b|a<c7 用new申請某一個類的動態對象數組時,在該類中必須能夠匹配到 _構造函數,否則應用程序會產生一個編譯錯誤。 沒有形參的或缺省參數8 靜態數據成員在類外進行初始化,且靜態數據成員的一個拷貝被類的所有對象 _。共享 9 為了避免可能出現的歧義,c+對ifelse語句配對規則規定為:else總是與 _配對。與最近的if 10 設"int a=3,b=4,c=5;",表達式"(a+b)>c&&b=c"的值是 _。0 (以下每小題2分,共20分)11 面向對象的程序設計有四大特征,它們是抽象、封裝、 _、 _。 繼承 、

3、多態12 在c+中,定義重載函數時,應至少使重載函數的參數個數或參數類型 _;在基類和派生類中,成員函數的覆蓋是指 _。不同 派生類成員函數與在基類被覆蓋的成員函數名、參數個數、參數類型和返回值類型均相同 13 構造函數與析構函數除功能不同外,在定義形式上,它們的區別還包括構造函數名與類名相同,而析構函數名是在類名前加一個、 _、 _。析構函數沒有參數 、 析構函數可以定義為虛函數 14 動態聯編要滿足兩個條件,它們是 _、 _。 被調用的成員函數是虛函數 、 用指針或引用調用虛函數15 在c+類中,有一種不能定義對象的類,這樣的類只能被繼承,稱之為 _,定義該類至少具有一個 _。抽象類 純虛

4、函數16 在c+類中,const關鍵字可以修飾對象和成員函數,const對象不能 _,const成員函數不能 _。 被修改 修改類數據成員 17 舉出c+中兩種用戶自定義的數據類型: _、 _。類 、 枚舉 18 c+中沒有字符串類型,字符串是通過 _來表示的,每一個字符串都有一個結尾字符 _。字符數組 019 c+中沒有輸入輸出語句,輸入輸出是通過 _實現的, 寫出一條打印整型變量n的輸出語句: _。 輸入輸出庫 cout<<n;20 舉出c+中兩種代碼復用的方式: _、 _。 繼承 、 復用 。(以下每小題4分,共20分) 21 下面程序的運行結果是 _3_。#include

5、<stdio.h>void main()char a='a',b='j'float x;x=(b-a)/('f'-'a');printf("%dn",(int)(3.14*x);22 下面程序的運行結果是 _。#include "iostream.h" void main( ) int i=1;while (i<=15)i+;if (i%3!=2) continue; else cout <<"i="<<i<<endl

6、;結果:2 5 8 11 1423 下面程序的運行結果是 _。#include "iostream.h" class test private:int num; float fl; public:test( ); int getint( )return num; float getfloat( )return fl; test( ); ; test:test( ) cout << "initalizing default" << endl; num=0;fl=0.0; test:test( )cout << "

7、;desdtructor is active" << endl; void main( ) test array2; cout << array1.getint( )<< " " << array1.getfloat( ) <<endl; 結果:initalizing defaultinitalizing default0 0desdtructor is activedesdtructor is active24 下面程序的運行結果是 _。#include <iostream.h>class

8、apublic:a()cout<<"a:a() called.n"virtual a()cout<<"a:a() called.n" class b:public apublic:b(int i)cout<<"b:b() called.n"buf=new chari;virtual b()delete buf;cout<<"b:b() called.n"private:char *buf;void fun(a *a)delete a;void main()a *a=n

9、ew b(15);fun(a);結果:a:a() called.b:b() called.b:b() called.a:a() called.25 下面程序的運行結果是 _。#include <stdio.h>int a =1,3,5,7,9;int *p =a,a+1,a+2,a+3,a+4;void main( )printf("%dt%dt%dn",a4,*(a+2),*p1);printf("%dt%dt%dn",*(p+1)+a2,*(p+4)-*(p+0),*(a+3)%a4); 結果:9 5 38 4 7二、 問答題(每小題5分

10、,共20分)1 若程序員沒有定義拷貝構造函數,則編譯器自動生成一個缺省的拷貝構造函數,它可能會產生什么問題?解答要點:當對象含有指針數據成員,并用它初始化同類型的另一個對象時,缺省的拷貝構造函數只能將該對象的數據成員復制給另一個對象,而不能將該對象中指針所指向的內存單元也復制過去。這樣,就可能出現同一內存單元釋放兩次,導致程序運行出錯。2 簡述成員函數、全局函數和友元函數的差別。解答要點:以下幾點必須說清楚:成員函數是在類內部定義的,作用域在類的內部,成員函數可以訪問類的數據成員(公有、保護和私有數據成員),可以調用該類的其它成員函數(公有、保護和私有成員函數),可以調用全局函數。如果友元函數

11、是另一個類的公有成員函數,則該類的成員函數也只能通過那個類的對象調用,不能調用那個類的保護和私有成員函數。非本類成員函數(其它類成員函數或全局函數)可以通過該類的對象訪問該類的公有數據成員和調用該類的的公有成員函數。不是在類中定義的成員函數都是全局函數。如果某一個函數(全局函數或類的成員函數)定義為另一個類的友元函數,需要在那個類中用friend關鍵字聲明,友元函數并不是類的成員,它的定義自然是在那個類的外面。3 簡述結構化的程序設計、面向對象的程序設計的基本思想。解答要點:結構化的程序設計將數據和對數據的操作分離,程序是由一個個的函數組成的,面向對象的程序設計將數據和操作封裝在一起,程序是由

12、一個個對象組成的,對象之間通過接口進行通信,它能夠較好地支持程序代碼的復用。4 結構struct和類class有什么異同?解答要點:struct和class都可以定義類,但是缺省訪問權限說明時,struct的成員是公有的,而class的成員是私有的。在c+中,struct可被class代替。三、找出下面程序(或程序段)中的語法錯誤,并予以糾正(每小題4分,共8分)(1)程序功能是倒序輸出各給定的字符串。#include <stdio.h> void main()char str5 ="first","second","third&q

13、uot;,"forth","fifth"char *cp =str4,str3,str2,str1,str0;int i; while(i<=5)printf("%c ",*(cp+i);i+; "char str5 ="first","second","third","forth","fifth""應為"char str510 ="first","second"

14、;,"third","forth","fifth"" "while(i<=5)"應為"while(i<5)" "printf("%c ",*(cp+i);"應為"printf("%s",*(cp+i);" "int i;"應為"int i=0;"(2)程序功能是將各個平方根值放入數組中。#include <stdio.h>void main()

15、int max,a,i;scanf("%d%d",max,a);double xmax;for (i=0;i<max;i+)xi=sqrt(a*i); 增加"#include <math.h>" "scanf("%d%d",max,a);"應為"scanf("%d%d",&max,&a);" "double xmax;"改為:"double *x=new doublemax;""delete

16、x;"四、(8分)下列shape類是一個表示形狀的抽象類,area( )為求圖形面積的函數,total( )則是一個通用的用以求不同形狀的圖形面積總和的函數。請從shape類派生三角形類(triangle)、矩形類(rectangle),并給出具體的求面積函數。 class shape public: virtual float area( )=0; ; float total(shape *s ,int n) float sum=0.0; for(int i=0;i<n;i+) sum+=si->area( ); return sum; class triangle:p

17、ublic shapepublic:triangle(double h,double w)h=h;w=w;double area() constreturn h*w*0.5;private:double h,w; class rectangle:public shapepublic:rectangle(double h,double w)h=h;w=w;double area()constreturn h*w;private:double h,w;五、(6分)完成順序查找函數f_seq( )。其過程是:從表頭開始,根據給定的模式,逐項與表中元素比較。如果找到所需元素,則查找成功,并打印出它在表

18、中的順序號。如果查找整個表仍未找到所需對象,則查找失敗#include <stdio.h>void f_seq(char *list,char *object,int len)/list 指針數組,指向字符串/object 模式串/len 表的長度char *p;int strcmp(char *s,char *t); p=list;while ( _)if (strcmp(*p,object)=0)break;else _;if (p<list+len)printf( "success! *% dn",p-list);else printf("unsuccess!n");int strcmp(char *s,char *t)for (;*s=*t; s+,t+)if (*s='0')return(0);return(_);六、(8分)完成使鏈表逆置函數reverse,若有鏈表: 逆

溫馨提示

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

評論

0/150

提交評論