高級語言C++程序設計--考試試卷 - 答案_第1頁
高級語言C++程序設計--考試試卷 - 答案_第2頁
高級語言C++程序設計--考試試卷 - 答案_第3頁
高級語言C++程序設計--考試試卷 - 答案_第4頁
高級語言C++程序設計--考試試卷 - 答案_第5頁
已閱讀5頁,還剩3頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 高級語言C+程序設計-考試試卷答案姓名: _ 成績 _第一題 選擇(22題,每題1.5分, 共33分)答案:1-11題DCDACDABDDB答案:12-22題DADDADDDAAD1. 按照C 語言規定的用戶標識符命名規則,不能出現在標識符中的是A)大寫字母 B)下劃線 C)數字字符D)連接符2. 以下選項中不合法的標識符是A)cout B)FOR C)&&a D)_003. 設有定義:int x=2;,以下表達式中,值不為6的是A)x*=(1+x) B)x*=x+1 C)x+,2*x D)2*x, x+=24. C+ 源程序中不能表示的數制是A)二進制 B)十六進制 C)十

2、進制D)八進制5. 以下關于結構化程序設計的敘述中正確的是A) 一個結構化程序必須同時由順序、分支、循環三種結構組成B) 有三種基本結構構成的程序只能解決小規模的問題C) 在C +語言中,程序的模塊化是利用類實現的D) 結構化程序使用goto 語句會很便捷6. 以下定義語句中正確的是A) float a=1,*b=&a,*c=&b; B) int a=b=0;C) double a=0.0;b=1.1; D) char A=65+1,b=b;7. 計算機能直接執行的程序是A) 可執行程序 B) 目標程序 C) 源程序 D) 匯編程序8. 以下敘述中正確的是A) C+ 語言程序中

3、的注釋必須與語句寫在同一行 B) 簡單C+ 語句必須以分號結束C) C+ 語句必須在一行內寫完 D) C+ 程序中的每一行只能寫一條語句9. 以下選項中,不合法的C+語言用戶標示符是A) AaBc B) ab C) 1 D) a-b10.關于C+語言的變量,以下敘述中錯誤的是A) 由三條下劃線構成的符號名是合法的變量名B) 所謂變量是指在程序運行過程中其值可以被改變的量C) 程序中用到的所有變量都必須先定義后才能使用D) 變量所占的存儲單元地址可以隨時改變11. C +語言中double 類型數據占字節數為A) 12 B) 8 C) 4 D) 1612. 以下敘述中正確的是A) 空語句就是指程

4、序中的空行B) 花括號對只能用來表示函數的開頭和結尾,不能用于其他目的C) 復合語句在語法上包含多條語句,其中不能定義局部變量D) 當用cin 從鍵盤輸入數據時,每行數據在沒有按下回車鍵(Enter 鍵)前,可以任意修改13. 以下敘述中正確的是A) C+ 語言程序總是從main 函數開始執行B) C+ 語言程序所調用的函數必須放在main 函數的前面C) C+ 語言程序中main 函數必須放在程序開始位置D) C+ 語言程序總是從最前面的函數開始執行14. 以下敘述中正確的是A)if 語句只能嵌套一層 B)不能在else 子句中在嵌套if 語句C)改變if-else 語句的縮進格式,會改變程

5、序的執行流程 D)if 子句和else 子句中可以是任意合法的C +語句15. 以下敘述中正確的是A)在while 語句和do-while 語句中無法使用continue 語句B)當break 出現在循環體中的switch 語句體內時,其作用是跳出該switch 語句體,并終止循環C)continue 語句的作用是:在執行完本次循環體中剩余語句后,終止循環D)只能在循環體內和switch 語句體內使用break 語句16. 已定義以下函數:int fun(int *p)return *p;fun 函數返回值是A)一個整數 B)形參p 的地址值 C)形參p 中存放的值 D)不確定的值17. 設有

6、定義:double a10,*s=a;以下能夠代表數組元素a3的是A)*s3 B)(*s)3 C)*s+3 D)*(s+3)18. 下列選項中,能正確定義數組的語句是A)int num0.2008; B)int num ;C)int N=2008; int numN; D)#define N 2008; int numN;19. 設有以下函數:void fun(int n,char *s). 則下面對函數指針的定義和賦值均正確的是A)void *pf(); pf=fun; B) void (*pf)(int,char );pf=&fun;C)void *pf(); *pf=fun; D

