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

  • 0
  • 0
  • 约9.62千字
  • 约 20页
  • 2021-08-24 发布于北京
  • 举报

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

2010上半年程序员考试真题及答案-下午卷 试题一 【说明】 下面的流程图旨在统计指定关键词在某一篇文章中出现的次数。设这篇文章由字符A(0),…,A(n-l)依次组成,指定关键词由字符B(0),…,B(m-l) 依次组成,其中nm=l。注意,关键词的各次出现不允许有交叉重叠。例如,在“aaaa” 中只出现两次“aa”。 该流程图采用的算法是:在字符串A中,从左到右寻找与字符串B相匹配的并且没有交叉重叠的所有子串。流程图中,i为字符串A中当前正在进行比较的动态子串首字符的下标,j为字符串B的下标,k为指定关键词出现的次数。 【流程图】 (1) 0—k (2) i+j (3) i+m (4) i+1 (5) i 本题考查用流程图描述算法的能力。 在文章中查找某关键词出现的次数是经常碰的问题。例如,为了给文章建立搜索关键词,确定近期的流行语,迅速定位文章的某个待修改的段落,判断文章的用词风格,甚至判断后半本书是否与前半本书是同一作者所写(用词风格是否一致)等,都采用了这种方法。 流程图最终输出的计算结果就是文章字符串A中出现关键词字符串B的次数。显然,流程图开始时应将赋值0,以后每找到一处出现该关键词,就执行增1操作k=k+1. 因此(1)处应填0—K。 字符串A和B的下标都是从0开始的。所以在流程图执行的开始处,需要给它们赋值0。接下来执行的第一个小循环就是判断A(i),A(i+l),…,A(i+j-1)是否完全等于B(0),B(1),…,B(m-l),其循环变量j=0,1,…,m-1。只要发现其中对应的字符有一个不相等时,该小循环就结束,不必再继续执行该循环。因此,该循环中继续执行的判断条件应该是A(i+j)=B(j)且jm。只要遇到或者(关键词各字符都已判断过)就不再继续执行该循环了。因此流程图的(2)处应填i+j。 许多考生在(2)处填i,当j增1变化后,仍然使用A(i)进行比较就不对了。因此,在检查循环程序段时应多走查一次循环。 如果(2)处整体的判断条件不成立,则该判断关键词的小循环结束。此时可能有两种情况。一是在j=0,l,…,m-1时全都成立(找到了一处关键词),直到j=M时才结束小循环;二是在时就发现了字符不等的情况,这说明此处并不出现关键词。因此流程图中用jm来区分找到与没有找到关键词的两种情况。 对于j=m,已找到一处关键词的情况,显然应该执行对关键词出现次数的变量进行增1计算。同时,为了继续进行以后的判断,应将字符串A的下标f右移m (这是因为题中假设关键词的出现不允许重叠)。因此(3)处应填写i+m,表示应该从已出现的关键词后面开始再继续进行判断。由于此时的j=m,书写i+J的答案也是正确的,但这不是程序员的好习惯,因为这不符合逻辑思维的顺势,在程序不断修改的过程中容易出错。不少考生在(3)处填写i+1,这意味着下次判断关键词将从A(i+1)开始,这就使关键词的出现有可能发生部分重叠的现象。 流程图中,对于jm的情况,表示刚才判断关键词时并非各个字符都完全相同,也就是说,刚才的判断结论是此处并没有出现关键词。即A(i)开始的子串并不是关键词。因此,下次判断关键词应该以A(i+1)开始,即(4)处应填i+1。 在下次判断关键词之前还应该判断是否全文已经判断完。最后一次小循环判断应该是对A(n-m),A(n-m+1),…,A(n-l)的判断。下标n-m来自从n-1倒数m个数。可以先试验写出A(n-m),A(n-m+1),…,A(n-l),再判断其个数是否为m。经检查,个数为(n-1)-(n-m)+1=m个,所以这是正确的。也可以用例子来检查次数是否正确。检查次数是程序员的基本功,数目的计算很容易少一个或多一个。 既然最后一次判断关键词应该是对A(n-m),A(n-m+1),…,A(n-l)的判断,即对i=n-m进行的小循环判断,所以当in-m时就应该停止大循环,停止再查找关键词了。 试题二 阅读以下问题说明、C程序和函数,将解答填入答题纸的对应栏内。 【问题1】 分析下面的C程序,指出错误代码(或运行异常代码)所在的行号。 【C程序】 5,或 arrChar = test 7,或*P=0’ 本题考查C程序编写和调试中常见错误的识别和改正。 在C语言中,指针表示内存单元的地址,指针变量可用于存储指针类型的值,即内存单元的地址值。变量的值在程序运行过程中允许修改,而常量则不允许修改。可以令指针指向一个变量或常量,但若指针指向一个常量,则不允许通过指针修改该常量。 第5行代码有错,即对数组名arrChar的赋值处理是错误的。在C语言中,数组名是表示数组空间首地址的指针常量,程序中不允许对常量赋值。 第7行代码有错,在第6行中,通过p = testing使指针变量指向了一个字符串常

文档评论(0)

1亿VIP精品文档

相关文档