版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第 4 章 過程抽象函數(shù)程序設(shè)計(jì)用 C+語言編程(第二版習(xí)題解答)目 錄第 1 章第 2 章第 3 章第 4 章第 5 章第 6 章第 7 章第 8 章第 9 章概述2基本數(shù)據(jù)類型和表達(dá)式5程序的流程語句7過程抽象函數(shù)16構(gòu)造數(shù)據(jù)類型22數(shù)據(jù)抽象類37操作符重載53繼承派生類77類屬(泛型)機(jī)制模板87第 10 章 輸入/輸出(I/O)93第 11 章 異常處理101第 12 章 實(shí)例面向?qū)ο蟮腤indows 應(yīng)用程序框架1022第 4 章 過程抽象函數(shù)第 1 章 概述1、簡(jiǎn)述馮諾依曼計(jì)算機(jī)的工作模型。答:馮諾依曼計(jì)算機(jī)的工作模型是:待執(zhí)行的程序從外存裝入到內(nèi)存中,CPU 從內(nèi)存中逐條地取程
2、序中的指令執(zhí)行;程序執(zhí)行中所需要的數(shù)據(jù)從內(nèi)存或從外設(shè)中獲得,程序執(zhí)行中產(chǎn)生的中間結(jié)果保存在內(nèi)存中,程序的執(zhí)行結(jié)果通過外設(shè)輸出。2、簡(jiǎn)述寄存器、內(nèi)存以及外存的區(qū)別。答:寄存器主要用于下一條指令的內(nèi)存地址、當(dāng)前指令的執(zhí)行狀態(tài)以及暫時(shí)保存指令的計(jì)算結(jié)果供下一(幾)條指令使用,其作用主要是減少內(nèi)存的次數(shù),提高指令的執(zhí)行效率。內(nèi)存用于計(jì)算機(jī)程序(指令和數(shù)據(jù)),內(nèi)存由許多單元,每個(gè)單元都有一個(gè)地址,對(duì)單元的是通過其地址來進(jìn)行的,與寄存器相比,內(nèi)存的容量要大得多,但指令內(nèi)存單元所花費(fèi)的時(shí)間比寄存器要多得多。外存是大容量的低速部件,用于性地程序、數(shù)據(jù)以及各種文檔等信息,在外存中的信息通常以文件形式進(jìn)行組織和,
3、外了在容量和速度上與內(nèi)存不同,另一個(gè)區(qū)別在于內(nèi)存中的是正在運(yùn)行的程序和正在使用的數(shù)據(jù),外存中的則是大量的、并非正在使用的程序和數(shù)據(jù)。3、CPU 能執(zhí)行哪些指令?答:CPU 所能執(zhí)行的指令通常有:算術(shù)指令:實(shí)現(xiàn)加、減、乘、除等運(yùn)算。比較指令:比較兩個(gè)操作數(shù)的大小。數(shù)據(jù)傳輸指令:實(shí)現(xiàn) CPU 的寄存器、內(nèi)存以及外設(shè)之間的數(shù)據(jù)傳輸。執(zhí)行流程指令:用于確定下一條指令的內(nèi)存地址,包括轉(zhuǎn)移、循環(huán)以及子程序調(diào)用/返回等指令。4、什么是軟件?軟件是如何分類的?答:計(jì)算機(jī)軟件是計(jì)算機(jī)系統(tǒng)中的程序以及有關(guān)的文檔。程序是對(duì)計(jì)算任務(wù)的處理對(duì)象(數(shù)據(jù)) 與處理規(guī)則(算法)的描述;文檔是為了便于人理解程序所需的資料說明,
4、供程序開發(fā)與維護(hù)使用。軟件通常可以分為系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。系統(tǒng)軟件居于計(jì)算機(jī)系統(tǒng)中最靠近硬件的一級(jí),它與具體的應(yīng)用領(lǐng)域無關(guān),其他軟件一般要通過系統(tǒng)軟件發(fā)揮作用,如操作系統(tǒng)屬于系統(tǒng)軟件。支撐軟件是指支持軟件開發(fā)與維護(hù)的軟件,一般由軟件開發(fā)使用,如軟件開發(fā)環(huán)境就是典型的支撐軟件。應(yīng)用軟件是指用于特定領(lǐng)域的軟件,如人口普查軟件、財(cái)務(wù)3第 4 章 過程抽象函數(shù)軟件等。5、什么是虛擬機(jī)?的計(jì)算機(jī)(稱為“ 機(jī)”)之上,加上一些軟件就得到了一個(gè)比它功能更強(qiáng)的答:在由硬件計(jì)算機(jī),稱為“虛擬機(jī)”。6、十進(jìn)制數(shù) 0.1 的二進(jìn)制表示是什么?答:(0.1)10 = (0.000110011.)2,它是無限
5、循環(huán)小數(shù)。也就是說,十進(jìn)制數(shù) 0.1 無法精確用二進(jìn)制表示!7、簡(jiǎn)述程序設(shè)計(jì)范型。答:基于不同的計(jì)算模型來對(duì)計(jì)算進(jìn)行描述就形成了不同的程序設(shè)計(jì)范型。典型的程序設(shè)計(jì)范型有:過程式、對(duì)象式、函數(shù)式以及邏輯式等。過程式程序設(shè)計(jì)是一種以功能為中心、基于功能分解和過程抽象的程序設(shè)計(jì)范型。一個(gè)過程式程序由一些子程序,每個(gè)子程序?qū)?yīng)一個(gè)子功能,它實(shí)現(xiàn)了功能抽象。對(duì)象式程序設(shè)計(jì)是一種以數(shù)據(jù)為中心、基于數(shù)據(jù)抽象的程序設(shè)計(jì)范型。一個(gè)面向?qū)ο蟪绦蛴梢恍?duì)象,對(duì)象是由一些數(shù)據(jù)及可施于這些數(shù)據(jù)上的操作所組成的封裝體。函數(shù)式程序設(shè)計(jì)是函數(shù)來進(jìn)行的,計(jì)算過程體現(xiàn)為一系列的函數(shù)應(yīng)用。邏輯程序設(shè)計(jì)是把程序組織成一組事實(shí)和一組推
6、理規(guī)則,在事實(shí)基礎(chǔ)上運(yùn)用推理規(guī)則來實(shí)施計(jì)算。8、簡(jiǎn)述程序設(shè)計(jì)的步驟。答:程序設(shè)計(jì)一般遵循以下步驟:明確問題;系統(tǒng)設(shè)計(jì);用某種語言進(jìn)行編程;測(cè)試與調(diào)試;運(yùn)行與維護(hù)9、低級(jí)語言與高級(jí)語言的不同之處是什么?4第 4 章 過程抽象函數(shù)答:低級(jí)語言是指與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān)的程序語言,它是特定計(jì)算機(jī)能夠直接理解的語言(或與之直接對(duì)應(yīng)的語言),包括語言和匯編語言。低級(jí)語言的優(yōu)點(diǎn)在于:寫出的程序效率比較高,包括執(zhí)行速度快和占用空間少。其缺點(diǎn)是:程序難以設(shè)計(jì)、理解與維護(hù),難以保證程序的正確性。高級(jí)語言是指人容易理解和有利于人對(duì)解題過程進(jìn)行描述的程序語言。高級(jí)語言的優(yōu)點(diǎn)在于:程序容易設(shè)計(jì)、理解與維護(hù),容易
7、保證程序正確性。高級(jí)語言的缺點(diǎn)是:用其編寫的程序相對(duì)于用低級(jí)語言編寫的程序效率要低,翻譯成的目標(biāo)代碼量較大。10、簡(jiǎn)述編譯與解釋的區(qū)別。答:編譯是指把高級(jí)語言程序首先翻譯能上等價(jià)的語言程序或匯編語言程序,然后執(zhí)行目標(biāo)代碼程序,在目標(biāo)代碼程序的執(zhí)行中不再需要源程序。解釋則是指對(duì)源程序中的語句進(jìn)行逐條翻譯并執(zhí)行,翻譯完了程序也就執(zhí)行完了,這種翻譯方式不產(chǎn)生目標(biāo)程序。一般來說,編譯執(zhí)行比解釋執(zhí)行效率要高。11、簡(jiǎn)述 C程序的編譯執(zhí)行過程。在你的 C+開發(fā)環(huán)境中運(yùn)行 1.3.2 節(jié)中給出的簡(jiǎn)單 C+程序。答:首先可以利用某個(gè)編輯程序把 C+源程序輸入到計(jì)算機(jī)中,并作為文件保存到外存中,文件名為“*.c
8、pp”和“*.h”。然后利用某個(gè) C+編譯程序?qū)Ρ4嬖谕獯嬷械?C+源程序進(jìn)行編譯,編譯結(jié)果作為目標(biāo)文件保存到外存,文件名為“*.obj”。然后再通過一個(gè)聯(lián)接程序把由源文件產(chǎn)生的目標(biāo)文件以及程序中用到的一些系統(tǒng)功能所在的目標(biāo)文件聯(lián)接起來,作為一個(gè)可執(zhí)行文件保存到外存,文件名為“*.exe”。最后通過操作系統(tǒng)提供的應(yīng)用程序運(yùn)行機(jī)制,把可執(zhí)行文件裝入內(nèi)存,運(yùn)行其中的可執(zhí)行程序。在 Visual C+ 6.0 環(huán)境中,首先要建立一個(gè) project(項(xiàng)目);其次往該 project 中添加、編輯程序模塊(源文件);然后選擇菜單 Build 中的 Build . 或 Rebuild All;最后選擇菜
9、單 Build 中的 Execute .運(yùn)行程序。12、C+的單詞分成哪些種類?答:C+的單詞有:標(biāo)識(shí)符、字面常量、操作符以及標(biāo)點(diǎn)符號(hào)等。13、下面哪一些是合法的 C+標(biāo)識(shí)符?extern, _book, Car, car_1, ca1r, 1car, friend, car1_Car, Car_Type, No.1, 123答:合法的 C+標(biāo)識(shí)符:_book, Car, car_1, ca1r, car1_Car, Car_Type5第 4 章 過程抽象函數(shù)第 2 章 基本數(shù)據(jù)類型和表達(dá)式1、 C+提供了哪些基本數(shù)據(jù)類型?檢查你的計(jì)算機(jī)上各種類型數(shù)據(jù)所占內(nèi)存空間的大小(字節(jié)數(shù))。答:C+提供
10、了以下 5 種基本數(shù)據(jù)類型:整數(shù)類型、實(shí)數(shù)類型、字符類型、邏輯類型以及空值類型。一臺(tái)計(jì)算機(jī)上各種數(shù)據(jù)類型的數(shù)據(jù)所占用的內(nèi)存大?。ㄗ止?jié)數(shù))可以通過“sizeof(類型名)”來計(jì)算。2、 下面哪一些是合法的 C+字面常量,它們的類型是什么?105,-0.0e5,3.14,-5.23,.20,-000,red,1e+50,e5, A,r,-25,1e-5, 5,f20n falseToday is Monday., 答:字面常量是指在程序中直接寫出常量值的常量。-5.23, 1e+50,-25, 20 ,.20, 1e-5,-0.0e5, n, -000, A, 5, r, f , Today is
11、 Monday., 都是字面常量。其中:整數(shù)類型常量:-25, 20, -000實(shí)數(shù)類型常量:-5.23, 1e+50 , .20, 1e-5, -0.0e5字符常量: n, A, 5, r, f字符串常量:Today is Monday., 3、 什么是符號(hào)常量?符號(hào)常量的優(yōu)點(diǎn)是什么?答:符號(hào)常量是指有名字的常量,在程序中通過常量的名字來使用這些常量。程序中使用符號(hào)常量有以下優(yōu)點(diǎn):1) 增加程序易讀性2) 提高程序?qū)ΤA渴褂玫囊恢滦?) 增強(qiáng)程序的易維護(hù)性4、 如何理解變量?變量定義和的作用是什么?答:在程序中,其值可以改變的量稱為變量。變量可以用來表示可變的數(shù)據(jù)。程序中使用到的每個(gè)變量都要
12、有定義。變量定義指出變量的類型和變量名,另外還可以為變量提供一個(gè)初值。C+中使用變量之前,必須對(duì)使用的變量進(jìn)行(變量定義屬于一種,即:定義性),變量指出了一個(gè)變量的類型,使得編譯程序能對(duì)變量的操作進(jìn)行類型檢查并做相應(yīng)的類型轉(zhuǎn)換。整個(gè)程序中,某變量的定義只能由一個(gè),但它的5、 什么是表達(dá)式?其作用是什么?可以有多個(gè)。答:表達(dá)式是由操作符、操作數(shù)以及圓括號(hào)所組成的運(yùn)算式。在程序設(shè)計(jì)語言中,對(duì)數(shù)據(jù)操作的具體實(shí)施是通過表達(dá)式來描述的。6、 操作符的優(yōu)先級(jí)和結(jié)合性分別是指的什么?答:運(yùn)算符的優(yōu)先級(jí)和結(jié)合性決定表達(dá)式中各個(gè)運(yùn)算符的運(yùn)算次序。操作符的優(yōu)先級(jí)規(guī)定了相6第 4 章 過程抽象函數(shù)鄰的兩個(gè)操作符誰先
13、運(yùn)算:優(yōu)先級(jí)高的先計(jì)算;如果相鄰的兩個(gè)操作符具有相同的優(yōu)先級(jí), 則需根據(jù)操作符的結(jié)合性來決定先計(jì)算誰,操作符的結(jié)合性通常分為左結(jié)合和右結(jié)合:左結(jié)合表示從左到右計(jì)算,右結(jié)合表示從右到左計(jì)算。7、 表達(dá)式中的類型轉(zhuǎn)換規(guī)則是什么?下面的表達(dá)式計(jì)算時(shí)如何進(jìn)行操作數(shù)類型轉(zhuǎn)換?(1)3/5*12.3(2)a+10*5.2(3)12U+3.0F*24L答:表達(dá)式中類型轉(zhuǎn)換規(guī)則是:基于單個(gè)操作符依次進(jìn)行轉(zhuǎn)換。1)3 與 5 同類型,不轉(zhuǎn)換,結(jié)果為 0,轉(zhuǎn)換成double型后與 12.3 做乘法。2)10 轉(zhuǎn)換成double型與 5.2 做乘法,a轉(zhuǎn)換成double型后與前者結(jié)果做加法。3)3.0F與 24L均
14、轉(zhuǎn)換成double型后做乘法,12U轉(zhuǎn)換成double型后與前者結(jié)果做加法。8、 將下列公式表示成 C+的表達(dá)式:- b + b2 - 4ac(1)(可利用 C+標(biāo)準(zhǔn)庫中的求平方根的函數(shù):sqrt(x))2a(2) s(s - a)(s - b)(s - c)a b4 p r33(3)c d+b31 +2.5 + c答:1)(-1*b+sqrt(b*b-4*a*c)/(2*a)2)sqrt(s*(s-a)*(s-b)*(s-c) 3)(a*b)/(c*d)*(3/(1+(b/(2.5+c)+(4*pi*r*r*r/3)9、寫出下列條件的 C+表達(dá)式(1)i 能被 j 整除。(2)ch 為字母字
15、符。(3)m 為偶數(shù)。(4)n 是小于 100 的奇數(shù)。(5)a、b、c答:1)i%j=0三角形的三條邊。2)(ch=a)&(ch=A)&(ch=Z)3)m%2=04)(n0) & (b0) & (c0) & (a+bc) & (b+ca) &或(c+ab)(a+b)c)&(abs(a-b)0)&(b0)&(c0)可以不用7第 4 章 過程抽象函數(shù)10、在你的計(jì)算機(jī)上運(yùn)行下面的程序:#include using namespace std; int main() double a=3.3, b=1.1; int i=a/b;cout i endl; return 0;結(jié)果與你預(yù)期的是否相符?如
16、果不符,請(qǐng)解釋它的。答:運(yùn)行結(jié)果為 2。由于十進(jìn)制小數(shù) 3.3 和 1.1 無法用double型精確表示。通過查看結(jié)果內(nèi)存內(nèi)的內(nèi)容,最終結(jié)果比 3.0 略小,所以強(qiáng)制轉(zhuǎn)換成int型后結(jié)果為 2。11、不引進(jìn)第三個(gè)變量,如何交換兩個(gè)整型變量的值? 答:方法一:a=ba; b=ab; a=ba;方法二: a=a+b; b=a-b;a=a-b;12、舉例說明把 int 類型轉(zhuǎn)成 float 類型可能會(huì)丟失精度。答:如果 int 型與 float 型都是 4 個(gè)字節(jié),由于在 float 型的數(shù)據(jù)表示中,有若干位用來表示指數(shù), 因此,尾數(shù)的位數(shù)不到 4 個(gè)字節(jié)(根據(jù) IEEE 標(biāo)準(zhǔn),只有 23 個(gè)二進(jìn)制
17、位)。如果一個(gè) int 型的數(shù)大于 23 位(二進(jìn)制),則無法用 float 型精確表示。例如:int x=0x01000001;float y=x; /x 的最后一位1不是被截掉就是被舍入!cout x endl setprecision(30) y endl;第 3 章 程序的流程語句1、 編寫一個(gè)程序,將華氏溫度轉(zhuǎn)換為攝氏溫度。轉(zhuǎn)換公式為:c = 5 (f-32),其中,c 為攝氏溫度,f 為華氏溫度9解:#include using namespace std; int main()8第 4 章 過程抽象函數(shù) double c, f;cout Please input an F-tem
18、perature : f;c = (f - 32) * 5 / 9;cout The C-temperature is : c endl; return 0;2、 編寫一個(gè)程序,將用 24 小時(shí)制表示的時(shí)間轉(zhuǎn)換為 12 小時(shí)制表示的時(shí)間。例如,輸入 20和 16(20 點(diǎn) 16 分),輸出 8:16pm;輸入 8 和 16(8 點(diǎn) 16 分),輸出 8:16am。解:#include using namespace std; int main()int hour, minute; char noon;cout Please input a time in 24-hour format: end
19、l; cout hour;if (hour23)cout The input hour is wrong! 12)hour =hour - 12; noon = p;elsenoon = a;cout minute; if (minute59)cout The input minute is wrong! endl; return -1;cout endl The time in 12-hour format is : hour : minute; if (noon = p)cout pm endl; elsecout am endl;return 0;9第 4 章 過程抽象函數(shù)3、編寫一個(gè)程
20、序,分別按正向和逆向輸出小寫字母az。解:#include using namespace std; int main() char c;for (c=a; c=z; c+) cout c ;cout =a; c-) cout c ;cout endl; return 0;4、編寫一個(gè)程序,從鍵盤輸入一個(gè)正整數(shù),該正整數(shù)為幾位數(shù),并輸出其位數(shù)。解:#include using namespace std;int main()unsigned int gzint; int count = 0; while (1)cout Please input an integer(greater than
21、zero) : gzint;if (gzint=0)cout Your input is wrong! Please input again. endl; elsebreak;while (gzint!=0)gzint = gzint / 10; count+;cout The number of digits in the interger is : count endl; return 0;編寫一個(gè)程序,對(duì)輸入的一個(gè)算術(shù)表達(dá)式(以字符#結(jié)束),檢查圓括號(hào)配對(duì)情況。輸出:配對(duì)、多左括號(hào)或多右括號(hào)。5、10第 4 章 過程抽象函數(shù)解:#include using namespace std;i
22、nt main()int count=0; char ch;cout Please input an expression : ch; ch != #; cin ch)if (ch = ()count+;else if (ch = ) count-;if (count = 0)cout 配對(duì)! 0)cout 多左括號(hào)! endl; elsecout 多右括號(hào)! =”進(jìn)行計(jì)數(shù)。解:#include using namespace std; int main() int count=0;char ch1=0,ch2;cout Please input a string(terminated wit
23、h #): ch2; ch2 != # ; cinch2)if (ch2 = = & ch1 = ) count+; ch1 = ch2;cout =: count endl; return 0;11第 4 章 過程抽象函數(shù)7、 假定郵寄包裹的計(jì)費(fèi)標(biāo)準(zhǔn)如下(重量在檔次之間時(shí)往上一擋靠):重量(克)1530456060 以上(元)591214(每滿 1000 公里加收 1 元)15(每滿 1000 公里加收 2 元)編寫一個(gè)程序,輸入包裹重量和郵寄距離,計(jì)算并輸出解:#include using namespace std;int main()數(shù)額。int charge; double weig
24、ht;cout Please input the weight of the package : weight;if (weight = 0)cout The input weight is wrong! endl; else if (weight = 15)charge = 5;else if (weight = 30) charge = 9;else if (weight = 45) charge = 12;elsedouble distance;cout Please input the distance : distance;if (distance = 0)cout The inpu
25、ted distance is wrong! endl; elsedistance /= 1000; if (weight = 60)charge = 14 + (int)distance; elsecharge = 15 + (int)distance * 2;cout charge endl;12第 4 章 過程抽象函數(shù)return 0;8、編寫一個(gè)程序,計(jì)算圓周率??衫霉剑簆= 1 - 1 + 1 - 1 + K4357直到最后一項(xiàng)的絕對(duì)值小于 10-8。解:#include #include using namespace std; int main() double item=1
26、.0,sum=0.0; int i=1, sign=1;while (fabs(item) = 1e-8) sum += item; sign *= -1;i += 2;item = sign/(double)i;cout setprecision(8) sum*4 endl; return 0;9、編寫一個(gè)程序,求所有這樣的三位數(shù),它們等于它們的各位數(shù)字的立方和。例如:133353153 解:#include using namespace std; int main() for (int n = 100; n = 999; n+) int i,j, k;i = n/100; /百位數(shù)字j
27、= n%100/10; /十位數(shù)字k = n%10; /個(gè)位數(shù)字if (n = i*i*i+j*j*j+k*k*k) cout n endl;return 0;13第 4 章 過程抽象函數(shù)或#include using namespace std; int main() for (int i=1; i=9; i+) int n=i*100,m=i*i*i; for (int j=0; j=9; j+) int n1=n+j*10,m1=m+j*j*j; for (int k=0; k=9; k+) if (n1+k = m1+k*k*k) cout n1+k endl;return 0;10、
28、編寫一個(gè)程序,求a 和 b 的最大公約數(shù)。解:#include using namespace std; int main() int a, b;cout Please input a, b : a b;int c=(ab)?b:a; while (c 0)if (a%c = 0 & b%c = 0) break; c-;cout c endl; return 0;或#include using namespace std; int main() int a, b;14第 4 章 過程抽象函數(shù)cout Please input a, b : a b;int c; doc = a-b*(a/b)
29、; a = b;b = c; while (c != 0); cout a endl; return 0;11、編寫一個(gè)程序,輸出十進(jìn)制乘法表。解:#include using namespace std; int main() for (int i = 0; i 10; i+) if (i != 0)cout i; cout t;for (int j = 1; j 10; j+) if (i * j != 0)cout i * j t; elsecout j t; cout endl;return 0;12、將下面的 for 循環(huán)重寫為等價(jià)的 while 循環(huán)。123.91123.92246
30、.183369.27:.:991827.81第 4 章 過程抽象函數(shù)15for (i=0; imax_length;i+)if (input_linei= ?) quest_count+;解:i = 0;while (i max_length) if (input_linei = ?) quest_count+; i+;13、說明下面的三個(gè)程序可以用圖 3-6 中的三種結(jié)構(gòu)來表示。c1ccc2c1s1c2s1s2cs1s2css1ss2s1s2s1s16第 4 章 過程抽象函數(shù)第 4 章 過程抽象函數(shù)1、 簡(jiǎn)述子程序的作用。答:子程序是有名字的一段程序代碼,它通常完成一個(gè)的(子)功能。在程序的
31、其他地方通過子程序的名字來使用它們。除了能減少程序代碼外,采用子程序的主要作用是實(shí)現(xiàn)過程抽象,使用者只需知道子程序的功能,而不需要知道它是如何實(shí)現(xiàn)的,這有利于大型、復(fù)雜程序的設(shè)計(jì)和理解。2、 簡(jiǎn)述局部變量的作用。答:1、實(shí)現(xiàn)信息隱藏,使得函數(shù)外無法該函數(shù)的數(shù)據(jù)。2、減少名部變量同名。,一個(gè)函數(shù)可以為局部變量定義任何合法名字,而不用擔(dān)心與其他函數(shù)的局2、局部變量的內(nèi)存空間在棧中分配,函數(shù)調(diào)用完之后序的內(nèi)存空間。,因此,使用局部變量能節(jié)省程3、 簡(jiǎn)述變量的生存期和標(biāo)識(shí)符的作用域。答:變量的生存期指程序運(yùn)行時(shí)一個(gè)變量占有內(nèi)存空間的時(shí)間段。C+把變量的生存期分為靜態(tài)、自動(dòng)和動(dòng)態(tài)三種。標(biāo)識(shí)符的作用域是指
32、:一個(gè)定義了的標(biāo)識(shí)符的有效范圍,即該標(biāo)識(shí)符所標(biāo)識(shí)的程序?qū)嶓w能被 的程序段。在 C+中,根據(jù)標(biāo)識(shí)符的性質(zhì)和定義位置規(guī)定了標(biāo)識(shí)符的作用域。作用域分為:全局作用域、文件作用域、局部作用域、函數(shù)作用域、函數(shù)原型作用域、類作用空間作用域。4、 全局標(biāo)識(shí)符與局部標(biāo)識(shí)符在哪些方面存在不同? 答:1、作用域不同2、生存期不同3、用途不同,全局標(biāo)識(shí)符用于標(biāo)識(shí)共享的實(shí)體,而局部標(biāo)識(shí)符用于標(biāo)識(shí)的實(shí)體。17第 4 章 過程抽象函數(shù)5、 下面的中哪一些是定義性?這些定義性的非定義性是什么?(1) const int i=1;(2) static double square(double dbl) return dbl*
33、dbl; (3) char *str;(4) struct Point;(5) char* (*pFn)(int(*)(char*,int),char*);答:1)是。非定義性2) 是。非定義性3) 是。非定義性4) 不是。5) 是。非定義性:extern const int i;:extern double square(double);:extern char *str;:extern char* (*pFn)(int(*)(char*,int),char*);6、 下面的宏 cube1 和函數(shù) cube2 相比,各有什么優(yōu)缺點(diǎn)?#define cube1(x) (x)*(x)*(x)do
34、uble cube2(double x) return; 答:小型函數(shù)的頻繁調(diào)用會(huì)帶來程序執(zhí)行效率的嚴(yán)重下降,宏的出現(xiàn)解決了函數(shù)調(diào)用效率不高的問題,但宏本身也存在很多問題:(1)宏會(huì)出現(xiàn)重復(fù)計(jì)算,(2)不進(jìn)行參數(shù)類型檢查和轉(zhuǎn)換,(3)不利于一些工具對(duì)程序的處理。而函數(shù)可以很好的處理這些問題。另外,對(duì)于:int a; 當(dāng) a 的值很大時(shí),cube1(a)得不到正確結(jié)果?。ㄒ?yàn)榻Y(jié)果類型為 int,而如果 a*a*a 的結(jié)果超出了 int 型的范圍,則結(jié)果將會(huì)截?cái)啵。?、 編寫一個(gè)函數(shù) digit(n,k),它計(jì)算整數(shù) n 的從右向左的第 k 個(gè)數(shù)字。例如:digit(123456,3) = 4di
35、git(1234,5) = 0答:int digit (int n,int k)for ( int i=1; ik ; i+) n = n/10;return n%10;8、 分別用函數(shù)實(shí)現(xiàn)習(xí)題 3.8 中的第 1、4、7 和 10 題的程序功能。答:第 1 題:double Fahrenheit_To_Celsius(double x)return (x-32)*5/9;18第 4 章 過程抽象函數(shù)第 4 題:int num_of_digits(int gzint) int count = 0;if (gzint0) gzint = - gzint; while (gzint!=0)gzin
36、t = gzint / 10; count+;return count;第 7 題:double charge(double weight,double money=0;double distance)if(weight=15)money=5;else else else elseif(weight=30) if(weight=45) if(weightb?a:b;(int i=max;i0;i-)if(a%i=0)&(b%i=0) return i;9、寫出下面程序的執(zhí)行結(jié)果:#include using namespace std; int count=0;int fib(int n) c
37、ount+;if (n=1 returnelsereturn| n=2) 1;fib(n-1)+fib(n-2);int main()19第 4 章 過程抽象函數(shù) cout fib(8);cout , count 1)#include using namespace std;double Hermit_Iterative(int,double);double Hermit_Recursion(int,double);/迭代方法/遞歸方法void main() const int n=3; double x=3.14;coutHermit_Iterative(n,x)endlHermit_Rec
38、ursion(n,x)endl;/n與x可自行指定double Hermit_Iterative(int n,double if(n=0)return 1; else if(n=1)x)return else double double2*x;res1=1,res2=2*x; Result=0;for (int i=2;i0, n0)int Ack(int m,int n) if(m=0)return n+1; else if(n=0)return Ack(m-1,1); elsereturn Ack(m-1,Ack(m,n-1);12、根據(jù)下圖寫一個(gè)函數(shù):int不同的路徑。path(int
39、n);用于計(jì)算從結(jié)點(diǎn) 1 到結(jié)點(diǎn) n(n 大于 1)共有多少條24681357答:int path(intn) if if ifif(n=1)(n=2)(n=3)return returnreturn1;1;2;(n%2 = 0)return path(n-1)+path(n-2)+path(n-3); elsereturn path(n-1)+path(n-2);13、編程解決下面的問題:若一頭小母牛,從出生起第四個(gè)年頭開始每年生一頭母牛,按此規(guī)律, 第n 年有多少頭母牛?答:除了第一年到第三年外,每一年的母牛數(shù)應(yīng)該是上一年的母牛數(shù)加上三年前的母牛數(shù)(現(xiàn)在它們是第四年了,要生小牛了?。﹊nt
40、 f(int n) if (n=1 | n=2 | n=3) return 1; return f(n-3)+f(n-1);14、假設(shè)有三個(gè)重載的函數(shù):void func(int,double); void func(long,double);21第 4 章 過程抽象函數(shù)void func(int,char);對(duì)下面的函數(shù)調(diào)用,指出它們分別調(diào)用了哪一個(gè)重載函數(shù);如果有歧義,指出導(dǎo)致歧義的重載函數(shù)定義。func(c,3.0); func(3L,3); func(three,3.0);func(3L,c); func(true,3);答:func(c,3.0); func(3L,3); 與與 vo
41、id func(int,double); 匹配void func(long,double); 匹配func(three,3.0); 沒有與之匹配的函數(shù)func(3L,c); 與 void func(true,3); 與 voidfunc(long,double); 和 void func(int,char); 均能匹配func(int,double); 和 void func(int,char); 均能匹配15、下面的函數(shù)定義為什么是正確的?在函數(shù) f 中如何區(qū)分(使用)它們?void f() int f;.答:兩個(gè) f 的作用域不一樣,void f()中的 f 為全局作用域,int f; 中
42、的 f 為局部作用域。在函數(shù)f 中如果使用局部變量,則用 f;如果使用函數(shù) f,則用:f。16、為什么一般把內(nèi)聯(lián)函數(shù)的定義放在個(gè)頭文件中?答:為了防止同一個(gè)內(nèi)聯(lián)函數(shù)的各個(gè)定義之間的不一致,往往把內(nèi)聯(lián)函數(shù)的定義放在某個(gè)頭文件中,在需要使用該內(nèi)聯(lián)函數(shù)的源文件中用文件包含命令#include 把該頭文件包含進(jìn)來。由于內(nèi)聯(lián)函數(shù)名具有文件作用域,因此,出現(xiàn)重復(fù)定義問題。17、用循環(huán)實(shí)現(xiàn)錯(cuò)誤!未找到源。中的輾轉(zhuǎn)相除法計(jì)算最大公約數(shù)。22答:int(int x, int y) while (y!=0) int t=y; y = x%y; x = t;return x;第 5 章 構(gòu)造數(shù)據(jù)類型1、 枚舉類型有
43、什么好處?C+對(duì)枚舉類型的操作有何規(guī)定?答:使用枚舉類型有利于提高程序的易讀性;使用枚舉類型也有利于保證程序的正確性。首先,可以對(duì)枚舉類型實(shí)施賦值操作,但不同枚舉類型之間不能相互賦值,而且不能把一個(gè)整型數(shù)直接賦值給枚舉類型的變量。還可以對(duì)枚舉類型實(shí)施比較運(yùn)算。還可以對(duì)枚舉類型實(shí)施算術(shù)運(yùn)算, 對(duì)枚舉類型的運(yùn)算前要轉(zhuǎn)換成對(duì)應(yīng)的整型值,且運(yùn)算結(jié)果類型為算術(shù)類型,而且不能對(duì)枚舉類型的值直接進(jìn)行輸入/輸出。2、 指針類型主要用于什么場(chǎng)合?類型與指針類型相比,其優(yōu)勢(shì)在哪里?答:指針類型主要用于參數(shù)傳遞和對(duì)動(dòng)態(tài)變量的。在 C+中,指針類型還用于數(shù)組元素,以提高效率。類型與指針類型都可以實(shí)現(xiàn)通過一個(gè)變量另一個(gè)
44、變量,但的語法形式不同:是采用直接形式,指針則采用間接形式。在作為函數(shù)參數(shù)類型時(shí),類型參數(shù)的實(shí)參是一個(gè)變量,而指針類型參數(shù)的實(shí)參是一個(gè)變量的地址。除了在定義時(shí)指定的被指向其他同類型的變量。因此,變量外,類型變量不能再其他變量;而指針變量定義后可以類型比指針類型要安全。類型的間接對(duì)使用者而言是透明的。3、 寫出下面程序的運(yùn)行結(jié)果:#include using namespace std; void f(int &x,int y) y = x + x = y % cout y;3;x t y endl;int main() int x=10, y=19; f(y,x);23cout x f(x,x
45、); cout x return 0;t y endl;t y endl;答: 210222922024、從鍵盤輸入某個(gè)之。每一天的最高和最低溫度,然后計(jì)算該的平均最低和平均最高溫度并輸出解:#include using namespace std;enum Day SUN,MON,TUE,WED,THU,FRI,SAT;int main() double max, min, maxsum=0, minsum=0;for (Day d = SUN; d = SAT; d=(Day)(d+1) cout Please input switch(d); casecase case case case case caseSUN MON TUE WED THU FRI SAT:coutcoutcoutcoutcoutcoutcoutSunday; break;Monday;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基因的自由組合定律課件
- 2025年人教B版必修3生物上冊(cè)階段測(cè)試試卷
- 二零二五年度大型公共設(shè)施施工投資合作協(xié)議書3篇
- 環(huán)境與環(huán)境問題(課件)
- 2025年上教版九年級(jí)化學(xué)下冊(cè)月考試卷
- 二零二五年度新能源產(chǎn)業(yè)安全責(zé)任協(xié)議書模板3篇
- 2025年上教版八年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷
- 應(yīng)聘人員報(bào)名信息表
- 2025年浙教新版九年級(jí)科學(xué)下冊(cè)月考試卷含答案
- 2025年蘇科版高一數(shù)學(xué)上冊(cè)月考試卷
- 遼寧盤錦浩業(yè)化工“1.15”泄漏爆炸著火事故警示教育
- 供應(yīng)鏈案例亞馬遜歐洲公司分銷戰(zhàn)略課件
- 石化行業(yè)八大高風(fēng)險(xiǎn)作業(yè)安全規(guī)范培訓(xùn)課件
- 村老支書追悼詞
- DB3302T 1131-2022企業(yè)法律顧問服務(wù)基本規(guī)范
- 2022年自愿性認(rèn)證活動(dòng)獲證組織現(xiàn)場(chǎng)監(jiān)督檢查表、確認(rèn)書
- 中南大學(xué)年《高等數(shù)學(xué)上》期末考試試題及答案
- 付款通知確認(rèn)單
- 小龍蝦高密度養(yǎng)殖試驗(yàn)基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 《橋梁工程計(jì)算書》word版
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
評(píng)論
0/150
提交評(píng)論