《C++語言與面向?qū)ο蟮脑O(shè)計》習(xí)題及參考解答_第1頁
《C++語言與面向?qū)ο蟮脑O(shè)計》習(xí)題及參考解答_第2頁
《C++語言與面向?qū)ο蟮脑O(shè)計》習(xí)題及參考解答_第3頁
《C++語言與面向?qū)ο蟮脑O(shè)計》習(xí)題及參考解答_第4頁
《C++語言與面向?qū)ο蟮脑O(shè)計》習(xí)題及參考解答_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、c+語言與面向?qū)ο蟮脑O(shè)計第1至13章習(xí)題參考答案習(xí)題1參考答案1 用最簡練的語言解釋下列詞匯在面向?qū)ο蟪绦蛟O(shè)計中的含義:對象,類,方法,接口,消息,封裝,繼承,服務(wù)答:對象是客觀世界中的實體在計算機(jī)中的表示。是一組數(shù)據(jù)成員和方法成員的封裝體。是類類型的實例。類是一種抽象數(shù)據(jù)類型。是一組對象共性的描述。方法是在一個類中定義的過程或函數(shù),實現(xiàn)類的功能的代碼。接口是對象封裝體向外部公布的一組具有公有屬性的方法。是從對象外部與對象通信的唯一途徑。消息是對象之間的通信機(jī)制,對象的客戶通過接口方法調(diào)用請求對象服務(wù)稱為消息調(diào)用。對象之間通過消息傳遞,互相協(xié)調(diào)、配合,共同實現(xiàn)軟件系統(tǒng)的整體設(shè)計目標(biāo)。消息的載體

2、是對象提供的公有方法,即對象的接口。封裝有以下兩重含義:首先,是指將描述客觀實體數(shù)據(jù)特征的數(shù)據(jù)和方法特征的代碼組織在一起,作為一個整體,并為該整體命名標(biāo)識,以區(qū)別于其它數(shù)據(jù)和程序代碼。其次,通過對該整體內(nèi)成員的訪問屬性的規(guī)定,使一部分成員的隱藏起來,對于封裝體外成為不可見的,同時使另一部分成員對外開放,作為與外部交流的接口。繼承是面向?qū)ο蟪绦蛟O(shè)計方法中描述的兩個類之間一種增量包含關(guān)系。這兩個類具有一種父子關(guān)系,子類通過為父類添加新的成員而創(chuàng)建。繼承提供了利用一個類的代碼創(chuàng)建新類的重用方法。繼承關(guān)系也是對客觀世界分類層次關(guān)系的一種模擬。服務(wù)即對象通過公有方法向外部提供功能。1. 2 試列舉過程化

3、、模塊化、結(jié)構(gòu)化等程序設(shè)計方法的主要特點。面向?qū)ο蟪绦蛟O(shè)計是如何包容和吸收其它幾種程序設(shè)計方法的有用成分的。答:過程化程序設(shè)計方法以過程或函數(shù)作為程序的基本構(gòu)造單位。側(cè)重于算法表達(dá)和過程間參數(shù)傳遞的組織。模塊化程序設(shè)計方法以獨立編譯的源程序模塊作為大型應(yīng)用程序的基本組織單位。注重于應(yīng)用程序的開發(fā)管理。包括系統(tǒng)開發(fā)的任務(wù)分解、模塊間通信管理、可重用代碼庫的組織、由不同語言生成的目標(biāo)模塊的連接等方面。結(jié)構(gòu)化等程序設(shè)計方法以單入口單出口的可嵌套基本控制結(jié)構(gòu)作為程序構(gòu)造單位。提倡自頂向下的分析和自底向上的設(shè)計相結(jié)合的軟件系統(tǒng)構(gòu)造方法。重點關(guān)注程序結(jié)構(gòu)清晰,以獲得程序的可理解性和可維護(hù)性。面向?qū)ο蟪绦蛟O(shè)

