logo资料库

2015上半年程序员考试真题及答案-下午卷.doc

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
【说明】
【说明1】
【C函数2】
【说明】
【说明】
2015 上半年程序员考试真题及答案-下午卷 试题一(共 15 分) 阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的 长度 L 及其在各字符串中的起始位置(L=0 时不存在公共字串)。例如,字符串"the light is not bright tonight ” 与“ Tonight the light is not bright ”的最长公共子串为 "the light is not bright?,长度为 22,起始位置分别为 2 和 10。 设 A[1:M]表示由 M 个字符 A[1],A[2],…,A[M]依次组成的字符串;B[1:N]表示由 N 个字符 B[1], B[2],…,B[N]依次组成的字符串,M≥N≥1。 本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在 A、B 字符串 中查找是否存在长度为 L 的公共子串,即在 A、B 字符串中分别顺序取出长度为 L 的子串后, 调用过程判断两个长度为 L 的指定字符串是否完全相同(该过程的流程略)。 【流程图】 (1) N 或 min(M,N) (2) M-L+1 (3) N-L+1 (4) L-1 (5) L, I, J 本题考查对算法流程图的理解和绘制能力。
这是程序员必须具有的技能。 本题的算法可用来检查某论文是否有大段抄袭了另一论文“the light is not bright tonight"是著名的英语绕口令,它与"onight the light is not bright"大同小异。 由于字符串 A 和 B 的长度分别为 M 和 N,而且 M≥N≥1,所以它们的公共子串长度 L 必然小 于或等于 N。题中采用的算法是,从最大可能的公共子串长度值 L 开始逐步递减,在 A、B 字符串中查找是否存在长度为 L 的公共子串。因此初始时,应将 min (M, N)送 L。或直接将 N 送 L。(1)处应填写 N 或 min(M,N),或其他等价形式。 对每个可能的 L 值,为查看 A、B 串中是否存在长度为 L 的公共子串,显然需要执行双 重循环。A 串中,长度为 L 的子串起始下标可以从 1 开始直到 M-L+1 (可以用实例来检查其 正确性);B 串中,长度为 L 的子串起始下标可以从 1 开始直到 N-L+1。因此双重循环的始值 和终值就可以这样确定,即(2)处应填 M-L+1,或等价形式;(3)处应填 N-L+1 或等价形式 (注意循环的终值应是最右端子串的下标起始值)。 A 串中从下标 I 开始长度为 L 的子串可以描述为 A[I:I+L-1]; B 串中从下标 J 开始长度 为 L 的子串可以描述为 A[J:J+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 分) 阅读以下说明和 C 函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内, 【说明 1】 函数 f(double eps)的功能是:利用公式 计算并返回π的近似值。 【函数 1】 【说明 2】 函数 fun(Char *str)的功能是:自左至右顺序取出非空字符串 str 中的数字字符,形 成一个十进制整数(最多 8 位)。例如,若 str 中的字符串为"iyt?67kpf3g8d5.j4ia2e3p12”, 则函数返回值为 67385423。 【C 函数 2】
(1)n+2 (2) -s 或-1*s (3) *p!=’\0’或等价形式(4)num* 10 或等价形式 (5) p++或 等价形式 本题考查 c 语言程序设计基本技能。考生需认真阅读题目中的说明,从而确定代码的运 算逻辑,在阅读代码时,还需注意各变量的作用。 函数 f(double eps)的功能是计算π的近似值。观察题中给出的计算公式,可知在循环 中 n 每次递增 2,因此空(1)处应填入"n+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’)时,计算也需结束。 因此,空 (3)处应填入“*p!=’\0’”。 根据 num 的作用,空(4)处应填入“num* 10”。 根据指针 P 的作用,空(5)处的代码应使得 p 指向下一个字符,因此应填入“ p++”。
试题三(共 15 分) 阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的程序代码根据某单位职工的月工资数据文件(名称为 Salary.dat,文本文件), 通过调用函数 GetlncomeTax 计算出每位职工每月需缴纳的个人所得税额并以文件(名称为 IncomeTax.dat,文本文件)方式保存。 例如,有 4 个职工工资数据的 Salary.dat 内容如下,其中第一列为工号(整数),第 2 列为月工资(实数)。 1030001 6200.00 1030002 5800.00 2010001 8500.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 税率—速算扣除数 其中,应纳税所得额=月工资—三险一金—起征点 税率和速算扣除数分别与不同的应,如表 3-1 所示。 设三险一金为月工资的 19%,起征点为 3500 元。 例如,某人月工资为 5800 元,按规定 19%缴纳三险一金,那么:
其应纳税所得额 X=5800—5800x19%—3500=1198 元,对应税率和速算扣除数分别为 3% 和 0 元,因此,其个人所得税额为 1198X3%-0=35.94 元。 【C 代码】 (1)double GetIncomeTax(double salary)或 double GetlncomeTax(double) (2)!fin 或 fin==NULL 或 fin==0 (3)!fout 或 fout=NULL 或 fout=0 (4)&id, &salary (5)GetlncomeTax(salary) (6)salary *(1-RATE)或等价形式 注:RATE 可替换为 0.19
本题考查 c 语言程序设计基本技能。考生需认真阅读题目中的说明,以便理解问题并确 定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。 根 据 注 释 , 空 ( 1) 处 应 填 入 "double GetIncomeTax(double salary)" 或 "double GetlncomeTax(double)”,对函数 GetlncomeTax 进行声明。 空(2)、(3)处所在的代码是判断文件打开操作是否成功,因此应分别填入“!fin”、“! fout”。 根据说明可知,变量 id 和 salary 分别表示工号和月工资数。 空(4)处所在语句为从文件中读取数据的操作,从 fscanf 的格式控制串可知读取的两 个数是整数和双精度浮点数,则输入表列的两个变量分别为接收整数值的变量 id 和接收整 数值的变量 salary,因此空(4)应填入“&id, &salary”。 空 ( 5)处 所 在 代码 向 fout 关 联 的 文件 写 入 计 算 出的 所 得 税 额 , 显然 需 调 用 函数 GetlncomeTax 来计算,因此应填入 “ GetlncomeTax(salary) ”。 空(6)处的代码计算应纳税所得额,根据说明中给出的计算公式及三险一金的计算方法: 应纳税所得额=月工资—三险一金—起征点 空(6)处应填入“salary *(1-RATE)”。
试题四(共 15 分) 阅读以下说明和 C 函数,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 函数 Combine(LinkList La, LinkList Lb)的功能是:将元素呈递减排列的两个含头结 点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头 指针。例如,元素递减排列的单链表 La 和 Lb 如图 4-1 所示,合并所得的单链表如图 4-2 所示。 【c 函数】
分享到:
收藏