[计算机类试卷]2014年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc
《[计算机类试卷]2014年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2014年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc(15页珍藏版)》请在麦多课文档分享上搜索。
1、2014年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 0 阅读以下说明和流程图,填补流程图中的空缺 (1) (5),将解答填入答题纸的对应栏内。 说明 指定网页中,某个关键词出现的次数除以该网页长度称为该关键词在此网页中的词频。对新闻类网页,存在一组公共的关键词。因此,每个新闻网页都存在一组词频,称为该新闻网页的特征向量。设两个新闻网页的特征向量分别为:甲 (a1, a2, , ak)、乙 (b1, b2 , bk),则计算这两个网页的相似度时需要先计算它们的内积 S=a1b1+a2b2+a kbk。一般情况下,新闻网页特征向量的维数是巨大的,但每个特征向量中非零元素
2、却并不多。为了节省存储空间和计算时间,我们依次用特征向量中非零元素的序号及相应的词频值来简化特征向量。为此,我们用(NA(i), A(i) i=1, 2, , m)和 (NB(j), B(i)j=1 , 2, , n)来简化两个网页的特征向量。其中: NA(i)从前到后描述了特征向量甲中非零元素 A(i)的序号 (NA(1) NA(2) ) , NB(j)从前到后描述了特征向量乙中非零元素 B(j)的序号 (NB(1)NB(2) ) 。下面的流程图描述了计 算这两个特征向量内积 S的过程。1 (1) 2 (2) 3 (3) 4 (4) 5 (5) 5 阅读以下说明和 C函数,填补代码中的空缺
3、(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 t; k+=2) if(2)return 0; return 1; 说明 2 函数 mt minOne(int a
4、rr, int k)的功能是用递归方法求指定数组中前 k个元素中的最小者,并作为函数值返回。 C函数 int minOne(int arr, int k) int t; assert(k 0); if(k=1) return(3); t=min one(arr+1, (4); if(arr0 t) return arr0; return(5); 6 (1) 7 (2) 8 (3) 9 (4) 10 (5) 10 阅读以下说明和 C程序,填补代码中的空缺 (1) (5),将解答填入答题纸的对应栏内。 说明 函数 areAnagrams(char*fstword, char*sndword)的功能
5、是判断 fstword和 sndword中的单词 (不区分大小写 )是否互为变位词,若是则返回 1,否则返回0。所谓变位词是指两个单词是由相同字母的不同排列得 到的。例如, “triangle”与“integral”互为变位词,而 “dumbest”与 “stumble”不是。函数 areAnagrams的处理思路是检测两个单词是否包含相同的字母且每个字母出现的次数也相同。过程是先计算第一个单词 (即 fstword中的单词 )中各字母的出现次数并记录在数组 counter中,然后扫描第二个单词 (即 sndword中的单词 )的各字母,若在第二个单词中遇到与第一个单词相同的字母,就将相应的计
6、数变量值减 1,若在第二个单词中发现第一个单词中不存在的字母,则可断定这两个单词不构成变位词。最 后扫描用于计数的数组 counter各元素,若两个单词互为变位词,则 counter的所有元素值都为 0。函数areAnagrams中用到的部分标准库函数如下表所述。C函数 int areAnagrams(char *fstword, char *sndword)int index; int counter26=0; *counteri为英文字母表第 i个字母出现的次数, A或 a为第 0个, B或 b为第 1个,依此类推 * if(1) *两个单词相同时不互为变位词 * return 0;whi
7、le(*fstword) *计算第一个单词中各字母出现的次数 *if(isalpha(*fstword)if(isupper(*fstword)counter*fstword-A+;elsecounter+fstword-a+; (2); *下一个字符 * while(*sndword)if(isalpha(*sndword)index=isupper(*sndword)?*sndword-A:*sndword-a; if(counterindex)counterindex-; else(3); (4); *下一个字符 * for(index=0; index 26; index+)if(5)
8、return 0; return 1; 11 (1) 12 (2) 13 (3) 14 (4) 15 (5) 15 阅读以下说明和 C函数,填补代码中的空缺 (1) (5),将解答填入答题纸的对应栏内。 说明 函数 ReverseList(LinkListheadptr)的功能是将含有头结点的单链表就地逆置。处理思路是将链表中的指针逆转,即将原链表看成由两 部分组成:已经完成逆置的部分和未完成逆置的部分,令 s指向未逆置部分的第一个结点,并将该结点插入已完成部分的表头 (头结点之后 ),直到全部结点的指针域都修改完成为止。例如,某单链表如图 41所示,逆置过程中指针 s的变化情况如图 42所示
9、。链表结点类型定义如下: typedef struct Nodeint 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
10、;令 P指向未处理链表的第一个结点 s=(4); p-next=headptr- next;将 P所指结点插入已完成部分的表头 headptr-next=(5); 16 (1) 17 (2) 18 (3) 19 (4) 20 (5) 20 阅读下列说明、 C+代码和运行结果,填补代码中的空缺 (1) (5),将解答填入答题纸的对应栏内。 说明 对部分乐器进行建模,其类图如图 51所示,包括:乐器 (Instrument)、管乐器 (Wind)、打击乐器 (Percussion)、弦乐器 (Stringed)、木管乐器 (Woodwind)、铜管乐器 (Brass)。下面是实现上述设计的 C+代
11、码,其中音乐类 (Music)使用各类乐器 (Instnunent)进行演奏和调音等操作 。 C+代码 #inqlude iostream 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()“ nendl; void adjus
12、t()cout “Wind adjust()“ endl; ; *类 Percussion和Stringed实现代码略 * class Brass(3)public: void play(Note n)cout“Brass play()“ n endl; void adjust()cout “Brass adjust()“endl; ; class Woodwind: public Windpublic: void play(Note n)cout“Woodwind play()“ n endl; ; class Musicpublic: void tune(Ins trument* i)i-
13、 play(MIDDLE_C); void adjust(Instrument* i)i- adjust(); void tuneAll(4)e, int numIns) *为每个乐器定调 * for(int i=0; i numIns;i+)this- tune(ei); this- adjust(ei); ; *使用模板定义一个函数 size,该函数将返回数组 array的元素个数,实现代码略 * int maln()Music* music=(5)Music(); Instrument*o rchestra=new Wind(), new Woodwind(); music- tuneA
14、ll(orchestra, size(orchestra); *size返回数组 orchestra的元素个数 *for(int i=0; i size(orchestra); i+)delete orchestrai; delete music; 本程序运行后的输出结果为: Wind play()0Wind adjust()Woodwind play()0Wind adjust() 21 (1) 22 (2) 23 (3) 24 (4) 25 (5) 25 阅读以下说明和 Java程序,填补代码中的空缺 (1) (5),将解答填入答题纸的对应栏内。 说明 对部分乐器进行建模,其类图如图 61
15、所示,包括:乐器(Instrument)、管乐器 (Wind)、打击乐器 (Percussion)、弦乐器 (Stringed)、木管乐器(Woodwind)、铜管乐器 (Brass)。下面 是实现上述设计的 Java代码,其中音乐类 (Music)使用各类乐器 (Instrument)进行演奏和调音等操作。 Java代码 enum Note *枚举各种音调 * MIDDLE_C, C_SHARP, BFLAT;其他略 interface Instrument *接口,乐器 * (1); play方法接口void adjust()j adjust方法接口 class Wind(2)public
16、 void play(Note n)System out println(“Wind play()“+n); public void adjust()System out println(“Wind adjust()“); *类 Percussion和 Stringed实现代码略 * 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
17、Windpublic void play(Note n)System out println(“Woodwind play()“+n); public class Musicvoid tune(Instrument_i)i play(Note MIDDLE_C); void adjust(Instrument_i)i adjust(); void tuneAll(4)e)for(Instrument i: e)adjust(i);tune(i); public static void main(Stringargs)Music music=(5)Music();Instrumentorches
18、tra=new Wind(), new Woodwind();music tuneAll(orchestra); 本程序运行后的输出结果为:Wind adjust()Wind play()MIDDLE_CWind adjust()Woodwind play()MIDDLE_C 26 (1) 27 (2) 28 (3) 29 (4) 30 (5) 2014年上半年软件水平 考试(初级)程序员下午(应用技术)真题试卷答案与解析 1 【正确答案】 0 2 【正确答案】 S+A(i)B(j)或等价表示 3 【正确答案】 i m或 i=m+1或等价表示 4 【正确答案】 i n或 j=n+1或等价表示
19、5 【正确答案】 i m or j n或 i=m+1 or j=n+1或等价表示 【试题解析】 本题是简化了的一个大数据算法应用之例。世界上每天都有大量的新闻网页,门户网站需要将其自动进行分类,并传送给搜索的用户。为了分类,需要建立网页相似度的衡量方法。流行的算法是, 先按统一的关键词组计算各个关键词的词频,形成网页的特征向量,这样,两个网页特征向量的夹角余弦 (内积两个向量模的乘积 ),就可以衡量两个网页的相似度。因此,计算两个网页特征向量的内积就是分类计算中的关键。对于存在大量零元素的稀疏向量来说,用题中所说的简化表示方法是很有效的。这样,求两个向量的内积只需要在分别从左到右扫描两个简化向
20、量时,计算对应序号相同 (NA(i)=NB(j)时的 A(i)*B(j)之和 (其他情况两个向量对应元素之乘积都是 0)。因此,流程图中 (2)处应填 S+A(i)*B(j),而累计的初始值 S应该为 0,即 (1)处应填 0。 流程图中, NA(i) NB(j)时,下一步应再比较 NA(i+1) NB(j),除非 i+1已经越界。 因此,应先执行 i+1i ,再判断是否 i m或 i=m+1(如果成立,则扫描结束 )。因此 (3)处应填 i m或 i=m+1。 流程图中, NA(i) NB(j)时,下一步应再比较 NA(i) NB(j+1),除非 j+1已经越界。 因此,应先执行 j+1j
21、,再判断是否 j n或 j=n+1(如果成立,则扫描结束 )。因此(4)处应填 j n或 j=n+1。 (5)处应填扫描结束的条件, i m or j n或 i=m+1 or j=11+1,即两个简化向量之一扫描结束时,整个扫描就结束了。 6 【正确答案】 n 2=0,或 !(n 2),或其等价形式 7 【正确答案】 n k=0,或 !(n k),或其等价形式 8 【正确答案】 arr0,或 *arr,或其等价形式 9 【正确答案】 k-1,或其等价形式 10 【正确答案】 t 【试题解析】 本题考查 C程序的基本语法和运算逻辑。 首先应认真分析题目中的说明,然后确定代码结构和各变量的作用。
22、函数 isPrime(int n)的功能是 判断 n是否为素数。根据素数的定义,小于 2的数和大于 2的偶数都不是素数, n是偶数可表示为 “n 2等于 0”,因此空 (1)处应填入“n 2=0”,或者 “!(n 2)”。 在 n是大于 2的奇数的情况下,下面的代码从 3开始查找 n的因子,直到 n的平方根为止。 for(k=3; k t; k+=2) if(2)return 0; 若 k的值是 n的因子,则说明 n不是素数。因此,空 (2)处应填入 “n k=0”,或者 “!(n k)”。 函数 int minOne(int arr, int k)的功能是用递归方法求指定数组中前 k个元素中
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2014 上半年 软件 水平 考试 初级 程序员 下午 应用技术 答案 解析 DOC