4、計方法包容了以上三種方法的所有積極成分。對象中包含的方法實際上就是過程或函數(shù),方法的參數(shù)傳遞與過程或函數(shù)的傳遞都是利用堆棧進(jìn)行的。在方法的實現(xiàn)時仍然用單入口單出口的基本控制結(jié)構(gòu)編程。系統(tǒng)構(gòu)造仍然使用自頂向下的分析和自底向上的設(shè)計過程。并用模塊化方法管理整個系統(tǒng)的開發(fā),整個軟件系統(tǒng)由若干獨立編譯的源程序文件組成。面向?qū)ο蠓椒▽τ谝郧俺绦蛟O(shè)計方法的質(zhì)的躍變在于將中算法與數(shù)據(jù)結(jié)構(gòu)的多對多依賴變成了相互間的單一依賴關(guān)系。1. 3面向?qū)ο蟪绦蛟O(shè)計方法成功地取代其它程序設(shè)計方法在程序設(shè)計領(lǐng)域的主導(dǎo)地位有哪些根本原因?答:面向?qū)ο蟪绦蛟O(shè)計方法成功地取代其它程序設(shè)計方法的主要原因是(1)計算機(jī)軟硬件技術(shù)的超高

5、速發(fā)展,促進(jìn)了計算機(jī)應(yīng)用領(lǐng)域的迅速擴(kuò)展,帶來了大規(guī)模復(fù)雜系統(tǒng)的開發(fā)需求。 (2) 程序設(shè)計方法研究中不斷提高的數(shù)據(jù)抽象技術(shù)為復(fù)雜系統(tǒng)的開發(fā)帶來了更有效、更能自然表示問題世界的系統(tǒng)構(gòu)造模型。(3) 硬件設(shè)備的性能提高,足以支付新方法的存儲空間冗余和時間開銷的代價。1. 4 有人說對象是一個“黑盒子”,應(yīng)該怎樣看待這種說法?答:對象是一個“黑盒子”,這種說法是一個很貼切的比喻。所謂“黑盒子”,是指從用戶的觀點來看一個器件或產(chǎn)品時,并不關(guān)心其內(nèi)部構(gòu)造和原理,而只關(guān)心它的功能及如何使用這些功能。對象的封裝性使對象的屬性及功能的具體實現(xiàn)代碼對于對象的客戶是不可見的??蛻糁荒芡ㄟ^接口方法使用對象功能。1.

6、 5 試分析“對象與其所屬的應(yīng)用程序”和“對象與其所屬的類”這兩種關(guān)系的區(qū)別。答:對象與其所屬的應(yīng)用程序的關(guān)系是個別和整體的關(guān)系,對象與其所屬的類的關(guān)系是具體實例和它所對應(yīng)的抽象概念的關(guān)系,二者不可混為一談。1. 6試歸納總結(jié)子程序、過程、函數(shù)、方法、對象接口等概念的共同點及各自的特點。答:它們都是實現(xiàn)程序功能的代碼塊。子程序相對主程序而言,過程則關(guān)注本身的整體性。有時過程也特指無返回值的子程序。函數(shù)是有返回值的子程序,而且函數(shù)與數(shù)學(xué)中的函數(shù)概念一致,函數(shù)返回值與輸入?yún)?shù)是“一一對應(yīng)”或“一多對應(yīng)”關(guān)系。函數(shù)的返回值與子程序的輸出參數(shù)的概念是有區(qū)別的,一個函數(shù)只能有一個返回值而一個子程序可能有

7、多個輸出參數(shù)。方法特指對象封裝體中的過程或函數(shù)。對象接口是對象的公有方法。1. 7在一個醫(yī)院里有醫(yī)務(wù)人員、管理人員、后勤人員、臨時工等人員。醫(yī)務(wù)人員又分為醫(yī)生、護(hù)士、化驗員、藥劑師。醫(yī)生又有內(nèi)科、外科、五官科、神經(jīng)科之分。管理人員又分屬為行政管理、設(shè)備管理、藥品管理、財務(wù)管理等部門。請用面向?qū)ο蟮挠^點對上述信息進(jìn)行分析,指出哪些是類,哪些是對象,并說明類與類之間存在的繼承關(guān)系。若要根據(jù)上面的簡要描述設(shè)計計算機(jī)醫(yī)院人事管理系統(tǒng),請畫圖表示上述人事關(guān)系。答:題目中提到的都是類,沒有一個是類的實例,所以沒有一個是對象。其中醫(yī)務(wù)人員是基類,醫(yī)生、護(hù)士、化驗員、藥劑師是它的四個子類,而內(nèi)科醫(yī)生、外科醫(yī)生

