版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章概述1-1簡(jiǎn)述計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展歷程。解:迄今為止計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展經(jīng)歷了機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言等階段,C++語(yǔ)言是一種面向?qū)ο蟮木幊陶Z(yǔ)言,也屬于高級(jí)語(yǔ)言。1-2面向?qū)ο蟮木幊陶Z(yǔ)言有哪些特點(diǎn)?解:面向?qū)ο蟮木幊陶Z(yǔ)言與以往各種編程語(yǔ)言有根本的不同,它設(shè)計(jì)的出發(fā)點(diǎn)就是為了能更直接的描述客觀世界中存在的事物以及它們之間的關(guān)系。面向?qū)ο蟮木幊陶Z(yǔ)言將客觀事物看作具有屬性和行為的對(duì)象,通過(guò)抽象找出同一類對(duì)象的共同屬性(靜態(tài)特征)和行為(動(dòng)態(tài)特征),形成類。通過(guò)類的繼承與多態(tài)可以很方便地實(shí)現(xiàn)代碼重用,大大縮短了軟件開(kāi)發(fā)周期,并使得軟件風(fēng)格統(tǒng)一。因此,面向?qū)ο蟮木幊陶Z(yǔ)言使程序能夠比較直接地反問(wèn)題域的本來(lái)面目,軟件開(kāi)發(fā)人員能夠利用人類認(rèn)識(shí)事物所采用的一般思維方法來(lái)進(jìn)行軟件開(kāi)發(fā)。C++語(yǔ)言是目前應(yīng)用最廣的面向?qū)ο蟮木幊陶Z(yǔ)言。1-3什么是結(jié)構(gòu)化程序設(shè)計(jì)方法?這種方法有哪些優(yōu)點(diǎn)和缺點(diǎn)?解:結(jié)構(gòu)化程序設(shè)計(jì)的思路是:自頂向下、逐步求精;其程序結(jié)構(gòu)是按功能劃分為若干個(gè)基本模塊;各模塊之間的關(guān)系盡可能簡(jiǎn)單,在功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成;其模塊化實(shí)現(xiàn)的具體方法是使用子程序。結(jié)構(gòu)化程序設(shè)計(jì)由于采用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開(kāi)發(fā)和維護(hù)。雖然結(jié)構(gòu)化程序設(shè)計(jì)方法具有很多的優(yōu)點(diǎn),但它仍是一種面向過(guò)程的程序設(shè)計(jì)方法,它把數(shù)據(jù)和處理數(shù)據(jù)的過(guò)程分離為相互獨(dú)立的實(shí)體。當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過(guò)程都要進(jìn)行相應(yīng)的修改,每一種相對(duì)于老問(wèn)題的新方法都要帶來(lái)額外的開(kāi)銷,程序的可重用性差。由于圖形用戶界面的應(yīng)用,程序運(yùn)行由順序運(yùn)行演變?yōu)槭录?qū)動(dòng),使得軟件使用起來(lái)越來(lái)越方便,但開(kāi)發(fā)起來(lái)卻越來(lái)越困難,對(duì)這種軟件的功能很難用過(guò)程來(lái)描述和實(shí)現(xiàn),使用面向過(guò)程的方法來(lái)開(kāi)發(fā)和維護(hù)都將非常困難。1-4什么是對(duì)象?什么是面向?qū)ο蠓椒??這種方法有哪些特點(diǎn)?解:從一般意義上講,對(duì)象是現(xiàn)實(shí)世界中一個(gè)實(shí)際存在的事物,它可以是有形的,也可以是無(wú)形的。對(duì)象是構(gòu)成世界的一個(gè)獨(dú)立單位,它具有自己的靜態(tài)特征和動(dòng)態(tài)特征。面向?qū)ο蠓椒ㄖ械膶?duì)象,是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體,它是用來(lái)構(gòu)成系統(tǒng)的一個(gè)基本單位,由一組屬性和一組行為構(gòu)成。面向?qū)ο蟮姆椒▽?shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存、不可分離的整體--對(duì)象。對(duì)同類型對(duì)象抽象出其共性,形成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法進(jìn)行處理。類通過(guò)一個(gè)簡(jiǎn)單的外部接口,與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過(guò)消息進(jìn)行通訊。這樣,程序模塊間的關(guān)系更為簡(jiǎn)單,程序模塊的獨(dú)立性、數(shù)據(jù)的安全性就有了良好的保障。通過(guò)實(shí)現(xiàn)繼承與多態(tài)性,還可以大大提高程序的可重用性,使得軟件的開(kāi)發(fā)和維護(hù)都更為方便。面向?qū)ο蠓椒ㄋ鶑?qiáng)調(diào)的基本原則,就是直接面對(duì)客觀存在的事物來(lái)進(jìn)行軟件開(kāi)發(fā),將人們?cè)谌粘I钪辛?xí)慣的思維方式和表達(dá)方式應(yīng)用在軟件開(kāi)發(fā)中,使軟件開(kāi)發(fā)從過(guò)分專業(yè)化的方法、規(guī)則和技巧中回到客觀世界,回到人們通常的思維。1-5什么叫做封裝?解:封裝是面向?qū)ο蠓椒ǖ囊粋€(gè)重要原則,就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。1-6面向?qū)ο蟮能浖こ贪男┲饕獌?nèi)容?解:面向?qū)ο蟮能浖こ淌敲嫦驅(qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用,它包括面向?qū)ο蟮姆治觯∣OA)、面向?qū)ο蟮脑O(shè)計(jì)(OOD)、面向?qū)ο蟮木幊蹋∣OP)、面向?qū)ο蟮臏y(cè)試(OOT)和面向?qū)ο蟮能浖S護(hù)(OOSM)等主要內(nèi)容。1-7簡(jiǎn)述計(jì)算機(jī)內(nèi)部的信息可分為幾類?解:計(jì)算機(jī)內(nèi)部的信息可以分成控制信息和數(shù)據(jù)信息二大類;控制信息可分為指令和控制字兩類;數(shù)據(jù)信息可分為數(shù)值信息和非數(shù)值信息兩類。1-8什么叫二進(jìn)制?使用二進(jìn)制有何優(yōu)點(diǎn)和缺點(diǎn)?解:二進(jìn)制是基數(shù)為2,每位的權(quán)是以2為底的冪的進(jìn)制,遵循逢二進(jìn)一原則,基本符號(hào)為0和1。采用二進(jìn)制碼表示信息,有如下幾個(gè)優(yōu)點(diǎn):1.易于物理實(shí)現(xiàn);2.二進(jìn)制數(shù)運(yùn)算簡(jiǎn)單;3.機(jī)器可靠性高;4.通用性強(qiáng)。其缺點(diǎn)是它表示數(shù)的容量較小,表示同一個(gè)數(shù),二進(jìn)制較其他進(jìn)制需要更多的位數(shù)。1-9請(qǐng)將以下十進(jìn)制數(shù)值轉(zhuǎn)換為二進(jìn)制和十六進(jìn)制補(bǔ)碼:(1)2(2)9(3)93(4)-32(5)65535(6)-1解:(1)(2)10=(10)2=(2)16(2)(9)10=(1001)2=(9)16(3)(93)10=(1011101)2=(5D)16(4)(-32)10=(11100000)2=(E0)16(5)(65535)10=(1111111111111111)2=(FFFF)16(6)(-1)10=(1111111111111111)2=(FFFF)161-10請(qǐng)將以下數(shù)值轉(zhuǎn)換為十進(jìn)制:(1)(1010)2(2)(10001111)2(3)(0101111111000011)2(4)(7F)16(5)(2D3E)16(6)(F10E)16解:(1)(1010)2=(10)10(2)(10001111)2=(143)10(3)(0101111111000011)2=(24515)10(4)(7F)16=(127)10(5)(2D3E)16=(11582)10(6)(F10E)16=(61710)101-11簡(jiǎn)要比較原碼、反碼、補(bǔ)碼等幾種編碼方法。解:原碼:將符號(hào)位數(shù)字化為0或1,數(shù)的絕對(duì)值與符號(hào)一起編碼,即所謂"符號(hào)──絕對(duì)值表示"的編碼。正數(shù)的反碼和補(bǔ)碼與原碼表示相同。負(fù)數(shù)的反碼與原碼有如下關(guān)系:符號(hào)位相同(仍用1表示),其余各位取反(0變1,1變0)。補(bǔ)碼由該數(shù)反碼的最末位加1求得。第二章C++簡(jiǎn)單程序設(shè)計(jì)2-1C++語(yǔ)言有那些主要特點(diǎn)和優(yōu)點(diǎn)?解:C++語(yǔ)言的主要特點(diǎn)表現(xiàn)在兩個(gè)方面,一是全面兼容C,二是支持面向?qū)ο蟮姆椒ā++是一個(gè)更好的C,它保持了C的簡(jiǎn)潔、高效、接近匯編語(yǔ)言、具有良好的可讀性和可移植性等特點(diǎn),對(duì)C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充,因此C++比C更安全,C++的編譯系統(tǒng)能檢查出更多的類型錯(cuò)誤。C++語(yǔ)言最重要的特點(diǎn)是支持面向?qū)ο蟆?-2下列標(biāo)識(shí)符哪些是合法的?Program,,_lock,test2,3in1,@mail,A_B_C_D解:Program,_lock,test2,A_B_C_D是合法的標(biāo)識(shí)符,其它的不是。2-3例2.1中每條語(yǔ)句的作用是什么?#include<iostream.h>voidmain(void){cout<<"Hello!\n";cout<<"Welcometoc++!\n";}解:#include<iostream.h>//指示編譯器將文件iostream.h中的代碼//嵌入到該程序中該指令所在的地方voidmain()//主函數(shù)名,void表示函數(shù)沒(méi)有返回值{//函數(shù)體標(biāo)志cout<<"Hello!\n";//輸出字符串Hello!到標(biāo)準(zhǔn)輸出設(shè)備(顯示器)上。cout<<"Welcometoc++!\n";//輸出字符串Welcometoc++!}在屏幕輸出如下:Hello!Welcometoc++!2-4使用關(guān)鍵字const而不是#define語(yǔ)句的好處有哪些?解:const定義的常量是有類型的,所以在使用它們時(shí)編譯器可以查錯(cuò);而且,這些變量在調(diào)試時(shí)仍然是可見(jiàn)的。2-5請(qǐng)寫(xiě)出C++語(yǔ)句聲明一個(gè)常量PI,值為3.1416;再聲明一個(gè)浮點(diǎn)型變量a,把PI的值賦給a。解:constfloatPI=3.1416;floata=PI;2-6在下面的枚舉類型中,Blue的值是多少?enumCOLOR{WHITE,BLACK=100,RED,BLUE,GREEN=300};解:Blue=1022-7注釋有什么作用?C++中有哪幾種注釋的方法?他們之間有什么區(qū)別?解:注釋在程序中的作用是對(duì)程序進(jìn)行注解和說(shuō)明,以便于閱讀。編譯系統(tǒng)在對(duì)源程序進(jìn)行編譯時(shí)不理會(huì)注釋部分,因此注釋對(duì)于程序的功能實(shí)現(xiàn)不起任何作用。而且由于編譯時(shí)忽略注釋部分,所以注釋內(nèi)容不會(huì)增加最終產(chǎn)生的可執(zhí)行程序的大小。適當(dāng)?shù)厥褂米⑨?,能夠提高程序的可讀性。在C++中,有兩種給出注釋的方法:一種是延用C語(yǔ)言方法,使用"/*"和"*/"括起注釋文字。另一種方法是使用"http://",從"http://"開(kāi)始,直到它所在行的行尾,所有字符都被作為注釋處理。2-8什么叫做表達(dá)式?x=5+7是一個(gè)表達(dá)式嗎?它的值是多少?解:任何一個(gè)用于計(jì)算值的公式都可稱為表達(dá)式。x=5+7是一個(gè)表達(dá)式,它的值為12。2-9下列表達(dá)式的值是多少?1.201/42.201%43.201/4.0解:1.502.13.50.252-10執(zhí)行完下列語(yǔ)句后,a、b、c三個(gè)變量的值為多少?a=30;b=a++;c=++a;解:a:32;b:30;c:32;2-11在一個(gè)for循環(huán)中,可以初始化多個(gè)變量嗎?如何實(shí)現(xiàn)?解:在for循環(huán)設(shè)置條件的第一個(gè)";"前,用,分隔不同的賦值表達(dá)式。例如:for(x=0,y=10;x<100;x++,y++)2-12執(zhí)行完下列語(yǔ)句后,n的值為多少?intn;for(n=0;n<100;n++)解:n的值為1002-13寫(xiě)一條for語(yǔ)句,計(jì)數(shù)條件為n從100到200,步長(zhǎng)為2;然后用while和do…while語(yǔ)句完成同樣的循環(huán)。解:for循環(huán):for(intn=100;n<=200;n+=2);while循環(huán):intx=100;while(n<=200)n+=2;do…while循環(huán):intn=100;do{n+=2;}while(n<=200);2-14if(x=3)和if(x==3)這兩條語(yǔ)句的差別是什么?解:語(yǔ)句if(x=3)把3賦給x,賦值表達(dá)式的值為true,作為if語(yǔ)句的條件;語(yǔ)句if(x==3)首先判斷x的值是否為3,若相等條件表達(dá)式的值為ture,否則為false。2-15什么叫做作用域?什么叫做局部變量?什么叫做全局變量,如何使用全局變量?解:作用域是一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。局部變量,一般來(lái)講就是具有塊作用域的變量;全局變量,就是具有文件作用域的變量。2-16已知x、y兩個(gè)變量,寫(xiě)一條簡(jiǎn)單的if語(yǔ)句,把較小的的值賦給原本值較大的變量。解:if(x>y)x=y;else//y>x||y==xy=x;2-17修改下面這個(gè)程序中的錯(cuò)誤,改正后它的運(yùn)行結(jié)果是什么?#include<iostream.h>voidmain()intiintj;i=10;/*給i賦值j=20;/*給j賦值*/cout<<"i+j=<<i+j;/*輸出結(jié)果*/return0;}解:改正:#include<iostream.h>intmain(){inti;intj;i=10;//給i賦值j=20;/*給j賦值*/cout<<"i+j="<<i+j;/*輸出結(jié)果*/return0;}程序運(yùn)行輸出:i+j=302-18編寫(xiě)一個(gè)程序,運(yùn)行時(shí)提示輸入一個(gè)數(shù)字,再把這個(gè)數(shù)字顯示出來(lái)。解:源程序:#include<iostream.h>intmain(){inti;cout<<"請(qǐng)輸入一個(gè)數(shù)字:";cin>>i;cout<<"您輸入一個(gè)數(shù)字是"<<i<<endl;return0;}程序運(yùn)行輸出:請(qǐng)輸入一個(gè)數(shù)字:5您輸入一個(gè)數(shù)字是52-19C++有哪幾種數(shù)據(jù)類型?簡(jiǎn)述其值域。編程顯示你使用的計(jì)算機(jī)中的各種數(shù)據(jù)類型的字節(jié)數(shù)。解:源程序:#include<iostream.h>intmain(){cout<<"Thesizeofanintis:\t\t"<<sizeof(int)<<"bytes.\n";cout<<"Thesizeofashortintis:\t"<<sizeof(short)<<"bytes.\n";cout<<"Thesizeofalongintis:\t"<<sizeof(long)<<"bytes.\n";cout<<"Thesizeofacharis:\t\t"<<sizeof(char)<<"bytes.\n";cout<<"Thesizeofafloatis:\t\t"<<sizeof(float)<<"bytes.\n";cout<<"Thesizeofadoubleis:\t"<<sizeof(double)<<"bytes.\n";return0;}程序運(yùn)行輸出:Thesizeofanintis:4bytes.Thesizeofashortintis:2bytes.Thesizeofalongintis:4bytes.Thesizeofacharis:1bytes.Thesizeofafloatis:4bytes.Thesizeofadoubleis:8bytes.2-20打印ASCII碼為32~127的字符。解:#include<iostream.h>intmain(){for(inti=32;i<128;i++)cout<<(char)i;return0;}程序運(yùn)行輸出:!"#$%G'()*+,./0123456789:;<>?@ABCDEFGHIJKLMNOP_QRSTUVWXYZ[\]^'abcdefghijklmnopqrstuvwxyz<|>~s2-21運(yùn)行下面的程序,觀察其輸出,與你的設(shè)想是否相同?#include<iostream.h>intmain(){unsignedintx;unsignedinty=100;unsignedintz=50;x=y-z;cout<<"Differenceis:"<<x;x=z-y;cout<<"\nNowdifferenceis:"<<x<<endl;return0;}解:程序運(yùn)行輸出:Differenceis:50Nowdifferenceis:4294967246注意,第二行的輸出并非-50,注意x、y、z的數(shù)據(jù)類型。2-22運(yùn)行下面的程序,觀察其輸出,體會(huì)i++與++i的差別。#include<iostream.h>intmain(){intmyAge=39;//initializetwointegersintyourAge=39;cout<<"Iam:"<<myAge<<"yearsold.\n";cout<<"Youare:"<<yourAge<<"yearsold\n";myAge++;//postfixincrement++yourAge;//prefixincrementcout<<"Oneyearpasses...\n";cout<<"Iam:"<<myAge<<"yearsold.\n";cout<<"Youare:"<<yourAge<<"yearsold\n";cout<<"Anotheryearpasses\n";cout<<"Iam:"<<myAge++<<"yearsold.\n";cout<<"Youare:"<<++yourAge<<"yearsold\n";cout<<"Let'sprintitagain.\n";cout<<"Iam:"<<myAge<<"yearsold.\n";cout<<"Youare:"<<yourAge<<"yearsold\n";return0;}解:程序運(yùn)行輸出:Iam39yearsoldYouare39yearsoldOneyearpassesIam40yearsoldYouare40yearsoldAnotheryearpassesIam40yearsoldYouare41yearsoldLet'sprintitagainIam41yearsoldYouare41yearsold2-23什么叫常量?什么叫變量?解:所謂常量是指在程序運(yùn)行的整個(gè)過(guò)程中其值始終不可改變的量,除了用文字表示常量外,也可以為常量命名,這就是符號(hào)常量;在程序的執(zhí)行過(guò)程中其值可以變化的量稱為變量,變量是需要用名字來(lái)標(biāo)識(shí)的。2-24變量有哪幾種存儲(chǔ)類型?解:變量有以下幾種存儲(chǔ)類型:auto存儲(chǔ)類型:采用堆棧方式分配內(nèi)存空間,屬于一時(shí)性存儲(chǔ),其存儲(chǔ)空間可以被若干變量多次覆蓋使用;register存儲(chǔ)類型:存放在通用寄存器中;extern存儲(chǔ)類型:在所有函數(shù)和程序段中都可引用;static存儲(chǔ)類型:在內(nèi)存中是以固定地址存放的,在整個(gè)程序運(yùn)行期間都有效。2-25寫(xiě)出下列表達(dá)式的值:1.2<3&&6<92.!(4<7)3.!(3>5)||(6<2)解:1.true2.false3.true2-26若a=1,b=2,c=3,下列各式的結(jié)果是什么?1.a|b-c2.a^b&-c3.a&b|c4.a|b&c解:1.-12.13.34.32-27若a=1,下列各式的結(jié)果是什么?1.!a|a2.~a|a3.a^a4.a>>2解:1.12.-13.04.02-28編寫(xiě)一個(gè)完整的程序,實(shí)現(xiàn)功能:向用戶提問(wèn)"現(xiàn)在正在下雨嗎?",提示用戶輸入Y或N。若輸入為Y,顯示"現(xiàn)在正在下雨。";若輸入為N,顯示"現(xiàn)在沒(méi)有下雨。";否則繼續(xù)提問(wèn)"現(xiàn)在正在下雨嗎?"解:源程序:#include<iostream.h>#include<stdlib.h>voidmain(){charflag;while(1){cout<<"現(xiàn)在正在下雨嗎?(YesorNo):";cin>>flag;if(toupper(flag)=='Y'){cout<<"現(xiàn)在正在下雨。";break;}if(toupper(flag)=='N'){cout<<"現(xiàn)在沒(méi)有下雨。";break;}}}程序運(yùn)行輸出:現(xiàn)在正在下雨嗎?(YesorNo):x現(xiàn)在正在下雨嗎?(YesorNo):l現(xiàn)在正在下雨嗎?(YesorNo):q現(xiàn)在正在下雨嗎?(YesorNo):n現(xiàn)在沒(méi)有下雨。或:現(xiàn)在正在下雨嗎?(YesorNo):y現(xiàn)在正在下雨。2-29編寫(xiě)一個(gè)完整的程序,運(yùn)行時(shí)向用戶提問(wèn)"你考試考了多少分?(0~100)",接收輸入后判斷其等級(jí),顯示出來(lái)。規(guī)則如下:解:#include<iostream.h>voidmain(){inti,score;cout<<"你考試考了多少分?(0~100):";cin>>score;if(score>100||score<0)cout<<"分?jǐn)?shù)值必須在0到100之間!";else{i=score/10;switch(i){case10:case9:cout<<"你的成績(jī)?yōu)閮?yōu)!";break;case8:cout<<"你的成績(jī)?yōu)榱迹?;break;case7:case6:cout<<"你的成績(jī)?yōu)橹校?;break;default:cout<<"你的成績(jī)?yōu)椴睿?;}}}程序運(yùn)行輸出:你考試考了多少分?(0~100):85你的成績(jī)?yōu)榱迹?-30(1)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的菜單程序,運(yùn)行時(shí)顯示"Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:"提示用戶輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、S時(shí)分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序。"輸入為Q時(shí)程序結(jié)束。要求使用if…else語(yǔ)句進(jìn)行判斷,用break、continue控制程序流程。解:#include<iostream.h>#include<stdlib.h>voidmain(){charchoice,c;while(1){cout<<"Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:";cin>>c;choice=toupper(c);if(choice=='A'){cout<<"數(shù)據(jù)已經(jīng)增加."<<endl;continue;}elseif(choice=='D'){cout<<"數(shù)據(jù)已經(jīng)刪除."<<endl;continue;}elseif(choice=='S'){cout<<"數(shù)據(jù)已經(jīng)排序."<<endl;continue;}elseif(choice=='Q')break;}}程序運(yùn)行輸出:Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:a數(shù)據(jù)已經(jīng)增加.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:d數(shù)據(jù)已經(jīng)刪除.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:s數(shù)據(jù)已經(jīng)排序.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:q(2)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的菜單程序,運(yùn)行時(shí)顯示"Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:"提示用戶輸入,A表示增加,D表示刪除,S表示排序,Q表示退出,輸入為A、D、S時(shí)分別提示"數(shù)據(jù)已經(jīng)增加、刪除、排序。"輸入為Q時(shí)程序結(jié)束。要求使用Switch語(yǔ)句。解:源程序:#include<iostream.h>#include<stdlib.h>voidmain(){charchoice;while(1){cout<<"Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:";cin>>choice;switch(toupper(choice)){case'A':cout<<"數(shù)據(jù)已經(jīng)增加."<<endl;break;case'D':cout<<"數(shù)據(jù)已經(jīng)刪除."<<endl;break;case'S':cout<<"數(shù)據(jù)已經(jīng)排序."<<endl;break;case'Q':exit(0);break;default:;}}}程序運(yùn)行輸出:Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:a數(shù)據(jù)已經(jīng)增加.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:d數(shù)據(jù)已經(jīng)刪除.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:s數(shù)據(jù)已經(jīng)排序.Menu:A(dd)D(elete)S(ort)Q(uit),Selectone:q2-31用窮舉法找出1~100間的質(zhì)數(shù),顯示出來(lái)。分別使用while,do-while,for循環(huán)語(yǔ)句實(shí)現(xiàn)。解:源程序:使用while循環(huán)語(yǔ)句:#include<iostream.h>#include<math.h>voidmain(){inti,j,k,flag;i=2;while(i<=100){flag=1;k=sqrt(i);j=2;while(j<=k){if(i%j==0){flag=0;break;}j++;}if(flag)cout<<i<<"是質(zhì)數(shù)."<<endl;i++;}}使用do…while循環(huán)語(yǔ)句:#include<iostream.h>#include<math.h>voidmain(){inti,j,k,flag;i=2;do{flag=1;k=sqrt(i);j=2;do{if(i%j==0){flag=0;break;}j++;}while(j<=k);if(flag)cout<<i<<"是質(zhì)數(shù)."<<endl;i++;}while(i<=100);}使用for循環(huán)語(yǔ)句:#include<iostream.h>#include<math.h>voidmain(){inti,j,k,flag;for(i=2;i<=100;i++){flag=1;k=sqrt(i);for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag)cout<<i<<"是質(zhì)數(shù)."<<endl;}}程序運(yùn)行輸出:2是質(zhì)數(shù).3是質(zhì)數(shù).5是質(zhì)數(shù).7是質(zhì)數(shù).11是質(zhì)數(shù).13是質(zhì)數(shù).17是質(zhì)數(shù).19是質(zhì)數(shù).23是質(zhì)數(shù).29是質(zhì)數(shù).31是質(zhì)數(shù).37是質(zhì)數(shù).41是質(zhì)數(shù).43是質(zhì)數(shù).47是質(zhì)數(shù).53是質(zhì)數(shù).59是質(zhì)數(shù).61是質(zhì)數(shù).67是質(zhì)數(shù).71是質(zhì)數(shù).73是質(zhì)數(shù).79是質(zhì)數(shù).83是質(zhì)數(shù).89是質(zhì)數(shù).97是質(zhì)數(shù).2-32比較Break語(yǔ)句與Continue語(yǔ)句的不同用法。解:Break使程序從循環(huán)體和switch語(yǔ)句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語(yǔ)句,不能用在別處;continue語(yǔ)句結(jié)束本次循環(huán),接著開(kāi)始判斷決定是否繼續(xù)執(zhí)行下一次循環(huán);2-33定義一個(gè)表示時(shí)間的結(jié)構(gòu)體,可以精確表示年、月、日、小時(shí)、分、秒;提示用戶輸入年、月、日、小時(shí)、分、秒的值,然后完整地顯示出來(lái)。解:源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)二2-34在程序中定義一個(gè)整型變量,賦以1~100的值,要求用戶猜這個(gè)數(shù),比較兩個(gè)數(shù)的大小,把結(jié)果提示給用戶,直到猜對(duì)為止。分別使用while、do…while語(yǔ)句實(shí)現(xiàn)循環(huán)。解://使用while語(yǔ)句#include<iostream.h>voidmain(){intn=18;intm=0;while(m!=n){cout<<"請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):";cin>>m;if(n>m)cout<<"你猜的值太小了!"<<endl;elseif(n<m)cout<<"你猜的值太大了!"<<endl;elsecout<<"你猜對(duì)了!"<<endl;}}//使用do…while語(yǔ)句#include<iostream.h>voidmain(){intn=18;intm=0;do{cout<<"請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):";cin>>m;if(n>m)cout<<"你猜的值太小了!"<<endl;elseif(n<m)cout<<"你猜的值太大了!"<<endl;elsecout<<"你猜對(duì)了!"<<endl;}while(n!=m);}程序運(yùn)行輸出:請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):50你猜的值太大了!請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):25你猜的值太大了!請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):10你猜的值太小了!請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):15你猜的值太小了!請(qǐng)猜這個(gè)數(shù)的值為多少?(0~~100):18你猜對(duì)了!2-35定義枚舉類型weekday,包括Sunday到Saturday七個(gè)元素在程序中定義weekday類型的變量,對(duì)其賦值,定義整型變量,看看能否對(duì)其賦weekday類型的值。解:#include<iostream.h>enumweekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};voidmain(){inti;weekdayd=Thursday;cout<<"d="<<d<<endl;i=d;cout<<"i="<<i<<endl;d=(weekday)6;cout<<"d="<<d<<endl;d=weekday(4);cout<<"d="<<d<<endl;}程序運(yùn)行輸出:d=4i=4d=6d=4第三章函數(shù)3-1C++中的函數(shù)是什么?什么叫主調(diào)函數(shù),什么叫被調(diào)函數(shù),二者之間有什么關(guān)系?如何調(diào)用一個(gè)函數(shù)?解:一個(gè)較為復(fù)雜的系統(tǒng)往往需要?jiǎng)澐譃槿舾勺酉到y(tǒng),高級(jí)語(yǔ)言中的子程序就是用來(lái)實(shí)現(xiàn)這種模塊劃分的。C和C++語(yǔ)言中的子程序就體現(xiàn)為函數(shù)。調(diào)用其它函數(shù)的函數(shù)被稱為主調(diào)函數(shù),被其它函數(shù)調(diào)用的函數(shù)稱為被調(diào)函數(shù)。一個(gè)函數(shù)很可能既調(diào)用別的函數(shù)又被另外的函數(shù)調(diào)用,這樣它可能在某一個(gè)調(diào)用與被調(diào)用關(guān)系中充當(dāng)主調(diào)函數(shù),而在另一個(gè)調(diào)用與被調(diào)用關(guān)系中充當(dāng)被調(diào)函數(shù)。調(diào)用函數(shù)之前先要聲明函數(shù)原型。按如下形式聲明:類型標(biāo)識(shí)符被調(diào)函數(shù)名(含類型說(shuō)明的形參表);聲明了函數(shù)原型之后,便可以按如下形式調(diào)用子函數(shù):函數(shù)名(實(shí)參列表)3-2觀察下面程序的運(yùn)行輸出,與你設(shè)想的有何不同?仔細(xì)體會(huì)引用的用法。源程序:#include<iostream.h>intmain(){intintOne;int&rSomeRef=intOne;intOne=5;cout<<"intOne:\t\t"<<intOne<<endl;cout<<"rSomeRef:\t"<<rSomeRef<<endl;intintTwo=8;rSomeRef=intTwo;//notwhatyouthink!cout<<"\nintOne:\t\t"<<intOne<<endl;cout<<"intTwo:\t\t"<<intTwo<<endl;cout<<"rSomeRef:\t"<<rSomeRef<<endl;return0;}程序運(yùn)行輸出:intOne:5rSomeRef:5intOne:8intTwo:8rSomeRef:83-3比較值調(diào)用和引用調(diào)用的相同點(diǎn)與不同點(diǎn)。解:值調(diào)用是指當(dāng)發(fā)生函數(shù)調(diào)用時(shí),給形參分配內(nèi)存空間,并用實(shí)參來(lái)初始化形參(直接將實(shí)參的值傳遞給形參)。這一過(guò)程是參數(shù)值的單向傳遞過(guò)程,一旦形參獲得了值便與實(shí)參脫離關(guān)系,此后無(wú)論形參發(fā)生了怎樣的改變,都不會(huì)影響到實(shí)參。引用調(diào)用將引用作為形參,在執(zhí)行主調(diào)函數(shù)中的調(diào)用語(yǔ)句時(shí),系統(tǒng)自動(dòng)用實(shí)參來(lái)初始化形參。這樣形參就成為實(shí)參的一個(gè)別名,對(duì)形參的任何操作也就直接作用于實(shí)參。3-4什么叫內(nèi)聯(lián)函數(shù)?它有哪些特點(diǎn)?解:定義時(shí)使用關(guān)鍵字inline的函數(shù)叫做內(nèi)聯(lián)函數(shù);編譯器在編譯時(shí)在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開(kāi)銷;內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語(yǔ)句和switch語(yǔ)句;內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前;對(duì)內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明;3-5函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎?解:不必一致,所有的參數(shù)是根據(jù)位置和類型而不是名字來(lái)區(qū)分的。3-6重載函數(shù)時(shí)通過(guò)什么來(lái)區(qū)分?解:重載的函數(shù)的函數(shù)名是相同的,但它們的參數(shù)的個(gè)數(shù)和數(shù)據(jù)類型不同,編譯器根據(jù)實(shí)參和形參的類型及個(gè)數(shù)的最佳匹配,自動(dòng)確定調(diào)用哪一個(gè)函數(shù)。3-7編寫(xiě)函數(shù),參數(shù)為兩個(gè)unsignedshortint型數(shù),返回值為第一個(gè)參數(shù)除以第二個(gè)參數(shù)的結(jié)果,數(shù)據(jù)類型為shortint;如果第二個(gè)參數(shù)為0,則返回值為-1。在主程序中實(shí)現(xiàn)輸入輸出。解:源程序:#include<iostream.h>shortintDivider(unsignedshortinta,unsignedshortintb){if(b==0)return-1;elsereturna/b;}typedefunsignedshortintUSHORT;typedefunsignedlongintULONG;intmain(){USHORTone,two;shortintanswer;cout<<"Entertwonumbers.\nNumberone:";cin>>one;cout<<"Numbertwo:";cin>>two;answer=Divider(one,two);if(answer>-1)cout<<"Answer:"<<answer;elsecout<<"Error,can'tdividebyzero!";return0;}程序運(yùn)行輸出:Entertwonumbers.Numberone:8Numbertwo:2Answer:43-8編寫(xiě)函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度,公式為:C=(F-32)*5/9;在主程序中提示用戶輸入一個(gè)華氏溫度,轉(zhuǎn)化后輸出相應(yīng)的攝氏溫度。解:源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)三3-9編寫(xiě)函數(shù)判斷一個(gè)數(shù)是否是質(zhì)數(shù),在主程序中實(shí)現(xiàn)輸入、輸出。解:#include<iostream.h>#include<math.h>intprime(inti);//判一個(gè)數(shù)是否是質(zhì)數(shù)的函數(shù)voidmain(){inti;cout<<"請(qǐng)輸入一個(gè)整數(shù):";cin>>i;if(prime(i))cout<<i<<"是質(zhì)數(shù)."<<endl;elsecout<<i<<"不是質(zhì)數(shù)."<<endl;}intprime(inti){intj,k,flag;flag=1;k=sqrt(i);for(j=2;j<=k;j++){if(i%j==0){flag=0;break;}}if(flag)return1;elsereturn0;}程序運(yùn)行輸出:請(qǐng)輸入一個(gè)整數(shù):11511151是質(zhì)數(shù).3-10編寫(xiě)函數(shù)求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)。解:源程序:#include<iostream.h>#include<math.h>intfn1(inti,intj);//求最大公約數(shù)的函數(shù)voidmain(){inti,j,x,y;cout<<"請(qǐng)輸入一個(gè)正整數(shù):";cin>>i;cout<<"請(qǐng)輸入另一個(gè)正整數(shù):";cin>>j;x=fn1(i,j);y=i*j/x;cout<<i<<"和"<<j<<"的最大公約數(shù)是:"<<x<<endl;cout<<i<<"和"<<j<<"的最小公倍數(shù)是:"<<y<<endl;}intfn1(inti,intj){inttemp;if(i<j){temp=i;i=j;j=i;}while(j!=0){temp=i%j;i=j;j=temp;}returni;}程序運(yùn)行輸出:請(qǐng)輸入一個(gè)正整數(shù):120請(qǐng)輸入另一個(gè)正整數(shù):72120和72的最大公約數(shù)是:24120和72的最小公倍數(shù)是:3603-11什么叫作嵌套調(diào)用?什么叫作遞歸調(diào)用?解:函數(shù)允許嵌套調(diào)用,如果函數(shù)1調(diào)用了函數(shù)2,函數(shù)2再調(diào)用函數(shù)3,便形成了函數(shù)的嵌套調(diào)用。函數(shù)可以直接或間接地調(diào)用自身,稱為遞歸調(diào)用。3-12在主程序中提示輸入整數(shù)n,編寫(xiě)函數(shù)用遞歸的方法求1+2+…+n的值。解:#include<iostream.h>#include<math.h>intfn1(inti);voidmain(){inti;cout<<"請(qǐng)輸入一個(gè)正整數(shù):";cin>>i;cout<<"從1累加到"<<i<<"的和為:"<<fn1(i)<<endl;}intfn1(inti){if(i==1)return1;elsereturni+fn1(i-1);}程序運(yùn)行輸出:請(qǐng)輸入一個(gè)正整數(shù):100從1累加到100的和為:50503-13編寫(xiě)遞歸函數(shù)GetPower(intx,inty)計(jì)算x的y次冪,在主程序中實(shí)現(xiàn)輸入輸出。解:源程序:#include<iostream.h>longGetPower(intx,inty);intmain(){intnumber,power;longanswer;cout<<"Enteranumber:";cin>>number;cout<<"Towhatpower?";cin>>power;answer=GetPower(number,power);cout<<number<<"tothe"<<power<<"thpoweris"<<answer<<endl;return0;}longGetPower(intx,inty){if(y==1)returnx;elsereturn(x*GetPower(x,y-1));}程序運(yùn)行輸出:Enteranumber:3Towhatpower?43tothe4thpoweris813-14用遞歸的方法編寫(xiě)函數(shù)求Fibonacci級(jí)數(shù),公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1;觀察遞歸調(diào)用的過(guò)程。解:源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)三3-15用遞歸的方法編寫(xiě)函數(shù)求n階勒讓德多項(xiàng)式的值,在主程序中實(shí)現(xiàn)輸入、輸出;解:#include<iostream.h>floatp(intn,intx);voidmain(){intn,x;cout<<"請(qǐng)輸入正整數(shù)n:";cin>>n;cout<<"請(qǐng)輸入正整數(shù)x:";cin>>x;cout<<"n="<<n<<endl;cout<<"x="<<x<<endl;cout<<"P"<<n<<"("<<x<<")="<<p(n,x)<<endl;}floatp(intn,intx){if(n==0)return1;elseif(n==1)returnx;elsereturn((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;}程序運(yùn)行輸出:請(qǐng)輸入正整數(shù)n:1請(qǐng)輸入正整數(shù)x:2n=1x=2P1(2)=2請(qǐng)輸入正整數(shù)n:3請(qǐng)輸入正整數(shù)x:4n=3x=4P3(4)=1543-16使用模板函數(shù)實(shí)現(xiàn)Swap(x,y),函數(shù)功能為交換x、y的值。解:源程序:#include<iostream.h>template<typenameT>voidswap(T&x,T&y){Tz;z=x;x=y;y=z;}voidmain(){intj=1,k=2;doublev=3.0,w=4.0;cout<<"j="<<j<<"k="<<k<<endl;cout<<"v="<<v<<"w="<<w<<endl;swap(j,k);//intswap(v,w);//doublecout<<"Afterswap:"<<endl;cout<<"j="<<j<<"k="<<k<<endl;cout<<"v="<<v<<"w="<<w<<endl;}程序運(yùn)行輸出:j=1k=2v=3.14w=4.35Afterswap:j=2k=1v=4.35w=3.14第四章類4-1解釋public和private的作用,公有類型成員與私有類型成員有些什么區(qū)別?解:公有類型成員用public關(guān)鍵字聲明,公有類型定義了類的外部接口;私有類型的成員用private關(guān)鍵字聲明,只允許本類的函數(shù)成員來(lái)訪問(wèn),而類外部的任何訪問(wèn)都是非法的,這樣,私有的成員就整個(gè)隱蔽在類中,在類的外部根本就無(wú)法看到,實(shí)現(xiàn)了訪問(wèn)權(quán)限的有效控制。4-2protected關(guān)鍵字有何作用?解:protected用來(lái)聲明保護(hù)類型的成員,保護(hù)類型的性質(zhì)和私有類型的性質(zhì)相似,其差別在于繼承和派生時(shí)派生類的成員函數(shù)可以訪問(wèn)基類的保護(hù)成員。4-3構(gòu)造函數(shù)和析構(gòu)函數(shù)有什么作用?解:構(gòu)造函數(shù)的作用就是在對(duì)象被創(chuàng)建時(shí)利用特定的值構(gòu)造對(duì)象,將對(duì)象初始化為一個(gè)特定的狀態(tài),使此對(duì)象具有區(qū)別于彼對(duì)象的特征,完成的就是是一個(gè)從一般到具體的過(guò)程,構(gòu)造函數(shù)在對(duì)象創(chuàng)建的時(shí)候由系統(tǒng)自動(dòng)調(diào)用。析構(gòu)函數(shù)與構(gòu)造函數(shù)的作用幾乎正好相反,它是用來(lái)完成對(duì)象被刪除前的一些清理工作,也就是專門(mén)作掃尾工作的。一般情況下,析構(gòu)函數(shù)是在對(duì)象的生存期即將結(jié)束的時(shí)刻由系統(tǒng)自動(dòng)調(diào)用的,它的調(diào)用完成之后,對(duì)象也就消失了,相應(yīng)的內(nèi)存空間也被釋放。4-4數(shù)據(jù)成員可以為公有的嗎?成員函數(shù)可以為私有的嗎?解:可以,二者都是合法的。數(shù)據(jù)成員和成員函數(shù)都可以為公有或私有的。但數(shù)據(jù)成員最好定義為私有的。4-5已知classA中有數(shù)據(jù)成員inta,如果定義了A的兩個(gè)對(duì)象A1、A2,它們各自的數(shù)據(jù)成員a的值可以不同嗎?解:可以,類的每一個(gè)對(duì)象都有自己的數(shù)據(jù)成員。4-6什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用?解:拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,其形參是本類的對(duì)象的引用,其作用是使用一個(gè)已經(jīng)存在的對(duì)象,去初始化一個(gè)新的同類的對(duì)象。在以下三種情況下會(huì)被調(diào)用:在當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí);如果函數(shù)的形參是類對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí);如果函數(shù)的返回值是類對(duì)象,函數(shù)調(diào)用完成返回時(shí);4-7拷貝構(gòu)造函數(shù)與賦值運(yùn)算符(=)有何不同?解:賦值運(yùn)算符(=)作用于一個(gè)已存在的對(duì)象;而拷貝構(gòu)造函數(shù)會(huì)創(chuàng)建一個(gè)新的對(duì)象。4-8定義一個(gè)Dog類,包含的age、weight等屬性,以及對(duì)這些屬性操作的方法。實(shí)現(xiàn)并測(cè)試這個(gè)類。解:源程序:#include<iostream.h>classDog{public:Dog(intinitialAge=0,intinitialWeight=5);~Dog();intGetAge(){returnitsAge;}//inline!voidSetAge(intage){itsAge=age;}//inline!intGetWeight(){returnitsWeight;}//inline!voidSetWeight(intweight){itsAge=weight;}//inline!private:intitsAge,itsWeight;};Dog::Dog(intinitialAge,intinitialWeight){itsAge=initialAge;itsWeight=initialWeight;}Dog::~Dog()//destructor,takesnoaction{}intmain(){DogJack(2,10);cout<<"JackisaDogwhois";cout<<Jack.GetAge()<<"yearsoldand";cout<<Jack.GetWeight()<<"poundsweight.\n";Jack.SetAge(7);Jack.SetWeight(20);cout<<"NowJackis";cout<<Jack.GetAge()<<"yearsoldand";cout<<Jack.GetWeight()<<"poundsweight.";return0;}程序運(yùn)行輸出:JackisaDogwhois2yearsoldand10poundsweight.NowJackis7yearsold20poundsweight.4-9設(shè)計(jì)并測(cè)試一個(gè)名為Rectangle的矩形類,其屬性為矩形的左下角與右上角兩個(gè)點(diǎn)的坐標(biāo),能計(jì)算矩形的面積。解:源程序:#include<iostream.h>classRectangle{public:Rectangle(inttop,intleft,intbottom,intright);~Rectangle(){}intGetTop()const{returnitsTop;}intGetLeft()const{returnitsLeft;}intGetBottom()const{returnitsBottom;}intGetRight()const{returnitsRight;}voidSetTop(inttop){itsTop=top;}voidSetLeft(intleft){itsLeft=left;}voidSetBottom(intbottom){itsBottom=bottom;}voidSetRight(intright){itsRight=right;}intGetArea()const;private:intitsTop;intitsLeft;intitsBottom;intitsRight;};Rectangle::Rectangle(inttop,intleft,intbottom,intright){itsTop=top;itsLeft=left;itsBottom=bottom;itsRight=right;}intRectangle::GetArea()const{intWidth=itsRight-itsLeft;intHeight=itsTop-itsBottom;return(Width*Height);}intmain(){RectangleMyRectangle(100,20,50,80);intArea=MyRectangle.GetArea();cout<<"Area:"<<Area<<"\n";return0;}程序運(yùn)行輸出:Area:3000UpperLeftXCoordinate:204-10設(shè)計(jì)一個(gè)用于人事管理的People(人員)類??紤]到通用性,這里只抽象出所有類型人員都具有的屬性:number(編號(hào))、sex(性別)、birthday(出生日期)、id(身份證號(hào))等等。其中"出生日期"定義為一個(gè)"日期"類內(nèi)嵌子對(duì)象。用成員函數(shù)實(shí)現(xiàn)對(duì)人員信息的錄入和顯示。要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、帶缺省形參值的成員函數(shù)、聚集。解:本題用作實(shí)驗(yàn)四的選做題,因此不給出答案。4-11定義一個(gè)矩形類,有長(zhǎng)、寬兩個(gè)屬性,有成員函數(shù)計(jì)算矩形的面積解:#include<iostream.h>classRectangle{public:Rectangle(floatlen,floatwidth){Length=len;Width=width;}~Rectangle(){};floatGetArea(){returnLength*Width;}floatGetLength(){returnLength;}floatGetWidth(){returnWidth;}private:floatLength;floatWidth;};voidmain(){floatlength,width;cout<<"請(qǐng)輸入矩形的長(zhǎng)度:";cin>>length;cout<<"請(qǐng)輸入矩形的寬度:";cin>>width;Rectangler(length,width);cout<<"長(zhǎng)為"<<length<<"寬為"<<width<<"的矩形的面積為:"<<r.GetArea()<<endl;}程序運(yùn)行輸出:請(qǐng)輸入矩形的長(zhǎng)度:5請(qǐng)輸入矩形的寬度:4長(zhǎng)為5寬為4的矩形的面積為:204-12定義一個(gè)"數(shù)據(jù)類型"datatype類,能處理包含字符型、整型、浮點(diǎn)型三種類型的數(shù)據(jù),給出其構(gòu)造函數(shù)。解:#include<iostream.h>classdatatype{enum{character,integer,floating_point}vartype;union{charc;inti;floatf;};public:datatype(charch){vartype=character;c=ch;}datatype(intii){vartype=integer;i=ii;}datatype(floatff){vartype=floating_point;f=ff;}voidprint();};voiddatatype::print(){switch(vartype){casecharacter:cout<<"字符型:"<<c<<endl;break;caseinteger:cout<<"整型:"<<i<<endl;break;casefloating_point:cout<<"浮點(diǎn)型:"<<f<<endl;break;}}voidmain(){datatypeA('c'),B(12),C(1.44F);A.print();B.print();C.print();}程序運(yùn)行輸出:字符型:c整型:12浮點(diǎn)型:1.444-13定義一個(gè)Circle類,有數(shù)據(jù)成員半徑Radius,成員函數(shù)GetArea(),計(jì)算圓的面積,構(gòu)造一個(gè)Circle的對(duì)象進(jìn)行測(cè)試。解:#include<iostream.h>classCircle{public:Circle(floatradius){Radius=radius;}~Circle(){}floatGetArea(){return3.14*Radius*Radius;}private:floatRadius;};voidmain(){floatradius;cout<<"請(qǐng)輸入圓的半徑:";cin>>radius;Circlep(radius);cout<<"半徑為"<<radius<<"的圓的面積為:"<<p.GetArea()<<endl;}程序運(yùn)行輸出:請(qǐng)輸入圓的半徑:5半徑為5的圓的面積為:78.54-14定義一個(gè)tree類,有成員ages,成員函數(shù)grow(intyears)對(duì)ages加上years,age()顯示tree對(duì)象的ages的值。解:#include<iostream.h>classTree{intages;public:Tree(intn=0);~Tree();voidgrow(intyears);voidage();};Tree::Tree(intn){ages=n;}Tree::~Tree(){age();}voidTree::grow(intyears){ages+=years;}voidTree::age(){cout<<"這棵樹(shù)的年齡為"<<ages<<endl;}voidmain(){Treet(12);t.age();t.grow(4);}程序運(yùn)行輸出:這棵樹(shù)的年齡為12這棵樹(shù)的年齡為16第五章C++程序的基本結(jié)構(gòu)5-1什么叫做作用域?有哪幾種類型的作用域?解:作用域討論的是標(biāo)識(shí)符的有效范圍,作用域是一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。C++的作用域分為函數(shù)原形作用域、塊作用域(局部作用域)、類作用域和文件作用域.5-2什么叫做可見(jiàn)性?可見(jiàn)性的一般規(guī)則是什么?解:可見(jiàn)性是標(biāo)識(shí)符是否可以引用的問(wèn)題;可見(jiàn)性的一般規(guī)則是:標(biāo)識(shí)符要聲明在前,引用在后,在同一作用域中,不能聲明同名的標(biāo)識(shí)符。對(duì)于在不同的作用域聲明的標(biāo)識(shí)符,遵循的原則是:若有兩個(gè)或多個(gè)具有包含關(guān)系的作用域,外層聲明的標(biāo)識(shí)符如果在內(nèi)層沒(méi)有聲明同名標(biāo)識(shí)符時(shí)仍可見(jiàn),如果內(nèi)層聲明了同名標(biāo)識(shí)符則外層標(biāo)識(shí)符不可見(jiàn)。5-3下面的程序的運(yùn)行結(jié)果是什么,實(shí)際運(yùn)行一下,看看與你的設(shè)想有何不同。#include<iostream.h>voidmyFunction();intx=5,y=7;intmain(){cout<<"xfrommain:"<<x<<"\n";cout<<"yfrommain:"<<y<<"\n\n";myFunction();cout<<"BackfrommyFunction!\n\n";cout<<"xfrommain:"<<x<<"\n";cout<<"yfrommain:"<<y<<"\n";return0;}voidmyFunction(){inty=10;cout<<"xfrommyFunction:"<<x<<"\n";cout<<"yfrommyFunction:"<<y<<"\n\n";}解:程序運(yùn)行輸出:xfrommain:5yfrommain:7xfrommyFunction:5yfrommyFunction:10BackfrommyFunction!xfrommain:5yfrommain:75-4假設(shè)有兩個(gè)無(wú)關(guān)系的類Engine和Fuel,使用時(shí),怎樣允許Fuel成員訪問(wèn)Engine中的私有和保護(hù)的成員?解:源程序:classfuel;classengine{friendclassfuel;private;intpowerlevel;public;engine(){powerLevel=0;}voidengine_fn(fuel&f);};classfuel{friendclassengine;private;intfuelLevel;public:fuel(){fuelLevel=0;}voidfuel_fn(engine&e);};5-5什么叫做靜態(tài)數(shù)據(jù)成員?它有何特點(diǎn)?解:類的靜態(tài)數(shù)據(jù)成員是類的數(shù)據(jù)成員的一種特例,采用static關(guān)鍵字來(lái)聲明。對(duì)于類的普通數(shù)據(jù)成員,每一個(gè)類的對(duì)象都擁有一個(gè)拷貝,就是說(shuō)每個(gè)對(duì)象的同名數(shù)據(jù)成員可以分別存儲(chǔ)不同的數(shù)值,這也是保證對(duì)象擁有自身區(qū)別于其它對(duì)象的特征的需要,但是靜態(tài)數(shù)據(jù)成員,每個(gè)類只要一個(gè)拷貝,由所有該類的對(duì)象共同維護(hù)和使用,這個(gè)共同維護(hù)、使用也就實(shí)現(xiàn)了同一類的不同對(duì)象之間的數(shù)據(jù)共享。5-6什么叫做靜態(tài)函數(shù)成員?它有何特點(diǎn)?解:使用static關(guān)鍵字聲明的函數(shù)成員是靜態(tài)的,靜態(tài)函數(shù)成員屬于整個(gè)類,同一個(gè)類的所有對(duì)象共同維護(hù),為這些對(duì)象所共享。靜態(tài)函數(shù)成員具有以下兩個(gè)方面的好處,一是由于靜態(tài)成員函數(shù)只能直接訪問(wèn)同一個(gè)類的靜態(tài)數(shù)據(jù)成員,可以保證不會(huì)對(duì)該類的其余數(shù)據(jù)成員造成負(fù)面影響;二是同一個(gè)類只維護(hù)一個(gè)靜態(tài)函數(shù)成員的拷貝,節(jié)約了系統(tǒng)的開(kāi)銷,提高程序的運(yùn)行效率。5-7定義一個(gè)Cat類,擁有靜態(tài)數(shù)據(jù)成員HowManyCats,記錄Cat的個(gè)體數(shù)目;靜態(tài)成員函數(shù)GetHowMany(),存取HowManyCats。設(shè)計(jì)程序測(cè)試這個(gè)類,體會(huì)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的用法。解:源程序:#include<iostream.h>classCat{public:Cat(intage):itsAge(age){HowManyCats++;}virtual~Cat(){HowManyCats--;}virtualintGetAge(){returnitsAge;}virtualvoidSetAge(intage){itsAge=age;}staticintGetHowMany(){returnHowManyCats;}private:intitsAge;staticintHowManyCats;};intCat::HowManyCats=0;voidTelepathicFunction();intmain(){constintMaxCats=5;Cat*CatHouse[MaxCats];inti;for(i=0;i<MaxCats;i++){CatHouse[i]=newCat(i);TelepathicFunction();}for(i=0;i<MaxCats;i++){deleteCatHouse[i];TelepathicFunction();}return0;}voidTelepathicFunction(){cout<<"Thereare"<<Cat::GetHowMany()<<"catsalive!\n";}程序運(yùn)行輸出:Thereare1catsalive!Thereare2catsalive!Thereare3catsalive!Thereare4catsalive!Thereare5catsalive!Thereare4catsalive!Thereare3catsalive!Thereare2catsalive!Thereare1catsalive!Thereare0catsalive!5-8什么叫做友元函數(shù)?什么叫做友元類?解:友元函數(shù)是使用friend關(guān)鍵字聲明的函數(shù),它可以訪問(wèn)相應(yīng)類的保護(hù)成員和私有成員。友元類是使用friend關(guān)鍵字聲明的類,它的所有成員函數(shù)都是相應(yīng)類的友元函數(shù)。5-9如果類A是類B的友元,類B是類C的友元,類D是類A的派生類,那么類B是類A的友元嗎?類C是類A的友元嗎?類D是類B的友元嗎?解:類B不是類A的友元,友元關(guān)系不具有交換性;類C不是類A的友元,友元關(guān)系不具有傳遞性;類D不是類B的友元,友元關(guān)系不能被繼承。5-10靜態(tài)成員變量可以為私有的嗎?聲明一個(gè)私有的靜態(tài)整型成員變量。解:可以,例如:private:staticinta;5-11在一個(gè)文件中定義一個(gè)全局變量n,主函數(shù)main(),在另一個(gè)文件中定義函數(shù)fn1(),在main()中對(duì)n賦值,再調(diào)用fn1(),在fn1()中也對(duì)n賦值,顯示n最后的值。解:#include<iostream.h>#include"fn1.h"intn;voidmain(){n=20;fn1();cout<<"n的值為"<<n;}//fn1.h文件externintn;voidfn1(){n=30;}程序運(yùn)行輸出:n的值為305-12在函數(shù)fn1()中定義一個(gè)靜態(tài)變量n,fn1()中對(duì)n的值加1,在主函數(shù)中,調(diào)用fn1()十次,顯示n的值。解:#include<iostream.h>voidfn1(){staticintn=0;n++;cout<<"n的值為"<<n<<endl;}voidmain(){for(inti=0;i<10;i++)fn1();}程序運(yùn)行輸出:n的值為1n的值為2n的值為3n的值為4n的值為5n的值為6n的值為7n的值為8n的值為9n的值為105-13定義類X、Y、Z,函數(shù)h(X*),滿足:類X有私有成員i,Y的成員函數(shù)g(X*)是X的友元函數(shù),實(shí)現(xiàn)對(duì)X的成員i加1,類Z是類X的友元類,其成員函數(shù)f(X*)實(shí)現(xiàn)對(duì)X的成員i加5,函數(shù)h(X*)是X的友元函數(shù),實(shí)現(xiàn)對(duì)X的成員i加10。在一個(gè)文件中定義和實(shí)現(xiàn)類,在另一個(gè)文件中實(shí)現(xiàn)main()函數(shù)。解:#include"my_x_y_z.h"voidmain(){Xx;Zz;z.f(&x);}//my_x_y_z.h文件#ifndefMY_X_Y_Z_HclassX;classY{voidg(X*);};classX{private:inti;public:X(){i=0;}friendvoidh(X*);friendvoidY::g(X*);friendclassZ;};voidh(X*x){x->i=+10;}voidY::g(X*x){x->i++;}classZ{public:voidf(X*x){x->i+=5;}};#endif//MY_X_Y_Z_H程序運(yùn)行輸出:無(wú)5-14定義Boat與Car兩個(gè)類,二者都有weight屬性,定義二者的一個(gè)友元函數(shù)totalWeight(),計(jì)算二者的重量和。解:源程序:#include<iostream.h>classBoat;classCar{private:intweight;public:Car(intj){weight=j;}friendinttotalWeight(Car&aCar,Boat&aBoat);};classBoat{private:intweight;public:Boat(intj){weight=j;}friendinttotalWeight(Car&aCar,Boat&aBoat);};inttotalWeight(Car&aCar,Boat&aBoat){returnaCar.weight+aBoat.weight;}voidmain(){Carc1(4);Boatb1(5);cout<<totalWeight(c1,b1)<<endl;}程序運(yùn)行輸出:95-15如果在類模板的定義中有一個(gè)靜態(tài)數(shù)據(jù)成員,則在程序運(yùn)行中會(huì)產(chǎn)生多少個(gè)相應(yīng)的靜態(tài)變量?解:這個(gè)類模板的每一個(gè)實(shí)例類都會(huì)產(chǎn)生一個(gè)相應(yīng)的靜態(tài)變量。第六章數(shù)組、指針與字符串6-1數(shù)組A[10][5][15]一共有多少個(gè)元素?解:10×5×15=750個(gè)元素1-2在數(shù)組A[20]中第一個(gè)元素和最后一個(gè)元素是哪一個(gè)?解:第一個(gè)元素是A[0],最后一個(gè)元素是A[19]。6-3用一條語(yǔ)句定義一個(gè)有五個(gè)元素的整型數(shù)組,并依次賦予1~5的初值。解:源程序:intIntegerArray[5]={1,2,3,4,5};或:intIntegerArray[]={1,2,3,4,5};6-4已知有一個(gè)數(shù)組名叫oneArray,用一條語(yǔ)句求出其元素的個(gè)數(shù)。解:源程序:nArrayLength=sizeof(oneArray)/sizeof(oneArray[0]);6-5用一條語(yǔ)句定義一個(gè)有5×3個(gè)元素的二維整型數(shù)組,并依次賦予1~15的初值。解:源程序:inttheArray[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};或:inttheArray[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};6-6運(yùn)算符*和&的作用是什么?解:*稱為指針運(yùn)算符,是一個(gè)一元操作符,表示指針?biāo)赶虻膶?duì)象的值;&稱為取地址運(yùn)算符,也是一個(gè)一元操作符,是用來(lái)得到一個(gè)對(duì)象的地址。6-7什么叫做指針?指針中儲(chǔ)
溫馨提示
- 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年城市軌道交通建設(shè)委托管理合同
- 2024工裝裝修合同范文
- 2024個(gè)人房屋裝修合同范本
- 2024年度安徽省某項(xiàng)環(huán)保設(shè)施建筑工程施工合同
- 母嬰類課件教學(xué)課件
- 2024年員工保密責(zé)任協(xié)議書(shū)
- 2024年度計(jì)算機(jī)軟硬件采購(gòu)合同
- 2024年度應(yīng)急物流服務(wù)協(xié)議
- 2024年店鋪?zhàn)赓U協(xié)議(含裝修)
- 2024年度企業(yè)咨詢服務(wù)合同(戰(zhàn)略規(guī)劃)
- 只爭(zhēng)朝夕不負(fù)韶華崗位競(jìng)聘述職報(bào)告
- 農(nóng)場(chǎng)工作制度與農(nóng)民崗位職責(zé)
- 2024年山東公務(wù)員考試行測(cè)真題及解析【完美打印版】
- 田賽裁判法與規(guī)則2
- 社區(qū)心肺復(fù)蘇術(shù)普及
- 冬棗植保知識(shí)培訓(xùn)課件
- 校園突發(fā)事件與應(yīng)急管理課件
- 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)職業(yè)生涯規(guī)劃
- DR拼接技術(shù)及常規(guī)攝片注意事項(xiàng)
- 《股票入門(mén)》課件
- 《不為人知的間歇泉》課件
評(píng)論
0/150
提交評(píng)論