7、)void (*pf)(int ,char *) ; pf=fun;20. 以下敘述中正確的是A)int *p1, int *p2, int *p3;都是合法的定義指針變量語句B)語句p=NULL;與p=0 是等價的語句C)p=NULL;執行后,指針p 指向地址為0 的存儲單元D)指針變量只能通過求指針運算符(&)獲得地址值21. int *func(int a10, int n);則以下敘述中正確的是A)說明中的a10改為a或*a 效果完全一樣B)函數中不能對a 進行移動指針(如a+)的操作C)只有指向10 個整數內存單元的指針,才能作為實參傳遞給形參D)形參a 對應的實參只能是數組

8、名22. 若有以下語句typedef struct S int g; char h; T;以下敘述中正確的是A)T 是struct S 類型的變量 B)可用S 定義結構體變量C)S 是srurct 類型的變量 D)可用T 定義結構體變量第二題:類與對象編程 (25分)自定義一個簡單的時間類TimeType,它具有數據成員h、m、s,用來表示當前時間的時、分、秒。而后設計該類的功能,進而設計出相應的類成員函數, 實現對時分秒的增加、判斷兩個時間是否相等以及對時間的輸出等操作。試完成各類成員函數并編制主函數,說明TimeType 類對象,對定義的各成員函數進行調用,以驗證它們的正確性。class

9、TimeType int h,m,s; /私有數據成員,表示當前時間的時、分、秒public:TimeType(int h0=0, int m0=0, int s0=0);/構造函數,設置時、分、秒并設置參數默認值void incrementSec(int sec); ; ; /增加若干秒/增加若干分 /增加若干小時bool equal(TimeType t2); /判斷兩時間是否相等void printTime(); /屏幕輸出時間對象的有關數據(時、分、秒);編制類似于如下樣式的主函數:TimeType t1(11, 48, 59), t2(11, 59, 48), t3;cout<

10、<"t1=" t1.printTime(); if(t1.equal(t2) cout<<"t1=t2"<<endl; t1.incrementMin(30); cout<<"t1=" t1.printTime();#include<iostream> using namespace std; class TimeType /自定義的時間類TimeTypeint h, m, s; /私有數據成員,表示當前時間的時、分、秒public:TimeType(int h0 = 0, int

11、 m0 = 0, int s0 = 0);/構造函數,設置時、分、秒并設置參數默認值void incrementSec(int sec); /增加若干秒,sec>0void incrementMin(int min); /增加若干分,min>0void incrementHou(int hrs); /增加若干小時,hrs>0bool equal(TimeType t2); /判斷兩時間是否相等void printTime(); /屏幕輸出時間對象的有關數據(時、分、秒);TimeType:TimeType(int h0, int m0, int s0)h = h0; m =

12、m0; s = s0;void TimeType:incrementSec(int sec)s = s + sec; m = m + s / 60; s = s % 60;h = h + m / 60; m = m % 60;h = h % 24;void TimeType:incrementMin(int min)m = m + min; h = h + m / 60; m = m % 60;h = h % 24;void TimeType:incrementHou(int hrs)h = h + hrs;h = h % 24;bool TimeType:equal(TimeType t2)

13、int time1 = (h * 60 + m) * 60 + s;int time2 = (t2.h * 60 + t2.m) * 60 + t2.s; return time1 = time2 ? true : false;void TimeType:printTime()cout << "現在是:" << h << "時" cout << m << "分" cout << s << "秒" << endl;int

14、main() TimeType t1(11, 48, 59), t2(11, 59, 48), t3;cout << "t1=" t1.printTime(); cout << "t2=" t2.printTime(); cout << "t3=" t3.printTime();if (t1.equal(t2)cout << "t1 等于 t2" << endl;else cout << "t1 不等于 t2" <&l

15、t; endl; t1.incrementMin(30);cout << "'t1.incrementMin(30);' => "cout << "t1=" t1.printTime();t1.incrementSec(45);cout << "'t1.incrementSec(45);' => "cout << "t1=" t1.printTime();t1.incrementHou(3);cout << &q

16、uot;'t1.incrementHou(3);' => "cout << "t1=" t1.printTime();第三題:繼承與派生編程(22分)利用虛函數手段,按照3 種不同的計算方法來求出Fibonacci 數列的第n項(具體項值)并輸出。具體地說,可通過在基類baseCla 及其派生類fib1Cla、fib2Cla 和fib3Cla 中說明如下的同一個虛函數“ virtual double fib(int n);”,來實現求Fibonacci 數列第n 項值并返回的3 種不同求解方法:簡單變量“數據平移”法(顯示出第14

17、76項)、使用數組的實現法(顯示出第888項)以及使用遞歸函數的實現法(顯示出第35項)。 基類和派生類可做如下定義:class baseCla /自定義的基類baseClapublic: virtual double fib(int n)=0; ;class fib1Cla:public baseCla private: public: virtual double fib(int n); /簡單變量“數據平移”法; 利用函數void fun(baseCla *p, int n)調用相應派生類的函數, 并以科學計數法輸出到小數點后15位. #include<iostream>us