8、、五官科醫(yī)生、神經(jīng)科醫(yī)生又是醫(yī)生的子類。另外管理人員是行政管理人員、設(shè)備管理人員、藥品管理人員、財務(wù)管理人員等子類的基類。習(xí)題2參考答案21 c+與c語言的關(guān)系如何? 它們的本質(zhì)區(qū)別是什么?答:c+由c語言繼承而來,并在c語言的基礎(chǔ)上增加了對面向?qū)ο蟪绦蛟O(shè)計的支持,是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法和面向?qū)ο蟪绦蛟O(shè)計方法的結(jié)合。c+保留了c語言的全部精華、與c語言兼容,又比c語言更適宜于管理大型、復(fù)雜的程序。二者的本質(zhì)區(qū)別是:c是面向過程的語言,而c+是面向?qū)ο蟮恼Z言。c是戰(zhàn)術(shù)語言,而c+是戰(zhàn)略語言。22 以下單詞哪些是c+合法的標(biāo)識符?public arrayi x3.5 3rd get_name

9、num1 _sot hi! x-y what? _for答:合法的標(biāo)識符為:get_name、num1、_sot、_for。23 保留字與一般標(biāo)識符有什么不同?答: 保留字又稱關(guān)鍵字,是系統(tǒng)已預(yù)先定義的一些單詞。這些單詞雖然符合標(biāo)識符的命名規(guī)則,但由于已經(jīng)被c+語言預(yù)先賦予了特定的含義,因而不能被程序員用作一般的標(biāo)識符來定義和使用。24 文件包含命令的形式如何?有什么作用?答: 文件包含命令的作用是讓編譯預(yù)處理器將指定文件的全部內(nèi)容插入到當(dāng)前源文件的該命令行處。它有兩種形式:#include 和#include 文件名。二者的區(qū)別在于,前者主要用于嵌入系統(tǒng)提供的頭文件(一般存于c+系統(tǒng)所在目錄

10、的include子目錄下),后者主要用于嵌入用戶自己定義的文件。對于前者,c+預(yù)處理器將在include目錄下搜索指定的頭文件; 對于后者,c+預(yù)處理器先在當(dāng)前目錄中搜索指定文件,若找不到再到include目錄下去搜索。25 什么叫源程序?c+程序在計算機(jī)上是如何實現(xiàn)的?答:用c+等高級語言編寫的程序稱為源程序。源程序是不能被計算機(jī)直接識別和執(zhí)行的。c+程序在計算機(jī)上的實現(xiàn)包括編輯、編譯、連接、運(yùn)行幾個步驟。其中編輯是指將源程序由鍵盤輸入并保存,得到源程序文件; 編譯是一個翻譯過程,將c+源程序翻譯成計算機(jī)能直接識別的機(jī)器語言程序,得到目標(biāo)文件; 連接程序把各個目標(biāo)文件和要用到的庫文件連接在一

11、起,生成可執(zhí)行文件,可執(zhí)行文件是計算機(jī)能直接運(yùn)行的文件。26 什么是空語句?它有什么作用?答:空語句是只有一個分號的語句。它主要用于語法上需要有一條語句但實際上又沒有任何操作可執(zhí)行的場合。27 什么是c+中的塊?主要用于什么地方?答:塊即復(fù)合語句或稱分程序,是括在一對花括號之間的語句序列,在語法上相當(dāng)于一條單語句,凡是在單語句可用的地方都可以使用復(fù)合語句。復(fù)合語句主要用于語法上要求只能有一條語句,但又難以只用一條簡單語句表達(dá)的情形,如循環(huán)語句的循環(huán)體等; 或者用于形成局部化的封裝體。28 判斷下列描述的對與錯:(1)c+和c語言都是面向?qū)ο蟮恼Z言。(2)一個c+源程序可以分別存放在幾個源文件中

