摘要:以下是由希賽網(wǎng)整理的2011年下半年程序員考試下午真題,希望對備考程序員考試的考生有所幫助。
2011年下半年程序員考試下午真題:
● 試題一(共15分)閱讀以下說明和流程圖,填補流程圖中的空缺(1)~(5),將解答填入答題紙的對應(yīng)欄內(nèi)?!菊f明】 下圖所示的流程圖用于檢查數(shù)組A[1:n]中的元素是否為自然數(shù)1~n的一個排序(含有1~n各數(shù)),若是,則輸出OK,否則輸出所缺的自然數(shù)及其個數(shù)m。 為檢查A[1:n]中是否含有k,只要判斷P(k)=(A(1)-k)*(A(2)-k)*.....*(A(n)-k)是否等于0即可。
【流程圖】
● 試題二(共15分)
閱讀以下說明和C程序代碼,將解答寫在答題紙的對應(yīng)欄內(nèi)。 【說明】下面是一個待修改的C程序,其應(yīng)該完成的功能是:對于輸入的一個整數(shù)num,計算機其位數(shù)k,然后將其各位數(shù)字逆序轉(zhuǎn)換為字符串保存并輸出。若num為負(fù)整數(shù),則輸出字符串應(yīng)有前綴“-”。例如,將該程序修改正確后,運行時若輸入“14251”,則輸出“15241”;若輸入“-6319870”,則輸出“-0789136”。下面給出的C程序代碼中有五處錯誤,請指出錯誤代碼所在的行號并給出修改正確后的完整代碼行。
【C程序代碼】
● 試題三(共15分)
閱讀以下說明和C代碼,填補C代碼中的空缺(1)~(5),將解答寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
某市在進行市長選舉,該市共分為M個選區(qū)(1<M<6,從1開始順序編號),共有N個候選者參選(1<N<5,從A開始順序編號)。經(jīng)投票后,所得選票數(shù)據(jù)如下表所示。
現(xiàn)已將選票數(shù)據(jù)存入文本文件data.txt,該文件內(nèi)容格式如下:共有M行,每行N+1個整數(shù),第一個整數(shù)為選區(qū)編號,隨后為N個候選者在該選區(qū)所得票數(shù)。
面的程序先從文件中讀入選票數(shù)據(jù)存入二維數(shù)組data,然后完成下列功能:
a.計算并顯示每個競選者獲得的選票數(shù)及占總選票數(shù)的百分比;
b.如果任一競選者獲得的選票數(shù)超過總票數(shù)的50%,則顯示競選者獲勝;
c.如果沒有競選者獲得總選票數(shù)的50%以上,則顯示兩位得票較高的競選者需再進行決選。
在下面的程序代碼中,競選者A的編號為1,競選者B的編號為2,以此類推。
【C代碼】
#include<stdio.h>
#include<stdliB.h>
#define M 5 /*選區(qū)數(shù)*/
#define N 4 /*競選者人數(shù) */
int main(int argc, char argv[] )
{
FILE *fin;
int data[M+1] [N+1]; /*data[][0]存放選區(qū)編號,data[M][J]存放J號競選者得票總數(shù)*/
int maxp1,cdl: /*maxp1、cd2存放得票最多者的票數(shù)和競選者編號*/
int maxp2,cd2; /*maxp2、cd2存放得票次多者的票數(shù)和競選者編號*/
int i,j, totalP;/*tatalp存放總票數(shù)*/
fin=fopen("dat
(3)A.txt","r");
Ii(!fin)return -1;
i=0; j=0;
While(!feof(fin)){/* 從文件讀入數(shù)據(jù) */
Fscanf(fin,”%d”,&data[i][j]);
__(1)__;
if(j>N) {j=0;i++;}
}
fclose(fin);
totalP =0;maxp1=0;maxp2=0;cd1=0;cd2=0;
for(j=1;j<N+1;j++)
{
data[M][j]=__(2)__; /* 設(shè)置j號競選者的票總數(shù)初始值 */
for(i=0;i<M;i++)
data[M][j]+=data[i][j];
if(data[M][j]>MAXP1)
{
__(3)__; cd2=cd1;
MAXP1=data[M][j]; cd1=j;
}
else
if(data[M][j]> MAXP2){ MAXP2=data[M][j];cd2=j;}
__(4)__;/* 計算總票數(shù) */
}
for(j=1;j<N+1;j++)
{
printf("candidate—%c:%d",j+'A'-1,data[M][j]);
printf("%.2lf\n",(double)data[M][j]/totalP);
}
printf("\n");
if(__(5)__>0.5)/* 判斷得票數(shù)最多者的得票率 */
printf("winner:candidate-%c\n",cdl+'A'-1);
else
printf("result : candidate-%c pk candidate-%c\n",cd1+'A'-1,cd2+'A'-1);
system("pause");
return 0;
}
● 試題四(共15分)
閱讀以下說明和c函數(shù),填補c函數(shù)中的空缺(1)—(5),將解答寫在答題紙的對應(yīng)欄內(nèi)?!菊f明】約瑟夫問題如下所述:有n個人(編號為1~n)圍成一圈,從第一個人開始,按照順時針方向從1開始計數(shù)到m(即數(shù)到第m個人),讓其出圈,然后再從其順時針方向的下一個人開始,依次計數(shù)到m并讓其出圈,重復(fù)這個過程,直到所有人都出圈,試給出出圈者的順序。
以n=5,m=3為例,其中圈順序為3,1,5,2,4,過程如下圖所示。
下面的函數(shù)Joseph__(4)__在單向循環(huán)鏈表表示的基礎(chǔ)上訴出圈的過程。
n為5時的單向循環(huán)鏈表結(jié)構(gòu)如下圖所示。鏈表的結(jié)合類型定義如下: Typedef struct Node int no; struct Node*next; }node,*LinkList;函數(shù)Joseph(LinkList tail,int n,int m)的處理思路如下:
(1)用k計數(shù),每次都從0開始,當(dāng)計數(shù)到m-1時結(jié)束本次計數(shù);
(2)通過指針p查找出圈者所對應(yīng)的結(jié)點,當(dāng)K的值等于是m-1時,P應(yīng)指向出圈者對應(yīng)結(jié)點的前驅(qū)結(jié)點;
(3)通過刪除結(jié)點表示出圈處理;
(4)當(dāng)m大于圈中剩余人數(shù)時,為了避免重復(fù)計數(shù),用模運算修改m的值;
(5)計數(shù)和刪除操作完成后再恢復(fù)m的原值;
【C函數(shù)】
void Joseph(LinkList tail,int n,int m)
{
LinkList p,q;
int k,i,old_m=m;
p=tail;
for(i=n;i>1;i--) /*i 表示圈中剩余人數(shù)*/
{
m=m%i; /*避免重復(fù)計數(shù)*/
if(0==m)m=__(1)__;
k=0;
while(k<__(2)__)
{ __(3)__; k++; }
printf("%d\n",__(4)__);/*輸出出圈者的編號*/
q=p->next;
__(5)__=q->next;/*刪除出圈者對應(yīng)的結(jié)點*/
free(q);
M=old_m;
}
printf(“%d\n”,p->No);
}
● 試題五(共15分)
閱讀以下說明、圖和C++代碼,填補C++代碼中的空缺(1)—(5),將解答寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
已知某公司主要有兩大類耗電資產(chǎn)(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關(guān)閉的房燈、計算機顯示器等在夜間關(guān)閉。
為了實現(xiàn)上述需求,設(shè)計了如下圖所示的類圖,并用下面的C++代碼加以實現(xiàn)。
【C++代碼】
#include<typeinfo>
#include<iostream>
using namespace std;
class Asset{ /*通用資產(chǎn),基類*/
public: virtual ~Asset(){};
};
class PowerSwitchable{ /*抽象基類,可在夜間關(guān)閉電源的物體接口*/
public: virtual void powerDown()=0; /*powerDown()函數(shù)接口*/
virtual void powerUP()=0;/*powerUp()函數(shù)接口*/
};
class computerAsset: public Asset{ /*計算機資產(chǎn)*/
protected: int deskNumber;
public:
computerAsset(int desNumber){ this->deskNumber= deskNumber;}
};
class computerCPU __(1)__/*計算機主機,永不關(guān)閉*/
public:
computerCPU(int desNumber): ComputerAsset (desNumber){ }
};
class computerMonitor __(2)__{ /*計算機顯示器*/
public:
computerMonitor(int roomNumber):omputerAsset(roomNumber),PowerSwitchable(){} ~computerMonitor (){}
void powerDown(){……../*關(guān)電源,代碼省*/}
void powerUp(){……../*開電源,代碼省*/}
};
/*BuildingAsset、BuildingLight
、EmergencyLight和RoomLiggts代碼省*/
class BuldingManagement{
private:
Asset* things[24];int numItems;
public:
void goodnight(){/*值班員定時“關(guān)閉”時調(diào)用,關(guān)閉可關(guān)閉的電源*/
for(int i=0;i<numItems;i++){
__(3)__ ps=dynamic_cast<powerSwitchable*>(things[i]);
if(ps!=0)
ps->powerDown();
}
}
/*goodMorning()與goodNight()類似,依次調(diào)用powerUp(),實現(xiàn)省*/
void add(Asset*thing){/*為建筑添加資產(chǎn)*/
yhings[__(4)__]=thing;
}
};
int main(){
BuildingManagement* bl=__(5)__ BuildingManagement();
bl->add(new RoomLights(101));//101房間的控制燈
bl->add(new EmergencyLight(101)); //101房間的應(yīng)急燈
bl->add(new ComputerCPU(10104));//101房間4號桌上的計算機
bl->add(new ComputerMonitor(10104)); //101房間4號桌上的計算機顯示器
bl->goodNight();
Delete bl;
}
● 試題六(共15分)
閱讀以下說明、圖和Java代碼,填補Java代碼中的空缺(1)—(5),將解答寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
已知某公司主要有兩大類耗電資產(chǎn)(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關(guān)閉的房燈、計算機顯示器等在夜間關(guān)閉。
為了實現(xiàn)上述需求,設(shè)計了如下圖所示的類圖,并用下面的Java代碼加以實現(xiàn)。
【Java代碼】
abstract class Asset{/*通用資產(chǎn),基類*/
interface PowerSwitchable{ /*可在夜間關(guān)閉的電源的物體實現(xiàn)該接口*/
public void void powerDown();
public void powerUP();
}
abstract class BuildingAsset extends Asset{ /*建筑物資產(chǎn)*/
protected int room;
public BuildingAsset(int room){ this.room=room; }
}
abstract class BuildingLight extends BuildingAsset{ //燈的通用信息:fluorescent / incandescent 等,略
BuildingLight(int room Number){ super(roomNunaber); }
}
class EmergencyLight__(1)__{ //應(yīng)急燈,永不關(guān)閉
EmergrncyLight(int roomNumber){
Super(roomNumber);
}
}
class RoomLights __(2)__{
RoomLights(int roomNurober){ super(roomNumber);}
Public void powerDown(){ //關(guān)電源,代碼省 }
Public void powerUp(){//開電源,代碼省 }
}
/*ComputerAsset、ComputerCPU和ComputerMonitor代碼省*/
public class BuildingManagement{
Asset things[]=new Asset[24];
int numItems=0;
public void goodnight(){//值班員定時“關(guān)閉”時調(diào)用,關(guān)閉可關(guān)閉的電源
for(int i=0;i<things.length;i++)
if(things[i] instanceof __(3)__)
((powerSwitchable)things[i]).powerDown();
}
/*goodMoming()與goodNight()類似,依次調(diào)用powetUp(),其實現(xiàn)細節(jié)此處省*/
public void add(Asset thing){ /*為建筑添加資產(chǎn)*/
Things[__(4)__]=thing;
}
public static void main(String[]args){
BuildingManagement* bl=__(5)__ BuildingManagement();
bl.add(new RoomLights(101));//101房間的控制燈
bl.add(new EmergencyLight(101)); //101房間的應(yīng)急燈
bl.add(new ComputerCPU(10104));//101房間4號桌上的計算機
bl.add(new ComputerMonitor(10104)); //101房間4號桌上的計算機顯示器
bl.goodNight();
delete bl;
}
}
軟考備考資料免費領(lǐng)取
去領(lǐng)取