2011年下半年程序員考試下午真題

程序員 責任編輯:YLM 2017-08-16

添加老師微信

備考咨詢

加我微信

摘要:以下是由希賽網整理的2011年下半年程序員考試下午真題,希望對備考程序員考試的考生有所幫助。

2011年下半年程序員考試下午真題:

>>>點擊進入軟考初級程序員歷年真題下載

● 試題一(共15分)閱讀以下說明和流程圖,填補流程圖中的空缺(1)~(5),將解答填入答題紙的對應欄內?!菊f明】 下圖所示的流程圖用于檢查數組A[1:n]中的元素是否為自然數1~n的一個排序(含有1~n各數),若是,則輸出OK,否則輸出所缺的自然數及其個數m。 為檢查A[1:n]中是否含有k,只要判斷P(k)=(A(1)-k)*(A(2)-k)*.....*(A(n)-k)是否等于0即可。

【流程圖】

1.png

● 試題二(共15分)

閱讀以下說明和C程序代碼,將解答寫在答題紙的對應欄內。 【說明】下面是一個待修改的C程序,其應該完成的功能是:對于輸入的一個整數num,計算機其位數k,然后將其各位數字逆序轉換為字符串保存并輸出。若num為負整數,則輸出字符串應有前綴“-”。例如,將該程序修改正確后,運行時若輸入“14251”,則輸出“15241”;若輸入“-6319870”,則輸出“-0789136”。下面給出的C程序代碼中有五處錯誤,請指出錯誤代碼所在的行號并給出修改正確后的完整代碼行。
【C程序代碼】

2.png

● 試題三(共15分)

閱讀以下說明和C代碼,填補C代碼中的空缺(1)~(5),將解答寫在答題紙的對應欄內。

【說明】

某市在進行市長選舉,該市共分為M個選區(qū)(1<M<6,從1開始順序編號),共有N個候選者參選(1<N<5,從A開始順序編號)。經投票后,所得選票數據如下表所示。

3.png現已將選票數據存入文本文件data.txt,該文件內容格式如下:共有M行,每行N+1個整數,第一個整數為選區(qū)編號,隨后為N個候選者在該選區(qū)所得票數。

面的程序先從文件中讀入選票數據存入二維數組data,然后完成下列功能:

a.計算并顯示每個競選者獲得的選票數及占總選票數的百分比;

b.如果任一競選者獲得的選票數超過總票數的50%,則顯示競選者獲勝;

c.如果沒有競選者獲得總選票數的50%以上,則顯示兩位得票較高的競選者需再進行決選。

在下面的程序代碼中,競選者A的編號為1,競選者B的編號為2,以此類推。

【C代碼】

#include<stdio.h>

#include<stdliB.h>

#define M 5 /*選區(qū)數*/

#define N 4 /*競選者人數 */

int main(int argc, char argv[] )

{

FILE *fin;

int data[M+1] [N+1]; /*data[][0]存放選區(qū)編號,data[M][J]存放J號競選者得票總數*/

int maxp1,cdl: /*maxp1、cd2存放得票最多者的票數和競選者編號*/

int maxp2,cd2; /*maxp2、cd2存放得票次多者的票數和競選者編號*/

int i,j, totalP;/*tatalp存放總票數*/

fin=fopen("dat

(3)A.txt","r");

Ii(!fin)return -1;

i=0; j=0;

While(!feof(fin)){/* 從文件讀入數據 */

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)__; /* 設置j號競選者的票總數初始值 */

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)__;/* 計算總票數 */

}

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)/* 判斷得票數最多者的得票率 */

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函數,填補c函數中的空缺(1)—(5),將解答寫在答題紙的對應欄內。【說明】約瑟夫問題如下所述:有n個人(編號為1~n)圍成一圈,從第一個人開始,按照順時針方向從1開始計數到m(即數到第m個人),讓其出圈,然后再從其順時針方向的下一個人開始,依次計數到m并讓其出圈,重復這個過程,直到所有人都出圈,試給出出圈者的順序。

以n=5,m=3為例,其中圈順序為3,1,5,2,4,過程如下圖所示。

4.png

下面的函數Joseph__(4)__在單向循環(huán)鏈表表示的基礎上訴出圈的過程。

n為5時的單向循環(huán)鏈表結構如下圖所示。5.png鏈表的結合類型定義如下: Typedef struct Node int no; struct Node*next; }node,*LinkList;函數Joseph(LinkList tail,int n,int m)的處理思路如下:

(1)用k計數,每次都從0開始,當計數到m-1時結束本次計數;

(2)通過指針p查找出圈者所對應的結點,當K的值等于是m-1時,P應指向出圈者對應結點的前驅結點;

(3)通過刪除結點表示出圈處理;

(4)當m大于圈中剩余人數時,為了避免重復計數,用模運算修改m的值;

(5)計數和刪除操作完成后再恢復m的原值;

【C函數】

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 表示圈中剩余人數*/