12、。(3)c+對標(biāo)識符內(nèi)的英文字母是區(qū)分大、小寫的。(4)預(yù)處理命令是在程序正常編譯之后執(zhí)行的。(5)一個源程序若通過編譯、連接得到了exe文件,執(zhí)行后就能得到正確的結(jié)果。(6)以下四種寫法均是c+合法的注釋語句: /* */ / /* */ */ / /*答: (1)錯 (2)對 (3)對 (4)錯 (5)錯 (6)錯29分析下面程序的功能。若輸入為9和4,寫出程序的運(yùn)行結(jié)果。#includevoid main() int n1, n2 ; cout n1n2; cout ( n1 + n2 )/2= (n1 + n2 )/2 endl; 解答:程序的功能為:從鍵盤接收兩個整數(shù),計算輸出整數(shù)部

13、分它們的平均值的。若輸入為9和4,運(yùn)行結(jié)果為:(9 + 4 )/2=6210 編一個小程序,完成小時數(shù)向秒數(shù)的轉(zhuǎn)換。例如,若輸入為2.5(小時),則輸出為9000(秒)。參考程序:#include void main() float hours, seconds; couthours; seconds=hours*3600; coutthe second is : secondsendl; 習(xí)題3參考答案31 指出下列常量的類型: 34.5l 0x345 89f .7e3 8ul -869答:各常量的類型依次為:long double、int、float、double、unsigned lon

14、g int、signed int。32 判斷下列描述的對錯: (1)c+各基本類型的字寬和所能表示的數(shù)的范圍在各種計算機(jī)上都是相同的。 (2)一個變量可以多次被賦值,所以可同時擁有不同的值。 (3)c+中的變量在使用之前必須先聲明,而且必須在程序開頭就聲明。 (4)不同類型的指針分配到的內(nèi)存空間的大小是一樣的。 (5)將指針加1后,指針指向下一個字節(jié)。 (6)字符串 abx43xy的長度為8,在內(nèi)存中占據(jù)9個字節(jié)。 (7)字符串可作為一個整體進(jìn)行輸入、輸出,但不能作為整體進(jìn)行賦值、比較等。 (8)在對數(shù)據(jù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換時,可以不遵循隱式轉(zhuǎn)換的原則。 答: (1) 錯(2)錯(3)錯(4)對(

15、5)錯(6)錯(7)對(8)對33 寫一段語句,對如下變量或常量進(jìn)行聲明: (1) double型變量b1和b2,其中b2的初始值為98.3; (2) int型的符號常量length,其值為5; (3) 字符串變量string,初始化為please enter b1 : ; (4) 指向b1的指針b1_ptr ; 答案:(1) double b1 , b2 ( 98.3) ; (2) const int length(5 ); (3) char string = please enter b1 : ; (4) double *b1_ptr = &b1 ; 34 在上題的基礎(chǔ)上寫一段語句完成下列

16、操作:(1)在屏幕上顯示string; (2)從鍵盤接收b1的值; (3)將b2的值加上b1的值,仍賦給b2; (4)輸出b1和b2的值; (5)將b1_ptr所指單元的內(nèi)容加1并輸出; 54(1) 答:在屏幕上顯示string; cout string b1;(3)將b2的值加上b1的值,仍賦給b2; b2 = b2 + b1;(4)輸出b1和b2的值; cout b1= b1 b2 = b2 endl ;(5)將b1_ptr所指單元的內(nèi)容加1并輸出; cout +*b1_ptr endl ; 35 分析下面程序的運(yùn)行結(jié)果并上機(jī)驗證。 #includevoid main() const do

17、uble pi(3.1415926),e(2.7182818);double r=0.5; cout(int)pi*r*r=(int)pi*r*rendl; coutint(e*1000)=int(e*1000)endl; coutpi=pi e=e= 73 ) (2) ( x != y ) | ( c b ) (3) z & y | x y (4) z | y & x y (5) 200 * x / y (6) double(x) / y +23 (7) x / y + 23 (8) c + y % x (9)x *= int(b/a) + y (10) c c = 2 | y % - x

18、0 (11) +x level; switch(level) case 1: cout one; break; case 1.5: cout one and a half; break; case 2: coutxy; if xy cout x else cout 0 ) cout* ; (4) 下面程序段用于計算23除以5的余數(shù): float x = 23, y = 5, z; z = x % y; cout23 % 5 = z endl; (5) int i=0, j=9; for ( ; i+ != j- ; ) cout n; switch(n) case 1 : x = x +10;

19、 case 2 : x = x-10; case 3 : x = x*2; default : ; 解答:(1)第一句和第六句錯。switch后的表達(dá)式和case后的常量表達(dá)式只能是字符型、整型或枚舉型,不能是浮點型。 (2)第二句錯。if后的表達(dá)式要加括號; 句末應(yīng)有分號。 (3)死循環(huán)。 (4)x、y、z應(yīng)定義為整型(“%”的操作數(shù)應(yīng)為整數(shù))。 (5)死循環(huán)。 (6)各case子句中沒有break語句,得到的結(jié)果與要求不一致。45 分析下面的程序的循環(huán)次數(shù)并寫出運(yùn)行結(jié)果: # include void main() int n=0 , total=0; do total=total+n;

20、n+; while ( n+ 20 ); cout total= total endl ; 答案:循環(huán)次數(shù)為10,運(yùn)行結(jié)果為: total=11046 分析下面程序的功能并寫出程序的運(yùn)行結(jié)果: # include void main( ) int i=100, n=0; while (- i ) if ( i % 5 = 0 & i % 7 = 0 ) cout i endl ; n+ ; cout n= n endl ;答案:程序的功能為統(tǒng)計100以內(nèi)的自然數(shù)中哪些既是5的倍數(shù)、又是7的倍數(shù),以及這樣的數(shù)有多少個。運(yùn)行結(jié)果為: 70 35 n=2 47 編程求各位數(shù)字的和為偶數(shù)的三位數(shù)(例如

21、163),并統(tǒng)計這樣的數(shù)有多少個。參考程序:# include void main() int count = 0 , a , b , c ; for ( int i=100; i= 999; i + ) a=i/100 ; /a為百位數(shù)字 b=(i a*100 )/10 ; /b為十位數(shù)字 c=ia*100b*10 ; /c為個位數(shù)字 if ( (a+b+c) % 2 = 0 ) coutiendl; count +; coutcount=countendl; 48 編程計算下面的f(x): x2+6 (4x) f(x) = - x (0x4) x3+7x +9 (x0) 參考程序:# in

22、clude void main() float x, f; coutx; if (4x) f = x*x+6; if (0x & x= 4) f = -x; if (x=0) f=x*x*x+7*x+9; coutf(x) = fendl; 49 編程:輸入一個長整數(shù),統(tǒng)計它的位數(shù)。參考程序:# include void main() long int n; int w; coutn; w = 1 ; while ( n /= 10 ) w+; coutwendl; 410 編程:從鍵盤輸入一個以字符$結(jié)尾的字符串,統(tǒng)計其中0的個數(shù)、1的個數(shù)9的個數(shù)以及其它字符的個數(shù)。參考程序:# inclu

23、de void main() char ch; int dight10 , other=0, i; for ( i=0; i ch ; while ( ch != $ ) if ( ch = 0 & ch ch; for ( i=0; i=9; i + ) cout i : dighti endl; coutother : otherendl; 411 編程輸出如下圖形: 1 2 2 2 3 3 3 3 3 4 4 4 4 4 4 4參考程序: # include void main() int i,j; for ( i=1; i= 4; i + ) for ( j=1; j=5i; j +

24、) cout” “; for ( j = 1 ; j =2*i-1; j + ) cout i ; cout endl ; 412 編寫程序,計算s = 1 + ( 1 + 2 ) + ( 1 + 2 + 3 ) + + ( 1 + 2 + + n ),n由鍵盤輸入。參考程序:# include void main() int n, sum=0, a=0; coutn; for ( int i =1; i = n; i+ ) a= a+i; sum=sum+a; coutsumendl; 413 編寫程序:根據(jù)公式 e = 1 + 1/1! + 1/2! + 1/3! + .+ 1/n! 計算

25、e的值,直到最后一項小于10-6為止。參考程序:# include void main() double e=1, a=1; int i=1; do a=a / i; e=e+a; i+; while ( a = 1e-6 ); coute= e endl; 習(xí)題5參考答案5.1 簡要回答下列問題:(1)數(shù)組名可以看作一個指針,它與一般的指針有什么不同?(2)試說明指針變量本身的長度與它所指向的數(shù)據(jù)的類型的長度的區(qū)別。(3)怎樣為字符串?dāng)?shù)組賦值?(4)怎樣定義具有100個數(shù)據(jù)記錄的數(shù)據(jù)庫二維表?答:(1)數(shù)組名是地址常,指針是地址變量。(2)指針指向的數(shù)據(jù)的類型稱為指針的基類型。不同的基類型的

26、長度不同。指針變量本身的長度由機(jī)器字長決定,不管指針變量的基類型是什么,指針變量的長度都是一樣的。(3)字符串?dāng)?shù)組是二維字符數(shù)組,可以在定義時用初始化列表賦初值。如:char name420 = lixiaohe , wangqiang , shihua , liuli ; 或?qū)⒆址當(dāng)?shù)組定義為字符型指針數(shù)組,也可以在定義時用初始化列表賦值。如:char *name14 = lixiaohe , wangqiang , shihua , liuli ; (4)要定義具有100個數(shù)據(jù)記錄的數(shù)據(jù)庫二維表,應(yīng)當(dāng)先定義表的結(jié)構(gòu),利用struct定義一個結(jié)構(gòu)類型,然后定義該結(jié)構(gòu)類型的100個變量,或者定

27、義具有100個該結(jié)構(gòu)類型元素一維數(shù)組。5.2 指出下列程序段中的錯誤,并說明錯誤原原因。 (1)int length=50 ; char namelength; /錯!數(shù)組大小必須為常量 (2)const size=10; /錯!定義常量時沒有指明類型 int asize; size=20; /錯!不能為常量賦值 int bsize; (3)float x=72; float *p; p = x ; /錯!指針變量必須用地址賦值 (4) int x=9 , *x_ptr=&x; int y=78; *x_ptr = &y ; /錯!指針變量用法錯誤,可改為x_ptr = &y ;或*x_ptr

28、 = y; (5)const int length = 5; int alength = 3343 , 5 , 32 , 56 , 7 , 65 ; /錯!初始化數(shù)據(jù)個數(shù)大于指定的數(shù)組大?。?)int array1 3= 1 , 2 , 3 , 4 , 5 , 6 ; int array23 = 1 , 2 , 3 , 4 , 5 , 6 ; /錯!只能缺省第一維大小 int array3 = 1 , 2 , 3 , 4 , 5 , 6 ; /錯!只能缺省第一維大?。?) char a =sorry; char b =radio ; a = b ; /錯!字符串變量不能相互賦值 (8)int

29、w4; w = 1 , 2 , 3 , 4 ; /錯!不能在數(shù)組定義語句之外同時為多個數(shù)組元素賦值 (9)int age5 = 12 , 26 , 48 , 29 , 33 , *age_ptr = age ; cout *age *age_ptr endl ; age + ; /錯!地址常量不能改變 age_ptr + ; cout *age *age_ptr endl; (10) char s = welcome!; char *p = &s; /錯! s是地址常量,前面不能再用取地址運(yùn)算符& (11) char str14= t , h , i , s ; char str24=this

30、; /錯!數(shù)組大小應(yīng)包括字符串常量結(jié)束符 char str3 =this; (12)double x=3.6; double *ptr; *ptr=x; /錯!指針變量未用地址賦值5.3 寫出下面程序的運(yùn)行結(jié)果:# include void main( ) int a5=34 , 256 , 87 , 46 , 90 ; int b 3 = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ; int x , y , z; x=a2 + a3; y=*a+*(a+4); z= b12+*b +*(b+1)+*(*(b+1)+1); coutx = x y = y z = z

31、endl ; 答:x = 133 y = 124 z = 165.4 寫出下面程序的運(yùn)行結(jié)果:# include void main( )char str =there are 3 boys. ; char *p = str; coutstrendl; *(p+10) = 5 ; coutstrendl ; 運(yùn)行結(jié)果為:there are 3 boys.there are 5 boys.5.5 寫出下面程序的運(yùn)行結(jié)果:# include void main()const int n=5; int ann, i, j; for ( i = 0 ; i = n - 1 ; i+ ) ai0=1;

32、aii=1; for ( j=1; ji ; j+ ) aij = ai-1j-1+ai-1j; for ( i=0; i= n-1; i+ )for ( j=0; j= i; j+ )cout* ( * ( a + i ) + j ) ; coutendl; 運(yùn)行結(jié)果為: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 15.6 上機(jī)編程:建立并輸出如下的1010矩陣。 0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 0 2 3 4 5 6 7 8 9 0 1 9 0 1 2 3 4 5 6 7 8參考程序# include void main() int

33、 a1010 ; for ( int i=0; i=9; i + ) for ( int j=0; j= 9; j + ) aij= (i + j )%10; cout aij ; coutendl; 5.7上機(jī)編程:數(shù)組data中存放了n個互不相同的數(shù),找到其中的最小數(shù)并從數(shù)組中刪除。 參考程序:# include void main() const int n=10; double datan; int i, k; coutplease enter the data : ; for ( i = 0; idatai; coutthe previous array is : ; for ( i

34、=0; i= n1; i + ) coutdatai ; coutendl; k=0; for ( i=1; i= n1; i + ) /尋找最小數(shù)的位置 if ( dataidatak ) k=i; for ( i=k; i= n2; i + ) /刪除最小數(shù) datai = datai+1 ; coutthe curent array is : ; for ( i=0; i= n2 ; i + ) coutdatai ; coutendl; 習(xí)題6參考答案6.1 指出并改正下列函數(shù)原型語句的語法錯誤。(1) int max(int a,b);(2) int small_one(float

35、x; float y; float z;);(3) extern func(int 1_st,int 2_nd,int 3_rd);(4) char lookup(int*, char*;)(5) double *averagefloat,float;(6) double* &average(float f,float f);答:(1) 參數(shù)b沒有指定類型。 改正為 int max(int a, int b);(2) 參數(shù)之間應(yīng)該用逗號分隔。 改正為 int small_one(float x, float y, float z);(3) 函數(shù)無返回值類型。 改正為 extern int fu

36、nc(int first,int second,int third);(4) 參數(shù)表中不能出現(xiàn)分號。 改正為 char lookup(int*, char*);(5) 沒有錯誤。(6) 不能同時使用* 和&運(yùn)算符,兩個形式參數(shù)不能同名。 改正為 double& average(float f1,float f2);6.2 編程實現(xiàn):兩個學(xué)生班各派有9名學(xué)生參加計算課程對抗賽,對十種試題雙方各派一名參賽,最終以單種試題勝于對方最多的班級為優(yōu)勝者。 答:題目分析:分別以a、b兩個數(shù)組按參賽試題的順序登記成績,最后把每組試題的對應(yīng)元數(shù)進(jìn)行比較,并計算出一個班勝于對手的個數(shù),即可比較大小。#inclu

37、deint compare(float t1, float t2);void main()float a9,b9; int i, n;n=0; coutenter a、b classs grade:; for(i=0;iaibi; for(i=0;i5) cout class a is win!endl; else cout class b is win!=t2)? 1:0;6.3 下列程序企圖對a、b兩個數(shù)組進(jìn)行整理,若aibi,則二者互換,使得a數(shù)組中每個變量的值都大于或等于b數(shù)組相應(yīng)變量的值。上機(jī)運(yùn)行該程序時發(fā)現(xiàn),程序并未達(dá)到預(yù)定的目的,請改正程序中的邏輯錯誤,使它能得到預(yù)期的結(jié)果。#i

38、ncludevoid swap(double t1, double t2) double t;for (int i=1;i10;i+)if (t1t2)t=t1;t1=t2;t2=t;void main() double a10=0.55,8.21,7.16,-6.6,-34.5,23.4,71.6,-92.8,6.02,-71.5;double b10=-21.1,24.6,-2.8,15.5,-8.2,37.1,6.06,43.5,-16.2,7.05; int i; for(i=0;i10;i+)swap(ai,bi); coutai=;for(i=0;i10; i+) coutai,;

39、 coutendl; coutbi=;for(i=0;i10; i+) coutbi,; coutendl;答案:只需將程序第二行中函數(shù)參數(shù)由傳值調(diào)用改為傳地址調(diào)用即可:void swap(double& t1, double& t2) 6.4 編寫一個函數(shù)使它能夠輸出一個浮點數(shù)的小數(shù)部分,然后在主函數(shù)中調(diào)用該函數(shù),將由鍵盤輸入的任意浮點數(shù)的整數(shù)部分和小數(shù)部分分別輸出。參考程序:#includeint separate(double& f);void main()int a;double b; coutb; a=separate(b); coutthe input number is divided to a and bendl;int separate(double& f) int temp;temp=int(f);f=f-temp;return temp;6.5 下面給出了一個求素數(shù)的函數(shù)is_prime()的定義。編寫程序,補(bǔ)充完成main()函數(shù)定義,驗證哥德巴赫猜想“任何大于2的偶數(shù)n都可以表示為兩個素數(shù)之和”在小于等于10

溫馨提示

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

最新文檔

評論

0/150

提交評論