18、ing namespace std;class baseCla /自定義的基類baseClapublic:virtual double fib(int n) = 0; /基類baseCla中說明了一個虛函數fib,且為純虛函數;class fib1Cla : public baseCla /由基類baseCla派生出的fib1Cla類 double a = 1, b = 1, c = 0, i;public:virtual double fib(int n); /派生類中說明同一個虛函數fib(簡單變量"數據平移"法);class fib2Cla : public base

19、Cla /派生類fib2Cladouble a1000;public:virtual double fib(int n);/virtual double fib(int n); /派生類中說明同一個虛函數fib(使用數組的求解法);class fib3Cla :public baseClapublic:virtual double fib(int n); /使用遞歸函數的實現法;double fib1Cla:fib(int n)if (n = 1 | n = 2)return 0;elsefor (i = 3; i <= n; i+)c = a + b;a = b;b = c;retur

20、n c;double fib2Cla:fib(int n)a0 = a1 = 1;int i;if (n = 1 | n = 2)return 1;elsefor (i = 2; i <= n; i+)ai = ai - 1 + ai - 2;return an-1; /此處的n-1即為邏輯意義上的ndouble fib3Cla:fib(int n)if (n = 1 | n = 2)return 1;elsereturn fib(n - 1) + fib(n - 2);void fun(baseCla *p, int n)/自定義函數fun,形參p為指向基類的指針,其對應實參/可為不同

21、派生類對象的地址;n指明要求出數列的第n項/自定義函數fun,形參p 為指向基類的指針,其對應實參/可為不同派生類對象的地址;n 指明要求出數列的第n 項double d = p->fib(n); /根據p 指針值的不同,將調用不同派生類的虛函數fibcout.flags(ios:scientific);cout.precision(15);cout << "fib(" << n << ")=" << d << endl;void main() fib1Cla obj1; /fib1Cla

22、 類對象obj1fib2Cla obj2; /fib2Cla 類對象obj2fib3Cla obj3; /fib3Cla 類對象obj3cout << "- fib1Cla -" << endl;fun(&obj1, 1476); /簡單變量“數據平移”求解方法,求fib(1476)cout << "- fib2Cla -" << endl;fun(&obj2, 888); /數組求解方法,求fib(888)cout << "- fib3Cla -" <

23、< endl;fun(&obj3, 35); /遞歸求解方法,求fib(35)第四題:模板/指針編程(20分)編寫一個具有如下樣式的類模板tmplt ,用于實現所謂的反序輸出問題,其中使用了類型參數T(使所處理的元素類型可變化)和普通參數n(元素個數也可變化):template <class T, int n> class tmplt T arrn; / n 個T 類型的數據存放于數組arr 之中public:void dataIn(); /從鍵盤輸入n 個T 類型數據放入arr 數組中void reverseOut(); /將arr 數組中的數據按輸入的相反順序輸出

24、void reverseOutByList(); /用鏈表形式, 反序輸出 ;在reverseOutByList()中, 可定義如下的結構類型, 以形成鏈表項struct item T data;item * next; *first , *temp; #include<iostream>using namespace std;template <class T, int n>class tmpltT arrn;public:void dateIn();void reverseOut();void reverseOutByList();template <clas

25、s T, int n>void tmplt<T, n>:dateIn()for (int i = 0; i < n; i+)cin >> arri;template <class T, int n>void tmplt<T, n>:reverseOut()cout << "該位數的反序數為:"for (int i = n - 1; i >= 0; i-)cout << arri << " "cout << endl;template <class T, int n>void tmplt<T, n>:reverseOutByList() /指針與鏈表的求解方法struct item /結構類型,用于形成鏈表項T data; /存放數據item * next; /指向本結構的指針,由它“串聯”起后項;item *first = NULL, *t

溫馨提示

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

評論

0/150

提交評論