版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)結(jié)構(gòu)》試卷及答案.算法分析的目的是()。A.找出數(shù)據(jù)結(jié)構(gòu)的合理性 B.研究算法中輸入和輸出的關(guān)系C.分析算法的效率以求改進(jìn) D.分析算法的易懂性和文檔性.( )是具有相同特性數(shù)據(jù)元素的集合,是數(shù)據(jù)的子集。A.數(shù)據(jù)符號(hào) B.數(shù)據(jù)對(duì)象 C.數(shù)據(jù) D.數(shù)據(jù)結(jié)構(gòu).用鏈表表示線性表的優(yōu)點(diǎn)是( )。A.便于隨機(jī)存取 B.花費(fèi)的存儲(chǔ)空間比順序表少C.便于插入與刪除 D.數(shù)據(jù)元素的物理順序與邏輯順序相同.輸入序列為(A,B,C,D)不可能的輸出有()〇A.(A,B,C,D) B.(D,C,B,A)C,(A,C,D,B)D.(C,A,B,D).在數(shù)組表示的循環(huán)隊(duì)列中,front、rear分別為隊(duì)列的頭、尾指針,maxSize為數(shù)組的最大長(zhǎng)度,隊(duì)滿的條件是()〇A.front=maxSize B.(rear+1)%maxSize=frontC.rear=maxSize D.rear=front.設(shè)有串t=,Iamagoodstudent\那么Substr(t,6,6)=()〇A.student B.agoods C.good D.agood.設(shè)有一個(gè)對(duì)稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹餍虼鎯?chǔ)all為第一個(gè)元素,其存儲(chǔ)地址為1,每個(gè)元素占ー個(gè)地址空間,則a85地址為()〇A.23 B.33 C.18 D.40.已知廣義表LS=(A,(B,C,D),E)運(yùn)用head和tail函數(shù),取出LS中原子b的運(yùn)算()〇A.Gethead(Gethead(LS)) B.Gettail(Gethead(LS))C.Gethead(Gethead(Gettai1(LS))) D.Gethead(Gettail(LS))9.若已知一棵ニ叉樹先序序列為ABCDEFG,中序序列為CBDAEGF,則其后序序列為()〇A.CDBGFEA B.CDBFGEAC.CDBAGFE D.BCDAGFE.下列存儲(chǔ)形式中,()不是樹的存儲(chǔ)形式。A.雙親表示法 B.左子女右兄弟表示法C.廣義表表示法 D.順序表示法.對(duì)待排序的元素序列進(jìn)行劃分,將其分為左、右兩個(gè)子序列,再對(duì)兩個(gè)子序列施加同樣的排序操作,直到子序列為空或只剩ー個(gè)元素為止。這樣的排序方法是()°A.直接選擇排序 B.直接插入排序C.快速排序 D.起泡排序.采用折半查找方法進(jìn)行查找,數(shù)據(jù)文件應(yīng)為(),且限于()〇A.有序表順序存儲(chǔ)結(jié)構(gòu) B.有序表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)C.隨機(jī)表順序存儲(chǔ)結(jié)構(gòu) D.隨機(jī)表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu).就平均查找速度而言,下列幾種查找速度從慢至快的關(guān)系是()A.順序折半哈希分塊 B.順序分塊折半哈希C.分塊折半哈希順序 D.順序哈希分塊折半.執(zhí)行下面程序段時(shí),執(zhí)行S語(yǔ)句的次數(shù)為()for(intI=l;I<=n;I++)for(intj=l;j<=I;j++)S;A.n2B.n2/2C.n(n+l)D.n(n+l)/2.串是ー種特殊的線性表,其特殊性體現(xiàn)在()A.可以順序存儲(chǔ) B.數(shù)據(jù)元素是ー個(gè)字符C.可以鏈接存儲(chǔ) D.數(shù)據(jù)元素可以是多個(gè)字符.樹的基本遍歷策略分為先根遍歷和后根遍歷;ニ叉樹的基本遍歷策略可分為先序遍歷、中序遍歷和后序遍歷。結(jié)論()是正確的。A.樹的先根遍歷序列與其對(duì)應(yīng)的ニ叉樹的先序遍歷序列相同B.樹的后根遍歷序列與其對(duì)應(yīng)的ニ叉樹的先序遍歷序列相同C.樹的先根遍歷序列與其對(duì)應(yīng)的ニ叉樹的中序遍歷序列相同D.以上都不對(duì).由五個(gè)分別帶權(quán)值為9,2,3,5,14的葉子結(jié)點(diǎn)構(gòu)成的ー棵哈夫曼樹,該樹的帶權(quán)路徑長(zhǎng)度為()。TOC\o"1-5"\h\zA.60 B.66 C.67 D.50.一棵ニ叉樹有67個(gè)結(jié)點(diǎn),這些結(jié)點(diǎn)的度要么是〇,要么是2。這棵ニ叉樹中度為2的結(jié)點(diǎn)有()個(gè)A.33 B.34 C.32 D.30.有一個(gè)有序表為{1,3,9,12,32,41,45,62,75,77,82,95,100},當(dāng)二分查找值82為的結(jié)點(diǎn)時(shí),()次比較后查找成功。A.1B.2 C.4 D.8.若有文件的關(guān)鍵字序列為:[265][301][751][129][937][863][742][694][076][438],以下為二路歸并排序過(guò)程。第二趟為:A.[265301][129751][863937][694742][076438]B.[076129265301438694742751863937]C.[129265301694742751863937][076438]D.[129265301751][694742863937][076438]二、填空題(本大題共6小題,每空2分,共12分;答案填在下表內(nèi))!算法是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作,此外,ー個(gè)算法還具有五個(gè)重要特性,它們分別是ヽヽ、有零或多個(gè)輸入和有一或多個(gè)輸出。2算法優(yōu)劣的五個(gè)標(biāo)準(zhǔn)是正確性、可使用性、ヽヽ〇3有n個(gè)球隊(duì)參加的足球聯(lián)賽按主客場(chǎng)制進(jìn)行比賽,共需進(jìn)行 場(chǎng)比賽。設(shè)有串t='Iamastudent',s='good',a[,么Concat(t,s)='Iamastudentgood',Substr(t,8,7)=05在解決計(jì)算機(jī)主機(jī)與打印機(jī)之間速度不匹配時(shí)通常設(shè)置ー個(gè)打印數(shù)據(jù)緩沖區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)從該緩沖區(qū)中取出數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個(gè)結(jié)構(gòu),其主要特點(diǎn)是〇6廣義表((a),a)的表頭是,表尾是〇三、判斷題(對(duì)的打“J”,錯(cuò)的打“X”。每小題1分,共10分;答案填在下表內(nèi))1數(shù)據(jù)的邏輯結(jié)構(gòu)與數(shù)據(jù)元素本身的內(nèi)容和形式無(wú)關(guān)。2三個(gè)結(jié)點(diǎn)的ニ叉樹和三個(gè)結(jié)點(diǎn)的樹ー樣,都具有三種不同的形態(tài)。3中序序列和后序序列相同的ニ叉樹為:空樹和缺右子樹的單支樹。4對(duì)于兩棵具有相同關(guān)鍵字集合而形狀不同的ニ叉排序樹,中序遍歷后得到的關(guān)鍵字排列順序相同。序列{30,40,50,15,25,35,38,10}是堆。6對(duì)于無(wú)向圖的生成樹,從同一頂點(diǎn)出發(fā)所得的生成樹相同。7若設(shè)哈希表長(zhǎng)m=14,哈希函數(shù)H(key)=key%ll,表中已有4個(gè)結(jié)點(diǎn)。addr(15)=4addr(38)=5addr(61)=6addr(84)=7其余地址為空,如用二次探測(cè)再散列處理沖突,關(guān)鍵字為49的結(jié)點(diǎn)的地址是9。8ー個(gè)深度為k的,具有最少結(jié)點(diǎn)數(shù)的完全ニ叉樹按層次,(同層次從左向右)用自然數(shù)依此對(duì)結(jié)點(diǎn)編號(hào)則,則編號(hào)最小的葉子的序號(hào)是212+1;編號(hào)是i的結(jié)點(diǎn)所在的層次號(hào)是「log?i|+lo(riog2il表示向上取整」(根所在的層次號(hào)規(guī)定為1層)。9在ー棵7階B樹中,ー個(gè)結(jié)點(diǎn)中最多有6棵子樹,最少有3棵子樹。10算法可以沒(méi)有輸入,但是必須有輸出。四、畫出樹的孩子兄弟表示法示意的樹或森林。(4分)五、要求題(本大題共2小題,共12分)設(shè)關(guān)鍵字的輸入序列為{4,5,7,2,1,3,6}.(8分)從空樹開始構(gòu)造平衡ニ叉樹,畫出每加入一個(gè)新結(jié)點(diǎn)時(shí)ニ叉樹的形態(tài),若發(fā)生不平衡,指明需做的平衡旋轉(zhuǎn)類型及平衡旋轉(zhuǎn)的結(jié)果。.(4分)上面的數(shù)據(jù)作為待排序的數(shù)據(jù),寫出用快速排序進(jìn)行一趟劃分后的數(shù)據(jù)序列六、按要求做題(本大題共2小題,共12分)1畫出無(wú)向圖G的鄰接表存儲(chǔ)結(jié)構(gòu),根據(jù)鄰接表存儲(chǔ)結(jié)構(gòu)寫出深度優(yōu)先和廣度優(yōu)先遍歷序列。(7分)2用prim算法求下圖的最小生成樹,寫出最小生成樹的生成過(guò)程。(5分)七、算法分析設(shè)計(jì)題(本大題共5小題,共30分).寫出程序段的功能,并給出ー個(gè)測(cè)試用例(ー個(gè)輸入數(shù)據(jù)和一個(gè)輸出結(jié)果)(5分)。voidconversion()(Stacks;intn;SElemTypee;initstack(s);printf(/zPleaseinputnumber/');scanf(“渝!”,&n);while(n){push(s,n%8);n=n/8;}while(!stackempty(s)){pop(s,e);printf("%d,?,e);.下面是一個(gè)使用棧stack實(shí)現(xiàn)對(duì)ニ叉樹進(jìn)行非遞歸先根遍歷的函數(shù),請(qǐng)?jiān)跇?biāo)號(hào)處填寫合適的語(yǔ)句。(每空1分,共5分)程序:Voidpreorder(bitree*T){bitree*stack[m];inttop;if(T!=NULL){top=l;stack[top]=(l);while((2)){p=stack[top];top—;printf(w%dM,p->data);if(p->rchild!=NULL){(3);stack[top]=p->rchild;}if((4)){top++;(5);)(1) (2) (3)(4) (5)3.請(qǐng)?jiān)跇?biāo)號(hào)處填寫合適的語(yǔ)句。完成下列程序。(每空1分,共5分)intBinary_Search(S_TBLtbl,KEYkx){/?在表tbl中查找關(guān)鍵碼為kx的數(shù)據(jù)元素,若找到返回該元素在表中的位置,否則返回〇?/intmid,flag=O;low=1;high=length;while(⑴&!flag_){ /?非空,進(jìn)行比較測(cè)試?/TOC\o"1-5"\h\zmid=_(2) ;if(kx<tbl.elem[mid].key)(3) ;elseif(kx>tbl.elem[mid].key)(4) ;returnflag;(1) (2) (3)(5)4.下面是ー個(gè)采用直接選擇排序方法進(jìn)行升序排序的函數(shù),請(qǐng)?jiān)跇?biāo)號(hào)處填寫合適的語(yǔ)句。(每空1分,共5分)程序:inti,j,t,minval,minidx;for(i=l;i<=n-l;i++)一5for(j=i+2;j<=n;j++)if( (2)){(3);minidx=j;}if((4) ){t=A[i+U;A[minidx]=t;(1) (2) (3)(4) (5)5試寫出求有向無(wú)環(huán)圖的關(guān)鍵路徑算法的設(shè)計(jì)思路(10分)數(shù)據(jù)結(jié)構(gòu)試卷A答案選擇題(本大題共20小題,每題1分,共20分;答案填在下表內(nèi))12345678910cB:C:D:B:D:B:C:A:c11121314151617181920:cA:B:D:B:A:c:ACD二、填空題(本大題共5小題,每空1分,共12分;答案填在下表內(nèi))1有窮性確定性可行性2可讀性健壯性效率n(n-l)'student'隊(duì)列 先進(jìn)先出(a) (a)三、判斷題(對(duì)的打“ノ”,錯(cuò)的打“X二每小題1分,共10分)1)true;2)flase;3)true;4)true;5)flase;6)flase;7)true;8)true;9)flase;10)true四、畫岀樹的孩子兄弟表示法示意的樹或森林。(4分)其他形式的樹形結(jié)構(gòu)酌情給分。五、要求題(本大題共2小題,共12分)
ー趟劃分后的數(shù)據(jù)序列3124756六、按要求做題(12分)DFS遍歷序列vlv2v4v8v5v3v6v7(ー趟劃分后的數(shù)據(jù)序列3124756六、按要求做題(12分)DFS遍歷序列vlv2v4v8v5v3v6v7(或12485367)BFS遍歷序列vlv2V3V4V5v6V7V8(或12345678)鄰接點(diǎn)的順序可以不同,可以有不同的深度優(yōu)先和廣度優(yōu)先遍歷序列。(5分,如有錯(cuò)誤酌情扣分。)七、算法設(shè)計(jì)題(30分)1.將十進(jìn)制轉(zhuǎn)化成八進(jìn)制數(shù)(5分)測(cè)試用例:輸入10輸出122(5分,每空1分)(1)Ttop>0top++p->lchild!=NULLstackLtop]=p->lchild3(5分,每空1分)Iow<=high(low+high)/2high=mid-llow=mid+l14.(5分,每空1分)minidx=i+lminval>A[j]minval=A[j]i!=jA[i+l]=A[minidx]5(10分,不同答案,酌情得分)輸入頂點(diǎn)和弧信息,建立其鄰接表計(jì)算每個(gè)頂點(diǎn)的入度對(duì)其進(jìn)行拓?fù)渑判蚺判蜻^(guò)程中求頂點(diǎn)的Ve[i]將得到的拓?fù)湫蛄羞M(jìn)棧按逆拓?fù)湫蛄星箜旤c(diǎn)的VI[i]計(jì)算每條弧的e[i]和l[i],找出e[i]=l條]的關(guān)鍵活動(dòng)第2學(xué)期數(shù)據(jù)結(jié)構(gòu)試卷Aー、選擇題(本大題共15小題,每題2分,共30分;答案填在下表內(nèi)).從ー個(gè)長(zhǎng)度為100的順序表中刪除第30個(gè)元素時(shí)需向前移動(dòng)個(gè)元素A、70B、71C、69D、30.在ー個(gè)具有N個(gè)單元的順序表中,假定以地址低端(即下標(biāo)為1的單元)作為底,以top作為頂指針,則當(dāng)做進(jìn)棧處理時(shí)top變化為〇A、top不變B、top=0C、top=top-lD、top=top+l.從一個(gè)具有n個(gè)結(jié)點(diǎn)的單鏈表中査找其值等于x結(jié)點(diǎn)時(shí),在查找成功情況下,則平均比較ー個(gè)結(jié)點(diǎn)。A、nB、n/2C、(n-l)/2D、(n+l)/2.在ー個(gè)單鏈表中,若要?jiǎng)h除p指針?biāo)附Y(jié)點(diǎn)的后繼結(jié)點(diǎn),則執(zhí)行p->next;p->next=p->next->next;p->next=p->next->next;p=pー〉next;p=pー〉next->>next;.在ー個(gè)鏈隊(duì)列中,假定front和rear分別為隊(duì)首和隊(duì)后指針,則進(jìn)行插入S結(jié)點(diǎn)的操作時(shí)應(yīng)執(zhí)行ー〇front->next=s;front=s;s->next=rear; rear=s;rear->next=s; rear=s;s->next=front; front=s;.在一棵度為3的樹中度為3的結(jié)點(diǎn)數(shù)為3個(gè),度為2的結(jié)點(diǎn)數(shù)為1個(gè),度為1的結(jié)
點(diǎn)數(shù)為1個(gè),那么度為O的結(jié)點(diǎn)數(shù)為個(gè)A、6B、7C、8D、9.假定一棵ニ叉樹的結(jié)點(diǎn)數(shù)為33個(gè),則它的最小高度為最大高度為A、4,33B、5,33C、6,33D、6,32.在ー棵完全ニ叉樹中,若編號(hào)為i的結(jié)點(diǎn)有右孩子,則該結(jié)點(diǎn)的右孩子編號(hào)為,〇A、2iB、2i+lC、2i-lD、i/2.在ー個(gè)有向圖中,所有頂點(diǎn)的入度之和等于所有弧數(shù)和一倍。A、1B、2C,3D、4.對(duì)于ー個(gè)具有N個(gè)頂點(diǎn)的圖,若用鄰接矩陣表示,則該矩陣的大小為ー。A、NB、(N-l)2C、(N+l)2D、N2.已知一個(gè)圖如圖所示,在該圖的最小生成樹中各邊上數(shù)值之和為ー一〇6 (36 (3) 18も、6A,21B、26C、28D、33.已知一個(gè)圖如圖所示,由該圖行到的ー種拓樸序列為
.二維數(shù)組M的元素是4個(gè)字符(每個(gè)字符占ー個(gè)存儲(chǔ)單元)組成的串,行下標(biāo)i的范圍從〇到4,列下標(biāo)j的范圍從。到5,M按行存儲(chǔ)時(shí)元素M⑵⑷的起始地址與M按列存儲(chǔ)時(shí)元素一的起始地址相同。A、m⑵[4]B、M[4]⑵C、M[3][l]D、M[3][l].具有6個(gè)結(jié)點(diǎn)的無(wú)向圖至少應(yīng)有條邊オ能保證是連通圖。A、5B、6C、7D、8.采用鄰接表存儲(chǔ)的圖的深度優(yōu)先遍歷類似于ニ叉樹的0A先序遍歷B中序遍歷C,后序遍歷D.按層遍歷二、填空題(本大題共5小題,每空1分,共8分;答案填在下表內(nèi))12345678.數(shù)據(jù)結(jié)構(gòu)是研究數(shù)據(jù)元素之間抽象化的相互關(guān)系和這種關(guān)系在計(jì)算機(jī)中的存儲(chǔ)結(jié)構(gòu)表示,根據(jù)數(shù)據(jù)元素之間關(guān)系的不同特性,通常有下列四類基本結(jié)構(gòu):集合、線性結(jié)構(gòu)、⑴ 和⑵ 。.評(píng)價(jià)算法的標(biāo)準(zhǔn)很多,通常是以執(zhí)行算法所需要的 (3)和所占用的(4)來(lái)判別ー個(gè)算法的優(yōu)劣。.線性表的順序存儲(chǔ)結(jié)構(gòu)特點(diǎn)是表中邏輯關(guān)系相鄰的元素在機(jī)器內(nèi)的メリ也是相鄰的。.空格串的長(zhǎng)度為串中所包含(6)字符的個(gè)數(shù),空串的長(zhǎng)度為(7).加上表示指向前驅(qū)和 (8)的線索的ニ叉數(shù)稱為線索ニ叉樹。三、判斷題(對(duì)的打“丿”,錯(cuò)的打’'X二每小題1分,共10分)()1.線性表的唯一存儲(chǔ)形式是鏈表。()2.已知指針P指向鍵表L中的某結(jié)點(diǎn),執(zhí)行語(yǔ)句P=Pー〉next不會(huì)刪除該鏈表中的結(jié)點(diǎn)。()3.在鏈隊(duì)列中,即使不設(shè)置尾指針也能進(jìn)行入隊(duì)操作。()4.如果一個(gè)串中的所有字符均在另ー串中出現(xiàn),則說(shuō)前者是后者的子串。()5.設(shè)與一棵樹T所對(duì)應(yīng)的ニ叉樹為BT,則與T中的葉子結(jié)點(diǎn)所對(duì)應(yīng)的BT中的結(jié)點(diǎn)也一定是葉子結(jié)點(diǎn)。()6.快速排序是不穩(wěn)定排序。()7.任一A0E網(wǎng)中至少有一條關(guān)鍵路徑,且是從源點(diǎn)到匯點(diǎn)的路徑中最短的ー條。()8.若圖G的最小生成樹不唯一,則G的邊數(shù)一定多于nT,并且權(quán)值最小的邊有多條(其中n為G的頂點(diǎn)數(shù))。()9.給出不同的輸入序列建造ニ叉排序樹,一定得到不同的ニ叉排序樹。〇10.基數(shù)排序是多關(guān)鍵字排序。從最低位關(guān)鍵字起進(jìn)行排序。四、應(yīng)用題。(共44分)L畫出該圖的鄰接矩陣和鄰接表。根據(jù)鄰接表從A開始求DFS和BFS序列。(12分)2.假設(shè)用于通信的電子由字符集{岫,艱?£帥}中的字母構(gòu)成,這8個(gè)字母在電文中出現(xiàn)的概率分別為{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}畫出哈夫曼樹,并為這8個(gè)字母設(shè)計(jì)哈夫曼編碼。(8分).已知序列{70,73,69,23,93,18,11,68}請(qǐng)給出直接插入排序作升序排序每ー趟的結(jié)果和快速排序作升序排序時(shí)ー趟的結(jié)果。(10分).設(shè)有一組關(guān)鍵字關(guān)鍵碼集為{47,7,29,11,16,92,22,8,3),哈希表表長(zhǎng)為11,Hash(key)=keymod11,用線性探測(cè)法處理沖突,構(gòu)造哈希表,并求它成功查找的ASL。(8分).ニ叉樹的先序遍歷序列為ABCDEFGHI,中序遍歷序列為BCAEDGHFI,畫出這棵ニ叉樹。(6分)五、算法設(shè)計(jì)題(8分)
定義有序表抽象數(shù)據(jù)類型,并據(jù)此類型設(shè)計(jì)折半查找算法2學(xué)期數(shù)據(jù)結(jié)構(gòu)試卷A參考答案及評(píng)分標(biāo)準(zhǔn)ー、選擇題本大題共15小題,每題2分,共30分123456789101112131415ADDBCCCBADBADAA二、填空題(本大題共5ハ題,每空1分,共8分)12345678樹型結(jié)構(gòu)圖型結(jié)構(gòu)時(shí)間空間位置空格后繼三、判斷題(每小題1分,共10分)12345678910XVVXX-JXXXX四、應(yīng)用題44分)(12分)011000101000100001010010000101001010AB0.2AB0.2A3ACDECDEF35ADFS序列:ABDEFCBFS序列:ABCDFE(8分)7192632321100010100000000010100001110113.(10分)直接插入排序70,73,69,23,93,18,11,68[70,73],69,23,93,18,11,68[70,69,73],23,93,18,11,68[23,70,69,73],93,18,11,68[23,70,69,73,93],18,11,68[18,23,70,69,73,93],11,68[11,18,23,70,69,73,93],68[11,18,23,68,70,69,73,93]快速排序168,11,69,23,18],70,[93,73](8分)0 1 2345678910112247921637298ASL=5/3(6分)五、算法設(shè)計(jì)題(8分)typedefstruct{intkey;floatinfo;}JD;intbinsrch(JDr[],intn,intk){intlow,high,mid,found;low=l;high=n;found=0;while((low<=high)&&(found==0)){mid=(low+high)/2;if(k>r[mid].key)low=mid+l;elseif(k==r[mid].key)found=l;ドi;if(found==l)return(mid);elsereturn(O);程序設(shè)計(jì)教程ーー用C++語(yǔ)言編程(第二版習(xí)題解答)目錄TOC\o"1-5"\h\z\o"CurrentDocument"第1章概述 24\o"CurrentDocument"第2章 基本數(shù)據(jù)類型和表達(dá)式 26\o"CurrentDocument"第3章程序的流程控制ーー語(yǔ)句 29第4章 過(guò)程抽象ーー函數(shù) 38\o"CurrentDocument"第5章 構(gòu)造數(shù)據(jù)類型 47\o"CurrentDocument"第6章數(shù)據(jù)抽象ーー類 63\o"CurrentDocument"第7章操作符重載 82\o"CurrentDocument"第8章繼承ーー派生類 106第9草類屬(泛型)機(jī)制 模板 117第10章輸入/輸出(I/O) 123\o"CurrentDocument"第11章異常處理 130\o"CurrentDocument"第12章實(shí)例——面向?qū)ο蟮腤indows應(yīng)用程序框架 132第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é)果通過(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ù)。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)用/返回等指令。什么是軟件?軟件是如何分類的?答:計(jì)算機(jī)軟件是計(jì)算機(jī)系統(tǒng)中的程序以及有關(guān)的文檔。程序是對(duì)計(jì)算任務(wù)的處理對(duì)象(數(shù)據(jù))與處理規(guī)則(算法)的描述;文檔是為了便于大理解程序所需的資料說(shuō)明,供程序開發(fā)與維護(hù)使用。軟件通常可以分為系統(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)軟件。支撐軟件是指支持軟件開發(fā)與維護(hù)的軟件,一般由軟件開發(fā)大員使用,如軟件開發(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)在于:寫出的程序效率比較高,包括執(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)是:用其編寫的程序相對(duì)于用低級(jí)語(yǔ)言編寫的程序效率要低,翻譯成的目標(biāo)代碼量較大。簡(jiǎn)述編譯與解釋的區(qū)別。答:編譯是指把高級(jí)語(yǔ)言程序首先翻譯成功能上等價(jià)的機(jī)器語(yǔ)言程序或匯編語(yǔ)言程序,然后執(zhí)行目標(biāo)代碼程序,在目標(biāo)代碼程序的執(zhí)行中不再需要源程序。解釋則是指対源程序中的語(yǔ)句進(jìn)行逐條翻譯并執(zhí)行,翻譯完了程序也就執(zhí)行完了,這種翻譯方式不產(chǎn)生目標(biāo)程序。一般來(lái)說(shuō),編譯執(zhí)行比解釋執(zhí)行效率要高。簡(jiǎn)述C++程序的編譯執(zhí)行過(guò)程。在你的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"。然后再通過(guò)ー個(gè)聯(lián)接程序把由源文件產(chǎn)生的目標(biāo)文件以及程序中用到的一些系統(tǒng)功能所在的目標(biāo)文件聯(lián)接起來(lái),作為ー個(gè)可執(zhí)行文件保存到外存,文件名為“*.exe"。最后通過(guò)操作系統(tǒng)提供的應(yīng)用程序運(yùn)行機(jī)制,把可執(zhí)行文件裝入內(nèi)存,運(yùn)行其中的可執(zhí)行程序。在VisualC++6.0環(huán)境中,苜先要建立一個(gè)project(項(xiàng)目);其次往該project中添加、編輯程序模塊(源文件);然后選擇菜單Build中的Build...或RebuildAH;最后選擇菜單Build中的Execute...運(yùn)行程序。C++的單詞分成哪些種類?答:構(gòu)成C++的單詞有:標(biāo)識(shí)符、關(guān)鍵詞、字面常量、操作符以及標(biāo)點(diǎn)符號(hào)等。下面哪ー些是合法的C++標(biāo)識(shí)符?extern,_book,Car,car_l,calr,Icar,friend,carl_Car,Car_Type,No.1,123答:合法的C++標(biāo)識(shí)符:_book,Car,car_l,calr,carl_Car,Car_Type第2章基本數(shù)據(jù)類型和表達(dá)式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ù))可以通過(guò)“sizeof(類型名)”來(lái)計(jì)算。下面哪一些是合法的C++字面常量,它們的類型是什么?-5.23,.20,-000,red,-5.23,.20,-000,red,le+50,e5,A,'\r',105, 20-0.0e5,'Xn*,3.14',false答:字面常量是指在程序中直接寫出常量值的常量。-5.23,le+50,-25,20,.20,le-5,-0.0e5,'\n',"000,'A', '5','\r','\f',"TodayisMonday.","ヽ""都是字面常量。其中:整數(shù)類型常量:-25,20,-000實(shí)數(shù)類型常量:-5.23,le+50,.20,le-5,-0.0e5字符常量:'\n', 'A', '5','\r','\f'字符串常量:"TodayisMonday.", "\""什么是符號(hào)常量?符號(hào)常量的優(yōu)點(diǎn)是什么?答:符號(hào)常量是指有名字的常量,在程序中通過(guò)常量的名字來(lái)使用這些常量。程序屮使用符號(hào)常量有以下優(yōu)點(diǎn):1)增加程序易讀性2)提高程序?qū)ΤA渴褂玫囊恢滦?)增強(qiáng)程序的易維護(hù)性如何理解變量?變量定義和聲明的作用是什么?答:在程序中,其值可以改變的量稱為變量。變量可以用來(lái)表示可變的數(shù)據(jù)。程序中使用到的每個(gè)變量都要有定義。變量定義指出變量的類型和變量名,另外還可以為變量提供ー個(gè)初值。C++中使用變量之前,必須對(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.212U+3.0F*24L答:表達(dá)式中類型轉(zhuǎn)換規(guī)則是:基于單個(gè)操作符依次進(jìn)行轉(zhuǎn)換。3與5同類型,不轉(zhuǎn)換,結(jié)果為〇,轉(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é)果做加法。將下列公式表示成C++的表達(dá)式:…加+(可利用C++標(biāo)準(zhǔn)庫(kù)中的求平方根的函數(shù):sqrt(x))2aJs(s_a)(s_b)(s-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/(l+(b/(2.5+c))))+(4*pi*r*r*r/3)寫出下列條件的C++表達(dá)式i能被j整除。Ch為字母字符。m為偶數(shù)。n是小于100的奇數(shù)。a、b、c構(gòu)成三角形的三條邊。答:1)i%j==0((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))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)可以不用判斷在你的計(jì)算機(jī)上運(yùn)行下面的程序:#include<iostream>usingnamespacestd;intmain(){doublea=3.3,b=l.1;inti=a/b;cout<<i<<endl;return0;結(jié)果與你預(yù)期的是否相符?如果不符,請(qǐng)解釋它的原因。答:運(yùn)行結(jié)果為2。由于十進(jìn)制小數(shù)3.3和1.1無(wú)法用double型精確表示。通過(guò)查看結(jié)果內(nèi)存內(nèi)的內(nèi)容,最終結(jié)果比3.0略小,所以強(qiáng)制轉(zhuǎn)換成int型后結(jié)果為2。不引進(jìn)第三個(gè)變量,如何交換兩個(gè)整型變量的值?答:方法一:a=b人a;b=aAb;a=bAa;方法二:a=a+b;b=a-b;a=a-b;舉例說(shuō)明把int類型轉(zhuǎn)成float類型可能會(huì)丟失精度。答:如果int型與float型都是4個(gè)字節(jié),由于在float型的數(shù)據(jù)表示中,有若干位用來(lái)表示指數(shù),因此,尾數(shù)的位數(shù)不到4個(gè)字節(jié)(根據(jù)IEEE標(biāo)準(zhǔn),只有23個(gè)二進(jìn)制位)。如果ー個(gè)int型的數(shù)大于23位(二進(jìn)制),則無(wú)法用float型精確表示。例如:intx=0x01000001;floaty=x;//x的最后一位T’不是被截掉就是被舍入!cout?x?endl?setprecision(30)?y?endl;第3章程序的流程控制ーー語(yǔ)句編寫ー個(gè)程序,將華氏溫度轉(zhuǎn)換為攝氏溫度。轉(zhuǎn)換公式為:c=|(f-32),其中,c為攝氏溫度,f為華氏溫度解:#include<iostream>usingnamespacestd;intmain(){doublec,f;cout?"PleaseinputanF-temperature:"?endl;cin?f;c=(f-32)*5/9;cout?"TheC-temperatureis:"?c?endl;return0;編寫ー個(gè)程序,將用24小時(shí)制表示的時(shí)間轉(zhuǎn)換為12小時(shí)制表示的時(shí)間。例如,輸入20和16(20點(diǎn)】6分),輸出8:16pm:輸入8和16(8點(diǎn)16分),輸出8:16am。解:#include<iostream>usingnamespacestd;intmain(){inthour,minute;charnoon;cout?"Pleaseinputatimein24-hourformat:"?endl;cout?"hour:";cin?hour;if(hour<0IIhour>23){cout?"Theinputhouriswrong!"?endl;return-1;if(hour>12){hour=hour-12;noon='p*;elsenoon=*a';cout?"minute:M;cin?minute;if(minute<0IIminute>59){cout?"Theinputminuteiswrong!"?endl;return-1;cout?endl?"Thetimein12-hourformatis:"?hour?”:"?minute;if(noon='p')cout?"pm"?endl;elsecout?"am"?endl;return0;編寫一個(gè)程序,分別按正向和逆向輸出小寫字母a?z。解:#include<iostream>usingnamespacestd;intmain(){charc;for(c=*a';c<=*z';C++)cout?c?"";cout?endl;for(c=,z,;c>='a';c-)cout?c?"";cout?endl;return0;編寫ー個(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++;cout?"Thenumberofdigitsintheintergeris:"?count?endl;return0;編寫ー個(gè)程序,對(duì)輸入的ー個(gè)算術(shù)表達(dá)式(以字符#結(jié)束),檢查圓括號(hào)配對(duì)情況。輸出配對(duì)、多左括號(hào)或多右括號(hào)。解:#include<iostream>usingnamespacestd;intmain(){intcount=0;charch;cout?"Pleaseinputanexpression:"?endl;fbr(cin?ch;ch!='#';cin?ch){if(ch==ncount++;elseif(ch==')')count-;if(count==0)cout?"配對(duì)!”?endl;elseif(count>0)cout?”多左括號(hào)!”?endl;elsecout?”多右括號(hào)!”vvendl;return0;編寫ー個(gè)程序,輸入一個(gè)字符串(以字符#結(jié)束),對(duì)其中的“〉不進(jìn)行計(jì)數(shù)解:#include<iostream>usingnamespacestd;intmain(){intcount=0;charchl=\。',ch2;cout?"Pleaseinputastring(terminatedwith#):"?endl;for(cin?ch2;ch2!='#';cin?ch2){if(ch2='='&&chi=='>')count++;chi=ch2;cout?”Numberof>=:"?count?endl;return0;假定郵寄包裹的計(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!"?endl;else{distance/=1000;if(weight<=60)charge=14+(int)distance;elsecharge=15+(int)distance*2;)}cout?charge?endl;return0;}編寫ー個(gè)程序,計(jì)算圓周率??衫霉?直到最后ー項(xiàng)的絕對(duì)值小于!0\解:#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;編寫ー個(gè)程序,求所有這樣的三位數(shù),它們等于它們的各位數(shù)字的立方和。例如153=I3+334-53解:#include<iostream>usingnamespacestd;intmain(){for(intn=100;n<=999;n++){inti,j,k;i=n/100;〃百位數(shù)字j=n%100八〇;〃十位數(shù)字k=n%10;〃個(gè)位數(shù)字if(n==i*i*i+j*j*j+k*k*k)cout?n?endl;return0;1或#include<iostream>usingnamespacestd;intmain(){for(inti=1;i<=9;i++){intn=i*100,m=i*i*i;for(intj=0;j<=9;j++){intnl=n+j*IO,ml=m+j*j*j;for(intk=0;k<=9;k++){if(nl+k==ml+k*k*k)J_return0;編寫?個(gè)程序,求a和b的最大公約數(shù)。解:#include<iostream>usingnamespacestd;intmain(){inta,b;cout?”Pleaseinputa,b:M?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:M?endl;cin?a?b;intc;do{c=a-b*(a/b);a=b;b=c;}while(c!=0);cout?a?endl;return0;)或#include<iostream>usingnamespacestd;intmain(){inta,b;cout?"Pleaseinputa,b:"?endl;cin?a?b;intc=(a>b)?b:a;a=(a>b)?a:b;b=c;while(c>0){c=a%b;a=b;b=c;cout?a?endl;return0;編寫ー個(gè)程序,輸出十進(jìn)制乘法表。12112224336991839396189272781解:#include<iostream>usingnamespacestd;intmain(){for(inti=0;i<10;i++){if(i!=0)cout?i;cout?へ”;for(intj=l;j<10;j++)if(i*j!=0)cout?i*j?'ヘビ;elsecout?j?”\t";cout?endl;}return0;將下面的for循環(huán)重寫為等價(jià)的while循環(huán)for(i=0;i<max_length;i++)if(input_line[i]==*?1)quest_count++解:i=0;while(i<max_length){if(input_line[i]=='?')quest_count++;i++;說(shuō)明下面的三個(gè)程序可以用圖3-6中的三種控制結(jié)構(gòu)來(lái)表示
過(guò)程抽(的作用一段程序代碼它通常完成一個(gè)獨(dú)立的為其!!也地方通過(guò)子程域簡(jiǎn)述局部變量的作用。答:子程序是南在程斥過(guò)程抽(的作用一段程序代碼它通常完成一個(gè)獨(dú)立的為其!!也地方通過(guò)子程域簡(jiǎn)述局部變量的作用。答:子程序是南在程斥月名字來(lái)使用它們。除了能減少程有代碼外,手用子程品勺主要作用是實(shí)現(xiàn)過(guò)程抽象,使用者只需知道子程序的功能,而不需要知道它是如何實(shí)現(xiàn)的,這有利于大型、復(fù)雜程序的設(shè)計(jì)和理解。第4章答: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í)間段。C++把變量的生存期分為靜態(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)的程序段。在C++中,根據(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í)體。下面的聲明中哪ー些是定義性聲明?這些定義性聲明的非定義性聲明是什么?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**);下面的宏cubel和函數(shù)cube2相比,各有什么優(yōu)缺點(diǎn)?#definecubel(x)((x)*(x)*(x))doublecube2(doublex){returnx*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ì)于:inta;當(dāng)a的值很大時(shí),cube1(a)得不到正確結(jié)果!(因?yàn)榻Y(jié)果類型為int,而如果a*a*a的結(jié)果超出了int型的范圍,則結(jié)果將會(huì)截?cái)?)編寫ー個(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;分別用函數(shù)實(shí)現(xiàn)習(xí)題3.8中的第1、4、7和10題的程序功能。答:第1題:return(x-32)*5/9;第4題:intnum_ofldigits(intgzint){intcount=0;if(gzint<0)gzint=-gzint;while(gzint!=0){gzint=gzint/10;count++;returncount;第7題:doublecharge(doubleweight,doubledistance)(doublemoney=0;if(weight<=15)money=5;elseelseelseelseif(weight<=30)if(weight<=45)if(weight<=60)money=15+(int)money=9;money=12;money=14+(int)(distance/1000);(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;寫出下面程序的執(zhí)行結(jié)果:#include<iostream>usingnamespacestd;intcount=0;intfib(intn){count++;if(n==lreturnelsereturn}IIn==2)1;fib(n-l)+fib(n-2);intmain(){cout?fib(8);cout<<','<<count<<endl;return0;}答:21,41分別寫出計(jì)算Hermit多項(xiàng)式Hn(x)值的迭代和遞歸函數(shù)。Hn(x)定義如下:Ho(x)=1%(x)=2xHn(x)=2xHn-i(x)-2(n-1)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-1,x)-2*(n-1)*Hermit_Recursion(n-2,x)寫出計(jì)算Ackermann函數(shù)Ack(m,n)值的遞歸函數(shù)。Ack(m,n)定義如下(m20,n20):Ack(0,n)=n+1Ack(mz0)=Ack(m-1,1)Ack(mzn)=Ack(m-1zAck(mzn-1)) (m>0zn>0)答:intAck.(intm,intn){if(m==0)returnn+1;elseif(n==0)returnAck(m-1/1);elsereturnAck(m-1,Ack(m,n-1));根據(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(n-1)+path(n-2);)編程解決下面的問(wèn)題:若一頭小母牛,從出生起第四個(gè)年頭開始每年生一頭母牛,按此規(guī)律,第n年有多少頭母牛?答:除了第?年到第三年外,每?年的母牛數(shù)應(yīng)該是上?年的母牛數(shù)加上三年前的母牛數(shù)(現(xiàn)在它們是第四年T,要生小牛了!)intf(intn){if(n==lIIn==2I|n==3)return1;returnf(n-3)+f(n-1);假設(shè)有三個(gè)重載的函數(shù):voidfunc(intzdouble);voidfunc(long,double);voidfunc(int,char);對(duì)下面的函數(shù)調(diào)用,指出它們分別調(diào)用了哪ー個(gè)重載函數(shù);如果有歧義,指出導(dǎo)致歧義的重載函數(shù)定義。func('5,3.0);func(3L,3);func("three*',3.0);func(3L,*c');func(true,3);答:func('c*,3.0);與voidfunc(int,double);匹配func(3L,3);與voidfunc(long,double);匹酉ピfunc("three",3.0);沒(méi)有與之匹配的函數(shù)func(3L,'c');與voidfunc(long,double);和voidfunc(int,char);均能匹配func(true,3);與voidfunc(int,double);和voidfunc(int,char);均能匹配下面的函數(shù)定義為什么是正確的?在函數(shù)f中如何區(qū)分(使用)它們?voidf(){intf;答:兩個(gè)f的作用域不一樣,voidf()中的f為全局作用域,intf;中的f為局部作用域。在函數(shù)f中如果使用局部變量,則用f;如果使用函數(shù)f,則用::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ù)的源文件中用文件包含命令#include把該頭文件包含進(jìn)來(lái)。由于內(nèi)聯(lián)函數(shù)名具有文件作用域,因此,不會(huì)出現(xiàn)重復(fù)定義問(wèn)題。用循環(huán)實(shí)現(xiàn)例4-12中的輾轉(zhuǎn)相除法計(jì)算最大公約數(shù)。答:intgcd(intx,inty){while(y!=0){intt=y;y=x%y;x=t;returnx;第5章構(gòu)造數(shù)據(jù)類型枚舉類型有什么好處?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)行輸入/輸出。指針類型主要用于什么場(chǎng)合?引用類型與指針類型相比,其優(yōu)勢(shì)在哪里?答:指針類型主要用于參數(shù)傳遞和對(duì)動(dòng)態(tài)變量的訪問(wèn)。在C++中,指針類型還用于訪問(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ì)使用者而言是透明的。寫出下面程序的運(yùn)行結(jié)果:#include<iostream>usingneunespacestd;voidf(int&xzinty){y=x+y;x=y%3;cout<<x<<‘、七’<<y<<endl;intmain(){intx=10,y=19;f(y,x);cout<<x<<'\t'<<y<<endl;£(x,x);cout<<x<<'\t'<<y<<endl;return0;TOC\o"1-5"\h\z答:2 2910 22 202 2從鍵盤輸入某個(gè)星期每一天的最高和最低溫度,然后計(jì)算該星期的平均最低和平均最高溫度并輸出之。解:#include<iostream>usingnamespacestd;enumDay{SUN,MON,TUE,WED,THU,FRエ,SAT};intmain(){doublemax,min,maxsum=0for(Dayd=SUN;d<=SA{cout<<"Pleaseinput"switch(d){caseSUN:{cout<<"caseMON:{cout<<"caseTUE:{cout<<"caseWED:{cout<<"caseTHU:{cout<<"caseFRI:{cout<<"caseSAT:{cout<<",minsum=0;T;d=(Day)(d+1))JSunday";break;}Monday”;break;}Tuesday";break;}Wednesday";break;}Thursday";break;}Friday";break;}Saturday";break;}cout<<'*1stemperature(maxmin):"<<endl;cin>>max>>min;maxsum+=max;minsum+=min;cout<<"Theaveragetemperatureofmaxismis:"<<maxsum/7.0<<endlcout<<"Theaveragetemperatureofminismis:"<<minsum/7.0<<endlreturn0;編寫ー個(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[j]!=wei[i-j-1])returnfalse;returntrue;編寫ー個(gè)函數(shù)int_to_str(imn,charstr口),把ー個(gè)int型數(shù)(由參數(shù)n表示)轉(zhuǎn)換成?個(gè)字符串(放在str中)〇解:voidint_to_str(intnum,char*str){charc;inti=0;while(num!=0){str[i]=num%10+'0*;numI-10;i++;}str[i]='\0,;for(intj=0;j<i/2;j++){c=str[j];str[j]=strは-j-l];str[i-j-1]=c;編寫ー個(gè)函數(shù)計(jì)算ー元二次方程的根。要求:方程的系數(shù)和根均用參數(shù)傳遞機(jī)制來(lái)傳遞。解:intqiugen(doublea,doubleb,doublec,double&xl,double&x2){inti=b*b-4*a*c;if(i>=0){xl=(sqrt(i)-b)/(2*a);x2=(0-sqrt(i)-b)/(2*a);return1;else{xl=(0-b)/(2*a);x2=sqrt(0-i)/(2*a);return0;編寫ー個(gè)程序,從鍵盤輸入ー個(gè)字符串,分別統(tǒng)計(jì)其中的大寫字母、小寫字母以及數(shù)字的個(gè)數(shù)解:#include<iostream>usingnamespacestd;intmain(){charstr[100];cout<<"Pleaseinputastring:\n";cin>>str;intcount_lower=0,count_upper=0,count_num=0;for(inti=0;str[i]!='、〇,i++){if(str[i]>='A'&&str[i]<=*Z')count_upper++;elseif(str[i]>='a'&&str[i]<='z')count_lower++;elseif(str[i]>=101&&str[i]<='9')count_num++;cout<<count_upper<<'\t*<<count_lower<<'\t'<<count_num<<endl;return0;021設(shè)有一個(gè)矩陣:102,現(xiàn)把它放在一個(gè)二維數(shù)組a中。寫出執(zhí)行下面的語(yǔ)句之后a的值120for(inti=0;i<=2;i++)for(intj=0;j<=2;j++)a[i][j]=a[a[i][j]][a[j][i]];解:0 2 020 02 2 0實(shí)現(xiàn)下面的數(shù)組元素交換位置函數(shù):voidswap(inta[],intm,intn);該函數(shù)能夠把數(shù)組a的前m個(gè)元素與后n個(gè)元素交換位置,即,交換前:81,a2,???,3m/3^+1/3^+2/???r3m+N交換后:3m+irHm+2,?一,aM+N,a],a2,???/3m要求:除數(shù)組a外,不得引入其它數(shù)組。解:voidswap(inta[]rintm,intn);{for(inti=0;i<m;i++){intt=a[0];for(intj=l;j<m+n;j++)a[j-1]=a[j];A[m+n-1]=t;編寫ー個(gè)程序,計(jì)算ー個(gè)矩陣的鞍點(diǎn)。矩陣的鞍點(diǎn)是指矩陣中的ー個(gè)位置,該位置上的元素在其所在的行上最大、列上最小。(ー個(gè)矩陣也可能沒(méi)有鞍點(diǎn)。)#include<iostream>usingnamespacestd;#defineM3#defineN3intmain()(inta[M][N];//存放矩陣inti,j;//輸入矩陣元素for(i=0;i<M;i++)for(j=0;j<N;j++)
cin>>a[i][j];intlin_max[M],//存放各行的最大元素col__min[N];//存放各列的最小元素〃計(jì)算每行的最大元素for(i=0;i<M;i++){intmax=a[i][0];for(j=l;j<N;j++)if(a[i][j]>max)max=a[i][j];lin_max[i]=max;〃計(jì)算每列的最小元素for(j=0;j<N;j++){intmin=a[0][j];for(i=l;i<M;i++)if(a[i][j]<min)min=a[i][j];col_min[j]=min;//求鞍點(diǎn)for(i=0;i<M;i++){for(j=0;j<N;j++){if(a[i](j]==lin_max[i]&&a[i)[j]==col_min[j]){cout<<"鞍點(diǎn)是:"<<i<<*,'<<j<<endl;cout<<”沒(méi)有鞍點(diǎn)、n”;return0;編程實(shí)現(xiàn):在ー個(gè)由NXN(N為大于1的奇數(shù))個(gè)方格組成的方陣中,填入1,2、3、...、M各個(gè)數(shù),使得每一行、每一列以及兩個(gè)對(duì)角線上數(shù)的和均相等(奇數(shù)幻方問(wèn)題)。例如,下面是ー個(gè)3X3的幻方:TOC\o"1-5"\h\z8 1 65 79 2(提示:把1填在第一行最中間的格子中,然后按下面的方法依次來(lái)填其它的數(shù):如果當(dāng)前格子是方陣中最右上角的格子,則把下一個(gè)數(shù)填在下一行的同一列格子中;否則,如果當(dāng)前格子在第一行上,則把下
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《證券基本知識(shí)培訓(xùn)》課件
- 七年級(jí)英語(yǔ)Peopleandwork課件
- 2025年寫人要抓住特點(diǎn)
- 大學(xué)計(jì)算機(jī)專業(yè)介紹
- 《試驗(yàn)室管理》課件
- 單位管理制度集粹選集【職員管理篇】
- 單位管理制度范例選集人員管理十篇
- 單位管理制度呈現(xiàn)合集人員管理十篇
- 單位管理制度呈現(xiàn)大合集人事管理篇
- (高頻選擇題50題)第1單元 中華人民共和國(guó)的成立和鞏固(解析版)
- 2024秋期國(guó)家開放大學(xué)??啤陡叩葦?shù)學(xué)基礎(chǔ)》一平臺(tái)在線形考(形考任務(wù)一至四)試題及答案
- 敞開式硬巖TBM掘進(jìn)操作參數(shù)的控制 方志威
- (中職)《電子商務(wù)基礎(chǔ)》第1套試卷試題及答案
- 汽車三維建模虛擬仿真實(shí)驗(yàn)
- 無(wú)人機(jī)智慧旅游解決方案
- 行車起重作業(yè)風(fēng)險(xiǎn)分析及管控措施
- 健康管理主題PPT模板-健康管理
- 山西事業(yè)單位專業(yè)技術(shù)職務(wù)聘任管理
- 110kV及以上電力電纜敷設(shè)施工方法要點(diǎn)
- 國(guó)家開放大學(xué)電大??啤缎谭▽W(xué)(1)》期末題庫(kù)及答案
- 消防安全承諾書[新].doc
評(píng)論
0/150
提交評(píng)論