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

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

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

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

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

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

【说明】

指定网页中,某个关键词出现的次数除以该网页长度称为该关键词在此网页中的词频。对新闻类网页,存在一组公共的关键词。因此,每个新闻网页都存在一组词频,称为该新闻网页的特征向量。

设两个新闻网页的特征向量分别为:甲(a1,a2,…,ak)、乙(b1,b2,…,bk),则计算这两个网页的相似度时需要先计算它们的内积S=a1b1+a2b2+…+akbk。一般情况下,新闻网页特征向量的维数是巨大的,但每个特征向量中非零元素却并不多。为了节省存储空间和计算时间,我们依次用特征向量中非零元素的序号及相应的词频值来简化特征向量。为此,我们用(NA(i),A(i)|i=1,2,…,m)和(NB(j),B(j)|j=1,2,…,n)来简化两个网页的特征向量。其中:NA(i)从前到后描述了特征向量甲中非零元素A(i)的序号(NB(1)<na(2)<…),nb(j)从前到后描述了特征向量乙中非零元素b(j)的序号(nb(1)<nb(2)<…)。< p="">

下面的流程图描述了计算这两个将征向量内积S的过程。

1.png

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

【说明1】

函数isPrime(int n)的功能是判断n是否为素数。若是,则返回1,否则返回0。素数是只能被1和自己整除的正整数。例如,最小的5个素数是2,3,5,7,11。

【C函数】

int isPrime (int n)

