初級(jí)程序員下半年下午試題_第1頁(yè)
初級(jí)程序員下半年下午試題_第2頁(yè)
初級(jí)程序員下半年下午試題_第3頁(yè)
初級(jí)程序員下半年下午試題_第4頁(yè)
初級(jí)程序員下半年下午試題_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、初級(jí)程序員2011下半年下午試題試題一閱讀以下說明和流程圖。說明以下流程圖用于檢查數(shù)組A1:n中的元素是否為自然數(shù)1n的一個(gè)排列(含有1n各數(shù))。若是,則輸出OK否則輸出所缺的自然數(shù)及其個(gè)數(shù)mi為檢查A1:n中是否含有k,只要判斷P(k)=(A(1)-k)*(A(2)-k)*-*(A(n-k)是否等于0即可。流程圖試題二1、閱讀以下說明和C程序代碼。說明下面是一個(gè)待修改的C程序,其應(yīng)該完成的功能是:對(duì)于輸入的一個(gè)整數(shù)num1計(jì)算其位數(shù)k,然后將其各位數(shù)字按逆序轉(zhuǎn)換為字符串保存并輸出。若num為負(fù)整數(shù),則輸出字符串應(yīng)有前綴“-”。例如,將該程序修改正確后,運(yùn)行時(shí)若輸入“14251”,則輸出“15

2、241”;若輸入“-6319870',則/&出“-0789136下面給出的C程序代碼中有五處錯(cuò)誤,請(qǐng)指出錯(cuò)誤代碼所在的行號(hào)并給出修改正確后的完整代碼行。C程序代碼行號(hào)代碼01#include<stdio.h>02#include<stdlib.h>03intmain()0405longnum=0,t=0;char*pstr,i=0,k=0;0607scanf("%1d",num);/*輸入一個(gè)整數(shù),存入num*/08t=num;k=num!=0?0:1;09while(t>=0)/*計(jì)算位數(shù)*/10t=t/10;11k+;121

3、314pstr=(char*)malloc(k+2)*sizeof(char);/十中請(qǐng)字符串的存儲(chǔ)空間15*/16if(pstr=0)return-1;1718i=0:19if(num<0)20num=-num;21pstr0='-';i=1;2223for(;k>0;k-)/*形成字符串*/24pstri+=num%10;25num=num/10;2627pstrk尸'0'/*設(shè)置字符串結(jié)尾*/28printf("%sn",pstr);29free(pstr);30return0:試題三閱讀以下說明和C代碼。說明某市在進(jìn)行市長(zhǎng)

4、選舉,該市共分為M個(gè)選區(qū)(1<M<6,從1開始順序編號(hào)),共有N個(gè)競(jìng)選者參選(1<N<5,從A開始順序編號(hào))。經(jīng)投票后,所得選票數(shù)據(jù)如表3-1所示。表3-1選票數(shù)據(jù)選區(qū)競(jìng)選者A競(jìng)選者B競(jìng)選者C競(jìng)選者D1192482063721479031221318612121384114214083952671338229現(xiàn)已將選票數(shù)據(jù)存入文本文件data.txt,該文件內(nèi)容格式如下:共有M行,每行N+1個(gè)整數(shù),第一個(gè)整數(shù)為選區(qū)編號(hào),隨后為N個(gè)競(jìng)選者在該選區(qū)所得票數(shù)。下面的程序先從文件中讀入選票數(shù)據(jù)存入二維數(shù)組data,然后完成下列功能:a.計(jì)算并顯示每個(gè)競(jìng)選者獲得的選票數(shù)及占總選票

5、數(shù)的百分比;b.如果任一競(jìng)選者獲得的選票數(shù)超過總選票數(shù)的50%則顯示該競(jìng)選者獲勝;c.如果沒有競(jìng)選者獲得總選票數(shù)的50犯上,則顯示兩位得票最高的競(jìng)選者需再進(jìn)行決選。在下面的程序代碼中,競(jìng)選者A的編號(hào)為1,競(jìng)選者B的編號(hào)為2,以此類推。C代碼#include<stdio.h>#include<stdlib.h>#defineM5/*選區(qū)數(shù)*/#defineN4/*競(jìng)選者人數(shù)*/intmain(intargc,charargv口)FILE*fin;intdataM+1N+1;/*data0存放選區(qū)編號(hào),dataMj存放j號(hào)競(jìng)選者得票總數(shù)*/intMAXP1,cd1;/*MA

6、XP1、cd1存放得票最多者的票數(shù)和競(jìng)選者編號(hào)*/intMAXP2,cd2;/*MAXP2、cd2存放得票次多者的票數(shù)和競(jìng)選者編號(hào)*/inti,j,totalP;/*totalP存放總票數(shù)*/fin=fopen("data.txt","r");if(!fin)return-1;i=0;j=0;while(!feof(fin)/*從文件讀入數(shù)據(jù)*/fscanf(fin,"%d",&dataij);;if(j>N)j=0;i+;fclose(fin);totalP=0;MAXP1=0;MAXP2=0;cd1=0;cd2=0;

7、for(j=1;j<N+1;j+)dataMj=;/*設(shè)置競(jìng)選者得票總數(shù)初始值*/for(i=0;i<M;i+)/*計(jì)算j號(hào)競(jìng)選者的得票總數(shù)*/dataMj+=dataijif(dataMjMAXP1);cd2=cd1;MAXP1=dataMj;cd1=j;elseif(dataMj>MAXP2)(MAXP2=dataMj;cd2=j;(4) ;/*計(jì)算總票數(shù)*/for(j=1;j<N+1;j+)printf("Candidate-%c:%ci",j+'A'-1,dataMj);printf(%.21fn",(double)

8、dataMj/totalP);printf("n");if(5)>0.5)/*判斷得票數(shù)最多者的得票率*/ncd1+'A'-1);elseprintf("Result:Candidate-%CPKCandidate-ncd1+'A'-1,cd2+'A'-1);system("pause);return0;試題二閱讀以下說明和C函數(shù)。說明約瑟夫問題是一個(gè)經(jīng)典的問題,其描述是:有n個(gè)人(編號(hào)為1n)圍成一圈,從第1個(gè)人開始,按照順時(shí)針方向從1開始計(jì)數(shù)到m(即數(shù)到第m個(gè)人),讓其出圈,然后再?gòu)钠漤槙r(shí)針方向的

