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

软考 YLM 浏览 4483 来源:希赛网

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

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

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

●阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。

【说明】

本流程图旨在统计一本电子书中各个关键词出现的次数。假设已经对该书从头到尾依次分离出各个关键词{A(i)|i=1,…,n)(n>1)},其中包含了很多重复项,经下面的流程处理后,从中挑选出所有不同的关键词共m个{K(j)|j=1,…,m},而每个关键词K(j)出现的次数为NK(j),j=1,…,m。

【流程图】

1.png

●阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。

【说明】

函数removeDuplicates(char *str)的功能是移除给定字符串中的重复字符,使每种字符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇到重复出现的字符时,设置标志,并将其后的非重复字符前移。例如,若str指向的字符串为“aaabbbbscbsss”,则函数运行后该字符串为“absc”。

【C代码】

void removeDuplicates(char *str)

{

int i, len=strlen(str); /* 求字符串长度 */

if( (1) ) return; /* 空串或长度为1的字符串无需处理 */

for( i=0; i

int flag=0; /* 字符是否重复标志 */

int m;

for( m= (2) ; m

if( str[i]==str[m] ) {

(3) ; break;

}

}

if(flag) {

int n, idx=m;

/* 将字符串第idx字符之后、与str[i]不同的字符向前移 */

for( n=idx+1; n

if( str[n]!=str[i] ) {

str[idx]=str[n]; (4) ;

}

str[ (5) ]='\0'; /* 设置字符串结束标志 */

}

}

}

●阅读以下说明和C函数,填补函数代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。

【说明】

队列是一种常用的数据结构,其特点是先入先出,即元素的插入在表头、删除在表尾进行。下面采用顺序存储方式实现队列,即利用一组地址连续的存储单元存放队列元素,同时通过模运算将存储空间看作一个环状结构(称为循环队列)。

设循环队列的存储空间容量为MAXQSIZE,并在其类型定义中设置base、rear和length三个域变量,其中,base为队列空间的首地址,rear为队尾元素的指针,length表示队列的长度。

#define MAXQSIZE 100

typedef struct {

QElemType *base; /* 循环队列的存储空间首地址 */

int rear; /* 队尾元素索引 */

int length; /* 队列的长度 */

} SqQueue;

例如,容量为8的循环队列如图3-1所示,初始时创建的空队列如图3-1(a)所示,经过一系列的入队、出队操作后,队列的状态如图3-1(b)所示(队列长度为3)。

2.png

下面的C函数1、C函数2和C函数3用于实现队列的创建、插入和删除操作,请完善这些代码。

【C函数1】创建一个空的循环队列。

int InitQueue(SqQueue *Q)

/* 创建容量为MAXQSIZE的空队列,若成功则返回1;否则返回0 */

{ Q->base=(QElemType *) malloc ( MAXQSIZE* (1) );

if (!Q->base) return 0;

Q->length=0;

Q->rear=0;

return 1;

} /* InitQueue */

【C函数2】元素插入循环队列。

int EnQueue(SqQueue}Q, QElemType e) /* 元素e入队,若成功则返回1;否则返回0 */

{ if(Q->length>=MAXQSIZE) return 0;

Q->rear= (2) ;

Q->base[Q->rear]=e;

(3) ;

return 1;

} /* EnQueue */

【C函数3】元素出循环队列。

int DeQueue (SqQueuea *Q, QElemType *e)

/* 若队列不空,则删除队头元素,由参数e带回其值并返回1;否则返回0 */

{ if ( (4) ) return 0;

*e=Q->base[(Q->rear - Q->length+1+MAXQSIZE) %MAXQSIZE];

(5) ;

return 1;

} /* DeQueue */

●阅读以下说明和C函数,填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。

【说明】

二叉树的宽度定义为含有结点数最多的那一层上的结点数。函数GetWidth__(4)__用于求二叉树的宽度。其思路是根据树的高度设置一个数组counter[],counter[i]存放第i层上的结点数,并按照层次顺序来遍历二叉树中的结点,在此过程中可获得每个结点的层次值,最后从counter[]中取出最大的元素就是树的宽度。

