



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序設(shè)計(jì)教程ーー用C++語言編程(第二版習(xí)題解答)目錄TOC\o"1-5"\h\z\o"CurrentDocument"第1章概述 2\o"CurrentDocument"第2章基本數(shù)據(jù)類型和表達(dá)式 4\o"CurrentDocument"第3章程序的流程控制ーー語句 7\o"CurrentDocument"第5章構(gòu)造數(shù)據(jù)類型1 22\o"CurrentDocument"第6章數(shù)據(jù)抽象ーー類 37第フ早操作符重載 53\o"CurrentDocument"第8章繼承 派生類 77第9章類屬(泛型)機(jī)制——模板 87\o"CurrentDocument"第10章輸入/輸出(I/O) 93\o"CurrentDocument"第11章異常處理 101第12章實(shí)例 面向?qū)ο蟮腤indows應(yīng)用程序框架 102第1章概述1、簡(jiǎn)述馮?諾依曼計(jì)算機(jī)的工作模型。答:馮?諾依曼計(jì)算機(jī)的工作模型是:待執(zhí)行的程序從外存裝入到內(nèi)存中,CPU從內(nèi)存中逐條地取程序中的指令執(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)存用于存儲(chǔ)計(jì)算機(jī)程序(指令和數(shù)據(jù)),內(nèi)存由許多存儲(chǔ)單元構(gòu)成,每個(gè)存儲(chǔ)單元都有一個(gè)地址,對(duì)存儲(chǔ)單元的訪問是通過其地址來進(jìn)行的,與寄存器相比,內(nèi)存的容量要大得多,但指令訪問內(nèi)存單元所花費(fèi)的時(shí)間比訪問寄存器要多得多。外存是大容量的低速存儲(chǔ)部件,用于永久性地存儲(chǔ)程序、數(shù)據(jù)以及各種文檔等信息,存儲(chǔ)在外存中的信息通常以文件形式進(jìn)行組織和訪問,外存儲(chǔ)了在容量和速度上與內(nèi)存不同,另ー個(gè)區(qū)別在于內(nèi)存中存儲(chǔ)的是正在運(yùn)行的程序和正在使用的數(shù)據(jù),外存中存儲(chǔ)的則是大量的、并非正在使用的程序和數(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ī)則(算法)的描述:文檔是為了便于大理解程序所需的資料說明,供程序開發(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ù)軟件等。5、什么是虛擬機(jī)?答:在由硬件構(gòu)成的計(jì)算機(jī)(稱為“裸機(jī)”)之上,加上ー些軟件就得到了一個(gè)比它功能更強(qiáng)的計(jì)算機(jī),稱為“虛擬機(jī)”。6、十進(jìn)制數(shù)0.1的二進(jìn)制表示是什么?答:(0.1)10=(0.0001100H...)2,它是無限循環(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ò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ù)來進(jìn)行的,計(jì)算過程體現(xiàn)為ー系列的函數(shù)應(yīng)用。邏輯程序設(shè)計(jì)是把程序組織成一組事實(shí)和一組推理規(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í)語言的不同之處是什么?答:低級(jí)語言是指與特定計(jì)算機(jī)體系結(jié)構(gòu)密切相關(guān)的程序語言,它是特定計(jì)算機(jī)能夠直接理解的語言(或與之直接對(duì)應(yīng)的語言),包括機(jī)器語言和匯編語言。低級(jí)語言的優(yōu)點(diǎn)在于:寫出的程序效率比較高,包括執(zhí)行速度快和占用空間少。其缺點(diǎn)是:程序難以設(shè)計(jì)、理解與維護(hù),難以保證程序的正確性。高級(jí)語言是指人容易理解和有利于人對(duì)解題過程進(jìn)行描述的程序語言。高級(jí)語言的優(yōu)點(diǎn)在于:程序容易設(shè)計(jì)、理解與維護(hù),容易保證程序正確性。高級(jí)語言的缺點(diǎn)是:用其編寫的程序相對(duì)于用低級(jí)語言編寫的程序效率要低,翻譯成的目標(biāo)代碼量較大。10、簡(jiǎn)述編譯與解釋的區(qū)別。答:編譯是指把高級(jí)語言程序首先翻譯成功能上等價(jià)的機(jī)器語言程序或匯編語言程序,然后執(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ī)中,并作為文件保存到外存中,文件名為“*.cpp”和“*.h”。然后利用某個(gè)C++編譯程序?qū)Ρ4嬖谕獯嬷械腃++源程序進(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í)行程序。在VisualC++6.0環(huán)境中,首先要建立一個(gè)project(項(xiàng)H);其次往該project中添加、編輯程序模塊(源文件);然后選擇菜單Build中的Build...或RebuildAll;最后選擇菜單Build中的Execute...運(yùn)行程序。12、C++的單詞分成哪些種類?答:構(gòu)成C++的單詞有:標(biāo)識(shí)符、關(guān)鍵詞、字面常量、操作符以及標(biāo)點(diǎn)符號(hào)等。13、下面哪ー些是合法的C++標(biāo)識(shí)符?extern,_book,Car,car_l,calr,Icar,friend,carl_Car,Car_Type,No.1,123答:合法的Ch"標(biāo)識(shí)符:book,Car,carl,calr,carlCar,CarType第2章基本數(shù)據(jù)類型和表達(dá)式1、C++提供了哪些基本數(shù)據(jù)類型?檢査你的計(jì)算機(jī)上各種類型數(shù)據(jù)所占內(nèi)存空間的大小(字節(jié)數(shù))。答:C++提供了以下5種基本數(shù)據(jù)類型:整數(shù)類型、實(shí)數(shù)類型、字符類型、邏輯類型以及空值類型。一臺(tái)計(jì)算機(jī)上各種數(shù)據(jù)類型的數(shù)據(jù)所占用的內(nèi)存大小(字節(jié)數(shù))可以通過“sizeof(類型名)”來計(jì)算。2、下面哪ー些是合法的C++字面常量,它們的類型是什么?-5.23,le+50, -25, 105, 20.20, e5, le-5, -0.0e5, ?\n1-000, 'A', '5', '3.14',falsered,'\r*, '\f'"TodayisMonday.", "\""答:字面常量是指在程序中直接寫出常量值的常量。ー5.23,le+50,-25,20,.20,le-5,-0.0e5,'\n', "000,'A', '5','\r','\f1,"TodayisMonday.","ヽ""都是字面常量。其中:整數(shù)類型常量:-25,20,-000實(shí)數(shù)類型常量:-5.23,le+50,.20,le-5,-0.0e5字符常量:,\n', 'A', '5',1\r1,1\f,字符串常量:"TodayisMonday.", "\""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è)變量都耍有定義。變量定義指出變量的類型和變量名,另外還可以為變量提供ー個(gè)初值。C++中使用變量之前,必須對(duì)使用的變量進(jìn)行聲明(變量定義屬于ー種聲明,即:定義性聲明),變量聲明指出了一個(gè)變量的類型,使得編譯程序能對(duì)變量的操作進(jìn)行類型檢查并做相應(yīng)的類型轉(zhuǎn)換。整個(gè)程序中,某變量的定義只能由一個(gè),但它的聲明可以有多個(gè)。5、什么是表達(dá)式?其作用是什么?答:表達(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ī)定了相鄰的兩個(gè)操作符誰先運(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)換?3/5*12.39+10*5.212U+3.0F*24L答:表達(dá)式中類型轉(zhuǎn)換規(guī)則是:基于單個(gè)操作符依次進(jìn)行轉(zhuǎn)換。1)3與5同類型,不轉(zhuǎn)換,結(jié)果為0,轉(zhuǎn)換成double型后與12.3做乘法。10轉(zhuǎn)換成double型與5.2做乘法,,a,轉(zhuǎn)換成double型后與前者結(jié)果做加法。3.0F與24L均轉(zhuǎn)換成double型后做乘法,12U轉(zhuǎn)換成double型后與前者結(jié)果做加法。8、將下列公式表示成C++的表達(dá)式:(1)-"ザーj (可利用C++標(biāo)準(zhǔn)庫(kù)中的求平方根的函數(shù):sqrt(x))2a(2)y/s(s-a)(s-b)(s-c)(3)3 4?萬?廣(3)ロ+工2.5+c答:1)(-l*b+sqrt(b*b-4*a*c))/(2*a)sqrt(s*(s-a)*(s-b)*(s-c))((a*b)/(c*d))*(3/(1+(b/(2.5+c))))+(4*pi*r*r*r/3)9、寫出下列條件的C++表達(dá)式i能被j整除。ch為字母字符。m為偶數(shù)。n是小于100的奇數(shù)。a、b、c構(gòu)成三角形的三條邊。答:1)i%j==0((ch>=1a')&&(ch<='z'))||((ch>=1A1)&&(ch<='Z1))m%2==0(n<100)&&(n%2!=0)(a>0)&&(b>0)&&(c>0)&&(a+b>c)&&(b+c>a)&&(c+a>b)或((a+b)>c)&&(abs(a-b)<c) //(a>0)&&(b>0)&&(c>0)可以不用判斷10、在你的計(jì)算機(jī)上運(yùn)行下面的程序:#include<iostream>usingnamespacestd;intmain(){doublea?3.3,bBl.1;inti=a/b;cout<<i<<endl;return0;)結(jié)果與你預(yù)期的是否相符?如果不符,請(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=bAa;b=aAb;a=bAa;方法二:a=a+b;b=a-b;a=a-b;12、舉例說明把int類型轉(zhuǎn)成float類型可能會(huì)丟失精度。答:如果血型與float型都是4個(gè)字節(jié),由于在float型的數(shù)據(jù)表示中,有若干位用來表示指數(shù),因此,尾數(shù)的位數(shù)不到4個(gè)字節(jié)(根據(jù)IEEE標(biāo)準(zhǔn),只有23個(gè)二進(jìn)制位)。如果ー個(gè)int型的數(shù)大于23位(二進(jìn)制),則無法用float型精確表示。例如:intx=0x01000001;floaty=x;//x的最后一位"「‘不是被截掉就是被舍入!cout?x?endl?setprecision(30)?y?endl;第3章程序的流程控制ーー語句1,編寫一個(gè)程序,將華氏溫度轉(zhuǎn)換為攝氏溫度。轉(zhuǎn)換公式為:c=ビ仔32),其中,c為攝氏溫度,f為華氏溫度9解:#include<iostream>usingnamespacestd;intmain(){doublec,f;cout?"PleaseinputanF-temperature:"?endl;cin?f;c=(f-32)*5/9;cout?"TheC-temperatureis:M?c?endl;return0;}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<iostream>usingnamespacestd;intmain(){inthour,minute;charnoon;cout?”Pleaseinputatimein24-hourformat:M?endl;cout?"hour:M;cin?hour;if(hour<0||hour>23){cout?"Theinputhouriswrong!"?endl;return-1;)if(hour>12){hour=hour-12;noon=*p*;)elsenoon='a';cout?"minute:cin?minute;if(minute<0||minute>59){cout?"Theinputminuteiswrong!"?endl;return-1;)cout?endl?"Thetimein12-hourformatis:"?hour?":"?minute;if(noon=cout?"pm"?endl;elsecout?"am"?endl;return0;}3、編寫ー個(gè)程序,分別按正向和逆向輸出小寫字母a?z。解:#include<iostream>usingnamespacestd;intmain(){charc;for(c-a*;c<=*z,;c-H-)cout?c?””;cout?endl;for(c—z*;c>=*a*;c-)cout?c?””;cout?endl;return0;}4、編寫ー個(gè)程序,從鍵盤輸入ー個(gè)正整數(shù),判斷該正整數(shù)為兒位數(shù),并輸出其位數(shù)。解:#include<iostream>usingnamespacestd;intmain(){unsignedintgzint;intcount=0;while(1){cout?”Pleaseinputaninteger(greaterthanzero):"?endl;cin?gzint;if(gzint<=0)cout?"Yourinputiswrong!Pleaseinputagain...'*?endl;elsebreak;)while(gzint!=0){gzint=gzint/10;count-H-;)cout?"Thenumberofdigitsintheintergeris:**?count?endl;return0;}5、編寫ー個(gè)程序,對(duì)輸入的ー個(gè)算術(shù)表達(dá)式(以字符#結(jié)束),檢查圓括號(hào)配對(duì)情況。輸出:配對(duì)、多左括號(hào)或多右括號(hào)。解:#include<iostream>usingnamespacestd;intmain(){intcount=0;charch;cout?"Pleaseinputanexpression:"?endl;for(cin?ch;ch!=*#*;cin?ch){if(ch=*(*)count-H-;elseif(ch=*)*)count—;}if(count=0)cout?"配對(duì)!""endl;elseif(count>0)cout?"多左括號(hào)!”《endl;elseeoutw”多右括號(hào)!,,vvendl;return0;}6、編寫ー個(gè)程序,輸入一個(gè)字符串(以字符#結(jié)束),對(duì)其中的“*”進(jìn)行計(jì)數(shù)。解:#include<iostrcam>usingnamespacestd;intmain(){intcount=0;charchl=、0',ch2;cout?”Pleaseinputastring(terminatedwith#):"?endl;for(cin?ch2;ch2!='#';cin?ch2){if(ch2==&&chi=*>*)countH;chi=ch2;}cout?"Numberof>=:"?count?endl;return0;|7、假定郵寄包裹的計(jì)費(fèi)標(biāo)準(zhǔn)如下(重量在檔次之間時(shí)往上ー擋靠):重量(克)收費(fèi)(元)TOC\o"1-5"\h\z15 530 945 1260 14 (每滿1000公里加收1元)60以上 15 (每滿1000公里加收2元)編寫ー個(gè)程序,輸入包裹重量和郵寄距離,計(jì)算并輸出收費(fèi)數(shù)額。解:/include<iostream>usingnamespacestd;intmain(){intcharge;doubleweight;cout?"Pleaseinputtheweightofthepackage:"?endl;cin?weight;if(weight<=0)cout?"Theinputweightiswrong!"?endl;elseif(weight<=15)charge=5;elseif(weight<=30)charge=9;elseif(weight<=45)charge=12;else{doubledistance;cout?"Pleaseinputthedistance:"?endl;cin?distance;if(distance<=0)cout?"Theinputeddistanceiswrong!n?endl;else{distance/=1000;if(weight<=60)charge=14+(int)distance;elsecharge=15+(int)distance*2;))cout?charge?endl;return0;}8、編寫ー個(gè)程序,計(jì)算圓周率。可利用公式:萬,111—=1 1 +...4 357直到最后ー項(xiàng)的絕對(duì)值小于10.ゝ解:#include<iostream>#include<cmath>usingnamespacestd;intmain(){doubleitem=1.0,sum=0.0;inti=l,sign=l;while(fabs(item)>=le-8){sum+=item;sign*=-1;i+=2;item=sign/(double)i;}cout?setprecision(8)?sum*4?endl;return0;它們等于它們的各位數(shù)字的立方和。例如:9、編寫ー個(gè)它們等于它們的各位數(shù)字的立方和。例如:153=I3+33+53解:#include<iostream>usingnamespacestd;intmainQ{for(intn=100;nv=999;n++){intij,k;i=n/100;〃百位數(shù)字j=n%10(V10;〃十位數(shù)字k=n%10;〃個(gè)位數(shù)字if(n=i*i*i+j*j*j+k*k*k)cout?n?endl;}return0;}或#include<iostream>usingnamespacestd;intmain(){for(inti=l;i<=9;i++){intn=i*100,m=i*i*i;for(intj=0;jv=9;j++){intnl=n+j*10,ml=m+j*j*j;for(intk=0;k<=9;k++){if(n1+k=ml+k*k*k)cout?n1+k?endl;return0;}10、編寫一個(gè)程序,求a和b的最大公約數(shù)。解:#include<iostream>usingnamespacestd;intmain(){inta,b;cout?"Pleaseinputa,b:"?endl;cin?a?b;intc=(a>b)?b:a;while(c>0){if(a%c=0&&b%c=0)break;c-;)cout?c?endl;return0;)或#include<iostream>usingnamespacestd;intmain(){inta,b;cout?"Pleaseinputa,b:”?endl;cin?a?b;intc;do{c=a-b*(a/b);a=b;b=c;}while(c!=0);cout?a?endl;return0;11、編寫一個(gè)程序,輸出十進(jìn)制乘法表。12391123922461833692799182781解:#include<iostream>usingnamespacestd;intmain(){for(inti=0;i<10;i++){if(i!=0)cout?i;cout?,,\tn;fbr(intj=l;j<10;j++)if(i*j!=0)cout?i*j?"\t";elsecout?j?“\ゼ;cout?endl;}return0;12、將ド面的fbr循環(huán)重寫為等價(jià)的while循環(huán)。for(i=0;i<max_length;i++)if(input_line[i]==1?1)quest_count++;解:i=0;while(i<max_length){if(input_line[i]=?)quest_count-H-;i++;
13、說明ド面的三個(gè)程序可以用圖3-6中的三種控制結(jié)構(gòu)來表示。第4章過程抽象ーー函數(shù)1、簡(jiǎn)述子程序的作用。答:子程序是有名字的一段程序代碼,它通常完成一個(gè)獨(dú)立的(子)功能。在程序的其他地方通過子程序的名字來使用它們。除了能減少程序代碼外,采用子程序的主要作用是實(shí)現(xiàn)過程抽象,使用者只需知道子程序的功能,而不需要知道它是如何實(shí)現(xiàn)的,這有利于大型、復(fù)雜程序的設(shè)計(jì)和理解。2、簡(jiǎn)述局部變量的作用。答:1、實(shí)現(xiàn)信息隱藏,使得函數(shù)外無法訪問該函數(shù)內(nèi)部使用的數(shù)據(jù)。2、減少名沖突,ー個(gè)函數(shù)可以為局部變量定義任何合法名字,而不用擔(dān)心與其他函數(shù)的局部變量同名。2、局部變量的內(nèi)存空間在棧中分配,函數(shù)調(diào)用完之后釋放,因此,使用局部變量能節(jié)省程序的內(nèi)存空間。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í)符的作用域是指:ー個(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í)體。5、下面的聲明中哪ー些是定義性聲明?這些定義性聲明的非定義性聲明是什么?constinti=l;staticdoublesquare(doubledbl){returndbl*dbl;}char*str;structPoint;char*(*pFn)(int(*)(char*,int),char**);答:1)是。非定義性聲明:externconstinti;2)是。非定義性聲明:externdoublesquare(double);3)是。非定義性聲明:externchar*str;4)不是。5)是。非定義性聲明:externchar*(*pFn)(int(*)(char*,int),char**);6、下面的宏cubel和函數(shù)cubc2相比,各有什么優(yōu)缺點(diǎn)?#de£inecubel(x)((x)?(x)*(x))doublecube2(doublex){returnx*x*x;}答:小型函數(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ì)于:inta;當(dāng)a的值很大時(shí),cubel(a)得不到正確結(jié)果!(因?yàn)榻Y(jié)果類型為int,而如果a*a*a的結(jié)果超出了int型的范圍,則結(jié)果將會(huì)截?cái)?)7、編寫ー個(gè)函數(shù)digit(n,k),它計(jì)算整數(shù)n的從右向左的第k個(gè)數(shù)字。例如:digit(123456,3)=4digit(1234,5)=0答:intdigit(intn,intk){for(inti=l;i<k;i++)n=n/10;returnn%10;}8、分別用函數(shù)實(shí)現(xiàn)習(xí)題3.8中的第1、4、7和10題的程序功能。答:第1題:doubleFahrenheit_To_Celsius(doublex)(return(x-32)*5/9;}第4題:intnum_of_digits(intgzint){intcount=0;if(gzint<0)gzint=-gzint;while(gzint!=0){gzint=gzint/10;count-H-;returncount;第7題:doublecharge(doubleweight,doubledistance)(doublemoney=0;if(weight<=15) money=5;elseif(weight<=30) money=9;elseif(weight<=45) money=12;elseif(weight<=60) money=14+(int)(distance/1000);elsemoney=15+(int)(distance/1000)*2;returnmoney;)第10題:intgcd(inta,intb){intmax=a>b?a:b;for(inti=max;i>0;i--)if((a%i==0)&&(b%i==0))returni;9、寫出下面程序的執(zhí)行結(jié)果:#include<iostream>usingnamespacestd;intcount=0;intfib(intn){count++;if(n==lIIn==2)return1;elsereturnfib(n-1)+fib(n-2);)intmain(){cout<<fib(8);cout<<1,1<<count<<endl;return0;)答:21,4110、分別寫出計(jì)算Hermit多項(xiàng)式Hn(x)值的迭代和遞歸函數(shù)。H£x)定義如下:H0(x)=1Hi(x)=2x%(x)=2xHn.1(x)-2(n-l)Hn.2(x) (n>l)答:#include<iostream>usingnamespacestd;doubleHermit_Iterative(int,double); 〃迭代方法doubleHermit_Recursion(int,double); 〃遞歸方法voidmain(){constintn=3; //n與x可自行指定doublex=3.14;cout<<Hermit_Iterative(n,x)<<endl<<Hermit_Recursion(n,x)<<endl;)doubleHermit_Iterative(intn,doublex){if(n==0)return1;elseif(n==l)return2*x;else{doubleresl=l,res2=2*x;doubleResult=0;for(inti=2;i<=n;i++){Result=2*x*res2-2*(i-1)*resl;resl=res2;res2=Result;}returnResult;})doubleHermit_Recursion(intn,doublex){if(n==0)return1;elseif(n==l)return2*x;elsereturn2*x*Hermit_Recursion(n-lzx)-2*(n-1)*Hermit_Recursion(n-2,x);)11、寫出計(jì)算Ackermann函數(shù)Ack(m,n)值的遞歸函數(shù)。んじ?孫⑺定義如下門フ〇,!!m。):Ack(0,n)=n+1Ack(m,0)=Ack(m-1,1)Ack(m,n)=Ack(m-1,Ack(m,n-1)) (m>0,n>0)答:intAck(intm,intn){if(m==0)returnn+l;elseif(n==0)returnAck(m-1,1);else12、根據(jù)下圖寫ー個(gè)函數(shù):intpath(intn);用于計(jì)算從結(jié)點(diǎn)1到結(jié)點(diǎn)n(n大于1)共有多少條不同的路徑。答:intpath(intn){if(n==l)return1;if(n==2)return1;if(n==3)return2;if(n%2==0)returnpath(n-l)+path(n-2)+path(n-3);elsereturnpath(nT)+path(n-2);13、編程解決下面的問題:若一頭小母牛,從出生起第四個(gè)年頭開始每年生一頭母牛,按此規(guī)律,第n年有多少頭母牛?答:除了第一年到第三年外,每一年的母牛數(shù)應(yīng)該是上一年的母牛數(shù)加上三年前的母牛數(shù)(現(xiàn)在它們是第四年了,要生小牛了!)intf(intn){if(n==lIIn==2||n==3)return1;returnf(n-3)+f(n-1);14、假設(shè)有三個(gè)重載的函數(shù):voidfunc(int,double);voidfunc(long,double);voidfunc(int,char);對(duì)下面的函數(shù)調(diào)用,指出它們分別調(diào)用了哪ー個(gè)重載函數(shù);如果有歧義,指出導(dǎo)致歧義的重載函數(shù)定義。func(1c',3.0);func(3L,3);func("three",3.0);func(3L,?c');func(true,3);答:func('c',3.0);與voidfunc(int,double);匹配func(3LZ3);與voidfunc(long,double);匹配func(?three3.0);沒有與之匹配的函數(shù)func(3L,'c1);與voidfunc(long,double);和voidfunc(int,char);均能匹配func(true,3);與voidfunc(int,double);和voidfunc(int,char);均能匹己已15、下面的函數(shù)定義為什么是正確的?在函數(shù)f中如何區(qū)分(使用)它們?voidf〇{intf;}答:兩個(gè)f的作用域不一樣,voidf()中的f為全局作用域,intf;中的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ù)名具有文件作用域,因此,不會(huì)出現(xiàn)重復(fù)定義問題。17、用循環(huán)實(shí)現(xiàn)錯(cuò)誤!未找到引用源。中的輾轉(zhuǎn)相除法計(jì)算最大公約數(shù)。答:intgcd(intx,inty){while(y!=0){intt=y;y=x%y;x=t;}returnx;第5章構(gòu)造數(shù)據(jù)類型1、枚舉類型有什么好處?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è)變量,但訪問的語法形式不同:引用是采用直接訪問形式,指針則采用間接訪問形式。在作為函數(shù)參數(shù)類型時(shí),引用類型參數(shù)的實(shí)參是一個(gè)變量,而指針類型參數(shù)的實(shí)參是ー個(gè)變量的地址。除了在定義時(shí)指定的被引用變量外,引用類型變量不能再引用其他變量;而指針變量定義后可以指向其他同類型的變量。因此,引用類型比指針類型要安全。引用類型的間接訪問對(duì)使用者而言是透明的。3、寫出下面程序的運(yùn)行結(jié)果:#include<iostream>usingnamespacestd;voidf(int&x,inty){y=x+y;x=y%3;cout<<x<<'\t,<<y<<endl;)intmain(){intxslO,y=19;f(y#x);cout<<x<<'\t*<<y<<endl;f(x,x);cout<<x<<>\t*<<y<<endl;return0;答:229102220224、從鍵盤輸入某個(gè)星期每一天的最高和最低溫度,然后計(jì)算該星期的平均最低和平均最高溫度并輸出之。解:#include<iostream>usingnamespacestd;enumDay{SUN,MON,TUE,WED,THU,FRエ,SAT};intmain(){doublemax,min,maxsum=0,minsum=0;for(Dayd=SUN;d<=SAT;d=(Day)(d+1)){cout<<"Pleaseinput,?;switch(d)caseSUN:caseSUN:{cout<<caseMON:{cout<<caseTUE:{cout<<caseWED:{cout<<caseTHU:{cout<<caseFRI:{cout<<caseSAT:{cout<<"SundayH;break;}"Monday";break;}"Tuesday";break;}"Wednesday";break;)"Thursday";break;}"Friday11;break;}"Saturday";break;}cout<<"1stemperature(maxmin):"<<endl;cin>>max>>min;maxsum+=max;minsum+=min;<<maxsum/7.<<maxsum/7.0<<endl;<<minsum/7.0<<endl;cout<<"Theaveragetemperatureofmaxismis:cout<<"Theaveragetemperatureofminismis:return0;5、編寫ー個(gè)函數(shù),判斷其int型參數(shù)值是否是回文數(shù)。回文數(shù)是指從正向和反向兩個(gè)方向讀數(shù)字都ー樣,例如,9783879就是ー個(gè)回文數(shù)。解:boolis_huiwen(intnum){charwei[100],i=0;while(num!=0){wei[i]=num%10;num/=10;i++;)for(intj=0;j<=i/2;j++){if(wei/r/
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)折紋梯形提壺?cái)?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)復(fù)捻管數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)固井水泥發(fā)泡車數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)喉軟骨模型數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)吸入膠管數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)十斗三門文件柜數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)八角彩色鉛筆數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 供應(yīng)鏈金融中的信用體系建設(shè)與區(qū)塊鏈技術(shù)
- 精準(zhǔn)復(fù)習(xí)游泳救生員資格考試的試題及答案技巧
- 解析體育經(jīng)紀(jì)人資格考試的命題方向 試題及答案
- 年產(chǎn)16.6萬噸工業(yè)涂料用樹脂、2.8萬噸裝配式建筑用硅烷改性膠粘劑用樹脂、2萬噸高性能防水涂料用樹脂項(xiàng)目(一期)公眾參與說明
- 員工食堂就餐協(xié)議書
- 創(chuàng)傷緊急救護(hù)知識(shí)課件
- 醫(yī)院?jiǎn)挝粏挝粌?nèi)部控制自我評(píng)價(jià)報(bào)告
- 湖北省第十屆湖北省高三(4月)調(diào)研模擬考試數(shù)學(xué)試題及答案
- 五一勞動(dòng)節(jié)前安全檢查重點(diǎn)
- 2025年03月廣東深圳市光明區(qū)科技創(chuàng)新局公開招聘專干5人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 內(nèi)蒙古通遼市科左中旗實(shí)驗(yàn)小學(xué)2025屆數(shù)學(xué)三下期末質(zhì)量檢測(cè)試題含解析
- 高溫急救知識(shí)培訓(xùn)
- 學(xué)前教育學(xué) 課件 第1、2章 緒論;學(xué)前教育的目標(biāo)、內(nèi)容的方法
- 2025北京豐臺(tái)高三一模物理試題及答案
評(píng)論
0/150
提交評(píng)論