版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計(jì)教程
一一用語言編程
(第二版習(xí)題解答)
目錄
第1章概述...........................................................錯(cuò)誤!未指定書簽。
第2章基本數(shù)據(jù)類型和表達(dá)式..........................................錯(cuò)誤!未指定書簽。
第3章程序的流程控制一一語句........................................錯(cuò)誤!未指定書簽。
第4章過程抽象一一函數(shù)..............................................錯(cuò)誤!未指定書簽。
第5章構(gòu)造數(shù)據(jù)類型...................................................錯(cuò)誤!未指定書簽。
第6章數(shù)據(jù)抽象一一類................................................錯(cuò)誤!未指定書簽。
第7章操作符重載.....................................................錯(cuò)誤!未指定書簽。
第8章繼承一一派生類................................................錯(cuò)誤!未指定書簽。
第9章類屬(泛型)機(jī)制一一模板......................................錯(cuò)誤!未指定書簽。
第10章輸入/輸出()..................................................錯(cuò)誤!未指定書簽。
第11章異常處理......................................................錯(cuò)誤!未指定書簽。
第12章實(shí)例一一面向?qū)ο蟮膽?yīng)用程序框架..............................錯(cuò)誤!未指定書簽。
第1章概述
1、簡述馮?諾依曼計(jì)算機(jī)的工作模型。
答:馮?諾依曼計(jì)算機(jī)的工作模型是:待執(zhí)行的程序從外存裝入到內(nèi)存中,從內(nèi)存中逐條地取程
序中的指令執(zhí)行;程序執(zhí)行中所需要的數(shù)據(jù)從內(nèi)存或從外設(shè)中獲得,程序執(zhí)行中產(chǎn)生的中間結(jié)
果保存在內(nèi)存中,程序的執(zhí)行結(jié)果通過外設(shè)輸出。
2、簡述寄存器、內(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、能執(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)用/返回等
指令。
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)制表示是什么?
答:(O.l)io=(0.000110011...)2.它是無限循環(huán)小數(shù)。也就是說,十進(jìn)制數(shù)0.1無法精確用二進(jìn)制
表示!
7、簡述程序設(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ū)ο蟪绦?/p>
由一些對(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、簡述程序設(shè)計(jì)的步驟。
答:程序設(shè)計(jì)一般遵循以下步驟:
明確問題;系統(tǒng)設(shè)計(jì);用某種語言進(jìn)行編程;測試與調(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、簡述編譯與解釋的區(qū)別。
答:編譯是指把高級(jí)語言程序首先翻譯成功能上等價(jià)的機(jī)器語言程序或匯編語言程序,然后執(zhí)
行目標(biāo)代碼程序,在目標(biāo)代碼程序的執(zhí)行中不再需要源程序。
解釋則是指對(duì)源程序中的語句進(jìn)行逐條翻譯并執(zhí)行,翻譯完了程序也就執(zhí)行完了,這種翻
譯方式不產(chǎn)生目標(biāo)程序。一般來說,編譯執(zhí)行比解釋執(zhí)行效率要高。
11、簡述C++程序的編譯執(zhí)行過程。在你的開發(fā)環(huán)境中運(yùn)行1.3.2節(jié)中給出的簡單程序。
答:首先可以利用某個(gè)編輯程序把源程序輸入到計(jì)算機(jī)中,并作為文件保存到外存中,文件名
為“*”和然后利用某個(gè)編譯程序?qū)Ρ4嬖谕獯嬷械脑闯绦蜻M(jìn)行編譯,編譯結(jié)果作為目標(biāo)
文件保存到外存,文件名為“*:然后再通過一個(gè)聯(lián)接程序把由源文件產(chǎn)生的目標(biāo)文件以及程
序中用到的一些系統(tǒng)功能所在的目標(biāo)文件聯(lián)接起來,作為一個(gè)可執(zhí)行文件保存到外存,文件名
為“*二最后通過操作系統(tǒng)提供的應(yīng)用程序運(yùn)行機(jī)制,把可執(zhí)行文件裝入內(nèi)存,運(yùn)行其中的可
執(zhí)行程序。
在6.0環(huán)境中,首先要建立一個(gè)(項(xiàng)目);其次往該中添加、編輯程序模塊(源文件);然
后選擇菜單中的…或;最后選擇菜單中的…運(yùn)行程序。
12、的單詞分成哪些種類?
答:構(gòu)成的單詞有:標(biāo)識(shí)符、關(guān)鍵詞、字面常量、操作符以及標(biāo)點(diǎn)符號(hào)等。
13、下面哪一些是合法的標(biāo)識(shí)符?
,,,1,lr,1,,1,,.1,123
答:合法的標(biāo)識(shí)符:,,l,lr,1,
第2章基本數(shù)據(jù)類型和表達(dá)式
1、提供了哪些基本數(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ù))可以通過“(類型名)”來
計(jì)算。
2,下面哪一些是合法的字面常量,它們的類型是什么?
-5.23,150,-25,105,20
.20,e5,15,-0.0e5,'\n'
-000,'A','5','3.14',
答:字面常量是指在程序中直接寫出常量值的常量。-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'
字符串常量:"
3、什么是符號(hào)常量?符號(hào)常量的優(yōu)點(diǎn)是什么?
答:符號(hào)常量是指有名字的常量,在程序中通過常量的名字來使用這些常量。程序中使用符號(hào)
常量有以下優(yōu)點(diǎn):
1)增加程序易讀性
2)提高程序?qū)ΤA渴褂玫囊恢滦?/p>
3)增強(qiáng)程序的易維護(hù)性
4、如何理解變量?變量定義和聲明的作用是什么?
答:在程序中,其值可以改變的量稱為變量。變量可以用來表示可變的數(shù)據(jù)。
程序中使用到的每個(gè)變量都要有定義。變量定義指出變量的類型和變量名,另外還可以為
變量提供一個(gè)初值。
中使用變量之前,必須對(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)換?
(1)3/5*12.3
(2)'a'+10*5.2
(3)123.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é)果做加法。
8、將下列公式表示成的表達(dá)式:
(1)士廣(可利用標(biāo)準(zhǔn)庫中的求平方根的函數(shù):便)
(2)Js(s-a)(s-b)(s-c)
答:1)(-1*(b*4*a*c))/(2*a)
2)(s*()*()*0)
3)((a*b)/(c*d))*(3/(1+((2.5))))+(4**r*r*3)
9、寫出下列條件的表達(dá)式
(1)i能被j整除。
(2)為字母字符。
(3)m為偶數(shù)。
(4)n是小于100的奇數(shù)。
(5)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)可以不用判斷
10、在你的計(jì)算機(jī)上運(yùn)行下面的程序:
()
{3.3,1.1;
7
?i?;
0;
}
結(jié)果與你預(yù)期的是否相符?如果不符,請(qǐng)解釋它的原因。
答:運(yùn)行結(jié)果為2。由于十進(jìn)制小數(shù)3.3和1.1無法用型精確表示。通過查看結(jié)果內(nèi)存內(nèi)的內(nèi)容,
最終結(jié)果比3.0略小,所以強(qiáng)制轉(zhuǎn)換成型后結(jié)果為2。
11、不引進(jìn)第三個(gè)變量,如何交換兩個(gè)整型變量的值?
答:方法一:
a;
Ab;
Aa;
方法二:
12、舉例說明把類型轉(zhuǎn)成類型可能會(huì)丟失精度。
答:如果型與型都是4個(gè)字節(jié),由于在型的數(shù)據(jù)表示中,有若干位用來表示指數(shù),因此,尾數(shù)
的位數(shù)不到4個(gè)字節(jié)(根據(jù)標(biāo)準(zhǔn),只有23個(gè)二進(jìn)制位)。如果一個(gè)型的數(shù)大于23位(二進(jìn)制),
則無法用型精確表示。例如:
0x01000001;
;的最后一位"1"不是被截掉就是被舍入!
?X??(30)?y?;
第3章程序的流程控制一一語句
1、編寫一個(gè)程序,將華氏溫度轉(zhuǎn)換為攝氏溫度。轉(zhuǎn)換公式為:
C=-(32),其中,c為攝氏溫度,f為華氏溫度
9
解:
<>
0
{C,f;
?":;
?f;
c=(f-32)*5/9;
?":"?c?;
0;
)
2、編寫一個(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。
解:
<>
0
noon;
?°a24:"<<;
?";?;
(<0>23)
{?"!M?;
-1;
)
(>12)
{-12;
noon=
)
noon='a';
?°:“;?;
(<0>59)
{?n!n?;
-1;
)
??"12:"???;
(noon*p')
?,H,?;
?""?;
0;
}
3、編寫一個(gè)程序,分別按正向和逆向輸出小寫字母a
解:
<>
0
(C;
('a';c<='z';)
?c?"";
?;
('z<;c>='a';)
?c?"";
?;
0;
4、編寫一個(gè)程序,從鍵盤輸入一個(gè)正整數(shù),判斷該正整數(shù)為幾位數(shù),并輸出其位數(shù)。
解:
<>
0
{;
=0;
(1)
{?"(
?;
(<=0)
?"!..."?;
(0)
{=/10;
)
?":"??;
0;
)
5、編寫一個(gè)程序,對(duì)輸入的一個(gè)算術(shù)表達(dá)式(以字符#結(jié)束),檢查圓括號(hào)配對(duì)情況。輸出:
配對(duì)、多左括號(hào)或多右括號(hào)。
解:
<>
0
{0;
?":;
(?;?)
{('(')
('),)
(0)
?"配對(duì)!"《;
(>0)
?"多左括號(hào)!”<<;
?"多右括號(hào)!”<<;
0;
)
6、編寫一個(gè)程序,輸入一個(gè)字符串(以字符#結(jié)束),對(duì)其中的“>=”進(jìn)行計(jì)數(shù)。
解:
<>
0
{0;
1='\0'2;
?"a(#):"?;
(?2;2'#';?2)
{(21
1=2;
}
?">=:"??;
0;
)
7、假定郵寄包裹的計(jì)費(fèi)標(biāo)準(zhǔn)如下(重量在檔次之間時(shí)往上一擋靠):
重量(克)收費(fèi)(元)
155
309
4512
6014(每滿1000公里加收1元)
60以上15(每滿1000公里加收2元)
編寫一個(gè)程序,輸入包裹重量和郵寄距離,計(jì)算并輸出收費(fèi)數(shù)額。
解:
<>
0
?;
(<=0)
?"!"?;
(<=15)
=5;
(<=30)
=9;
(<=45)
=12;
(;
?":"?;
?;
(<=0)
?"!"?;
{1000;
(<=60)
=14+();
=15+()*2;
)
}
??;
0;
)
8、編寫一個(gè)程序,計(jì)算圓周率??衫霉?
直到最后一項(xiàng)的絕對(duì)值小于103
解:
<>
<>
0
{1.00.0;
1,1;
(0>=18)
(;
*=-1;
i2;
=()i;
}
?⑻?*4?;
0;
)
9、編寫一個(gè)程序,求所有這樣的三位數(shù),它們等于它們的各位數(shù)字的立方和。例如:
153=13+33+53
解:
<>
0
{(n=100;n<=999;)
{,k;
i=100;百位數(shù)字
j=100/10;十位數(shù)字
k=10;個(gè)位數(shù)字
(ni*i**j**k*k)
?n?;
0;
或
<>
0
{(1;i<=9;)
{*100*i*i;
(0;j<=9;)
{nl*101*j*j;
(0;k<=9;)
{(nlml*k*k)
?nl?;
0;
10、編寫一個(gè)程序,求a和b的最大公約數(shù)。
解:
<>
{a,b;
?"a,b:"?;
?a?b;
(a>b);
(c>0)
{(00);
?c?;
0;
)
或
<>
0
{a,b;
?"a,b:H;
?a?b;
c;
{c=*();
a=b;
b=c;
}(c0);
?a?;
0;
11、編寫一個(gè)程序,輸出十進(jìn)制乘法表。
1239
11239
224618
336927
99182781
解:
<>
0
{(i=o;i<10;)
{(i0)
?i;
?"\t";
(j=l;j<10;)
(i*j0)
?i*j?"\t";
?j?"\t";
?;
}
0;
12、將下面的循環(huán)重寫為等價(jià)的循環(huán)。
(0;i<)
([i]'?');
解:
i=0;
(i<)
{([i]'?');
13、說明下面的三個(gè)程序可以用圖3-6中的三種控制結(jié)構(gòu)來表示。
si
s2
csi
c2
s2
第4章過程抽象一一函數(shù)
1、簡述子程序的作用。
答:子程序是有名字的一段程序代碼,它通常完成一個(gè)獨(dú)立的(子)功能。在程序的其他地方
通過子程序的名字來使用它們。除了能減少程序代碼外,采用子程序的主要作用是實(shí)現(xiàn)過
程抽象,使用者只需知道子程序的功能,而不需要知道它是如何實(shí)現(xiàn)的,這有利于大型、
復(fù)雜程序的設(shè)計(jì)和理解。
2、簡述局部變量的作用。
答: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、簡述變量的生存期和標(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能被訪問的程序段。在中,根據(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、下面的聲明中哪一些是定義性聲明?這些定義性聲明的非定義性聲明是什么?
(1)1;
<2)(){*;}
(3)*;
(4);
(5)*(*)((*)(*)**);
答:1)是。非定義性聲明:i;
2)是。非定義性聲明:();
3)是。非定義性聲明:*;
4)不是。
5)是。非定義性聲明:*(*)((*)(*)**);
6、下面的宏1和函數(shù)2相比,各有什么優(yōu)缺點(diǎn)?
1<X)((X)*(X)*(X))
2(x){x*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ì)于:a;當(dāng)a的值很大時(shí),1(a)得不到正確結(jié)果!(因?yàn)榻Y(jié)果類型為,而如果a*a*a
的結(jié)果超出了型的范圍,則結(jié)果將會(huì)截?cái)啵?
7、編寫一個(gè)函數(shù)(),它計(jì)算整數(shù)n的從右向左的第k個(gè)數(shù)字。例如:
(123456,3)=4
(1234,5)=0
答:(k)
{(1;i<k;)
n=10;
10;
)
8、分別用函數(shù)實(shí)現(xiàn)習(xí)題3.8中的第1、4、7和10題的程序功能。
答:第1題:
(x)
(
(32)*5/9;
)
第4題:
0
{=0;
(<0)=-;
(0)
{=/10;
第7題:
)
0;
(<=15)5;
(<=30)9;
(<=45)12;
(<=60)14+()(1000);
15+()(1000)*2;
第10題:
a,b)
>;
(>0)
((0)(0))
9、寫出下面程序的執(zhí)行結(jié)果:
(12)
1;
(1)(2);
{?(8);
?,,1??;
0;
答:21,41
10、分別寫出計(jì)算多項(xiàng)式(x)值的迭代和遞歸函數(shù)。(x)定義如下:
Ho(x)=1
Hi(x)=2x
(x)=2xi(x)-2(1)2(x)(n>l)
答:
0;迭代方法
0;遞歸方法
0
{3;與X可自行指定
3.14;
?()?
?()?;
(x)
{(0)
1;
(1)
2*x;
{l=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);
IK寫出計(jì)算函數(shù)。值的遞歸函數(shù)。()定義如下(m2020):
(0)=1
(m,0)=(1,1)
0=(1(D)(m>0,n>0)
答:
(n)
{(0)
1;
(0)
(1,1);
(1(1));
12、根據(jù)下圖寫一個(gè)函數(shù):(n);用于計(jì)算從結(jié)點(diǎn)1到結(jié)點(diǎn)n(n大于1)共有多少條不同的路
答:
(n)
{(1)1;
(2)1;
(3)2;
(20)
⑴⑵⑶;
(1)(2);
13、編程解決下面的問題:若一頭小母牛,從出生起第四個(gè)年頭開始每年生一頭母牛,按此規(guī)律,
第n年有多少頭母牛?
答:除了第一年到第三年外,每一年的母牛數(shù)應(yīng)該是上一年的母牛數(shù)加上三年前的母牛數(shù)(現(xiàn)在它們是第四年
了,要生小牛了!)
f(n)
{(123)1;
f(3)(1);
14、假設(shè)有三個(gè)重載的函數(shù):
0;
0;
();
對(duì)下面的函數(shù)調(diào)用,指出它們分別調(diào)用了哪一個(gè)重載函數(shù);如果有歧義,指出導(dǎo)致歧義的
重載函數(shù)定義。
('c',3.0);
(3LZ3);
("",3.0);
(3L,'c');
(,3);
答:
('c',3.0);與匹配
(3L,3);與();匹配
("",3.0);沒有與之匹配的函數(shù)
(3L,七,);與();和();均能匹配
(,3);與();和();均能匹配
15、下面的函數(shù)定義為什么是正確的?在函數(shù)f中如何區(qū)分(使用)它們?
f0
}
答:兩個(gè)f的作用域不一樣,f()中的f為全局作用域,f;中的f為局部作用域。在函數(shù)f中如
果使用局部變量,則用f;如果使用函數(shù)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ù)的源文件中用文件包含命令把該頭文件包含進(jìn)來。由于內(nèi)聯(lián)
函數(shù)名具有文件作用域,因此,不會(huì)出現(xiàn)重復(fù)定義問題。
17、用循環(huán)實(shí)現(xiàn)錯(cuò)誤!未指定書簽。中的輾轉(zhuǎn)相除法計(jì)算最大公約數(shù)。
答:
(X,y)
{(0)
(;
y=;
x=t;
}
X;
}
第5章構(gòu)造數(shù)據(jù)類型
1、枚舉類型有什么好處?對(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、指針類型主要用于什么場合?引用類型與指針類型相比,其優(yōu)勢在哪里?
答:指針類型主要用于參數(shù)傳遞和對(duì)動(dòng)態(tài)變量的訪問。在中,指針類型還用于訪問數(shù)組元素,以提高
訪問效率。
引用類型與指針類型都可以實(shí)現(xiàn)通過一個(gè)變量訪問另一個(gè)變量,但訪問的語法形式不同:引用是
采用直接訪問形式,指針則采用間接訪問形式。在作為函數(shù)參數(shù)類型時(shí),引用類型參數(shù)的實(shí)參是一個(gè)
變量,而指針類型參數(shù)的實(shí)參是一個(gè)變量的地址。
除了在定義時(shí)指定的被引用變量外,引用類型變量不能再引用其他變量;而指針變量定義后可以
指向其他同類型的變量。因此,引用類型比指針類型要安全。
引用類型的間接訪問對(duì)使用者而言是透明的。
3、寫出下面程序的運(yùn)行結(jié)果:
f(y)
{y=x+y;
x=y%3;
?x?'\tz?y?;
}
0
{10,19;
f0;
?X?'\t'?y?;
f();
?x?、\t'?y?;
0;
答:229
102
220
22
4、從鍵盤輸入某個(gè)星期每一天的最高和最低溫度,然后計(jì)算該星期的平均最低和平均最高溫度并輸出
之。
解:
();
0
{,/。,0;
(d=;d<=;()(1))
{?,?
{?Mn;;)
{?";}
{?H";;}
{?n";;)
{?,,H;;}
{?H";;)
{?;}
?n,s():H?;
??;
??7.0?
??7.0?
5、編寫一個(gè)函數(shù),判斷其型參數(shù)值是否是回文數(shù)?;匚臄?shù)是指從正向和反向兩個(gè)方向讀數(shù)字都一樣,
例如,9783879就是一個(gè)回文數(shù)。
解:
()
{[100],0;
(0)
{[i]=%10;
10;
)
(j=0;j<=2;)
{([j][ID
)
r
}
6、編寫一個(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]=di;
[1]=c;
7、編寫一個(gè)函數(shù)計(jì)算一元二次方程的根。要求:方程的系數(shù)和根均用參數(shù)傳遞機(jī)制來傳遞。
解:
(a,b,c,1,2)
{i=b*4*a*c;
(i>=0)
{xl=((i))/(2*a);
x2=(0(i))/(2*a);
1;
}
{xl=(0)/(2*a);
x2=(0)/(2*a);
0;
8、編寫一個(gè)程序,從鍵盤輸入一個(gè)字符串,分別統(tǒng)計(jì)其中的大寫字母、小寫字母以及數(shù)字的個(gè)數(shù)。
解:
<>
{[100];
?Ma:\nH;
?;
0,0,0;
(0;[i])
{([i]>=[i]<=Z)
([i]>='a1[i]<='zT)
([i]>='01[i]<='91)
??1\t*??1\t1;
0;
021
9、設(shè)有一個(gè)矩陣:102,現(xiàn)把它放在一個(gè)二維數(shù)組a中。寫出執(zhí)行下面的語句之后a的值:
120
(0;i<=2;)
(0;j<=2;)
a[i][j]=a[a[i][j]][a[j][i]];
解:020
200
220
10、實(shí)現(xiàn)下面的數(shù)組元素交換位置函數(shù):
(a[],m,n);
該函數(shù)能夠把數(shù)組a的前m個(gè)元素與后n個(gè)元素交換位置,即,
交換前:ai2/12
交換后:12,^12
要求:除數(shù)組a外,不得引入其它數(shù)組。
解:
(a[]zm,n);
{(0;i<m;)
{t=a[0];
(1;j<;)
a[l]=a[j];
A[l]t;
)
}
11、編寫一個(gè)程序,計(jì)算一個(gè)矩陣的鞍點(diǎn)。矩陣的鞍點(diǎn)是指矩陣中的一個(gè)位置,該位置上的元素在其
所在的行上最大、列上最小。(一個(gè)矩陣也可能沒有鞍點(diǎn)。)
M3
N3
0
{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<<I'?j?;
0;
)
)
)
?”沒有鞍點(diǎn)\n”;
0;
12、編程實(shí)現(xiàn):在一個(gè)由NXN(N為大于1的奇數(shù))個(gè)方格組成的方陣中,填入1、2、3、…、N2
各個(gè)數(shù),使得每一行、每一列以及兩個(gè)對(duì)角線上數(shù)的和均相等(奇數(shù)幻方問題)。例如,下面是一
個(gè)3X3的幻方:
Fn
Es3
E3
(提示:把1填在第一行最中間的格子中,然后按下面的方法依次來填其它的數(shù):如果當(dāng)前格子
是方陣中最右上角的格子,則把下一個(gè)數(shù)填在下一行的同一列格子中;否則,如果當(dāng)前格子在第一行
上,則把下一個(gè)數(shù)填在下一列的最后一行格子中;否則,如果當(dāng)前格子在最后一列上,則把下一個(gè)數(shù)
填在上一行的第一列格子中;否則,如果當(dāng)前格子的右上角格子里沒有數(shù),則在其中填入下一個(gè)數(shù),
否則把下一個(gè)數(shù)填在下一行的同一列格子中。)
答:
<>
7
N3
a[N][N];
0
(;
(0;i<N;)
(0;j<N;)
a[i][j]=0;
i=0;j=2;
a[i][j]=1;
(2;k<*N;)
{(01)
r
(0)
{i=1;
j=;
)
(1)
(;
j=0;
)
(a[l][1]0)
a[i][j]=k;
)
(0;i<N;)
{(0;j<N;)
?a[i][j]?f\f;
?;
)
0;
)
13、實(shí)現(xiàn)、、、、、以及函數(shù)。
答:
2(s[])
{0;
(*;*P);
n;
}
*2([][])
{*pl;
*p2;
(pl2;*p2pl2)*pl=*p2;
*pl=f\0f;
*2([][]n)
{*pl;
*p2;
(pl2;n0*p2pl2)*pl=*p2;
(n0)*pl='\0';
*2([][])
{*pl;
*p2;
(pl;*pl1\0';pl);
(p2;*p2*\01;pl2)*pl=*p2;
*pl='\0,
*2([][]n)
{*P1;
*p2;
(pl;*plf\0';pl);
(p2;n0*p21\0';pl2)*pl=*p2;
(n0)*pl='\0';
2(sl[]s2[])
f
{(*pllz*p22;*pl*p2'\0;pl2)
{(*pl>*p2)
1;
(*pl<*p2)
-1;
)
(*pl10'*p2
0;
(*pl'\0,)
-1;
1;
}
2(sl[]s2[]n)
{(*pll,*p22;n0*pl1\0**p2'\0';pl2)
{(*pl>*p2)
1;
(*pl<*p2)
-1;
)
(n0*pl10'*p2
0;
(*pi
-i;
i;
)
14、編寫一個(gè)函數(shù)(sl[],s2[]),它從字符串si中刪除所有在s2里出現(xiàn)的字符,函數(shù)返回刪除的字
符個(gè)數(shù)。
解:
(Sl(]zs2[])
{00;
(sl[i]'\0')
{(0;s2[j]'\0'sl[i]2[j];);
(s2[j]'\0?)
{(1;sl[k]'\0f;)
si[1]=si[k];
si[l]=,\0,;
)
15、編寫一個(gè)函數(shù),其原型如下:
(口,
口,
[]);
要求:該函數(shù)能夠完成把字符串中的所有子串都替換成字符串,返回值為替換的次數(shù)。
解:
([][][])
{0,中的當(dāng)前處理位置
0/
0,
(0>=)
{(00)
{(<0)把字符串剩余部分往后移個(gè)位置
{01;剩余部分的字符個(gè)數(shù)+1。\0,)
(0;n>o;)
[()]=[i];
)
(>0)把字符串剩余部分往前移個(gè)位置
{()1剩余部分的字符個(gè)數(shù)+1。\0,)
(;n>0;)
[]=[i];
)
(0;i<;)復(fù)制被替換成的串到
[)=(i);
16、編寫一個(gè)程序,從鍵盤輸入一批學(xué)生的成績信息,每個(gè)學(xué)生的成績信息包括:學(xué)號(hào)、姓名以及8
門課的成績。然后按照平均成績由高到低順序輸出學(xué)生的學(xué)號(hào)、姓名以及平均成績。
解:
<>
{[11];
[9];
[9];
?”請(qǐng)輸入學(xué)生人數(shù):,
>>n;
*[n];創(chuàng)建動(dòng)態(tài)數(shù)組以存放學(xué)生信息。
輸入每個(gè)學(xué)生的信息。
r
(0;i<n;)
(?”學(xué)號(hào):11;
?[i];
?“姓名:”;
?[i];
?“8門課成績:,
[i][8]=0.0;
(0;j<8;)
{?[i][j];
[i][8][i][j];
}
[i][8]8;平均成績
)
根據(jù)平均成績對(duì)學(xué)生信息進(jìn)行排序。
(;i>l;)
(;
(1;j<i;)
{([j][8]>[1][8])
{[jl;
[j]=[1];
[1]=;
0;
)
輸出排序后的學(xué)生信息
(0;i<n;)
{?[i]?\'
?[i]?\'
?[i][8]?;
)
0;
17、下面的交換函數(shù)正確嗎?
x=y;
y=;
)
答:不正確,因?yàn)闉橐妙愋停cx占有相同的空間,當(dāng)執(zhí)行七”操作之后,的值已不是x原來的
值了!按照這個(gè)函數(shù),x和y的值會(huì)相等并且等于y的值,不能實(shí)現(xiàn)將x和y交換的目的。
18、寫一個(gè)函數(shù),它有三個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)一維型數(shù)組,第二個(gè)參數(shù)為數(shù)組元素個(gè)數(shù),第三
個(gè)參數(shù)是一個(gè)函數(shù)指針,它指向帶有一個(gè)型參數(shù)、返回值類型為的函數(shù)。函數(shù)的功能是把數(shù)組的
每個(gè)元素替換成:用它原來的值(作為參數(shù))調(diào)用第三個(gè)參數(shù)所指向的函數(shù)得到的值。
解:
(d[],n,(*)(d))
{(o;i<n;)
d[i]=(*)(d[i]);
19、把在鏈表中插入一個(gè)新結(jié)點(diǎn)的操作寫成一個(gè)函數(shù):
其中,h為表頭指針,a為要插入的結(jié)點(diǎn)的值,(>0)表示插入位置。當(dāng)為0時(shí)表示在
表頭插入;否則,表示在第個(gè)結(jié)點(diǎn)的后面插入。操作成功返回,否則返回。
解:
★/?
);
(*
{*q;
(0)
>=a;
>;
1;
(i<)
{>;
)
0
>=a;
?;
>;
}
)
20、把在鏈表中刪除一個(gè)結(jié)點(diǎn)的操作寫成一個(gè)函數(shù):
*,);
其中,h為表頭指針,a用于存放刪除的結(jié)點(diǎn)的值,(>0)表示刪除結(jié)點(diǎn)的位置。操作
成功返回,否則返回。
解:
);
(*,)
*,*,?
1;
(i<)
(;
>;
)
0
{>;
0
?;
h=>;
delp;
r
)
21、編寫一個(gè)程序,首先建立兩個(gè)集合(從鍵盤輸入集合的元素),然后計(jì)算這兩個(gè)集合的交集、并集
以及差集,最后輸出計(jì)算結(jié)果。要求用鏈表實(shí)現(xiàn)集合的表示。
解:
<>
);
(*x)在h中查找x
{(*;;>)
(>x);
(3x)在h中增加一個(gè)元素
**
>=x;
>=h;
h=p;
*()建立集合
**
f
X;
(?X;X-1;>>x)
((0);
0;
)
h;
(*hl,*h2)集合“并"
*z*P;
生成一個(gè)與hl一樣的集合h
(1;;>)
(>);
把h2加入到h中(去重)
(2;;>)
{((hl>))
(>);
)
h;
,(*hl,*h2)集合"交"
**
r
(*1;;>)
{((h2>))
(>);
)
h;
:(*hl,*h2)集合“差”
**
r
(*1;;>)
{((h2>))
(?;
}
h;
(*h)輸出集合的所有元素
(*;;>)
?>?*';
?;
(*)刪除集合
(h)
{*;
h=>;
P;
)
(,*口)
*1,*2,*3,*4,*5;
1=0;
2=();
3=(12);
4=(12);
5=(12);
(1);
(2);
(3);
(4);
(5);
(1);
(2);
(3);
(4);
(5);
22、在排序算法中,有一種排序算法(插入排序)是:把待排序的數(shù)分成兩個(gè)部分:
其中,A為已排好序的數(shù),B為未排好序的數(shù),初始狀態(tài)下,A中只有一個(gè)元素。該算法依次從B
中取數(shù)插入到A中的相應(yīng)位置,直到B中的數(shù)取完為止。請(qǐng)?jiān)阪湵肀硎旧蠈?shí)現(xiàn)上述的插入排序算
法。
*>;指向B部分的第一個(gè)元素
>=;指向A部分的第一個(gè)元素(初始狀態(tài)下,A部分只有一個(gè)元素)
(q)對(duì)第二部分的元素進(jìn)行循環(huán)
{從B部分取一個(gè)元素
*ql;1指向取到的元素
q=>;從B中去掉一個(gè)元素
循環(huán)在A部分中從頭開始找一個(gè)元素(p指向它),使得(ql->)小于(〉)
S*pl;指向A部分第一個(gè)元素:pl指向P指向的前一個(gè)結(jié)點(diǎn),初始化為空
(pql->>>)
{pl=P;
p=>;
(pl)
ql->=p;
pl->=ql
ql->=h;
h=ql;
23、下面的求n!的函數(shù)有什么問題?
()
{1;
(n>1)
{f*=n;
f;
}
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國河大音像版初中信息技術(shù)八年級(jí)上冊(cè)第二章第二節(jié)《仿真實(shí)驗(yàn)與機(jī)器人仿真系統(tǒng)》教學(xué)實(shí)錄
- 2024年度二手房買賣合同范本(含共有產(chǎn)權(quán)分割約定)3篇
- 四年級(jí)英語下冊(cè) Unit 1 My school(The sixth period)第六課時(shí)教學(xué)實(shí)錄 人教PEP
- Unit 3 Animals Lesson 3(教學(xué)實(shí)錄)-2024-2025學(xué)年人教新起點(diǎn)版英語一年級(jí)上冊(cè)
- 2024年房屋交易補(bǔ)充協(xié)議:附加條款精要版B版
- 2024至2030年中國圓頭臉盆水咀行業(yè)投資前景及策略咨詢研究報(bào)告
- 鋼結(jié)構(gòu)構(gòu)件運(yùn)輸合同
- 2024年度建筑材料購銷合同及相關(guān)責(zé)任規(guī)定
- Module 5 Museums 教學(xué)實(shí)錄 2024-2025學(xué)年外研版九年級(jí)上冊(cè)
- 2024版?zhèn)€人教育貸款合同范本:助力學(xué)子筑夢未來協(xié)議3篇
- 國開2023春計(jì)算機(jī)組網(wǎng)技術(shù)形考任務(wù)二參考答案
- 五年級(jí)上冊(cè)英語人教PEP版課件書面表達(dá)
- 中國常用漢字大全
- PPT:增進(jìn)民生福祉提高人民生活品質(zhì)
- 開具紅字發(fā)票情況說明
- 2022 年奧賽希望杯二年級(jí)培訓(xùn) 100題含答案
- 水利工程建設(shè)匯報(bào)材料(通用3篇)
- 10篇罪犯矯治個(gè)案
- 中央企業(yè)商業(yè)秘密安全保護(hù)技術(shù)指引2015版
- 艾草種植基地建設(shè)項(xiàng)目可行性研究報(bào)告
- 留守兒童一生一檔、聯(lián)系卡
評(píng)論
0/150
提交評(píng)論