按照层次顺序遍历二叉树的实现方法是借助一个队列,按访问结点的先后顺序来记录结点,离根结点越近的结点越先进入队列,具体处理过程为:先令根结点及其层次号(为1)进入初始为空的队列,然后在队列非空的情况下,取出队头所指示的结点及其层次号,然后将该结点的左予树根结点及层次号入队列(若左子树存在),其次将该结点的右子树根结点及层次号入队列(若右子树存在),然后再取队头,重复该过程直至完成遍历。

设二叉树采用二叉链表存储,结点类型定义如下:

typedef struct BTNode {

TElemType data;

struct BTNode *left, *right;

} BTNode, *BiTree;

队列元素的类型定义如下:

typedef struct {

BTNode *ptr;

int LevelNumber;

} QElemType;

GetWidth__(5)__函数中用到的函数原型如下所述,队列的类型名为QUEUE:


3.png


【C函数】

int GetWidth(BiTree root)

{

QUEUE Q;

QElemType a, b;

int width, height=GetHeight(root);

int i, *counter=(int *) calloc (height+1, sizeof(int));

if ( (1) ) return -1; /* 申请空间失败 */

if ( !root ) return 0; /* 空树的宽度为0 */

if ( (2) ) return -1; /* 初始化队列失败时返回 */

(4)A.ptr=root;

(5)A.LevelNumber=1;

if (!EnQueue ( &Q, a)) return -1; /* 元素入队列操作失败时返回 */

while (!isEmpty (Q)) {

if( (3) )return-1; /* 出队列操作失败时返回*/

counter[b.LevelNumber]++; /* 对层号为b.LevelNumber的结点计数 */

if(b.ptr->left){ */ 若左子树存在,则左子树根结点及其层次号入队 */

(6)A.ptr=bptr->left;

(7)A.LevelNumber= (4) ;

if ( !EnQueue (&Q, a)) return -1;

}

if(b.ptr->right){ /* 若右子树存在,则右子树根结点及其层次号入队 */

(8)A.ptr = b.ptr->right;

(9)A.LeveINumber= (5) ;

if ( !EnQueue (&Q, a)) return -1;

}

}

width=counter [1] ;

for (i=1; i< height +1; i++) /* 求counter[]中的最大值 */

if ( (6) ) width=counter[i];

free(counter);

return width;

}

●阅读下列说明、C++代码和运行结果,填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。

【说明】

很多依托扑克牌进行的游戏都要先洗牌。下面的C++程序运行时先生成一副扑克牌,洗牌后再按顺序打印每张牌的点数和花色。

【C++代码】

#include

#include

#include

#include

#include

using namespace std;

const string Rank[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//扑克牌点数

const string Suits[4]={"SPADES","HEARTS","DIAMONDS","CLUBS"};//扑克牌花色

class Card {

private:

int rank;

int suit;

public:

Card(){}

~Card(){}

Card(int rank, int suit) { (1) rank=rank; (2) suit=suit;}

int getRank() {

return rank;

}

int getSuit() {

return suit;

}

void printCard() {

cout << '(' << Rank[rank] << "," << Suits[suit] << ")";

}

};

class DeckOfCardsts {

private:

Card deck[52];

public:

DeckOfCards() { //初始化牌桌并进行洗牌

for (int i=0; i<52; i++) { //用Card对象填充牌桌

(3) =Card(i%13, i%4);

}

srand((unsigned) time(0)); //设置随机数种子

std::random_shuffle(&deck[0], &deck[51]);//洗牌

}

~DeckOfCards() {

}

void printCards() {

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

(4) printCard() ;

if ((i+1)%4==0) cout<

else cout << "\t";

}

}

};

int main(){

DeckOfCards * d = (5) ; //生成一个牌桌

(6) ; //打印一副扑克牌中每张牌的点数和花色

delete d;

return 0;

}