{

m=m%i; /*避免重復計數*/

if(0==m)m=__(1)__;

k=0;

while(k<__(2)__)

{ __(3)__; k++; }

printf("%d\n",__(4)__);/*輸出出圈者的編號*/

q=p->next;

__(5)__=q->next;/*刪除出圈者對應的結點*/

free(q);

M=old_m;

}

printf(“%d\n”,p->No);

}

● 試題五(共15分)

閱讀以下說明、圖和C++代碼,填補C++代碼中的空缺(1)—(5),將解答寫在答題紙的對應欄內。

【說明】

已知某公司主要有兩大類耗電資產(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關閉的房燈、計算機顯示器等在夜間關閉。

為了實現上述需求,設計了如下圖所示的類圖,并用下面的C++代碼加以實現。

6.png

【C++代碼】

#include<typeinfo>

#include<iostream>

using namespace std;

class Asset{ /*通用資產,基類*/

public: virtual ~Asset(){};

};

class PowerSwitchable{ /*抽象基類,可在夜間關閉電源的物體接口*/

public: virtual void powerDown()=0; /*powerDown()函數接口*/

virtual void powerUP()=0;/*powerUp()函數接口*/

};

class computerAsset: public Asset{ /*計算機資產*/

protected: int deskNumber;

public:

computerAsset(int desNumber){ this->deskNumber= deskNumber;}

};

class computerCPU __(1)__/*計算機主機,永不關閉*/

public:

computerCPU(int desNumber): ComputerAsset (desNumber){ }

};

class computerMonitor __(2)__{ /*計算機顯示器*/

public:

computerMonitor(int roomNumber):omputerAsset(roomNumber),PowerSwitchable(){} ~computerMonitor (){}

void powerDown(){……../*關電源,代碼省*/}

void powerUp(){……../*開電源,代碼省*/}

};

/*BuildingAsset、BuildingLight

、EmergencyLight和RoomLiggts代碼省*/

class BuldingManagement{

private:

Asset* things[24];int numItems;

public:

void goodnight(){/*值班員定時“關閉”時調用,關閉可關閉的電源*/

for(int i=0;i<numItems;i++){

__(3)__ ps=dynamic_cast<powerSwitchable*>(things[i]);

if(ps!=0)

ps->powerDown();

}

}

/*goodMorning()與goodNight()類似,依次調用powerUp(),實現省*/

void add(Asset*thing){/*為建筑添加資產*/

yhings[__(4)__]=thing;

}

};

int main(){

BuildingManagement* bl=__(5)__ BuildingManagement();

bl->add(new RoomLights(101));//101房間的控制燈

bl->add(new EmergencyLight(101)); //101房間的應急燈

bl->add(new ComputerCPU(10104));//101房間4號桌上的計算機

bl->add(new ComputerMonitor(10104)); //101房間4號桌上的計算機顯示器

bl->goodNight();

Delete bl;

}

● 試題六(共15分)

閱讀以下說明、圖和Java代碼,填補Java代碼中的空缺(1)—(5),將解答寫在答題紙的對應欄內。

【說明】

已知某公司主要有兩大類耗電資產(Asset):計算機(ComputerAsset)和建筑物(BuildingAsset)。為了節(jié)約能源,通過控制各種電源,將可關閉的房燈、計算機顯示器等在夜間關閉。

為了實現上述需求,設計了如下圖所示的類圖,并用下面的Java代碼加以實現。

7.png

【Java代碼】

abstract class Asset{/*通用資產,基類*/

interface PowerSwitchable{ /*可在夜間關閉的電源的物體實現該接口*/

public void void powerDown();

public void powerUP();

}

abstract class BuildingAsset extends Asset{ /*建筑物資產*/

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)__{ //應急燈,永不關閉

EmergrncyLight(int roomNumber){

Super(roomNumber);

}

}

class RoomLights __(2)__{

RoomLights(int roomNurober){ super(roomNumber);}

Public void powerDown(){ //關電源,代碼省 }

Public void powerUp(){//開電源,代碼省 }

}

/*ComputerAsset、ComputerCPU和ComputerMonitor代碼省*/

public class BuildingManagement{

Asset things[]=new Asset[24];

int numItems=0;

public void goodnight(){//值班員定時“關閉”時調用,關閉可關閉的電源

for(int i=0;i<things.length;i++)

if(things[i] instanceof __(3)__)

((powerSwitchable)things[i]).powerDown();

}

/*goodMoming()與goodNight()類似,依次調用powetUp(),其實現細節(jié)此處省*/

public void add(Asset thing){ /*為建筑添加資產*/

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房間的應急燈

bl.add(new ComputerCPU(10104));//101房間4號桌上的計算機

bl.add(new ComputerMonitor(10104)); //101房間4號桌上的計算機顯示器

bl.goodNight();

delete bl;

}

}

更多資料
更多課程
更多真題
溫馨提示:因考試政策、內容不斷變化與調整,本網站提供的以上信息僅供參考,如有異議,請考生以權威部門公布的內容為準!

軟考備考資料免費領取

去領取

!
咨詢在線老師!