版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序設(shè)計(jì)教程用C++語(yǔ)言編程(第二版)課后答案程序設(shè)計(jì)教程用C++語(yǔ)言編程(第二版)課后答案/程序設(shè)計(jì)教程用C++語(yǔ)言編程(第二版)課后答案程序設(shè)計(jì)教程--用語(yǔ)言編程(第二版習(xí)題解答)目錄\o"1-3"\h\z\u第1章概述 232160778\h2第2章基本數(shù)據(jù)類型和表達(dá)式 232160779\h4第3章程序的流程控制――語(yǔ)句 232160780\h7第4章過(guò)程抽象――函數(shù) 232160781\h16第5章構(gòu)造數(shù)據(jù)類型 232160782\h22第6章數(shù)據(jù)抽象――類 232160783\h37第7章操作符重載 232160784\h53第8章繼承――派生類 232160785\h77第9章類屬(泛型)機(jī)制――模板 232160786\h87第10章輸入/輸出() 232160787\h89第11章異常處理 232160788\h90第12章實(shí)例--面向?qū)ο蟮膽?yīng)用程序框架 232160789\h90
第1章概述簡(jiǎn)述馮?諾依曼計(jì)算機(jī)"馮?諾依曼計(jì)算機(jī)"的工作模型。答:馮?諾依曼計(jì)算機(jī)"馮?諾依曼計(jì)算機(jī)"的工作模型是:待執(zhí)行的程序從外存裝入到內(nèi)存中,從內(nèi)存中逐條地取程序中的指令執(zhí)行;程序執(zhí)行中所需要的數(shù)據(jù)從內(nèi)存或從外設(shè)中獲得,程序執(zhí)行中產(chǎn)生的中間結(jié)果保存在內(nèi)存中,程序的執(zhí)行結(jié)果通過(guò)外設(shè)輸出。簡(jiǎn)述寄存器、內(nèi)存以及外存的區(qū)別。答:寄存器主要用于記錄下一條指令的內(nèi)存地址、當(dāng)前指令的執(zhí)行狀態(tài)以及暫時(shí)保存指令的計(jì)算結(jié)果供下一(幾)條指令使用,其作用主要是減少訪問(wèn)內(nèi)存的次數(shù),提高指令的執(zhí)行效率。 內(nèi)存用于存儲(chǔ)計(jì)算機(jī)程序(指令和數(shù)據(jù)),內(nèi)存由許多存儲(chǔ)單元構(gòu)成,每個(gè)存儲(chǔ)單元都有一個(gè)地址,對(duì)存儲(chǔ)單元的訪問(wèn)是通過(guò)其地址來(lái)進(jìn)行的,與寄存器相比,內(nèi)存的容量要大得多,但指令訪問(wèn)內(nèi)存單元所花費(fèi)的時(shí)間比訪問(wèn)寄存器要多得多。 外存是大容量的低速存儲(chǔ)部件,用于永久性地存儲(chǔ)程序、數(shù)據(jù)以及各種文檔等信息,存儲(chǔ)在外存中的信息通常以文件形式進(jìn)行組織和訪問(wèn),外存儲(chǔ)了在容量和速度上與內(nèi)存不同,另一個(gè)區(qū)別在于內(nèi)存中存儲(chǔ)的是正在運(yùn)行的程序和正在使用的數(shù)據(jù),外存中存儲(chǔ)的則是大量的、并非正在使用的程序和數(shù)據(jù)。能執(zhí)行哪些指令?答:所能執(zhí)行的指令通常有:算術(shù)指令:實(shí)現(xiàn)加、減、乘、除等運(yùn)算。比較指令:比較兩個(gè)操作數(shù)的大小。數(shù)據(jù)傳輸指令:實(shí)現(xiàn)的寄存器、內(nèi)存以及外設(shè)之間的數(shù)據(jù)傳輸。執(zhí)行流程控制指令:用于確定下一條指令的內(nèi)存地址,包括轉(zhuǎn)移、循環(huán)以及子程序調(diào)用/返回等指令。什么是軟件?軟件是如何分類的?答:計(jì)算機(jī)軟件是計(jì)算機(jī)系統(tǒng)中的程序以及有關(guān)的文檔。程序是對(duì)計(jì)算任務(wù)的處理對(duì)象(數(shù)據(jù))與處理規(guī)則(算法)的描述;文檔是為了便于人理解程序所需的資料說(shuō)明,供程序開(kāi)發(fā)與維護(hù)使用。軟件通??梢苑譃橄到y(tǒng)軟件、支撐軟件和應(yīng)用軟件。系統(tǒng)軟件居于計(jì)算機(jī)系統(tǒng)中最靠近硬件的一級(jí),它與具體的應(yīng)用領(lǐng)域無(wú)關(guān),其他軟件一般要通過(guò)系統(tǒng)軟件發(fā)揮作用,如操作系統(tǒng)屬于系統(tǒng)軟件。支撐軟件是指支持軟件開(kāi)發(fā)與維護(hù)的軟件,一般由軟件開(kāi)發(fā)人員使用,如軟件開(kāi)發(fā)環(huán)境就是典型的支撐軟件。應(yīng)用軟件是指用于特定領(lǐng)域的專用軟件,如人口普查軟件、財(cái)務(wù)軟件等。什么是虛擬機(jī)?答:在由硬件構(gòu)成的計(jì)算機(jī)(稱為“裸機(jī)”)之上,加上一些軟件就得到了一個(gè)比它功能更強(qiáng)的計(jì)算機(jī),稱為“虛擬機(jī)”。十進(jìn)制數(shù)0.1的二進(jìn)制表示是什么?答:(0.1)10=(0.000110011...)2,它是無(wú)限循環(huán)小數(shù)。也就是說(shuō),十進(jìn)制數(shù)0.1無(wú)法精確用二進(jìn)制表示!簡(jiǎn)述程序設(shè)計(jì)范型。答:基于不同的計(jì)算模型來(lái)對(duì)計(jì)算進(jìn)行描述就形成了不同的程序設(shè)計(jì)范型。典型的程序設(shè)計(jì)范型有:過(guò)程式、對(duì)象式、函數(shù)式以及邏輯式等。 過(guò)程式程序設(shè)計(jì)是一種以功能為中心、基于功能分解和過(guò)程抽象的程序設(shè)計(jì)范型。一個(gè)過(guò)程式程序由一些子程序構(gòu)成,每個(gè)子程序?qū)?yīng)一個(gè)子功能,它實(shí)現(xiàn)了功能抽象。 對(duì)象式程序設(shè)計(jì)是一種以數(shù)據(jù)為中心、基于數(shù)據(jù)抽象的程序設(shè)計(jì)范型。一個(gè)面向?qū)ο蟪绦蛴梢恍?duì)象構(gòu)成,對(duì)象是由一些數(shù)據(jù)及可施于這些數(shù)據(jù)上的操作所組成的封裝體。 函數(shù)式程序設(shè)計(jì)是圍繞函數(shù)來(lái)進(jìn)行的,計(jì)算過(guò)程體現(xiàn)為一系列的函數(shù)應(yīng)用。 邏輯程序設(shè)計(jì)是把程序組織成一組事實(shí)和一組推理規(guī)則,在事實(shí)基礎(chǔ)上運(yùn)用推理規(guī)則來(lái)實(shí)施計(jì)算。簡(jiǎn)述程序設(shè)計(jì)的步驟。答:程序設(shè)計(jì)一般遵循以下步驟:明確問(wèn)題;系統(tǒng)設(shè)計(jì);用某種語(yǔ)言進(jìn)行編程;測(cè)試與調(diào)試;運(yùn)行與維護(hù)低級(jí)語(yǔ)言與高級(jí)語(yǔ)言的不同之處是什么?答:低級(jí)語(yǔ)言是指與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān)的程序語(yǔ)言,它是特定計(jì)算機(jī)能夠直接理解的語(yǔ)言(或與之直接對(duì)應(yīng)的語(yǔ)言),包括機(jī)器語(yǔ)言和匯編語(yǔ)言。低級(jí)語(yǔ)言的優(yōu)點(diǎn)在于:寫(xiě)出的程序效率比較高,包括執(zhí)行速度快和占用空間少。其缺點(diǎn)是:程序難以設(shè)計(jì)、理解與維護(hù),難以保證程序的正確性。 高級(jí)語(yǔ)言是指人容易理解和有利于人對(duì)解題過(guò)程進(jìn)行描述的程序語(yǔ)言。高級(jí)語(yǔ)言的優(yōu)點(diǎn)在于:程序容易設(shè)計(jì)、理解與維護(hù),容易保證程序正確性。高級(jí)語(yǔ)言的缺點(diǎn)是:用其編寫(xiě)的程序相對(duì)于用低級(jí)語(yǔ)言編寫(xiě)的程序效率要低,翻譯成的目標(biāo)代碼量較大。簡(jiǎn)述編譯與解釋的區(qū)別。答:編譯是指把高級(jí)語(yǔ)言程序首先翻譯成功能上等價(jià)的機(jī)器語(yǔ)言程序或匯編語(yǔ)言程序,然后執(zhí)行目標(biāo)代碼程序,在目標(biāo)代碼程序的執(zhí)行中不再需要源程序。 解釋則是指對(duì)源程序中的語(yǔ)句進(jìn)行逐條翻譯并執(zhí)行,翻譯完了程序也就執(zhí)行完了,這種翻譯方式不產(chǎn)生目標(biāo)程序。一般來(lái)說(shuō),編譯執(zhí)行比解釋執(zhí)行效率要高。簡(jiǎn)述C++程序的編譯執(zhí)行過(guò)程。在你的開(kāi)發(fā)環(huán)境中運(yùn)行1.3.2節(jié)中給出的簡(jiǎn)單程序。答:首先可以利用某個(gè)編輯程序把源程序輸入到計(jì)算機(jī)中,并作為文件保存到外存中,文件名為“*”和“*”。然后利用某個(gè)編譯程序?qū)Ρ4嬖谕獯嬷械脑闯绦蜻M(jìn)行編譯,編譯結(jié)果作為目標(biāo)文件保存到外存,文件名為“*”。然后再通過(guò)一個(gè)聯(lián)接程序把由源文件產(chǎn)生的目標(biāo)文件以及程序中用到的一些系統(tǒng)功能所在的目標(biāo)文件聯(lián)接起來(lái),作為一個(gè)可執(zhí)行文件保存到外存,文件名為“*”。最后通過(guò)操作系統(tǒng)提供的應(yīng)用程序運(yùn)行機(jī)制,把可執(zhí)行文件裝入內(nèi)存,運(yùn)行其中的可執(zhí)行程序。 在6.0環(huán)境中,首先要建立一個(gè)(項(xiàng)目);其次往該中添加、編輯程序模塊(源文件);然后選擇菜單中的...或;最后選擇菜單中的...運(yùn)行程序。的單詞分成哪些種類?答:構(gòu)成的單詞有:標(biāo)識(shí)符、關(guān)鍵詞、字面常量、操作符以及標(biāo)點(diǎn)符號(hào)等。下面哪一些是合法的標(biāo)識(shí)符?,,,1,1r,1,,1,,.1,123答:合法的標(biāo)識(shí)符:,,1,1r,1,第2章基本數(shù)據(jù)類型和表達(dá)式 提供了哪些基本數(shù)據(jù)類型?檢查你的計(jì)算機(jī)上各種類型數(shù)據(jù)所占內(nèi)存空間的大?。ㄗ止?jié)數(shù))。答:提供了以下5種基本數(shù)據(jù)類型:整數(shù)類型、實(shí)數(shù)類型、字符類型、邏輯類型以及空值類型。一臺(tái)計(jì)算機(jī)上各種數(shù)據(jù)類型的數(shù)據(jù)所占用的內(nèi)存大?。ㄗ止?jié)數(shù))可以通過(guò)“(類型名)”來(lái)計(jì)算。 下面哪一些是合法的字面常量,它們的類型是什么?-5.23, 150, -25,105,20.20, e5,15,-0.0e5,'\n'-000, 'A','5','3.14',, '\r','\f'".","\""答:字面常量是指在程序中直接寫(xiě)出常量值的常量。-5.23,15025,20,.20,15,-0.0e5,'\n',-000,'A','5','\r','\f',".","\""都是字面常量。其中: 整數(shù)類型常量:-25,20,-000 實(shí)數(shù)類型常量:-5.23,150,.20,15,-0.0e5 字符常量:'\n','A','5','\r','\f' 字符串常量:".","\"" 什么是符號(hào)常量?符號(hào)常量的優(yōu)點(diǎn)是什么?答:符號(hào)常量是指有名字的常量,在程序中通過(guò)常量的名字來(lái)使用這些常量。程序中使用符號(hào)常量有以下優(yōu)點(diǎn):增加程序易讀性提高程序?qū)ΤA渴褂玫囊恢滦栽鰪?qiáng)程序的易維護(hù)性 如何理解變量?變量定義和聲明的作用是什么?答:在程序中,其值可以改變的量稱為變量。變量可以用來(lái)表示可變的數(shù)據(jù)。 程序中使用到的每個(gè)變量都要有定義。變量定義指出變量的類型和變量名,另外還可以為變量提供一個(gè)初值。 中使用變量之前,必須對(duì)使用的變量進(jìn)行聲明(變量定義屬于一種聲明,即:定義性聲明),變量聲明指出了一個(gè)變量的類型,使得編譯程序能對(duì)變量的操作進(jìn)行類型檢查并做相應(yīng)的類型轉(zhuǎn)換。 整個(gè)程序中,某變量的定義只能由一個(gè),但它的聲明可以有多個(gè)。 什么是表達(dá)式?其作用是什么?答:表達(dá)式是由操作符、操作數(shù)以及圓括號(hào)所組成的運(yùn)算式。在程序設(shè)計(jì)語(yǔ)言中,對(duì)數(shù)據(jù)操作的具體實(shí)施是通過(guò)表達(dá)式來(lái)描述的。 操作符的優(yōu)先級(jí)和結(jié)合性分別是指的什么?答:運(yùn)算符的優(yōu)先級(jí)和結(jié)合性決定表達(dá)式中各個(gè)運(yùn)算符的運(yùn)算次序。操作符的優(yōu)先級(jí)規(guī)定了相鄰的兩個(gè)操作符誰(shuí)先運(yùn)算:優(yōu)先級(jí)高的先計(jì)算;如果相鄰的兩個(gè)操作符具有相同的優(yōu)先級(jí),則需根據(jù)操作符的結(jié)合性來(lái)決定先計(jì)算誰(shuí),操作符的結(jié)合性通常分為左結(jié)合和右結(jié)合:左結(jié)合表示從左到右計(jì)算,右結(jié)合表示從右到左計(jì)算。 表達(dá)式中的類型轉(zhuǎn)換規(guī)則是什么?下面的表達(dá)式計(jì)算時(shí)如何進(jìn)行操作數(shù)類型轉(zhuǎn)換?3/5*12.3'a'+10*5.2123.0F*24L答:表達(dá)式中類型轉(zhuǎn)換規(guī)則是:基于單個(gè)操作符依次進(jìn)行轉(zhuǎn)換。 1)3與5同類型,不轉(zhuǎn)換,結(jié)果為0,轉(zhuǎn)換成型后與12.3做乘法。 2)10轉(zhuǎn)換成型與5.2做乘法,’a’轉(zhuǎn)換成型后與前者結(jié)果做加法。 3)3.0F與24L均轉(zhuǎn)換成型后做乘法,12U轉(zhuǎn)換成型后與前者結(jié)果做加法。 將下列公式表示成的表達(dá)式:(可利用標(biāo)準(zhǔn)庫(kù)中的求平方根的函數(shù):(x))答:1)(-1*(b*4*a*c))/(2*a) 2)(s*()*()*()) 3)((a*b)/(c*d))*(3/(1+((2.5))))+(4**r*r*3)寫(xiě)出下列條件的表達(dá)式i能被j整除。為字母字符。m為偶數(shù)。n是小于100的奇數(shù)。a、b、c構(gòu)成三角形的三條邊。答:1)0 2)((>='a')(<='z'))((>='A')(<='Z')) 3)20 4)(n<100)(20) 5)(a>0)(b>0)(c>0)(>c)(>a)(>b) 或 (()>c)(()<c)(a>0)(b>0)(c>0)可以不用判斷在你的計(jì)算機(jī)上運(yùn)行下面的程序:<>;(){ 3.3,1.1; ; <<i<<; 0;}結(jié)果與你預(yù)期的是否相符?如果不符,請(qǐng)解釋它的原因。答:運(yùn)行結(jié)果為2。由于十進(jìn)制小數(shù)3.3和1.1無(wú)法用型精確表示。通過(guò)查看結(jié)果內(nèi)存內(nèi)的內(nèi)容,最終結(jié)果比3.0略小,所以強(qiáng)制轉(zhuǎn)換成型后結(jié)果為2。不引進(jìn)第三個(gè)變量,如何交換兩個(gè)整型變量的值? 答:方法一: ^a; ^b; ^a;方法二: ; ; ;舉例說(shuō)明把類型轉(zhuǎn)成類型可能會(huì)丟失精度。答:如果型與型都是4個(gè)字節(jié),由于在型的數(shù)據(jù)表示中,有若干位用來(lái)表示指數(shù),因此,尾數(shù)的位數(shù)不到4個(gè)字節(jié)(根據(jù)標(biāo)準(zhǔn),只有23個(gè)二進(jìn)制位)。如果一個(gè)型的數(shù)大于23位(二進(jìn)制),則無(wú)法用型精確表示。例如:0x01000001;;的最后一位"1"不是被截掉就是被舍入!<<x<<<<(30)<<y<<;第3章程序的流程控制――語(yǔ)句 編寫(xiě)一個(gè)程序,將華氏溫度轉(zhuǎn)換為攝氏溫度。轉(zhuǎn)換公式為:c=(32),其中,c為攝氏溫度,f為華氏溫度解:<>;(){ c,f; <<":"<<; >>f; c=(f-32)*5/9; <<":"<<c<<; 0;} 編寫(xiě)一個(gè)程序,將用24小時(shí)制表示的時(shí)間轉(zhuǎn)換為12小時(shí)制表示的時(shí)間。例如,輸入20和16(20點(diǎn)16分),輸出8:16;輸入8和16(8點(diǎn)16分),輸出8:16。解:<>;(){ ,; noon; <<"a24:"<<; <<":";>>; (<0>23) { <<"!"<<; -1; } (>12) { -12; noon='p'; } noon='a'; <<":"; >>; (<0>59) { <<"!"<<; -1; } <<<<"12:"<<<<":"<<; (noon'p') <<""<<; <<""<<;0;} 編寫(xiě)一個(gè)程序,分別按正向和逆向輸出小寫(xiě)字母a~z。解:<>;(){ c;('a';c<='z';) <<c<<""; <<; ('z';c>='a';) <<c<<""; <<; 0;} 編寫(xiě)一個(gè)程序,從鍵盤(pán)輸入一個(gè)正整數(shù),判斷該正整數(shù)為幾位數(shù),并輸出其位數(shù)。解:<>;(){ ; =0; (1) { <<"():"<<; >>; (<=0) <<"!..."<<; ; } (0) { =/10; ; } <<":"<<<<; 0;} 編寫(xiě)一個(gè)程序,對(duì)輸入的一個(gè)算術(shù)表達(dá)式(以字符#結(jié)束),檢查圓括號(hào)配對(duì)情況。輸出:配對(duì)、多左括號(hào)或多右括號(hào)。解:<>;(){ 0; ; <<":"<<; (>>;'#';>>) { ('(') ; (')') ; } (0) <<"配對(duì)!"<<; (>0) <<"多左括號(hào)!"<<; <<"多右括號(hào)!"<<; 0;} 編寫(xiě)一個(gè)程序,輸入一個(gè)字符串(以字符#結(jié)束),對(duì)其中的“>=”進(jìn)行計(jì)數(shù)。解:<>;(){ 0; 1='\0'2; <<"a(#):"<<; (>>2;2'#';>>2) { (2'='1'>');1=2; } <<">=:"<<<<; 0;} 假定郵寄包裹的計(jì)費(fèi)標(biāo)準(zhǔn)如下(重量在檔次之間時(shí)往上一擋靠):重量(克) 收費(fèi)(元)15 530 945 1260 14(每滿1000公里加收1元)60以上 15(每滿1000公里加收2元)編寫(xiě)一個(gè)程序,輸入包裹重量和郵寄距離,計(jì)算并輸出收費(fèi)數(shù)額。解:<>;(){ ; ; <<":"<<; >>; (<=0) <<"!"<<; (<=15) =5; (<=30) =9; (<=45) =12; { ; <<":"<<; >>; (<=0) <<"!"<<; { 1000; (<=60) =14+(); =15+()*2; } } <<<<; 0;} 編寫(xiě)一個(gè)程序,計(jì)算圓周率??衫霉剑? 直到最后一項(xiàng)的絕對(duì)值小于10-8。解:<><>;(){ 1.00.0; 1,1; (()>=18) {;*=-1;i2; =()i; } <<(8)<<*4<<; 0;} 編寫(xiě)一個(gè)程序,求所有這樣的三位數(shù),它們等于它們的各位數(shù)字的立方和。例如:153=13+33+53解:<>;(){ (n=100;n<=999;) { ,k; i=100;百位數(shù)字 j=100/10;十位數(shù)字 k=10;個(gè)位數(shù)字 (ni*i**j**k*k) <<n<<; } 0;}或<>;(){ (1;i<=9;){*100*i*i;(0;j<=9;){n1*101*j*j;(0;k<=9;){(n1m1*k*k)<<n1<<;}}} 0;}編寫(xiě)一個(gè)程序,求a和b的最大公約數(shù)。解:<>;(){ a,b; <<"a,b:"<<; >>a>>b; (a>b); (c>0) { (00) ; ; } <<c<<; 0;}或<>;(){ a,b; <<"a,b:"<<; >>a>>b; c; { c=*(); a=b; b=c; }(c0); <<a<<; 0;}編寫(xiě)一個(gè)程序,輸出十進(jìn)制乘法表。123...91123...92246...183369...27::::...:991827...81解:<>;(){ (i=0;i<10;) { (i0) <<i; <<"\t"; (j=1;j<10;) (i*j0) <<i*j<<"\t"; <<j<<"\t"; <<; } 0;}將下面的循環(huán)重寫(xiě)為等價(jià)的循環(huán)。(0;i<) ([i]'?');解:i=0;(i<){ ([i]'?') ; ;}說(shuō)明下面的三個(gè)程序可以用圖3-6中的三種控制結(jié)構(gòu)來(lái)表示。c1ss1s2ccs1c2s2sscss1cs2s1c1s1s2c2s1第4章過(guò)程抽象――函數(shù) 簡(jiǎn)述子程序的作用。答:子程序是有名字的一段程序代碼,它通常完成一個(gè)獨(dú)立的(子)功能。在程序的其他地方通過(guò)子程序的名字來(lái)使用它們。除了能減少程序代碼外,采用子程序的主要作用是實(shí)現(xiàn)過(guò)程抽象,使用者只需知道子程序的功能,而不需要知道它是如何實(shí)現(xiàn)的,這有利于大型、復(fù)雜程序的設(shè)計(jì)和理解。 簡(jiǎn)述局部變量的作用。答:1、實(shí)現(xiàn)信息隱藏,使得函數(shù)外無(wú)法訪問(wèn)該函數(shù)內(nèi)部使用的數(shù)據(jù)。2、減少名沖突,一個(gè)函數(shù)可以為局部變量定義任何合法名字,而不用擔(dān)心與其他函數(shù)的局部變量同名。 2、局部變量的內(nèi)存空間在棧中分配,函數(shù)調(diào)用完之后釋放,因此,使用局部變量能節(jié)省程序的內(nèi)存空間。 簡(jiǎn)述變量的生存期和標(biāo)識(shí)符的作用域。答:變量的生存期指程序運(yùn)行時(shí)一個(gè)變量占有內(nèi)存空間的時(shí)間段。把變量的生存期分為靜態(tài)、自動(dòng)和動(dòng)態(tài)三種。標(biāo)識(shí)符的作用域是指:一個(gè)定義了的標(biāo)識(shí)符的有效范圍,即該標(biāo)識(shí)符所標(biāo)識(shí)的程序?qū)嶓w能被訪問(wèn)的程序段。在中,根據(jù)標(biāo)識(shí)符的性質(zhì)和定義位置規(guī)定了標(biāo)識(shí)符的作用域。作用域分為:全局作用域、文件作用域、局部作用域、函數(shù)作用域、函數(shù)原型作用域、類作用域、名空間作用域。 全局標(biāo)識(shí)符與局部標(biāo)識(shí)符在哪些方面存在不同?答:1、作用域不同2、生存期不同3、用途不同,全局標(biāo)識(shí)符用于標(biāo)識(shí)共享的實(shí)體,而局部標(biāo)識(shí)符用于標(biāo)識(shí)專用的實(shí)體。 下面的聲明中哪一些是定義性聲明?這些定義性聲明的非定義性聲明是什么?1;(){*;}*;;*(*)((*)(*)**);答:1)是。非定義性聲明:i; 2)是。非定義性聲明:(); 3)是。非定義性聲明:*; 4)不是。 5)是。非定義性聲明:*(*)((*)(*)**); 下面的宏1和函數(shù)2相比,各有什么優(yōu)缺點(diǎn)?1(x)((x)*(x)*(x))2(x){x*x*x;}答:小型函數(shù)的頻繁調(diào)用會(huì)帶來(lái)程序執(zhí)行效率的嚴(yán)重下降,宏的出現(xiàn)解決了函數(shù)調(diào)用效率不高的問(wèn)題,但宏本身也存在很多問(wèn)題:(1)宏會(huì)出現(xiàn)重復(fù)計(jì)算,(2)不進(jìn)行參數(shù)類型檢查和轉(zhuǎn)換,(3)不利于一些工具對(duì)程序的處理。而函數(shù)可以很好的處理這些問(wèn)題。 另外,對(duì)于:a;當(dāng)a的值很大時(shí),1(a)得不到正確結(jié)果?。ㄒ?yàn)榻Y(jié)果類型為,而如果a*a*a的結(jié)果超出了型的范圍,則結(jié)果將會(huì)截?cái)啵。?編寫(xiě)一個(gè)函數(shù)(),它計(jì)算整數(shù)n的從右向左的第k個(gè)數(shù)字。例如:(123456,3)=4(1234,5)=0答:(k){ (1;i<k;) n=10; 10;} 分別用函數(shù)實(shí)現(xiàn)習(xí)題3.8中的第1、4、7和10題的程序功能。答:第1題:(x){ (32)*5/9;} 第4題:(){ =0; (<0)=-; (0) { =/10; ; } ;} 第7題:(,){ 0; (<=15) 5; (<=30) 9; (<=45) 12; (<=60) 14+()(1000); 15+()(1000)*2; ;} 第10題:(a,b){ >; (>0) ((0)(0)) i;} 寫(xiě)出下面程序的執(zhí)行結(jié)果:<>;0;(n){ ; (12) 1; (1)(2);}(){ <<(8); <<','<<<<; 0;}答:21,41分別寫(xiě)出計(jì)算多項(xiàng)式(x)值的迭代和遞歸函數(shù)。(x)定義如下:H0(x)=1H1(x)=2x(x)=2x1(x)-2(1)2(x)(n>1)答:<>;();迭代方法();遞歸方法(){ 3; 與x可自行指定 3.14; <<()<< <<()<<;}(x){ (0) 1; (1) 2*x; { 1=12=2*x; 0; (2<) { 2*x*2-2*(1)*1; 12; 2; } ; }}(x){ (0) 1; (1) 2*x; 2*x*(1)-2*(1)*(2);}寫(xiě)出計(jì)算函數(shù)()值的遞歸函數(shù)。()定義如下(m≥0≥0):(0)=1(m,0)=(1,1)()=(1(1))(m>0,n>0)答:(n){ (0) 1; (0) (1,1); (1(1));}根據(jù)下圖寫(xiě)一個(gè)函數(shù):(n);用于計(jì)算從結(jié)點(diǎn)1到結(jié)點(diǎn)n(n大于1)共有多少條不同的路徑。24681357答:(n){(1)1;(2)1;(3)2;(20)(1)(2)(3);(1)(2);}編程解決下面的問(wèn)題:若一頭小母牛,從出生起第四個(gè)年頭開(kāi)始每年生一頭母牛,按此規(guī)律,第n年有多少頭母牛?答:除了第一年到第三年外,每一年的母牛數(shù)應(yīng)該是上一年的母牛數(shù)加上三年前的母牛數(shù)(現(xiàn)在它們是第四年了,要生小牛了!)f(n){(123)1;f(3)(1);}假設(shè)有三個(gè)重載的函數(shù):();();();對(duì)下面的函數(shù)調(diào)用,指出它們分別調(diào)用了哪一個(gè)重載函數(shù);如果有歧義,指出導(dǎo)致歧義的重載函數(shù)定義。('c',3.0);(3L,3);("",3.0);(3L,'c');(,3);答:('c',3.0);與();匹配(3L,3);與();匹配("",3.0);沒(méi)有與之匹配的函數(shù)(3L,'c');與();和();均能匹配(,3);與();和();均能匹配下面的函數(shù)定義為什么是正確的?在函數(shù)f中如何區(qū)分(使用)它們?f(){ f; }答:兩個(gè)f的作用域不一樣,f()中的f為全局作用域,f;中的f為局部作用域。在函數(shù)f中如果使用局部變量,則用f;如果使用函數(shù)f,則用。為什么一般把內(nèi)聯(lián)函數(shù)的定義放在個(gè)頭文件中?答:為了防止同一個(gè)內(nèi)聯(lián)函數(shù)的各個(gè)定義之間的不一致,往往把內(nèi)聯(lián)函數(shù)的定義放在某個(gè)頭文件中,在需要使用該內(nèi)聯(lián)函數(shù)的源文件中用文件包含命令把該頭文件包含進(jìn)來(lái)。由于內(nèi)聯(lián)函數(shù)名具有文件作用域,因此,不會(huì)出現(xiàn)重復(fù)定義問(wèn)題。用循環(huán)實(shí)現(xiàn)207253970\h例412中的輾轉(zhuǎn)相除法計(jì)算最大公約數(shù)。答:(x,y){ (0){;y=;x=t;}x;}第5章構(gòu)造數(shù)據(jù)類型 枚舉類型有什么好處?對(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)行輸入/輸出。 指針類型主要用于什么場(chǎng)合?引用類型與指針類型相比,其優(yōu)勢(shì)在哪里?答:指針類型主要用于參數(shù)傳遞和對(duì)動(dòng)態(tài)變量的訪問(wèn)。在中,指針類型還用于訪問(wèn)數(shù)組元素,以提高訪問(wèn)效率。引用類型與指針類型都可以實(shí)現(xiàn)通過(guò)一個(gè)變量訪問(wèn)另一個(gè)變量,但訪問(wèn)的語(yǔ)法形式不同:引用是采用直接訪問(wèn)形式,指針則采用間接訪問(wèn)形式。在作為函數(shù)參數(shù)類型時(shí),引用類型參數(shù)的實(shí)參是一個(gè)變量,而指針類型參數(shù)的實(shí)參是一個(gè)變量的地址。除了在定義時(shí)指定的被引用變量外,引用類型變量不能再引用其他變量;而指針變量定義后可以指向其他同類型的變量。因此,引用類型比指針類型要安全。引用類型的間接訪問(wèn)對(duì)使用者而言是透明的。 寫(xiě)出下面程序的運(yùn)行結(jié)果: <>;f(y){ y=x+y; x=y%3; <<x<<‘\t’<<y<<;}(){ 10,19; f(); <<x<<‘\t’<<y<<; f(); <<x<<‘\t’<<y<<; 0;}答:22910222022從鍵盤(pán)輸入某個(gè)星期每一天的最高和最低溫度,然后計(jì)算該星期的平均最低和平均最高溫度并輸出之。解:<>;{};(){ ,,0,0; (d=;d<=;()(1)) { <<""; (d) { :{<<"";;} :{<<"";;} :{<<"";;} :{<<"";;} :{<<"";;} :{<<"";;} :{<<"";;} } <<"'s():"<<; >>>>; ; ; } <<":"<<7.0<<; <<":"<<7.0<<; 0;} 編寫(xiě)一個(gè)函數(shù),判斷其型參數(shù)值是否是回文數(shù)?;匚臄?shù)是指從正向和反向兩個(gè)方向讀數(shù)字都一樣,例如,9783879就是一個(gè)回文數(shù)。解:(){ [100],0; (0) { [i]=%10; 10; ; } (j=0;j<=2;) { ([j][1]) ; } ;} 編寫(xiě)一個(gè)函數(shù)(n,[]),把一個(gè)型數(shù)(由參數(shù)n表示)轉(zhuǎn)換成一個(gè)字符串(放在中)。解:(,*){ c; 0; (0) { [i]=10+'0'; 10; ; } [i]='\0'; (j=0;j<2;) { c=[j]; [j]=[1]; [1]=c; }} 編寫(xiě)一個(gè)函數(shù)計(jì)算一元二次方程的根。要求:方程的系數(shù)和根均用參數(shù)傳遞機(jī)制來(lái)傳遞。解:(a,b,c,1,2){ i=b*4*a*c; (i>=0) { x1=((i))/(2*a); x2=(0(i))/(2*a); 1; } { x1=(0)/(2*a); x2=(0)/(2*a); 0; }} 編寫(xiě)一個(gè)程序,從鍵盤(pán)輸入一個(gè)字符串,分別統(tǒng)計(jì)其中的大寫(xiě)字母、小寫(xiě)字母以及數(shù)字的個(gè)數(shù)。解:<>;(){ [100]; <<"a:\n"; >>; 0,0,0; (0;[i]'\0';) { ([i]>='A'[i]<='Z') ; ([i]>='a'[i]<='z') ; ([i]>='0'[i]<='9') ; } <<<<'\t'<<<<'\t'<<<<; 0;} 設(shè)有一個(gè)矩陣:,現(xiàn)把它放在一個(gè)二維數(shù)組a中。寫(xiě)出執(zhí)行下面的語(yǔ)句之后a的值:(0;i<=2;) (0;j<=2;) a[i][j]=a[a[i][j]][a[j][i]];解:020200220實(shí)現(xiàn)下面的數(shù)組元素交換位置函數(shù):(a[],m,n);該函數(shù)能夠把數(shù)組a的前m個(gè)元素與后n個(gè)元素交換位置,即,交換前:a12,12交換后:12,a12要求:除數(shù)組a外,不得引入其它數(shù)組。解:(a[],m,n);{(0;i<m;){t=a[0]; (1;j<;) a[1]=a[j]; A[1]=t; }}編寫(xiě)一個(gè)程序,計(jì)算一個(gè)矩陣的鞍點(diǎn)。矩陣的鞍點(diǎn)是指矩陣中的一個(gè)位置,該位置上的元素在其所在的行上最大、列上最小。(一個(gè)矩陣也可能沒(méi)有鞍點(diǎn)。)<>;M3N3(){a[M][N];存放矩陣 ; 輸入矩陣元素 (0;i<M;) (0;j<N;) >>a[i][j]; [M],存放各行的最大元素[N];存放各列的最小元素 計(jì)算每行的最大元素 (0;i<M;) {[i][0]; (1;j<N;)(a[i][j]>)[i][j]; [i]=; } 計(jì)算每列的最小元素 (0;j<N;) {[0][j]; (1;i<M;)(a[i][j]<)[i][j]; [j]=; } 求鞍點(diǎn) (0;i<M;) { (0;j<N;) {(a[i][j][i]a[i][j][j]) {<<"鞍點(diǎn)是:"<<i<<','<<j<<; 0; } } } <<"沒(méi)有鞍點(diǎn)\n";0;}編程實(shí)現(xiàn):在一個(gè)由N×N(N為大于1的奇數(shù))個(gè)方格組成的方陣中,填入1、2、3、...、N2各個(gè)數(shù),使得每一行、每一列以及兩個(gè)對(duì)角線上數(shù)的和均相等(奇數(shù)幻方問(wèn)題)。例如,下面是一個(gè)3×3的幻方:816357492 (提示:把1填在第一行最中間的格子中,然后按下面的方法依次來(lái)填其它的數(shù):如果當(dāng)前格子是方陣中最右上角的格子,則把下一個(gè)數(shù)填在下一行的同一列格子中;否則,如果當(dāng)前格子在第一行上,則把下一個(gè)數(shù)填在下一列的最后一行格子中;否則,如果當(dāng)前格子在最后一列上,則把下一個(gè)數(shù)填在上一行的第一列格子中;否則,如果當(dāng)前格子的右上角格子里沒(méi)有數(shù),則在其中填入下一個(gè)數(shù),否則把下一個(gè)數(shù)填在下一行的同一列格子中。)答:<>;N3a[N][N];(){ ;(0;i<N;)(0;j<N;)a[i][j]=0;i=0;j=2;a[i][j]=1;(2;k<*N;){(01);(0){i=1;j=;}(1){;j=0;}(a[1][1]0){;;};a[i][j]=k;}(0;i<N;){(0;j<N;)<<a[i][j]<<'\t';<<;}0;}實(shí)現(xiàn)、、、、、以及函數(shù)。答:2(s[]){0;(*;*p'\0';);n;}*2([][]){*p1;*p2;(p12;*p2'\0';p12)*p1=*p2;*p1='\0';;}*2([][]n){*p1;*p2;(p12;n0*p2'\0';p12)*p1=*p2;(n0)*p1='\0';;}*2([][]){*p1;*p2;(p1;*p1'\0';p1);(p2;*p2'\0';p12)*p1=*p2;*p1='\0';;}*2([][]n){*p1;*p2;(p1;*p1'\0';p1);(p2;n0*p2'\0';p12)*p1=*p2;(n0)*p1='\0';;}2(s1[]s2[]){(*p11,*p22;*p1'\0'*p2'\0';p12){(*p1>*p2)1;(*p1<*p2)-1;}(*p1'\0'*p2'\0')0;(*p1'\0')-1;1;}2(s1[]s2[]n){(*p11,*p22;n0*p1'\0'*p2'\0';p12){(*p1>*p2)1;(*p1<*p2)-1;}(n0*p1'\0'*p2'\0')0;(*p1'\0')-1;1;}編寫(xiě)一個(gè)函數(shù)(s1[],s2[]),它從字符串s1中刪除所有在s2里出現(xiàn)的字符,函數(shù)返回刪除的字符個(gè)數(shù)。解:(s1[],s2[]){ 00; (s1[i]'\0') { (0;s2[j]'\0's1[i]2[j];); (s2[j]'\0') ; { (1;s1[k]'\0';) s1[1]=s1[k]; s1[1]='\0'; ; } } ;}編寫(xiě)一個(gè)函數(shù),其原型如下:([], [], []);要求:該函數(shù)能夠完成把字符串中的所有子串都替換成字符串,返回值為替換的次數(shù)。解:([][][])
{0,中的當(dāng)前處理位置
(),
(),
;
(()>=)
{(()0)
{(<0)把字符串剩余部分往后移個(gè)位置
{
()1;剩余部分的字符個(gè)數(shù)+1('\0')
(();n>0;)
[()]=[i];
}
(>0)把字符串剩余部分往前移個(gè)位置
{
()1剩余部分的字符個(gè)數(shù)+1('\0')
(;n>0;)
[]=[i];
}
(0;i<;)復(fù)制被替換成的串到
[]=[i];
;
}
;
}
}編寫(xiě)一個(gè)程序,從鍵盤(pán)輸入一批學(xué)生的成績(jī)信息,每個(gè)學(xué)生的成績(jī)信息包括:學(xué)號(hào)、姓名以及8門(mén)課的成績(jī)。然后按照平均成績(jī)由高到低順序輸出學(xué)生的學(xué)號(hào)、姓名以及平均成績(jī)。解:<>;{ [11]; [9]; [9];};(){n;<<"請(qǐng)輸入學(xué)生人數(shù):";>>n;*[n];創(chuàng)建動(dòng)態(tài)數(shù)組以存放學(xué)生信息。輸入每個(gè)學(xué)生的信息。;(0;i<n;){<<"學(xué)號(hào):";>>[i];<<"姓名:";>>[i];<<"8門(mén)課成績(jī):";[i][8]=0.0;(0;j<8;){>>[i][j];[i][8][i][j];}[i][8]8;平均成績(jī)}根據(jù)平均成績(jī)對(duì)學(xué)生信息進(jìn)行排序。(;i>1;){;(1;j<i;){([j][8]>[1][8]){[j];[j]=[1];[1]=;=;}}();}輸出排序后的學(xué)生信息(0;i<n;){<<[i]<<',' <<[i]<<',' <<[i][8]<<;}0;}下面的交換函數(shù)正確嗎?(,){;x=y;y=;}答:不正確,因?yàn)闉橐妙愋停cx占有相同的空間,當(dāng)執(zhí)行“;”操作之后,的值已不是x原來(lái)的值了!按照這個(gè)函數(shù),x和y的值會(huì)相等并且等于y的值,不能實(shí)現(xiàn)將x和y交換的目的。寫(xiě)一個(gè)函數(shù),它有三個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)一維型數(shù)組,第二個(gè)參數(shù)為數(shù)組元素個(gè)數(shù),第三個(gè)參數(shù)是一個(gè)函數(shù)指針,它指向帶有一個(gè)型參數(shù)、返回值類型為的函數(shù)。函數(shù)的功能是把數(shù)組的每個(gè)元素替換成:用它原來(lái)的值(作為參數(shù))調(diào)用第三個(gè)參數(shù)所指向的函數(shù)得到的值。解:(d[],n,(*)(d)){ (0;i<n;) d[i]=(*)(d[i]); ;}把在鏈表中插入一個(gè)新結(jié)點(diǎn)的操作寫(xiě)成一個(gè)函數(shù):(*);其中,h為表頭指針,a為要插入的結(jié)點(diǎn)的值,(≥0)表示插入位置。當(dāng)為0時(shí)表示在表頭插入;否則,表示在第個(gè)結(jié)點(diǎn)的后面插入。操作成功返回,否則返回。解:{;*;};(*){ *q; (0) { ; >=a; >; ; ; } { *; 1; (i<) { >; ; } () { ; >=a; >>; >; ; } ; }}把在鏈表中刪除一個(gè)結(jié)點(diǎn)的操作寫(xiě)成一個(gè)函數(shù):(*,);其中,h為表頭指針,a用于存放刪除的結(jié)點(diǎn)的值,(>0)表示刪除結(jié)點(diǎn)的位置。操作成功返回,否則返回。解:{;*;};(*,){ *,*; 1; (i<) { ; >; ; } () { >; () >>; h=>;delp; ; } ;}編寫(xiě)一個(gè)程序,首先建立兩個(gè)集合(從鍵盤(pán)輸入集合的元素),然后計(jì)算這兩個(gè)集合的交集、并集以及差集,最后輸出計(jì)算結(jié)果。要求用鏈表實(shí)現(xiàn)集合的表示。解:<>;{;*;};(*x)在h中查找x{(*;;>)(>x);;}(*,x)在h中增加一個(gè)元素{*;>=x;>=h;h=p;}*()建立集合{*; x; (>>x;x-1;>>x) {(());(); } h;}*(*h1,*h2)集合“并”{*,*p;生成一個(gè)與h1一樣的集合h (1;;>)(>);把h2加入到h中(去重) (2;;>) { ((h1>)) (>); } h;}*(*h1,*h2)集合“交”{*; (*1;;>) { ((h2>)) (>); }(*2;;>) {((h1>)) (>); } h;}*(*h1,*h2)集合“差”{*; (*1;;>) { ((h2>)) (>); } h;}(*h)輸出集合的所有元素{(*;;>) <<><<'';<<;}(*)刪除集合{ (h) { *; h=>; p; }}(,*[]){*1,*2,*3,*4,*5;1=();2=();3=(12);4=(12);5=(12);(1);(2);(3);(4);(5);(1);(2);(3);(4);(5);0;}在排序算法中,有一種排序算法(插入排序)是:把待排序的數(shù)分成兩個(gè)部分:AB其中,A為已排好序的數(shù),B為未排好序的數(shù),初始狀態(tài)下,A中只有一個(gè)元素。該算法依次從B中取數(shù)插入到A中的相應(yīng)位置,直到B中的數(shù)取完為止。請(qǐng)?jiān)阪湵肀硎旧蠈?shí)現(xiàn)上述的插入排序算法。解:{;*;};(*){ (h); *>;指向B部分的第一個(gè)元素 >=;指向A部分的第一個(gè)元素(初始狀態(tài)下,A部分只有一個(gè)元素) (q)對(duì)第二部分的元素進(jìn)行循環(huán) { 從B部分取一個(gè)元素*q1;1指向取到的元素q=>;從B中去掉一個(gè)元素循環(huán)在A部分中從頭開(kāi)始找一個(gè)元素(p指向它),使得(q1->)小于(>) *,*p1;指向A部分第一個(gè)元素;p1指向p指向的前一個(gè)結(jié)點(diǎn),初始化為空 (pq1->>>) { p1=p; p=>; } (p1) { q1->=p;p1->=q1; } { q1->=h; h=q1; } }}下面的求n!的函數(shù)有什么問(wèn)題?(){ 1; (n>1) { f*=n; ; } f;}答:有函數(shù)副作用的問(wèn)題。函數(shù)執(zhí)行結(jié)束后,調(diào)用該函數(shù)的實(shí)參值被改變了(通過(guò)形參,變?yōu)?)。寫(xiě)出例5-11名表查找中折半查找的遞歸函數(shù)。解:<>;([],t[],,){(>)-1; ()/2; ([]); (r0)等于t[] ; (r>0)大于t[] (1); 小于t[] (1);}([],t[],){ (,01);}編寫(xiě)一個(gè)程序解八皇后問(wèn)題。八皇后問(wèn)題是:設(shè)法在國(guó)際象棋的棋盤(pán)上放置八個(gè)皇后,使得其中任何一個(gè)皇后所處的“行”、“列”以及“對(duì)角線”上都不能有其它的皇后。解:<>a[8];[i]表示第i行是否可以放皇后b[15];[k]表示“從左下往右上”('/')的第k個(gè)對(duì)角線是否可以放皇后c[15];[k]表示“從左上往右下”('\')的第k個(gè)對(duì)角線是否可以放皇后與棋盤(pán)第i行、第j列的格子所對(duì)應(yīng)的行和對(duì)角線為:a[i][][7]x[8];[j]表示第j列上皇后的位置(所在的行)。(j){ (0;i<8;)選擇第j列中可放皇后的行,然后遞歸選擇第1列可放皇后的行...。{(a[i]b[]c[7])第j列第i行的位置所在的行以及兩個(gè)對(duì)角線上無(wú)皇后。{x[j]=i;設(shè)置第j列皇后的位置。a[i]=b[]=c[7]=;把第j列皇后所在的行以及兩個(gè)對(duì)角線設(shè)為已占用。(j7(1))是最后一列或第1列皇后位置選擇成功。;第1列皇后位置選擇失敗。a[i]=b[]=c[7]=;取消第j列皇后位置,準(zhǔn)備選擇下一個(gè)位置。}};}(){ ;初始化:所有行以及對(duì)角線可放皇后。(0;i<8;) a[i]; (0;k<15;) b[k]; (0;k<15;) c[k]; ((0))從第0列開(kāi)始嘗試放皇后的位置。 {[0][1][7]分別為第一列、第二列、...、第七列上皇后的位置(所在的行) (0;j<8;)按列輸出皇后 {(0;i<x[j];)<<""; <<""; ([j]+1;i<8;)<<""; <<;}} <<; 0;}第6章數(shù)據(jù)抽象――類 從概念上講,抽象與封裝有什么不同?答:處理大而復(fù)雜問(wèn)題的重要手段是抽象:強(qiáng)調(diào)事物本質(zhì)的東西。對(duì)程序抽象而言,一個(gè)語(yǔ)言結(jié)構(gòu)的抽象強(qiáng)調(diào)的是該結(jié)構(gòu)外部可觀察到的行為,與該結(jié)構(gòu)的內(nèi)部實(shí)現(xiàn)無(wú)關(guān)。抽象包括過(guò)程抽象()和數(shù)據(jù)抽象()。封裝是把一個(gè)語(yǔ)言結(jié)構(gòu)的具體實(shí)現(xiàn)細(xì)節(jié)作為一個(gè)黑匣子對(duì)該結(jié)構(gòu)的使用者隱藏起來(lái)的一種機(jī)制,從而符合信息隱藏()原則。封裝包括過(guò)程封裝和數(shù)據(jù)封裝。封裝考慮的是內(nèi)部實(shí)現(xiàn),抽象考慮的是外部行為。 對(duì)于一個(gè)類定義,哪些部分應(yīng)放在頭文件()中,哪些部分放在實(shí)現(xiàn)文件()中?答:一般情況下,類定義放在頭文件()中,類外定義的成員函數(shù)放在實(shí)現(xiàn)文件()中。 對(duì)類成員的訪問(wèn),提供了哪些訪問(wèn)控制?答:在的類定義中,可以用訪問(wèn)控制修飾符和對(duì)類成員的訪問(wèn)進(jìn)行限制。:訪問(wèn)不受限制。:只能在本類和友元中訪問(wèn)。:只能在本類、派生類和友元中訪問(wèn)。 在中,指針的作用是什么?答:中類定義中聲明的非靜態(tài)數(shù)據(jù)成員對(duì)該類的每個(gè)對(duì)象都有一個(gè)拷貝,而成員函數(shù)是被該類的每個(gè)對(duì)象共享的,為了確定成員函數(shù)中用到的數(shù)據(jù)成員是屬于哪一個(gè)對(duì)象的,采用了一個(gè)指針解決這個(gè)問(wèn)題:每個(gè)成員函數(shù)都有一個(gè)缺省的形式參數(shù),其類型為指向該類對(duì)象的指針;調(diào)用一個(gè)對(duì)象的成員函數(shù)時(shí),實(shí)現(xiàn)系統(tǒng)會(huì)把該對(duì)象的地址傳給成員函數(shù)。在成員函數(shù)中訪問(wèn)類中定義的數(shù)據(jù)成員時(shí),實(shí)際訪問(wèn)的是所指向的對(duì)象的數(shù)據(jù)成員。 構(gòu)造函數(shù)成員初始化表可以包含哪些內(nèi)容?答:在定義構(gòu)造函數(shù)時(shí),函數(shù)頭和函數(shù)體之間可以加入一個(gè)對(duì)數(shù)據(jù)成員進(jìn)行初始化的表,用于對(duì)數(shù)據(jù)成員進(jìn)行初始化,特別是對(duì)常量和引用數(shù)據(jù)成員進(jìn)行初始化。如需要調(diào)用成員對(duì)象和基類的非默認(rèn)構(gòu)造函數(shù),也需要在對(duì)象類構(gòu)造函數(shù)的成員初始化表中指定。 拷貝構(gòu)造函數(shù)的作用是什么?何時(shí)會(huì)調(diào)用拷貝構(gòu)造函數(shù)?答:拷貝構(gòu)造函數(shù)用于在創(chuàng)建對(duì)象時(shí)用另一個(gè)同類的對(duì)象對(duì)其初始化。一般來(lái)說(shuō),有三種情況將調(diào)拷貝構(gòu)造函數(shù):定義對(duì)象時(shí)把對(duì)象作為值參數(shù)傳給函數(shù)時(shí)把對(duì)象作為返回值時(shí) 對(duì)于一個(gè)類A,為什么下面的構(gòu)造函數(shù)不合法?A(Ax);答:因?yàn)?,?duì)于下面的程序?qū)?huì)不停地遞歸調(diào)用A(Ax): Aa; Ab(a);調(diào)用(a)時(shí),將會(huì)調(diào)用(a),(x),…,從而形成無(wú)窮遞歸! 在創(chuàng)建包含成員對(duì)象的類的對(duì)象時(shí),為什么要首先初始化成員對(duì)象?答:因?yàn)樵诎蓡T對(duì)象的構(gòu)造函數(shù)中可能用到成員對(duì)象,如果這時(shí)成員對(duì)象未初始化,則會(huì)用到未初始化的對(duì)象!例如:A{…f();};B{Aa;: B() {();如果這時(shí)a未初始化,則()沒(méi)有意義。 }};Bb;調(diào)用b的構(gòu)造函數(shù)。 何時(shí)需要定義析構(gòu)函數(shù)?答:如果對(duì)象在創(chuàng)建后申請(qǐng)了一些資源并且沒(méi)有歸還這些資源,則應(yīng)定義析構(gòu)函數(shù)來(lái)在對(duì)象消亡時(shí)歸還對(duì)象申請(qǐng)的資源。靜態(tài)數(shù)據(jù)成員的作用是什么?靜態(tài)數(shù)據(jù)成員如何初始化?答:在中采用靜態(tài)成員來(lái)解決同一個(gè)類的對(duì)象共享數(shù)據(jù)的問(wèn)題。類定義中的靜態(tài)數(shù)據(jù)成員對(duì)該類的所有對(duì)象只有一個(gè)拷貝,即它們被該類的所有對(duì)象所共享。另外,雖然全局變量也能起到共享的效果,但靜態(tài)數(shù)據(jù)成員較為安全,因?yàn)殪o態(tài)數(shù)據(jù)成員還可以受到類的訪問(wèn)控制的保護(hù)。靜態(tài)數(shù)據(jù)成員必須要在類的外部給出它們的定義,定義時(shí)可以進(jìn)行初始化。類作用域與局部作用域有什么不同?答:當(dāng)標(biāo)識(shí)符的聲明出現(xiàn)在由一對(duì)花括號(hào)所括起來(lái)的一段程序內(nèi)(塊,)時(shí),該(局部)標(biāo)識(shí)符的作用于從聲明點(diǎn)開(kāi)始,到塊結(jié)束處為止,該作用域的范圍具有局部性。而類作用域是指類定義和相應(yīng)的成員函數(shù)定義范圍。在該范圍內(nèi),一個(gè)類的成員函數(shù)對(duì)同一類的數(shù)據(jù)成員具有無(wú)限制訪問(wèn)權(quán)。在定義一個(gè)包含成員對(duì)象的類時(shí),表示成員對(duì)象的數(shù)據(jù)成員何時(shí)定義為成員對(duì)象指針和成員對(duì)象本身?答:當(dāng)一個(gè)對(duì)象b(類為B)作為另一個(gè)對(duì)象a(類為A)的組成部分,并且組成關(guān)系不會(huì)發(fā)生變化(一個(gè)學(xué)生與他的姓名,出生日期之間的關(guān)系),則應(yīng)把b定義為A類的成員對(duì)象。當(dāng)對(duì)象b作為另一個(gè)對(duì)象a的組成部分,但組成關(guān)系會(huì)發(fā)生變化(如項(xiàng)目組和項(xiàng)目成員的組成關(guān)系),或者對(duì)象b不是a的一部分,但它們之間有關(guān)聯(lián)(部門(mén)經(jīng)理和成員之間的管理與被管理關(guān)系),這時(shí)應(yīng)把b定義為A類的成員對(duì)象指針。定義一個(gè)描述二維坐標(biāo)系中點(diǎn)對(duì)象的類,它具有下述成員函數(shù):r();計(jì)算極坐標(biāo)的極半徑();計(jì)算極坐標(biāo)的極角(p);計(jì)算與點(diǎn)p的距離(p);計(jì)算相對(duì)于p的相對(duì)坐標(biāo)(p);判斷是否在點(diǎn)p的左上方答:<><>;{: (){0;} (b){;} r()計(jì)算極坐標(biāo)的極半徑 { (x**y); } ()計(jì)算極坐標(biāo)的極角 { (); } (p)計(jì)算與點(diǎn)p的距離 { (()*()+()*()); } (p)計(jì)算相對(duì)于p的相對(duì)坐標(biāo) { ; ; ; (); } (p)判斷是否在點(diǎn)p的左上方 { (()()) ; ((x<)(y>)) ; ; }: x; y;};定義一個(gè)時(shí)間類,它能表示:時(shí)、分、秒,并提供以下操作:(h,m,s);構(gòu)造函數(shù)(h,m,s);調(diào)整時(shí)間();時(shí)間增加一秒。();顯示時(shí)間值。();比較是否與某個(gè)時(shí)間相等。();比較是否早于某個(gè)時(shí)間。答:<>;{: (){0;} (s){;} (h,m,s) { ; ; ; } () { (59) { (59) { (23) { 0; 0; 0; } { ; 0; 0; }} { ; 0; }} ; } () { <<<<':'<<<<':'<<; } (2) {(222) ; ; } (2) { (<2 2<222<2) ; ; }: ; ; ;};定義一個(gè)日期類,它能表示:年、月、日。為其設(shè)計(jì)一個(gè)成員函數(shù),它能把某個(gè)日期增加一天。答:<>;{: (y,m,d) {=y;=m;=d; } (); : ;};(){d;(){1:3:5:7:8:10:12:d=31;;4:6:9:11:d=30;;2: (4000401000)閏年 d=29; d=28;}(<d);(12){=1;;}{=1;=1;;}}或:<>;{: (){0;} (c){;} ();: ; (y,m,d); (y);};(){((1)) ;((1,1)) { 1;}((1,1,1)) { 11;}}(y,m,d){(y>9999<1<1<1>12) ;31;(m){4:6:9:11:;}(2)=(y)?29:28;(d>)?:;}(y){!(4)(100)!(400);}為例6-3中的字符串類增加下面的成員函數(shù):(*);判斷是否為當(dāng)前字符串的子串。();判斷是否為當(dāng)前字符串的子串。(,);取從位置開(kāi)始、長(zhǎng)度為的子串。(*,*); 查找所有子串并替換成,返回替換的次數(shù)。();刪除字符串中的空格。();把由數(shù)字構(gòu)成的字符串轉(zhuǎn)成類型的值。();把字符串中的大寫(xiě)字母轉(zhuǎn)成小寫(xiě)字母。答:(*p){ (p); (); (0<) (()0) ; ;}(&s){ ();}(,){ *[1]; (); []='\0'; (); []; ;}(*,*){ 0()(); *; (*p'\0') {(()0) {; p; } ; } (0)0; *1[()**1]; *1; p=; (*p'\0') {(()0) {(); q; p; } {*q=*p; ; ; } } del[]; =1; ;}(){ ("","");}(){ 0; (0;[i]'\0';) =*10+([i]-'0'); ;}(){ (0;[i]'\0';) {([i]>='A'[i]<='Z') [i]=[i]-'A'+'a'; }}定義一個(gè)元素類型為、元素個(gè)數(shù)不受限制的集合類,該類具有下面的接口:{... : (); (s); (); ();判斷是否為空集。 ();獲取元素個(gè)數(shù)。 (e);判斷e是否屬于集合。 (s);判斷s是否包含于集合。 (s);判斷集合是否相等。 ();顯示集合中的所有元素。 (e);將e加入到集合中。 (e);把e從集合中刪除。 2(s);計(jì)算集合的并集。 2(s);計(jì)算集合的交集。 2(s);計(jì)算集合的差。};答:<>;{ ; *;};{: (); (s); (); ();判斷是否為空集。 ();獲取元素個(gè)數(shù)。 (e);判斷e是否屬于集合。 (s);判斷s是否包含于集合。 (s);判斷集合是否相等。 ();顯示集合中的所有元素。 (e);將e加入到集合中。 (e);把e從集合中刪除。 (s);計(jì)算集合的并集。 (s);計(jì)算集合的交集。 (s);計(jì)算集合的差。: ; *;};(){ 0; ;}(){ =; =0; *; (0;i<;) { (>); p=>; }}(){ *p; () { p=; =>; p; } 0;}(){ 0;}(){ ;}(e){ (*>) (>e); ;}(s){ (*>) ((>)); ;}(s){ () ; ((*)(s)) ; ;}(){ (*>) <<><<'\t'; <<;}(e){ ((e)) { *; >=e; >=; =p; ; } *;}(e){ ((e)) { (>) { *; =>; p; } { (*;>;>) { (>>) { *>; >=>; ; ; } } } ; } *;}2(s){ (s); *; () { ((>)) (>); >; } ;}2(s){ ; *; () { ((>)) (>); p=>; } ; }2(s){ ; *; () { ((>)) (>); p=>; } ; }定義一個(gè)由型元素所構(gòu)成的線性表類,它有下面的成員函數(shù):(x,);在位置之后插入一個(gè)元素x。 為0時(shí),在第一個(gè)元素之前插入。 操作成功時(shí)返回,否則返回。(,);刪除位置處的元素。 操作成功時(shí)返回,否則返回。();返回位置處的元素。(x); 查找值為x的元素,返回元素的位置(第一個(gè)元素的位置為1)。未找到時(shí)返回0。();返回元素個(gè)數(shù)。答:<>;{: (){0;} () { () {*; =>; delp; } =0; } (x,);在位置之后插入一個(gè)元素x。 為0時(shí),在第一個(gè)元素之前插入。 操作成功時(shí)返回,否則返回。 (,);刪除位置處的元素。 操作成功時(shí)返回,否則返回。 ();返回位置處的元素。 (x); 查找值為x的元素,返回元素的位置(第一個(gè)元素的位置為1)。 未找到時(shí)返回0。 ();返回元素個(gè)數(shù)。:{ ; *;}; ; *;};(x,){ (><0) ; *; >; >; (0) { >; ; } { *; (1<) >; >>; >; } ; ;}(,){ (><=0) ; *; (1) { >; >; p; } { (2<) >; *>; >>; >; ; } ; ;}(){ (>0<) { *; (1<) >; >; } -1;}(x){ 0; *; (p) { ; (>x); >; } 0;}(){ ;}定義一個(gè)類A,使得在程序中只能創(chuàng)建一個(gè)該類的對(duì)象,當(dāng)試圖創(chuàng)建該類的第二個(gè)對(duì)象時(shí),返回第一個(gè)對(duì)象的指針。答::{ : *();: ();: *;}*=0;*(){ (0) { =; } ;};:*=();對(duì)于下面的類A,如何用的非面向?qū)ο笳Z(yǔ)言成分來(lái)實(shí)現(xiàn)它?A{ : A(){x=y=0;} A(i,j){x=i;y=j;} f(){h();} g(i){x=i;} : ; h(){}};答:(下面的解決方案沒(méi)考慮函數(shù))A{ *;};(A*);(A*i,j);(A*);(A*,i);<>""{ ;};(A*){ *p; p=(*)(()); >x=>y=0; >=p;}(A*i,j){ *p; p=(*)(()); >x=i; >y=j; >=p;}(A*);(A*){(); }(A*,i){*(*)>; >x=i; }(A*){ }第7章操作符重載 為什么要對(duì)操作符進(jìn)行重載?是否所有的操作符都可以重載?答:通過(guò)對(duì)操作符進(jìn)行重載,我們可以實(shí)現(xiàn)用的操作符按照通常的習(xí)慣來(lái)對(duì)某些類(特別是一些數(shù)學(xué)類)的對(duì)象進(jìn)行操作,從而使得程序更容易理解。除此之外,操作符重載機(jī)制也提高了語(yǔ)言的靈活性和可擴(kuò)充性,它使得操作符除了能對(duì)基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型進(jìn)行操作外,也能用它們來(lái)對(duì)類的對(duì)象進(jìn)行操作。不是所有的操作符都可以重載,因?yàn)椤?”,“.*”,“::”,“?:”,這五個(gè)操作符不能重載。 操作符重載的形式有哪兩種形式?這兩種形式有什么區(qū)別?答:一種就是作為成員函數(shù)重載操作符;另一種就是作為全局(友元)函數(shù)重載操作符。當(dāng)操作符作為類的非靜態(tài)成員函數(shù)來(lái)重載時(shí),由于成員函數(shù)已經(jīng)有一個(gè)隱藏的參數(shù),因此對(duì)于雙目操作符重載函數(shù)只需要提供一個(gè)參數(shù),對(duì)于單目操作符重載函數(shù)則不需提供參數(shù)。當(dāng)操作符作為全局函數(shù)來(lái)重載時(shí),操作符重載函數(shù)的參數(shù)類型至少有一個(gè)為類、結(jié)構(gòu)、枚舉或它們的引用類型。而且如果要訪問(wèn)參數(shù)類的私有成員,還需要把該函數(shù)說(shuō)明成相應(yīng)類的友元。對(duì)于雙目操作符重載函數(shù)需要兩個(gè)參數(shù),對(duì)于單目操作符重載函數(shù)則需要給出一個(gè)參數(shù)。操作符=、()、[]以及->不能作為全局函數(shù)來(lái)重載。另外,作為類成員函數(shù)來(lái)重載時(shí),操作符的第一個(gè)操作數(shù)必須是類的對(duì)象,全局函數(shù)重載則否。 定義一個(gè)時(shí)間類,通過(guò)操作符重載實(shí)現(xiàn):時(shí)間的比較(、、>、>=、<、<=)、時(shí)間增加/減少若干秒(、)、時(shí)間增加/減少一秒(、)以及兩個(gè)時(shí)間相差的秒數(shù)(-)。解:{: ,,;: () { 0; } (h) { ; 0; } (h,m) { ; ; 0; } (h,m,s) { ; ; ; } () { ; ; ; } () { () ; ; } () { !(*t); } >() { (>) ; (>) ; (>) ; ; } >=() { *>t*t; } <() {!(*>=t); } <=() { !(*>t); } (s) { ; (>=60) { 60; ; } (>=60) { 60; ; } (>=24) 24; *; } (s) { ; (<0) { 60; ; } (<0) { 60; ; } (<0) 24; *; } ()對(duì)t,操作為: { *1; *; } ()對(duì)t,操作為: { *; *1; t; } () {*1; *; } () { *; *1; t; } -() {把時(shí)間直接換算成秒數(shù)計(jì)算 1*3600*60; 2*3600*60; 21; }};利用操作符重載給出一個(gè)完整的復(fù)數(shù)類的定義。解:{: ,;: () { ==0; } (r) { =r; =0; } (r,i) { =r; =i; } () { ; ; }(){**;} -() { ; =; =; ; }(12);(12);>(12);>=(12);<(12);<=(12); (12); (12); *(12); (12);};(12){ (c1c2)(c1c2);}(12){ !(c1c2);}>(12){ c1()>c2();}>=(12){ c1()>=c2();}<(12){ c1()<c2();}<=(12){ c1()<=c2();}(12){ ; 12; 12; ;}(12){ ; 12; 12; ;}*(12){ ; 1*c21*c2; 1*c21*c2; ;}(12){ 2();(d0){; (c1*c21*c2); (c1*c21*c2); ;}{<<"/"<<;(-1);}} 定義一個(gè)多項(xiàng)式類,其實(shí)例為多項(xiàng)式:a0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)均苯四甲酸二酐產(chǎn)業(yè)前景趨勢(shì)展望及投資戰(zhàn)略決策報(bào)告
- 2024-2030年中國(guó)發(fā)動(dòng)機(jī)軸承橡膠模行業(yè)市場(chǎng)運(yùn)營(yíng)模式及未來(lái)發(fā)展動(dòng)向預(yù)測(cè)報(bào)告
- 2024年生態(tài)修復(fù)工程用草種采購(gòu)合同
- 2024年生態(tài)旅游區(qū)門(mén)面房買(mǎi)賣合同范本3篇
- 2024年版地下水開(kāi)采合同3篇
- 2024年珠寶首飾租賃協(xié)議2篇
- 2024年企事業(yè)單位食堂餐飲承包合同及員工餐飲健康促進(jìn)3篇
- 2018企業(yè)首席質(zhì)量官培訓(xùn)考核試題(綜合卷)
- 2024年標(biāo)準(zhǔn)離婚股權(quán)分割合同模板版B版
- 2025年深圳從業(yè)資格證貨運(yùn)模擬考試下載
- Unit 7單元教案 2024-2025學(xué)年人教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- Unit 6 My sweet home(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)(2024)小學(xué)英語(yǔ)三年級(jí)上冊(cè)
- 北師大版教案正比例函數(shù)案例分析
- 行政文秘筆試題
- 人教版(2024)七年級(jí)地理上冊(cè)跨學(xué)科主題學(xué)習(xí)《探索外來(lái)食料作物傳播史》精美課件
- 2024-2025學(xué)年七年級(jí)數(shù)學(xué)上冊(cè)第一學(xué)期 期末模擬測(cè)試卷(湘教版)
- 職業(yè)素質(zhì)養(yǎng)成(吉林交通職業(yè)技術(shù)學(xué)院)智慧樹(shù)知到答案2024年吉林交通職業(yè)技術(shù)學(xué)院
- 《紅樓夢(mèng)》第5課時(shí):欣賞小說(shuō)人物創(chuàng)作的詩(shī)詞(教學(xué)教學(xué)設(shè)計(jì))高一語(yǔ)文同步備課系列(統(tǒng)編版必修下冊(cè))
- 【新教材】蘇科版(2024)七年級(jí)上冊(cè)數(shù)學(xué)第1-6章全冊(cè)教案設(shè)計(jì)
- 天津2024年天津市應(yīng)急管理局招聘應(yīng)急管理綜合行政執(zhí)法專職技術(shù)檢查員筆試歷年典型考題及考點(diǎn)附答案解析
- 工業(yè)物聯(lián)網(wǎng)(IIoT)行業(yè)發(fā)展全景調(diào)研與投資趨勢(shì)預(yù)測(cè)研究報(bào)告
評(píng)論
0/150
提交評(píng)論