




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)課程作業(yè)及答案中央電大理工部計(jì)算機(jī)教研室作業(yè)1:是非題1. 頭文件中一般存放著變量和常量的定義、函數(shù)的原型以及類的定義。1. 錯(cuò)2. 程序的編譯是以文件為單位的,因此將程序分到多個(gè)文件中可以減少每次對(duì)程序修改所帶來的編譯工作量。4. 對(duì)填空題下面是一個(gè)求數(shù)組元素之和的程序。主程序中定義并初始化了一個(gè)數(shù)組,然后計(jì)算該數(shù)組各元素的和,并輸出結(jié)果。函數(shù)sum計(jì)算數(shù)組元素之和。填充程序中不完整的部分。_A_int sum(int ,int;void main(int ia5 = 2,3,6,8,10;B ;sumOfArray = sum(ia,5;cout << &quo
2、t;Sum of array:" << sumOfArray << endl;int sum(int array,int lenint iSum = 0;for(int i = 0; C ; D E ;return iSum;答案:A #include B int sumOfArray;C i < lenD i+E iSum += arrayi;閱讀理解題寫出下列程序的運(yùn)行結(jié)果:/file1.cppstatic int i = 20;int x;static int g(int preturn i + p;void f(int vx=g(v;/file2
3、.cpp#include extern int x;void f(int;void main(int i=5;f(i;cout << x;回答以下問題:1. 程序的運(yùn)行結(jié)果是什么樣的?2. 為什么文件file2.cpp中要包含頭文件 ?3. 在函數(shù)main(中是否可以直接調(diào)用函數(shù)g(?為什么?4. 如果把文件file1.cpp中的兩個(gè)函數(shù)定義的位置換一下,程序是否正確?為什么?答案:1. 程序的運(yùn)行結(jié)果:25因?yàn)槌绦蛑行枰胏out對(duì)象進(jìn)行輸出,而cout是在C+標(biāo)準(zhǔn)I/O庫iostream中定義的類ostream的一個(gè)對(duì)象。2 在函數(shù)main(中不可以直接調(diào)用函數(shù)g(,因?yàn)間(
4、是靜態(tài)函數(shù),只在它所在的文件內(nèi)可見。3 如果把文件file1.cpp中的兩個(gè)函數(shù)定義的位置換一下,程序不正確,因?yàn)镃+規(guī)定所有使用的變量和函數(shù)需要先聲明,后使用。在函數(shù)f中用到了函數(shù)g,所以函數(shù)f不能出現(xiàn)在函數(shù)g的定義或聲明之前。文件file1.cpp中的變量i的作用域從它的定義開始到文件結(jié)束。File2.cpp中的變量i的作用域從它的定義開始到main函數(shù)結(jié)束。編程題寫一個(gè)函數(shù),完成在鏈表末尾增加一個(gè)節(jié)點(diǎn)的操作。函數(shù)的原型為:Node * AddNode(Node * & head, int newData;其中,鏈表節(jié)點(diǎn)的定義如下:struct Node int data; /存放
5、數(shù)據(jù)Node * next; /指向鏈表中的下一個(gè)節(jié)點(diǎn);函數(shù)參數(shù):函數(shù)的第一個(gè)參數(shù)head指向鏈表的第一個(gè)節(jié)點(diǎn),如果鏈表為空,則head的值為NULL。第二個(gè)參數(shù)newData為要插入的新節(jié)點(diǎn)中存放的數(shù)據(jù)。函數(shù)返回值:當(dāng)成功地插入新的節(jié)點(diǎn)時(shí),函數(shù)返回指向新節(jié)點(diǎn)的指針,否則,如果不能申請(qǐng)到內(nèi)存空間,則返回NULL。Node * AddNode(Node *& head, int newData/在這里寫出函數(shù)的實(shí)現(xiàn)答案:Node * AddNode(Node * &head, int newData/申請(qǐng)新的節(jié)點(diǎn)空間Node * newNode = new Node;if (ne
6、wNode = NULLreturn NULL;/填充新節(jié)點(diǎn)的內(nèi)容newNode->data = newData;newNode->next = NULL;/插入到鏈表的結(jié)尾if (head = NULLhead = newNode;else/尋找鏈表的最后一個(gè)節(jié)點(diǎn)Node *tail = head;while(tail->next != NULLtail = tail->next;/將新節(jié)點(diǎn)插入到最后tail->next = newNode; return newNode;作業(yè)2:是非題1. 在不同作用域中的變量可以同名。對(duì)2. 派生類的成員函數(shù)可以直接訪問基類
7、的所有成員。2. 錯(cuò)填空題#include _A_;void main(int a6=2,4,8,6,9,14;int x1=_B_; /調(diào)用f1函數(shù)求出a中前4各元素之和。int x2=f1(a,6;cout< int f1(int a, int nint i,s=0;for(i=0;i return s;答案:A int f1(int a, int n;B f1(a,4改錯(cuò)題1. 下面的函數(shù)將浮點(diǎn)型指針參數(shù)para所指向的值賦給一個(gè)局部指針變量pFloat所指向的空間,然后輸出*pFloat的值。#include void func(float * parafloat * pFloa
8、t;pFloat = para;cout << pFloat;錯(cuò)誤為:_改正方法為:_答案錯(cuò)誤為:沒有給指針申請(qǐng)空間,就直接賦值改正的方法為:先為pFloat申請(qǐng)空間,再賦值。2. 下列程序片段對(duì)二維數(shù)組的每個(gè)元素賦值unsigned short SomeArray54;for (int i = 1; i<=5; i+for (int j = 1; j<=4; j+SomeArrayij = i+j;錯(cuò)誤為:_改正方法為:_答案錯(cuò)誤為:訪問數(shù)組元素的下標(biāo)不對(duì)改正的方法為:將兩個(gè)for循環(huán)的循環(huán)初始值改為0,循環(huán)結(jié)束條件分別改為i<5和j<4。 編程題寫一個(gè)函
9、數(shù),找出給定字符串中小寫字母字符的個(gè)數(shù)。函數(shù)的原型為:int CalcAlpha(char *str;函數(shù)參數(shù): str為所要處理的字符串;函數(shù)返回值:所給字符串中小寫字母字符的個(gè)數(shù)int CalcAlpha(char *str /在這里寫上程序的實(shí)現(xiàn)答案:int CalcAlpha(char *str/判斷字符指針是否為空if(str = NULL return 0;/記錄小寫字母字符個(gè)數(shù)的變量int num=0;/依次檢查各個(gè)字符,如果是小寫字母,則總數(shù)加1for(int i=0; stri!=0x0; i+if(stri>='a' && stri&l
10、t;='z'num+;/返回?cái)?shù)字字符個(gè)數(shù)return num;作業(yè)3:是非題1. 函數(shù)的參數(shù)和返回值類型可以是簡(jiǎn)單數(shù)據(jù)類型,也可以是指針、引用、數(shù)組和類。3. 錯(cuò)2. 如果派生類的成員函數(shù)的原型與基類中被定義為虛函數(shù)的成員函數(shù)原型相同,那么,這個(gè)函數(shù)自動(dòng)繼承基類中虛函數(shù)的特性。5. 對(duì)填空題#include _A_; int f2(int* a, int n_ B_; for(i=1;i if(max return max;void main(int bMM=3,12,6,20,9,7,34,50,25,66;_C_; /求出b4至b8 之間的最大值并賦給x1_D_; /求出b
11、0至b5 之間的最大值并賦給x2cout< 答案:A const int MM=10;B int i,max=a0;C int x1=f2(b+4, 5;D int x2=f2(b, 6;閱讀理解題二、 valarray是C+的標(biāo)準(zhǔn)模板庫中的一個(gè)類模板,類模板的每個(gè)實(shí)例類實(shí)現(xiàn)了某個(gè)具體的數(shù)據(jù)類型的數(shù)組,如valarray 是一個(gè)整型的數(shù)組類。該類的使用和一般的數(shù)組非常類似,可以通過 運(yùn)算符來訪問數(shù)組中的每個(gè)元素。C+的標(biāo)準(zhǔn)模板庫中還有一個(gè)模板函數(shù)abs(,其函數(shù)原型為:template valarray abs(const valarray & x; 該函數(shù)的作用是將作為參數(shù)的數(shù)
12、組x的每個(gè)元素的值取絕對(duì)值,并返回得到的新的數(shù)組。如原來的數(shù)組為:4 -1 -3 0 -34將這個(gè)數(shù)組作為參數(shù)傳遞給函數(shù)abs后,函數(shù)返回的數(shù)組就變成:4 1 3 0 34要求:閱讀下列程序,回答后面的問題。/*/#include #include / 該頭文件中定義了模板類valarray和模板函數(shù)abs( #define ARRAY_SIZE 10 typedef valarray INTVALARRAY; void main(INTVALARRAY val_array(ARRAY_SIZE; /定義一長(zhǎng)度為ARRAY_SIZE的數(shù)組對(duì)象/賦初始值for (int i = 0; i <
13、; ARRAY_SIZE; i+val_arrayi = -i;cout << "Size of val_array = " << val_array.size( << "n"cout << "The values of val_array before calling abs(:n"for (i = 0; i < ARRAY_SIZE; i+cout << val_arrayi << " "cout << "n&q
14、uot;INTVALARRAY abs_array = abs(val_array;cout << "The result of val_array after calling abs(:n"for (i = 0; i < ARRAY_SIZE; i+cout << abs_arrayi << " "cout << "n"/*/問題1:寫出程序的輸出結(jié)果問題2:關(guān)于程序中的語句:INTVALARRAY val_array(ARRAY_SIZE;下列說法哪些是正確的,哪些是錯(cuò)誤的?在
15、下表相應(yīng)的位置寫上“對(duì)”或“錯(cuò)”題號(hào)ABCDE對(duì)/錯(cuò)(A)該語句定義了一個(gè)對(duì)象val_array,這個(gè)對(duì)象是類valarray 的實(shí)例(B)該語句說明了一個(gè)函數(shù)原型,函數(shù)的名字為val_array,參數(shù)為ARRAY_SIZE,函數(shù)的返回值類型為INTVALARRAY(C)板類valarray一定有一個(gè)只帶一個(gè)參數(shù)的構(gòu)造函數(shù)(D)模板類valarray一定有一個(gè)只帶兩個(gè)參數(shù)的構(gòu)造函數(shù)(E)ARRAY_SIZE將作為參數(shù)傳遞給val_array的構(gòu)造函數(shù),初始化val_array對(duì)象問題3:(本小題共12分)下面是模板函數(shù)abs(的實(shí)現(xiàn)。這個(gè)實(shí)現(xiàn)中有錯(cuò)誤,指出錯(cuò)誤并寫出正確的實(shí)現(xiàn)。注意:函數(shù)頭是正
16、確的,不要改變,所有的錯(cuò)誤出現(xiàn)在函數(shù)體中。template valarray abs(const valarray & x for(int i=0; i xi*=-1; return x;這個(gè)函數(shù)實(shí)現(xiàn)中有以下錯(cuò)誤:(1)_(2)_(3)_正確的函數(shù)實(shí)現(xiàn)應(yīng)為:template valarray abs(const valarray & x 問題4:(本小題3分)從上面的程序中,你可以推斷出,valarray模板類中至少重載了哪個(gè)或哪些C+的運(yùn)算符?答:重載了_運(yùn)算符答案:?jiǎn)栴}1:程序的輸出結(jié)果為:Size of val_array = 10The values of val_ar
17、ray before calling abs(:0 -1 -2 -3 -4 -5 -6 -7 -8 -9The result of val_array after calling abs(:0 1 2 3 4 5 6 7 8 9問題2題號(hào)ABCDE對(duì)/錯(cuò)對(duì)錯(cuò)對(duì)錯(cuò)對(duì)問題3答案:該函數(shù)實(shí)現(xiàn)有以下錯(cuò)誤:(1)函數(shù)的參數(shù)x為const參數(shù),不能在函數(shù)體中被改變(2)在函數(shù)中應(yīng)該創(chuàng)建一個(gè)臨時(shí)對(duì)象,這個(gè)對(duì)象的內(nèi)容由參數(shù)x的內(nèi)容運(yùn)算而來(3)函數(shù)返回的應(yīng)是臨時(shí)對(duì)象,而不是參數(shù)正確的函數(shù)實(shí)現(xiàn)為:template valarray abs(const valarray & x INTVALARRAY r
18、et_array(x; /利用拷貝構(gòu)造函數(shù)構(gòu)造臨時(shí)對(duì)象for (int i = 0; i < x.size(; i+if (ret_arrayi < 0ret_arrayi *= -1; /取絕對(duì)值return ret_array; /返回臨時(shí)對(duì)象或者template valarray abs1(const valarray & x INTVALARRAY ret_array(x.size(; /構(gòu)造一個(gè)與x長(zhǎng)度相同的對(duì)象for (int i = 0; i < x.size(; i+if (xi < 0ret_arrayi = xi * (-1; /取絕對(duì)值el
19、seret_arrayi = xi;return ret_array; /返回臨時(shí)對(duì)象問題4答案:重載了取數(shù)組下標(biāo)的運(yùn)算符編程題2(本每小題15分)寫一個(gè)函數(shù),找出給定字符串中具有最大ASCII碼的字符。如字符串“world”中字符w具有最大的ASCII碼。函數(shù)的原型為:char MaxCharacter(char *str;函數(shù)參數(shù):str指向所要處理的字符串;函數(shù)返回值:如果str不空,則返回具有最大ASCII碼的字符,否則返回空字符0x0或0。char MaxCharacter(char *str答案:程序可以有多種寫法,下面是其中的四種第一種:char MaxCharacter(cha
20、r *strif (str = NULLreturn 0x0;char maxChar = 0x0;for(int i=0; stri != 0x0; i+if (stri > maxCharmaxChar = stri;return maxChar;第二種:char MaxCharacter(char *strif (str = NULLreturn 0x0;char maxChar = 0x0;for(int i=0; i < strlen(str; i+if (stri > maxCharmaxChar = stri;return maxChar;第三種:char Ma
21、xCharacter(char *strif (str = NULL | str0 = 0x0return 0x0;char maxChar = str0;for(int i=1; stri!= 0x0; i+if (stri > maxCharmaxChar = stri;return maxChar;第四種:char MaxCharacter(char *strif (str = NULL | str0 = 0x0return 0x0;char maxChar = str0;int i=1;while(stri != 0x0if (stri > maxCharmaxChar =
22、 stri;i+;return maxChar;作業(yè)4:是非題1. 函數(shù)重載既要求兩函數(shù)參數(shù)對(duì)應(yīng)的類型不同又要求參數(shù)個(gè)數(shù)不同。錯(cuò)2. 在基類中被說明為虛函數(shù)的類的成員函數(shù)必須在每個(gè)派生類中說明為虛函數(shù),才能具有多態(tài)的特征。錯(cuò)填空題#include class AA private:int a;int b;public:AA(int aa, int bb=10_A_; /將aa的值賦給a_B_; /將bb的值賦給b_C_; _D_; ;int AA:f1( return a+b;int AA:f2( return a*b;void main(AA x(2,3, y(8;cout< 答案:A
23、 a=aa;B b=bb;C int f1(;D int f2(;閱讀理解題三、下面的文件queue.h是一個(gè)隊(duì)列類模板Queue的完整實(shí)現(xiàn)。在這個(gè)文件中首先定義了一個(gè)隊(duì)列元素類模板QueueItem,然后在這個(gè)類的基礎(chǔ)上定義了隊(duì)列類模板Queue。在Queue中使用鏈表存放隊(duì)列的各個(gè)元素,front指針指向鏈表的第一個(gè)節(jié)點(diǎn)元素,back指針指向鏈表的最后一個(gè)節(jié)點(diǎn)元素,成員函數(shù)add(將一個(gè)新節(jié)點(diǎn)元素加入到隊(duì)列結(jié)尾,remove(從隊(duì)列開頭刪除一個(gè)節(jié)點(diǎn)元素。為方便起見,程序中加上了行號(hào)。閱讀程序,根據(jù)程序后面的問題作出相應(yīng)解答。/*-/* 文件queue.h */*-/template cla
24、ss Queue;/* 定義模板類QueueItem */template class QueueItempublic:QueueItem(const Type & elem:item(elem QueueItem( private:Type item;QueueItem * nextItem;friend class Queue ; ;/* 定義模板類Queue */template class Queue public:Queue(:front( NULL, _(A_ Queue(;Type remove(;void add(const Type &bool is_empt
25、y( const return _(B_ ; private:QueueItem *front; QueueItem *back; ;/模板類Queue的函數(shù)成員remove(的實(shí)現(xiàn)/從隊(duì)列頭取出一個(gè)節(jié)點(diǎn),并返回該節(jié)點(diǎn)的值template Type Queue :remove( QueueItem *pFront; /指向頭節(jié)點(diǎn)的臨時(shí)指針Type retVal; /返回值_(C_;retVal = front->item;front = front->nextItem;delete pFront;return retVal;/模板類Queue的函數(shù)成員add(的實(shí)現(xiàn)template
26、 void Queue :add(const Type & newItem QueueItem *pNew = new QueueItem ; pNew->item = newItem;_(D_;if (front = NULLfront = back = pNew;elseback->nextItem = pNew;_(E_;template Queue :Queue( QueueItem *p = front, *q; while(p != NULLq = p->nextItem;delete p;p = q;問題1:(每個(gè)填空3分,共15分 程序中有幾處填空,將
27、它們完成。(A)_(B)_(C)_(D)_(E)_問題2:(本小題3分)題中程序第1,2行為什么要說明一下類模板Queue?如果沒有這兩行語句,程序還正確嗎?問題3:(本小題4分)程序第22,23行各有一個(gè)const,它們各自表示什么含義:?jiǎn)栴}4:(本小題3分)程序中模板類Queue的析構(gòu)函數(shù)主要做了什么事情?為什么要這么做?問題5:(本小題5分,每答對(duì)一個(gè)給1分)下面的程序使用了queue.h文件中定義的類模板,說明程序中哪些定義隊(duì)列對(duì)象的語句是不正確的,哪些是正確的。#include “queue.h”void main(Queue q1; / 1Queue q2; / 2Queue q3
28、(100; / 3Queue q4100; / 4Queue *q5 = new Queue ; / 5/.delete q5;語句號(hào)12345對(duì)/錯(cuò)答案:?jiǎn)栴}1:答案為:(A)back(NULL(B)front = NULL 或 back = NULL(C)pFront = front(D)pNew->nextItem = NULL(E)back = pNew問題2:答:不正確。因?yàn)樵陬怮ueueItem模板類的定義中用到了模板類Queue,而此時(shí)Queue還沒有定義,所以要先聲明一下,告訴編譯程序Queue是一個(gè)模板類,它將在程序的其他地方定義。如果沒有這個(gè)說明,編譯程序就不知道標(biāo)識(shí)
29、符Queue代表什么樣的含義了。問題3:答:第22行的const修飾的是函數(shù)的參數(shù),表示在這個(gè)函數(shù)體中不能改它所修飾的參數(shù)所對(duì)應(yīng)的實(shí)際參數(shù)的值。第23行的const修飾的是模板類Queue的成員函數(shù)is_empty(,它表示在函數(shù)is_empty(的函數(shù)體中不能改變?nèi)魏螖?shù)據(jù)成員的值。問題4:答:析構(gòu)函數(shù)中主要是釋放鏈表中存放的各個(gè)節(jié)點(diǎn)的空間。因?yàn)镼ueue對(duì)象在其生存期間可能加入了很多節(jié)點(diǎn),從堆中申請(qǐng)了一些內(nèi)存空間,這些空間應(yīng)該隨著對(duì)象的消亡而釋放掉,所以需要在析構(gòu)函數(shù)中來釋放這些空間。問題5: 語句號(hào)12345錯(cuò)對(duì)/錯(cuò)錯(cuò)對(duì)對(duì)編程題三、定義一個(gè)日期類Date,該類對(duì)象存放一個(gè)日期,可以提供的操
30、作有:int GetYear (; /取年份int GetMonth (; /取月份int GetDay ( ; /取日子值void SetDate (int year, int month, int day; /設(shè)置日期值下面是測(cè)試你所定義的日期類的程序:#include #include “date.h”void main(Date d1(1999, 1, 14; /用所給日期定義一個(gè)日期變量Date d2; /定義一個(gè)具有缺省值的日期,缺省值為1980年1月1日Date d3(d1; /用已有日期x構(gòu)造一個(gè)新對(duì)象d2.SetDate(1999,3,13;cout << &qu
31、ot;Date:"cout << d1.GetYear( << '.' << d1.GetMonth( << '.'<< d1.GetDay( << endl;cout << "Date:"cout << d2.GetYear( << '.' << d2.GetMonth( << '.'<< d2.GetDay( << endl;cout << "Date:"cout <&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金屬探測(cè)儀租賃合同
- 2025年辦公桌椅采購合同規(guī)范文本
- 2025年私人無息借款合同范本
- 2025年區(qū)域房產(chǎn)買賣合同協(xié)議
- 2025年勞動(dòng)法修正案中勞動(dòng)合同相關(guān)條文評(píng)析
- 2025年交易資金安全貨物交易合同示范文本
- 2025年體育賽事票務(wù)權(quán)益轉(zhuǎn)讓合同
- 2025年協(xié)同優(yōu)化流程管理合同
- 2025年建筑消防設(shè)施外包安裝合同
- 2025年污染治理驗(yàn)收合同
- 社會(huì)階層與教育選擇行為分析-深度研究
- 社會(huì)工作行政(第三版)課件匯 時(shí)立榮 第6-11章 項(xiàng)目管理- 社會(huì)工作行政的挑戰(zhàn)、變革與數(shù)字化發(fā)展
- 學(xué)校小賣部承包合同范文
- 2025年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 2025年湖南鐵道職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫含答案解析
- DB 63- T993-2011 三江源生態(tài)監(jiān)測(cè)技術(shù)規(guī)范
- 北京市東城區(qū)2025年公開招考539名社區(qū)工作者高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025福建福州地鐵集團(tuán)限公司運(yùn)營(yíng)分公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025至2030年中國(guó)電子護(hù)眼臺(tái)燈數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 兒童睡眠障礙治療
- 2025年浙江省溫州樂清市融媒體中心招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論