9、下一個(gè)人開始,依次計(jì)數(shù)到m并讓其出圈,重復(fù)這個(gè)過程,直到所有人都出圈,試給出出圈者的順序。以n-5,m-3為例,其出圈順序?yàn)?,1,5,2,4,過程如圖4-1所示。下面的函數(shù)Joseph()在單向循環(huán)鏈表表示的基礎(chǔ)上模擬上述出圈過程。n為5時(shí)的單向循環(huán)鏈表結(jié)構(gòu)如圖4-2所示。鏈表的結(jié)點(diǎn)類型定義如下:typedefstructNodeintno;structNode*next;Node,*LinkList;函數(shù)Joseph(LinkListtail,intn,intm)的處理思路如下:(1)用k計(jì)數(shù),每次都從0開始,當(dāng)計(jì)數(shù)到m-1時(shí)結(jié)束本次計(jì)數(shù);(2)通過指針p查找出圈者所對(duì)應(yīng)的結(jié)點(diǎn),當(dāng)k的值等

10、于m-1時(shí),p應(yīng)指向出圈者對(duì)應(yīng)結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn);(3)通過刪除結(jié)點(diǎn)表示出圈處理;(4)當(dāng)m大于圈中剩余人數(shù)時(shí),為了避免重復(fù)計(jì)數(shù),用模運(yùn)算修改m的值;(5)計(jì)數(shù)和刪除操作完成后再恢復(fù)m的原值。C函數(shù)voidJoseph(LinkListtail,intn,intm)/*單循環(huán)鏈表包含n個(gè)結(jié)點(diǎn),tai1為鏈表的尾指針,m為計(jì)數(shù)值*/LinkListp,q;intk,i,old_m=m;p=tai1;for(i=n;i>1;-i)/*i表示圈中剩余人數(shù)*/m=m%i;/*避免重復(fù)計(jì)數(shù)*/if(0=m)m=(1);k=0;while(k<(2);k+;printf("%d'

11、n",(4);/*輸出出圈者的編號(hào)*/q=p->next;(5) =q->next;/*刪除出圈者對(duì)應(yīng)的結(jié)點(diǎn)*/free(q);m=old_m;printf("%(n",p->No);試題五閱讀以下說明、圖和C+弋碼。說明已知某公司主要有兩大類耗電資產(chǎn)(Asset):計(jì)算機(jī)(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關(guān)閉的房燈、計(jì)算機(jī)顯示器等在夜間關(guān)閉。為了實(shí)現(xiàn)上述需求,設(shè)計(jì)了如圖5-1所示的類圖,并用下面的C+弋碼加以實(shí)現(xiàn)。C抖代碼#include<typeinfo>#i

12、nclude<iostream>usingnamespacestd;classAsset/*通用資產(chǎn),基類*/public:virtualAsset();classPowerSwitchable/*抽象基類,可在夜間關(guān)閉電源的物體接口*/public:virtualvoidpowerDown()=0;/*powerDown()函數(shù)接口*/virtualvoidpowerUp()=0;/*powerUp函數(shù)接口*/;一classComputerAsset:publicAsset/*計(jì)算機(jī)資產(chǎn)*/protected:intdeskNumber;public:ComputerAsset(

13、intdeskNumber)this->deskNumber=deskNumber;;classComputerCPU/*計(jì)算機(jī)主機(jī),永不關(guān)閉*/public:ComputerAssetComputerCPU(intdeskNumber):(deskNumber);classComputerMonitor/*計(jì)算機(jī)顯示器*/public:ComputerMonitor(introomNumber):ComputerAsset(roomNumber), PowerSwitchable() ComputerMonitor() void powerDown() void powerUp() /

14、*關(guān)電源,代碼略*/*開電源,代碼略*/;/*BuildingAsset 、BuildingLight.EmergencyLight 略*/和 RoomLights 代碼classBuildingManagementprivate:Asset*things24;intnumltems;public:voidgoodNight()/*值班員定時(shí)“關(guān)閉”時(shí)調(diào)用,關(guān)閉可關(guān)閉的電源*/for(inti=0;i<numltems;i+)(3)ps=dynamlccast<PowerSwitchable*>(thingsi);if(ps!=0)ps->powerDown();/*g

15、oodMorning()與goodNight()類似,依次調(diào)用powerUp(),實(shí)現(xiàn)略*/voidadd(Asset*thing)/*為建筑添加資產(chǎn)*/things(4)=thing;;intmain()BuildingManagement*b1=(5)BuildingManagement。;/101房間的控/101房間的應(yīng)急/101房間4號(hào)b1->add(newRoomLights(101);b1->add(newEmergencyLight(101);b1->add(newComputerCPU(10104);桌上的計(jì)算機(jī)主機(jī)b1->add(newComputer

16、Monitor(10104);/101房間4號(hào)桌上的計(jì)算機(jī)顯示器b1->goodNight();deleteb1;試題六閱讀以下說明和Java代碼。說明已知某公司主要有兩大類耗電資產(chǎn)(Asset):計(jì)算機(jī)(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關(guān)閉的房燈、計(jì)算機(jī)顯示器等在夜間關(guān)閉。為了實(shí)現(xiàn)上述需求,設(shè)計(jì)了如圖6-1所示的類圖,并用下面的Java代碼加以實(shí)現(xiàn)。Java代碼abstractclassAsset/*通用資產(chǎn),基類*/interfacePowerSwitchable/*可在夜間關(guān)閉電源的物體實(shí)現(xiàn)該接口*/publi

17、cvoidpowerDown();publicvoidpowerUp();abstractclassBuildingAssetextendsAsset/*建筑物資產(chǎn)*/protectedintroom;publicBuildingAsset(introom)this.room=room;abstractclassBuildingLightextendsBuildingAsset/燈的通用信息:flourescent/incandescent等,略BuildingLight(introomNumber)super(roomNumber);classEmergencyLight(/*應(yīng)急燈,永不關(guān)

18、閉*/EmergencyLight(introomNumber)super(roomNumber);classRoomLights(2)RoomLights(introomNumber)super(roomNumber);publicvoidpowerDown()/*關(guān)電源,代碼略*/publicvoidpowerUp()/*開電源,代碼略*/*ComputerAsset.ComputerCPU和ComputerMonitor代碼略*/publicclassBuildingManagementAssetthings=newAsset24;intnumltems=0;publicvoidgood

19、Night()/*值班員定時(shí)“關(guān)閉”時(shí)調(diào)用,關(guān)閉可關(guān)閉的電源*/for(inti=0;i<things.length;i+)if(thingsiinstanceof(3)(PowerSwitchable)thingsi).powerDown();/*goodMorning()與goodNight()類似,依次調(diào)用powerUp(),其實(shí)現(xiàn)細(xì)節(jié)此處略*/publicvoidadd(Assetthing)/*為建筑添加資產(chǎn)*/things(4)=thing;publicstaticvoidmain(String口args)BuildingManagementb1=(5)BuildingMan

20、agement();bl.add(newRoomLights(101);/101房間的控制燈bl.add(newEmergencyLight(101);/101房間的應(yīng)急燈b1.add(newComputerCPU(10104);/101房間4號(hào)桌上的計(jì)算機(jī)主機(jī)b1.add(newComputerMonitor(10104);/101房間4號(hào)桌上的計(jì)算機(jī)顯示器b1.goodNight();答案:試題一1、2、3、P*(A(i)-k)4、P=05、m+1解析本題考查算法設(shè)計(jì)和描述的基本能力。從流程圖看出,首先需要對(duì)m賦初值,然后對(duì)k=1,2,,n循環(huán),檢查數(shù)組A中是否含k。為此,在該循環(huán)中,需要

21、嵌套內(nèi)循環(huán)來(lái)計(jì)算P(k)。然后判斷計(jì)算結(jié)果P的值是否等于0,來(lái)決定數(shù)組A中是否含k,并采取相應(yīng)的動(dòng)作。為了對(duì)i循環(huán)計(jì)算累乘的P(k),需要先在P中送初值1。因此(2)處應(yīng)填1,并在(3)處填寫P*(A(i-k)進(jìn)行累乘。內(nèi)循環(huán)結(jié)束后,(4)處應(yīng)判斷P=O是否成立。P=0表示數(shù)組A中含k,否則表示數(shù)組A中缺ko因此,(4)處應(yīng)填寫P=d如果數(shù)組A中缺k,則缺數(shù)計(jì)數(shù)m應(yīng)增1。因此,(5)處應(yīng)填m+1,而m的初值應(yīng)送0,從而(1)處應(yīng)填00k循環(huán)結(jié)束后,應(yīng)根據(jù)m的值決定輸出結(jié)果。m=0表示數(shù)組A中包含全部自然數(shù)1至n,即數(shù)組A的元素就是1n的一個(gè)排列;m不等于0表示數(shù)組A中短缺其中m個(gè)自然數(shù)。本題的

22、算法可應(yīng)用于判斷標(biāo)準(zhǔn)數(shù)獨(dú)的答案是否正確。例如,9階(9*9)標(biāo)準(zhǔn)數(shù)獨(dú)解答所得的結(jié)果應(yīng)在每行、每列、每個(gè)3*3宮內(nèi)都包含19,并不重復(fù),即都是19的一個(gè)排列??咳斯z查稍有麻煩,尤其是16階標(biāo)準(zhǔn)數(shù)獨(dú)解答結(jié)果的人工檢查更令人煩惱,這個(gè)算法則提供了一種處理思路。試題二1、說明行修改正確后的完整代碼號(hào)行7scanf("%ld",&num);while(t!=0)9或者while(t)!pstr 可替換為 pstr=0 或 pstr=NULL'0' 可由 48、 060、 0x30、 '060' 、 'x30' 或其他相等值代替

23、''0可由0代替15if(!pstr)return-1;23pstri+=num%10+'0'pstri尸0'26或pstri+='0'以上解答不分次序解析本題考查C程序員查找錯(cuò)誤和排除錯(cuò)誤的基本能力。程序中的錯(cuò)誤主要分為語(yǔ)法錯(cuò)誤和語(yǔ)義錯(cuò)誤兩類。語(yǔ)法錯(cuò)誤是指語(yǔ)言結(jié)構(gòu)上的錯(cuò)誤,例如,是否引用了未定義的變量,表達(dá)式中缺少操作數(shù)等等。語(yǔ)義錯(cuò)務(wù)是指語(yǔ)言結(jié)構(gòu)含義不正確或程序的運(yùn)算邏輯有錯(cuò)誤,這類錯(cuò)誤可能在編譯階段發(fā)現(xiàn)(靜態(tài)語(yǔ)義),也可能推遲到運(yùn)行階段才暴露。例如,表達(dá)式中運(yùn)算符號(hào)不能處理所引用的運(yùn)算對(duì)象,無(wú)窮循環(huán)等??忌枰浅J煜語(yǔ)言的基本語(yǔ)法

24、,從而通過走查源代碼來(lái)發(fā)現(xiàn)語(yǔ)法錯(cuò)誤。查找語(yǔ)義錯(cuò)誤則需要充分理解程序的邏輯,也就是整個(gè)程序的結(jié)構(gòu)和每條語(yǔ)句所起的作用。前2行為預(yù)處理命令行,對(duì)于最常使用的include命令,考生應(yīng)該非常熟悉,以便檢查程序中對(duì)常用函數(shù)的調(diào)用是否正確。本程序中前兩行無(wú)錯(cuò)誤。顯然,接下來(lái)的四行分別為mamg數(shù)的首部,函數(shù)體的開始符號(hào)“”、變量定義語(yǔ)句和空白行,這里也沒有錯(cuò)誤。第7行為格式化輸入函數(shù)scanf的調(diào)用語(yǔ)句,這是比較容易出錯(cuò)的地方,常見的錯(cuò)誤是格式控制串與輸入表列中的變量不匹配,或者是丟失變量前的取地址運(yùn)算符號(hào)“&”,該行的錯(cuò)誤即在這里。第8行至第12行用于計(jì)算所輸入整數(shù)的位數(shù)并用k來(lái)計(jì)算(記錄),

25、這幾行代碼應(yīng)作為一個(gè)整體來(lái)理解。程序中首先將num的值備份至t,并對(duì)k賦值,然后通過循環(huán)對(duì)t進(jìn)行輾轉(zhuǎn)除以10的運(yùn)算,使t每次都丟掉其個(gè)位數(shù),即t的位數(shù)逐漸減少(t每減少1位,k就增加1),直到t的值為0時(shí)為止,此時(shí)k的值即為num的位數(shù)。第9行的循環(huán)條件錯(cuò)誤導(dǎo)致了無(wú)窮循環(huán)(t等于0時(shí)也繼續(xù)循環(huán)),由于t的初值也可能是負(fù)數(shù),因此應(yīng)將其中的“t>=0”改為“t!=0”。第14行沒有錯(cuò)誤。第15行的錯(cuò)誤很明顯,也很常見,即將“=”誤用為“=”,從而改變其所在語(yǔ)句的語(yǔ)義,其中的"pst=O”則將pstr的值重置為0,使pstr所記錄的字符串存儲(chǔ)空間首地址信息丟失,此后針對(duì)pstr的運(yùn)算

26、都會(huì)出錯(cuò)。第17行至第21行用于處理num為負(fù)數(shù)時(shí)輸出字符串應(yīng)包含前綴“一”的要求,這幾行沒有錯(cuò)誤。第22行至第25行用于從num得到其逆置的數(shù)字字符串,其錯(cuò)誤在第23行,屬于邏輯錯(cuò)誤。num%1的運(yùn)算2果為num的個(gè)位數(shù)字,而pstr口中要存儲(chǔ)的是數(shù)字字符(即ASCII值),因此應(yīng)將num%l0勺運(yùn)算結(jié)果加上字符'0'(或字符0的ASCII碼值48)。第26行用于設(shè)置字符串結(jié)束標(biāo)志,需要注意的是串結(jié)束標(biāo)志的位置。由于num可能為負(fù)數(shù),因此將字符串結(jié)束標(biāo)志字符設(shè)置在k下標(biāo)處可能出錯(cuò),保險(xiǎn)的做法是繼續(xù)用i作為下標(biāo),使得'0'正好跟在最后一個(gè)數(shù)字字符的后面。第27行

27、至第30行沒有錯(cuò)誤。試題三1、j+,或+j,或其等價(jià)表示2、3、MAXP2=MAXP14、totalP+=dataMj,或totalP+=totalP+dataMj,或其等價(jià)表示5、(double)MAXP1/totalP,或(float)MAXP1/totalP,或其等價(jià)表示其中,將(double)或(float)寫在totalP之前亦可解析本題考查C程序設(shè)計(jì)基本能力。題目中涉及的知識(shí)點(diǎn)主要有數(shù)組、文件、循環(huán)和類型轉(zhuǎn)換,分析程序時(shí)首先要明確各個(gè)變量(或數(shù)組元素)所起的作用,并以語(yǔ)句組分析各段代碼的功能,從而完成空缺處的代碼填充。根據(jù)題目描述,首先將文件中的數(shù)據(jù)讀入數(shù)組data。顯然,i和j分

28、別起行號(hào)、列號(hào)的作用。行號(hào)i應(yīng)在一行的數(shù)據(jù)都讀入后增加1,而列號(hào)j則每讀入一個(gè)數(shù)據(jù)就要增加1,因此空(1)處應(yīng)填寫“j+”或其等價(jià)形式的語(yǔ)句。將數(shù)據(jù)讀入數(shù)組data后,以題中的數(shù)據(jù)為例,data數(shù)組的內(nèi)容可表示如下:data00=1 data10=2 data20=3 data30=4 data40=5 data50=?data01=192 data11=147 data21=186 data31=114 data41=267 data51=?data02=48 data12=90 data22=12 data32=21 data42=13 data52=?data03=206 data13=

29、312 data23=121 data33=408 data43=382 data53=?dataMi 存放 i 號(hào)競(jìng)選者的得票總數(shù), data0data04=37 data14=21 data24=38 data34=39 data44=29 data54=?存放的是選區(qū)編號(hào),因此dataM0不用。以上表為例,需要將data01、data11、.、dataM-11加起來(lái)存入dataM1,因此,空(2)處應(yīng)填入0,以設(shè)置dataM1、dataM2、.dataMN的初始值???3)所在的語(yǔ)句組用于找出得票數(shù)最多的競(jìng)選者,此時(shí),因此之前的最多票數(shù)(MAXP1)將成為次多數(shù)(MAXP2)即空(3)處

30、填入“MAXP2=MAXP1空(4)處為計(jì)算總票數(shù)的語(yǔ)句,根據(jù)說明,應(yīng)填入“totalP+=dataMj或其等價(jià)形式。空(5)處為計(jì)算票數(shù)最多者得票率的表達(dá)式,根據(jù)說明是將MAXP馀以totalP,需要注意的是:MAXP和totalP都是整數(shù)且MAXP小于totalP,因此應(yīng)至少對(duì)其中的一個(gè)數(shù)值進(jìn)行整數(shù)到實(shí)數(shù)的類型轉(zhuǎn)換,否則其結(jié)果為0,因此,空(5)處應(yīng)填入“(double)MAXP1/totalP”或其等價(jià)形式。試題三1、2、m-13、p=p->next4、p->next->No5、p->next解析本題考查C程序設(shè)計(jì)基本能力及指針的應(yīng)用。題目中涉及的考點(diǎn)主要有鏈表運(yùn)

31、算和程序邏輯,分析程序時(shí)首先要明確各個(gè)變量所起的作用,并按照語(yǔ)句組分析各段代碼的功能,從而完成空缺處的代碼填充。根據(jù)函數(shù)Joseph的處理思路,"m=m%i可避免計(jì)數(shù)過程重復(fù)(通俗來(lái)說,就是計(jì)數(shù)時(shí)繞著圈地?cái)?shù)),需要考慮的特殊情況是m可能取值為0,此時(shí)對(duì)應(yīng)的情況應(yīng)該是正好要數(shù)到目前所在位置的前一個(gè)人,由于鏈表指針的單向特點(diǎn),還需逐個(gè)結(jié)點(diǎn)數(shù)過去才行,即當(dāng)圈中還剩下i個(gè)人時(shí),最多計(jì)數(shù)到i,因此空處應(yīng)填入“i”。下面的語(yǔ)句組在單循環(huán)鏈表中掃描結(jié)點(diǎn)并完成計(jì)數(shù)。由于計(jì)數(shù)器k從0開始計(jì)數(shù),因此,while語(yǔ)句的循環(huán)條件應(yīng)為“k<m-1”,因此,空(2)處應(yīng)填入“m-1”。由于在鏈表中通過指針

32、p指向結(jié)點(diǎn)并進(jìn)行遍歷,所以空處應(yīng)填入“p=p->next”。根據(jù)題目中函數(shù)Joseph的處理思路說明,當(dāng)k的值等于m-1時(shí),p指向出圈者對(duì)應(yīng)結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),因此,p->next所指向的結(jié)點(diǎn)是要被刪除的結(jié)點(diǎn),其編號(hào)為p->next->No,因此空(4)處應(yīng)填入“p->next->No'。刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)的處理如下圖所示,即要?jiǎng)h除數(shù)據(jù)域?yàn)閥的結(jié)點(diǎn),需要將p所指結(jié)點(diǎn)的指針域指向z結(jié)點(diǎn),對(duì)應(yīng)的處理是:p->next=p->next->next,由于已經(jīng)使得q指向了y結(jié)點(diǎn),從而有等同的處理:p->next=q->next.

33、因止匕空(5)處應(yīng)填入“p->next”。試題五1、:publicComputerAsset2、:publicComputerAsset,publicPowerSwitchable3、PowerSwitchable*4、numltems+5、new解析本題考查面向?qū)ο蟪绦蛟O(shè)計(jì)及其C+鈉言實(shí)現(xiàn)的能力,涉及類和抽象類、對(duì)象、函數(shù)和虛函數(shù)的定義和相關(guān)操作以及繼承關(guān)系。要求考生根據(jù)給出的案例、類圖和執(zhí)行過程說明,認(rèn)真閱讀理清程序思路,然后完成題目。先考查針對(duì)案例的特定需求,構(gòu)建類圖整體結(jié)構(gòu)。本題中根據(jù)類圖定義了以下類:BuildingManagement、Asset、ComputerAsset、

34、BuildingAsset、ComputerCPUComputerMoniter、BuildingLight、RoomLights、EmergencyLight和PowerSwitchable。其中,Asset為抽象類,表示通用資產(chǎn),作為所有資產(chǎn)類的基類;ComputerAsset表示計(jì)算機(jī)有關(guān)資產(chǎn)、BuildingAsset表示建筑物有關(guān)資產(chǎn),兩者作為Asset的子類,繼承了Asset類;ComputerCPUComputerMoniter分別表示計(jì)算機(jī)CPUffi顯示器,繼承了ComputerAsset0BuildingLight是一種建筑物資產(chǎn),表示建筑物內(nèi)的照明設(shè)備,繼承了Buildi

35、ngAsset,而照明設(shè)備有RoomLights和EmergencyLight,作為BuildingLight的子類。由于案例中兩大類耗電資產(chǎn)(Asset):計(jì)算機(jī)(ComputerAsset)和建筑物(BuildingAsset),可在夜間關(guān)閉的房燈(RoomLights)、計(jì)算機(jī)顯示器(ComputerMoruter)屬于不同的資產(chǎn)類型,所以將可關(guān)閉的資產(chǎn)設(shè)計(jì)為抽象基類PowerSwitchable,規(guī)定可在夜間關(guān)閉電源的物體的開關(guān)電源接口,即包含兩個(gè)純虛擬(virtual)函數(shù)。因此,RoomLights和ComputerMoniter繼承了PowerSwitchable。C+”有不同種

36、類的繼承方式,本題目中,ComputerCPlMComputerAsset的子類,并且在子類的構(gòu)造函數(shù)中,調(diào)用父類的構(gòu)造函數(shù),所以繼承的權(quán)限為public。其語(yǔ)法為:public后加父類名。ComputerMonitor是ComputerAsset的子類,而且均是可關(guān)閉的,具有開關(guān)電源的相同接口,均繼承了PowerSwitchable,并且在子類的構(gòu)造函數(shù)中,調(diào)用父類的構(gòu)造函數(shù),所以繼承的權(quán)限均為public,多個(gè)父類的繼承語(yǔ)法是:public父類名1,public父類名2。系統(tǒng)中有各類資產(chǎn),在BuildingManagement中使用Asset通用資產(chǎn)類型數(shù)組,用add函數(shù)依次為建筑添加資產(chǎn)

37、。由于add函數(shù)中對(duì)數(shù)組添加元素只有一條語(yǔ)句,需要在下標(biāo)中完成指明當(dāng)前添加資產(chǎn)元素的下標(biāo),并將下標(biāo)后移。在goodNight函數(shù)中對(duì)可關(guān)閉的資產(chǎn)進(jìn)行控制,需要判定其是否可關(guān)閉,也就是資產(chǎn)是否為PowerSwitchable類的子類。通過動(dòng)態(tài)類型轉(zhuǎn)換進(jìn)行判定,如果資產(chǎn)類型是PowerSwitchable的子類,則轉(zhuǎn)換后的類型調(diào)用相應(yīng)接口,并綁定到具體對(duì)象,執(zhí)行對(duì)象的關(guān)閉電源行為。類BuildingManagement中沒有定義構(gòu)造函數(shù),編譯器會(huì)生成一個(gè)缺省的構(gòu)造函數(shù),采用new關(guān)鍵字進(jìn)行對(duì)象創(chuàng)建。使用完成之后,通過delete進(jìn)行釋放。因此空(1)需要表現(xiàn)出公有繼承:publicComputer

38、Asset;空(2)處添加繼承兩個(gè)父類,并且權(quán)限均為public,即:publicComputerAsset,publicPowerSwitchable;空(3)處動(dòng)態(tài)類型轉(zhuǎn)換為抽象類,即PowerSwitchable*;空(4)處完成指明當(dāng)前添加資產(chǎn)元素的下標(biāo),并將下標(biāo)后移,即numltems+;空(5)處補(bǔ)充通過使用編譯器生成的缺省構(gòu)造函數(shù)創(chuàng)建對(duì)象,即應(yīng)填入“new”。試題六1、extendsBuildingLight2、extendsBuildingLightimplementsPowerSwitchable3、PowerSwitchable4、numltems+5、new解析本題考查面

39、向?qū)ο蟪绦蛟O(shè)計(jì)及其Java語(yǔ)言實(shí)現(xiàn)的能力,涉及類和接口、抽象類、對(duì)象、方法的定義和相關(guān)操作,以及繼承和實(shí)現(xiàn)關(guān)系。要求考生根據(jù)給出的案例、類圖和執(zhí)行過程說明,認(rèn)真閱讀理清程序思路,然后完成題目。先考查針對(duì)案例的特定需求,構(gòu)建類圖整體結(jié)構(gòu)。本題中根據(jù)類圖定義了類:BuildingManagement、Asset、ComputerAsset、BuildingAsset、ComputerCPU、ComputerMoniter、BuildingLight、RoomLights、EmergencyLight和PowerSwitchable。其中Asset為抽象類,表示通用資產(chǎn),作為所有資產(chǎn)類的基類。ComputerAsset表示計(jì)算機(jī)有關(guān)資產(chǎn)、BuildingAsset表示建筑物有關(guān)資產(chǎn),兩者作為Asset的子類,繼承了Asset類,ComputerCPUComputerMoniter分別表示計(jì)算機(jī)CPUS顯示器,繼承了ComputerAsset。BuildingLight是一種建筑

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論