2011年下半年程序员考试下午真题

程序员 责任编辑:YLM 2017-08-16

添加老师微信

备考咨询

加我微信

摘要:以下是由希赛网整理的2011年下半年程序员考试下午真题,希望对备考程序员考试的考生有所帮助。

2011年下半年程序员考试下午真题:

>>>点击进入软考初级程序员历年真题下载

● 试题一(共15分)阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。【说明】 下图所示的流程图用于检查数组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个选区(1<M<6,从1开始顺序编号),共有N个候选者参选(1<N<5,从A开始顺序编号)。经投票后,所得选票数据如下表所示。

3.png现已将选票数据存入文本文件data.txt,该文件内容格式如下:共有M行,每行N+1个整数,第一个整数为选区编号,随后为N个候选者在该选区所得票数。

面的程序先从文件中读入选票数据存入二维数组data,然后完成下列功能:

a.计算并显示每个竞选者获得的选票数及占总选票数的百分比;

b.如果任一竞选者获得的选票数超过总票数的50%,则显示竞选者获胜;

c.如果没有竞选者获得总选票数的50%以上,则显示两位得票较高的竞选者需再进行决选。

在下面的程序代码中,竞选者A的编号为1,竞选者B的编号为2,以此类推。

【C代码】

#include<stdio.h>

#include<stdliB.h>

#define M 5 /*选区数*/

#define N 4 /*竞选者人数 */

int main(int argc, char argv[] )

{

FILE *fin;

int data[M+1] [N+1]; /*data[][0]存放选区编号,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)__在单向循环链表表示的基础上诉出圈的过程。

n为5时的单向循环链表结构如下图所示。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)。为了节约能源,通过控制各种电源,将可关闭的房灯、计算机显示器等在夜间关闭。

为了实现上述需求,设计了如下图所示的类图,并用下面的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)。为了节约能源,通过控制各种电源,将可关闭的房灯、计算机显示器等在夜间关闭。

为了实现上述需求,设计了如下图所示的类图,并用下面的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(),其实现细节此处省*/

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;

}

}

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取