●阅读以下说明和Java程序,填补代码中的空缺(1)~(6),将解答填入答题纸的对应栏内。

【说明】

很多依托扑克牌进行的游戏都要先洗牌。下面的Java代码运行时先生成一副扑克牌,洗牌后再按顺序打印每张牌的点数和花色。

【Java代码】

import iav

(6)A.util.List;

import jav

(7)A.util.Arrays;

import jav

(8)A.util.Collections;

class Card { //扑克牌类

public static enum Face { Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jacky, Queen, King ); //枚举牌点

public static enum Suit(Clubs, Diamonds, Hearts, Spades}; //枚举花色

private final Face face;

private final Suit suit;

public Card( Face face, Suit suit ) {

(1) face=face;

(2) suit=suit;

}

public Face getFace() { return face; }

public Suit getSuit() { return suit; }

public String getCard() { //返回String来表示一张牌

return String.format( "%s, %s", face, suit );

}

}

//牌桌类

class DeckOfCards {

private List< Card > list; //声明List以存储牌

public DeckOfCards() { //初始化牌桌并进行洗牌

Card[] deck=new Card[52];

int count=0; //牌数

//用Card对象填充牌桌

for ( Card.Suit suit:Card.Suit.values() ) {

for ( Card Face face:Card.Face.values() ) {

(3) =new Card( face, suit);

}

}

list= Arrays.asList( deck );

Collections.shuffle( list ); //洗牌

}

public void printCards ()

{

//按4列显示52张牌

for ( int i=0; i

System.out.printf( "%-19s%s", list. (4) ,((i+1)%4==0)?"\n":"" );

}

}

public class Dealer {

public static void main( String[] args ) {

DeckOfCards player= (5) ;

(6) printCards();

}

}

责任编辑:YLM|希赛教研中心

希赛教研中心拥有一支规模200余人的专职教研团队,深耕项目管理、软考、通信工程师、金融财会、厂商认证、考博英语等方向,形成“讲师+助教+班主任+智能学习平台”协同联动的完整教学服务体系:讲师讲透方法、助教盯住进度和答疑、班主任守住节奏、智能平台记录每一步成长——环环相扣,让学员的备考全程有人陪、有反馈、有结果。 师资力量雄厚。主要讲师毕业于 985/211 等知名高校,并拥有海外留学归国人才;职称梯队完善,高、中级职称讲师结构合理,讲师持有软考高级资格证书、PMI系列认证、CSPM高级项目管理培训师证、PeopleCert认证、DAMA认证、英语专八(TEM-8)、PETS-5、华为HCIE、经济师、一级建造师等行业权威资质,兼具深厚理论功底与丰富实战经验。 教研成果卓越。教研团队成员深度参与多项国家标准的研制工作,是 GB/T 47282-2026《项目重大节点评审规范》、GB/T 47285-2026《项目商业分析指南》、GB/T 30339-2026《项目和项目群后评价指南》、GB/T 46210-2025《项目成本管理指南》等国家标准的主要起草人,并担任《中国项目管理知识体系指南》总体编写专家组成员。团队累计主编出版专业图书与教材一百多种,覆盖软考、通信工程师、PMP、CSPM、NPDP等多个认证方向。 教学成效显著。 依托希赛自主研发的开放式智能互动学习平台,团队累计服务学员超百万人,帮助众多学员顺利通过软考、 PMP、CSPM、NPDP、华为认证、通信工程师、管理类联考、考博英语等考试,大批学员考入 985、211 等知名高校深造,以专业与口碑赢得学员和行业的广泛认可。

📅 本文最后更新于 2023-03-30

温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!
新人礼包 新人礼包 课程咨询 课程咨询 企业团报 企业团报 电话咨询 电话咨询

客服热线:400-111-9811

售后投诉:156-1612-8671

公众号 公众号
希赛网公众号二维码
扫二维码 关注希赛网
APP下载 APP下载
希赛网APP下载二维码
扫二维码 下载APP
二维码
二维码
第1步:扫码添加老师微信  第2步:领取备考资料
!
咨询在线老师!