【计算机类职业资格】初级程序员2015上半年下午试题及答案解析.doc
《【计算机类职业资格】初级程序员2015上半年下午试题及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】初级程序员2015上半年下午试题及答案解析.doc(9页珍藏版)》请在麦多课文档分享上搜索。
1、初级程序员 2015 上半年下午试题及答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。 说明 下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度 L 及其在各字符串中的起始位置(L=0 时不存在公共字串)。例如,字符串“The light is not bright tonight”与“Tonight the light is not bright”的最长公共子串为“he light is not bright”,长度为 22,起始位置分别为 2
2、和 10。 设 A1:M表示由 M 个字符 A1,A2,AM依次组成的字符串;B1:N表示由 N 个字符 B1,B2,BN依次组成的字符串,MN1。 本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在 A、B 字符串中查找是否存在长度为 L 的公共子串,即在 A、B 字符串中分别顺序取出长度为 L 的子串后,调用过程判断两个长度为 L 的指定字符串是否完全相同(该过程的流程略)。 流程图 (分数:15.00)_二、试题二(总题数:1,分数:15.00)2.阅读以下说明和 C 函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。 说明 1 函数 f(double eps)的功能
3、是:利用公式 (分数:15.00)_三、试题三(总题数:1,分数:15.00)3.阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 下面的程序代码根据某单位职工的月工资数据文件(名称为 Salary.dat,文本文件),通过调用函数GetIncomeTax 计算出每位职工每月需缴纳的个人所得税额并以文件(名称为 IncomeTax.dat,文本文件)方式保存。 例如,有 4 个职工工资数据的 Salary.dat 内容如下,其中第一列为工号(整数),第 2 列为月工资(实数)。1030001 6200.00 1030002 5800.00 2010001 8500
4、.00 2010010 8000.00 相应地,计算所得 IncomeTax.dat 的内容如下所示,其中第 3 列为个人所得税额: 1030001 6200.00 47.20 1030002 5800.00 35.94 2010001 8500.00 233.50 2010010 8000.00 193.00 针对工资薪金收入的个人所得税计算公式为: 个人所得税额=应纳税所得额税率-速算扣除数 其中,应纳税所得额=月工资-三险一金-起征点 税率和速算扣除数分别与不同的应纳税所得额对应,如下表所示。 级数 全月应纳税所得额 X(元) 税率(%) 速算扣除数(元) 1 0X1500 3 0 2
5、1500X4500 10 105 3 4500X9000 20 555 4 9000X35000 25 1005 5 35000X55000 30 2755 6 55000X80000 35 5505 7 X80000 45 13505 设三险一金为月工资的 19%,起征点为 3500 元。 例如,某人月工资为 5800 元,按规定 19%缴纳三险一金,那么: 其应纳税所得额 X=5800-580019%-3500=1198 元,对应税率和速算扣除数分别为 3%和 0 元,因此,其个人所得税额为 11983%-0=35.94 元。 C 代码 #include stdio.h #define B
6、ASE 3500 /起征点 #define RATE 0.19 /三险一金比例 _; /声明函数 GetIncomeTax int main() int id; double salary; FILE *fin,*fout; fin = fopen(“Salary.dat“,“r“); if (_) return 0; fout = fopen(“IncomeTax.dat“,“w“); if (_) return 0; while (!feof(fin) if (fscanf(fin,“%d%if“, _) !=2) break; fprintf(fout,“%dt%.21ft%.21fn“
7、,id, salary, _); fclose(fin); fclose(fout); return 0; double GetIncomeTax(double salary) double yns_sd; yns_sd = _ - BASE; /*计算应纳税所得额*/ if (yns_sd=0) return 0.0; else if (yns_sd=1500) return yns_sd*0.03; else if (yns_sd=4500) return yns_sd*0.1-105; else if (yns_sd=9000) return yns_sd*0.2-555; else i
8、f (yns_sd=35000) return yns sd*0.25-1005; else if (yns_sd=55000) return yns_sd*0.3-2755; else if(yns_sd=80000) return yns_sd*0.35-5505; return yns_sd*0.45-13505; (分数:15.00)_四、试题四(总题数:1,分数:15.00)4.阅读以下说明和 C 函数,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 函数 Combine(LinkList La,LinkList Lb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值
9、呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。例如,元素递减排列的单链表 La 和 Lb 如图 1 所示,合并所得的单链表如图 2 所示。 (分数:15.00)_五、试题五(总题数:1,分数:15.00)5.阅读下列说明和 C+代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 设计 RGB 方式表示颜色的调色板,进行绘图,其类图如下图所示。该程序的 C+代码附后。 (分数:15.00)_六、试题六(总题数:1,分数:15.00)6.阅读以下说明和 Java 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 设计 RGB 方式表示颜色的调色板,进行绘图。其
10、类图如下图所示。该程序的 Java 代码附后。 (分数:15.00)_初级程序员 2015 上半年下午试题答案解析(总分:90.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)1.阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。 说明 下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度 L 及其在各字符串中的起始位置(L=0 时不存在公共字串)。例如,字符串“The light is not bright tonight”与“Tonight the light is not bright”的最长公共子串为“he ligh
11、t is not bright”,长度为 22,起始位置分别为 2 和 10。 设 A1:M表示由 M 个字符 A1,A2,AM依次组成的字符串;B1:N表示由 N 个字符 B1,B2,BN依次组成的字符串,MN1。 本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在 A、B 字符串中查找是否存在长度为 L 的公共子串,即在 A、B 字符串中分别顺序取出长度为 L 的子串后,调用过程判断两个长度为 L 的指定字符串是否完全相同(该过程的流程略)。 流程图 (分数:15.00)_正确答案:()解析:N 或 rnin(M,N) M-L+1 N-L+1 L-1 L,I,J 解析 本题考
12、查对算法流程图的理解和绘制能力。这是程序员必须具有的技能。 本题的算法可用来检查某论文是否有大段抄袭了另一论文。“The light is not bright tonight”是著名的英语绕口令,它与“Tonight the light is not bright”大同小异。 由于字符串 A 和 B 的长度分别为 M 和 N,而且 MN1,所以它们的公共子串长度 L 必然小于或等于 N。题中采用的算法是,从最大可能的公共子串长度值 L 开始逐步递减,在 A、B 字符串中查找是否存在长度为 L 的公共子串。因此,初始时,应将 min(M,N)送 L,或直接将 N 送 L。(1)处应填写 N 或
13、 min(M,N),或其他等价形式。 对每个可能的 L 值,为查看 A、B 串中是否存在长度为 L 的公共子串,显然需要执行双重循环。A 串中,长度为 L 的子串起始下标可以从 l 开始直到 M-L+1(可以用实例来检查其正确性);B 串中,长度为 L 的子串起始下标可以从 1 开始直到 N-L+1。因此双重循环的始值和终值就可以这样确定,即(2)处应填 M-L+1,或等价形式;(3)处应填 N-L+1 或等价形式(注意循环的终值应是最右端子串的下标起始值)。 A 串中从下标 I 开始长度为 L 的子串可以描述为 AI:I+L-1;B 串中从下标 J 开始长度为 L 的子串可以描述为 AJ:J
14、+L-1。因此,双重循环体内,需要比较这两个子串(题中采用调用专门的函数过程或子程序来实现)。 如果这两个子串比较的结果相同,那么就已经发现了 A、B 串中最大长度为 L 的公共子串,此时,应该输出公共子串的长度值 L、在 A 串中的起始下标 I、在 B 串中的起始下标 J。因此,(5)处应填 L,I,J(可不计顺序)。 如果这两个子串比较的结果不匹配,那么就需要继续执行循环。如果直到循环结束仍然没有发现匹配子串时,就需要将 L 减少 1(4)处填 L-1 或其等价形式)。只要 L 非 0,则还可以继续对新的 L 值执行双重循环。如果直到 L=0,仍没有发现子串匹配,则表示 A、B 两串没有公
15、共子串。二、试题二(总题数:1,分数:15.00)2.阅读以下说明和 C 函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。 说明 1 函数 f(double eps)的功能是:利用公式 (分数:15.00)_正确答案:()解析:n+2 -s 或-1*s *p!=“0“或等价形式 num*10 或等价形式 p+或等价形式 解析 本题考查 C 语言程序设计基本技能。考生需认真阅读题目中的说明,从而确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。 函数 f(double eps)的功能是计算兀的近似值。观察题中给出的计算公式,可知在循环中 n 每次递增 2,因此空(1)处应填入“n+
16、2”。由于公式中的各项是正负交替的,因此结合表达式“term=s/n”可知变量 s就是起此作用的。空(2)处应填入“-s”或“-1*s”。 对于函数 fun(char *str),从字符序列中取出数字并组合为一个整数时,对于每个数字,只需将之前获取的部分乘以 10 再加上该数字的值即可。 以 67385423 为例。 67385423=(0+6)*10+7)*10+3)*10+8)*10+5)*10+4)*10+2)*10+3 函数中的变量 i 是用来计算位数的,num 用来计算所获得的整数值。显然,最多读取字符序列中的前 8 个数字,或者到达字符序列的末尾(*p!=“0“)时,计算也需结束。
17、因此,空(3)处应填入“*p!:“0“”。 根据 num 的作用,空(4)处应填入“num*10”。 根据指针 p 的作用,空(5)处的代码应使得 p 指向下一个字符,因此应填入“p+”。三、试题三(总题数:1,分数:15.00)3.阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 说明 下面的程序代码根据某单位职工的月工资数据文件(名称为 Salary.dat,文本文件),通过调用函数GetIncomeTax 计算出每位职工每月需缴纳的个人所得税额并以文件(名称为 IncomeTax.dat,文本文件)方式保存。 例如,有 4 个职工工资数据的 Salary.dat
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 初级 程序员 2015 上半年 下午 试题 答案 解析 DOC