{

int k, t;

if (n==2) return 1;

if(n<2|| (1) ) return 0; /* 小于2的数或大于2的偶数不是素数 */

t=(int)sqrt(n)+1;

for (k=3; k

if ( (2) ) return 0;

return 1;

}

【说明2】

函数int minOne(int arr[], int k)的功能是用递归方法求指定数组中前k个元素中的最小者,并作为函数值返回。

【C函数】

int minOne (int arr[], int k)

{

int t;

assert (k>0) ;

if(k==1)

return (3) ;

t=minOne(arr+1, (4) ;

if (arr[0]<t)< p="">

return arr[0];

return (5) ;

}

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

【说明】函数areAnagrams(char *fstword, char *sndword)的功能是判断fstword和sndword中的单词(不区分大小写)是否互为变位词,若是则返回1,否则返回0。所谓变位词是指两个单词是由相同字母的不同排列得到的。例如,“triangle”与“integral”互为变位词,而“dumbest”与“stumble”不是。

函数areAnagrams的处理思路是检测两个单词是否包含相同的字母且每个字母出现的次数也相同。过程是先计算第一个单词(即fstword中的单词)中各字母的出现次数并记录在数组counter中,然后扫描第二个单词(即sndword中的单词)的各字母,若在第二个单词中遇到与第一个单词相同的字母,就将相应的计数变量值减1,若在第二个单词中发现第一个单词中不存在的字母,则可断定这两个单词不构成变位词。最后扫描用于计数的数组counter各元素,若两个单词互为变位词,则counter的所有元素值都为0。

函数areAnagrams中用到的部分标准库函数如下表所述。

2.png

【C函数】

int areAnagrams (char *fstword, char *sndword

{

int index;

int counter [26]={0}; /* counter[i]为英文字母表第i个字母出现的次数,'A'或'a'为第0个,'B'或'b'为第1个,依此类推 */

if ( (1) ) /* 两个单词相同时不互为变位词 */

return 0;

while(*fstword) { /* 计算第一个单词中各字母出现的次数 */

if (isalpha (*fstword)) {

if (isupper (*fstword))

counter [*fstword -'A']++;

else

counter [*fstword -'a']++;

(2) ; /* 下一个字符 */

}

}

while (*sndword) {

if (isalpha (*sndword)) {

index= isupper (*sndword) ? *sndword -'A': *sndword -'a';

if (counter [index] )

counter [index] --;

else

(3) ;

}

(4) ; /* 下一个字符 */

}

for (index = 0; index<26; index++)

if ( (5) )

return 0;

return 1;

}

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

【说明】

函数ReverseList(LinkList headptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两部分组成:已经完成逆置的部分和未完成逆置的部分,令s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头(头结点之后),直到全部结点的指针域都修改完成为止。

例如,某单链表如图4-1所示,逆置过程中指针s的变化情况如图4-2所示。

3.png
4.png

链表结点类型定义如下:

typedef struct Node {

int data;

struct Node *next,

} Node, *LinkList;

【C函数】

void ReverseList (LinkList headptr)

{ //含头结点的单链表就地逆置,headptr为头指针

LinkList p, s;

if ( (1) ) return; //空链表(仅有头结点)时无需处理

p= (2) ; //令p指向第一个元素结点

if (!p->next) return; //链表中仅有一个元素结点时无需处理

s = p->next; //s指向第二个元素结点

(3) = NULL; //设置第一个元素结点的指针域为空

while (s) {

p= s; //令p指向未处理链表的第一个结点

s= (4) ;

p -> next - headptr -> next; //将p所指结点插入已完成部分的表头

headptr -> next = (5) ;

}

}

●

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

【说明】

对部分乐器进行建模,其类图如图5-1所示,包括:乐器(Instrument)、管乐器(Wind)、打击乐器(Percussion)、弦乐器(Stringed)、木管乐器(Woodwind)、铜管乐器(Brass)。

5.png

下面是实现上述设计的C++代码,其中音乐类(Music)使用各类乐器(Instrument)进行演奏和调音等操作。

【C++代码】

#include

using namespace std;

enum Note { /* 枚举各种音调 */

MIDDLE_C, C_SHARP, B_FLAT

};

class Instrument{ /* 抽象基类,乐器 */

public:

(1) ; //play函数接口

virtual void adjust()=0; //adjust函数接口

};

class Wind (2) {

public:

void play(Note n) { cout<<"Wind.play()"<<n<<end1; p="" }<="">

void adjust() { cout<<"Wind.adjust()"<<end1; p="" }<="">

};

/* 类Percussion和Stringed实现代码略 */

class Brass (3) {

public:

void play(Note n) { cout<<"Brass.play()"<<n<<end1; p="" }<="">

void adjust() { cout<<"Brass.adjust ()"<<end1; p="" }<="">

};

class Woodwind : public Wind {

public:

void play(Note n) { cout<<"Woodwind.play()"<<n<<end1; p="" }<="">

};

class Music {

public:

void tune(Instrument* i) { i->play(MIDDLE_C); }

void adjust(Instrument* i) { i->adjust(); }

void tuneAll( (4) e[], int numIns) { /* 为每个乐器定调 */

for( int i=O; i<numlns; p="" {<="">

this->tune(e[i]);

this->adjust(e[i]);

}

}

};

/* 使用模板定义一个函数size,该函数将返回数组array的元素个数,实现代码略 */

int main() {

Music* music= (5) Music();

Instrument* orchestra[]={ new Wind(), new Woodwind() };

music->tuneAll(orchestra, size(orchestra)); /* size数组orchestra的元素个数 */

for (int i=0; i<size p="" i++)<="">

delete orchestra[i];

delete music;

}

本程序运行后的输出结果为:

Wind.play() 0

Wind.adjust()

Woodwind.play() 0

Wind.adjust()

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

【说明】

对部分乐器进行建模,其类图如图6-1所示,包括:乐器(Instrument)、管乐器(Wind)、打击乐器( Percussion)、弦乐器(Stringed)、木管乐器(Woodwind)、铜管乐器(Brass)。

6.png

下面是实现上述设计的Java代码,其中音乐类(Music)使用各类乐器(Instrument)进行演奏和调音等操作。

【Java代码】

enum Note{ /* 枚举各种音调 */

MIDD[LE_C, C_SHARP, B_FLAT; //其他略

}

interface Instrument { /* 接口,乐器 */

(1) ; //play方法接口

void adjust() ; //adjust方法接口

}

class Wind (2) {

public void play(Note n) { System.out.println("Wind.play()"+n); }

public void adjust() { System.out.println("Wind.adjust()"); }

}

/* 类Percussion和Stringet实现代码略 */

class Brass (3) {

public void play(Note n) { System.out.println("Brass.play()"+n); }

public void adjust () { System.out.println("Brass.adjust()"); }

}

class Woodwind extends Wind {

public void play (Note n) { System.out.println("Woodwind.play()"+n); }

}

public

void tune(Instrument i) { i.play(Note.MIDDLE_C); }

void adjust(Instrument i) { i.adjust(); }

void tuneAll (4) e ) {

class Music {

for(lnstrument i : e) {

adjust(i);

tune(i);

}

}

public static void main(String[] args) {

Music music= (5) Music();

Instrument[] orchestra={ new Wind(), new Woodwind() };

music.tuneAll(orchestra);

}

奉程序运行后的输出结果为:

Wind.adjust()

Wind.play() MIDDLE_C

Wind.adjust()

Woodwind.play() MIDDLE_C

责任编辑: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步:领取备考资料
!
咨询在线老师!