2012上半年程序员考试真题及答案-下午卷.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2012上半年程序员考试真题及答案-下午卷.doc》由会员分享,可在线阅读,更多相关《2012上半年程序员考试真题及答案-下午卷.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2012上半年程序员考试真题及答案-下午卷试题一已知数组Al:n中各个元素的值都是非零整数,其中有些元素的值是相同的(重复)。为删除其中重复的值,可先通过以下流程图找出所有的重复值,并对所有重复值赋0标 记。该流程图采用了双重循环。处理思路:如果数组A某个元素的值在前面曾出现过,则该元素赋标记值0。例如, 假设数组A的各元素之值依次为2, 5, 5,1,2, 5, 3,则经过该流程图处理后,各元素之值依次为2,5,0, 1,0,0,3。填补流程图中的空缺(1)(5)(1) n-1 (2) Ai (3) i+1 Aj(5) Aj在处理大批数据记录时,删除重复记录(关键词重复的记录)是常见的操作。
2、本题源自这种应用。刪除重复记录算法可分两步进行。第一步将重复ai现的多余元素标记为0; 第二步再删除所有的0元素。本题流程图只做第一步处理。本流程图采用了对i和j的双重循环,对每个元素Ai,需要查看其后面的各个元素(用Aj表示)是否与Ai相同。因此,外层循环应对i=l,n-1进行,从而在(1)处应填“n-1”。内层循环应对j=i+l,n进行,从而在(3)处应填“i+1”。在外循环处理中首先应判断Ai是否已经标记为0,若是则无需进一步处理。因此, (2)处应填“Ai”。而在内循环处理中首先应判断Aj是否已经标记为0,若是则无需进一步处理。因此,(4)处应填“Aj”。如果发现元素重复(即Ai=Aj
3、),则需要再将 Aj赋值为0 (标记),因此(5)处应填“Aj”。试题二设在某C系统中为每个字符型数据分配1个字节,为每个整型(int)数据分配4个字节,为每个指针分配4个字节,sizeof(x)用于计算为x分配的字节数。 【问题1】请写出以上C代码的运行结果。4 4 201 11 4 1 10 sizeof是C语言提供的一个关键字,sizeof(x)用于计算为x分配的字节数,其结果与系统或编译器相关。若x是数组名时,用于计算整个数组所占用存储空间的字节数;若 x是指针,则无论其指向的目标数据是什么类型,x所占用的存储空间大小都相同(在同 一系统或编译环境中);若x是结构体变量或类型,则需要根
4、据系统规定的对齐要求来计 算为x所分配空间的字节数。根据说明,系统为每个字符型数据分配1个字节,为每个整型(int)数据分配4个 字节,为每个指针分配4个字节,那么sizeof(int)、sizeof(unsigned int)是计算整型数据和无符号整型数据的存储空间大小,sizeof(arr)是计算数组arr的字节数,它们的值分别为 4、4 和 20。sizeof(Char)计算一个字符数据所占用的字节数,根据说明应为1。Sizeof(mystr)计算为字符数组mystr分配的空间大小,该数组的大小由字符串JustAtestVn决定,该字符串 的长度为10,还有一个串尾结束标志字符0,因此s
5、izeof(mystr)的值为11。ptr是指向字符数组mystr的指针,显然sizeof(ptr)的结果为4。由于*ptr指向了一个字符数据,因此sizeof (*ptr)的结果为1,函数strlen(ptr)计算ptr所指字符串的长度,结果为10。【问题2】(1) 请定义一个“只读”型的整型常量size,并将其值初始化为10;(2) 请定义一个指向整型变量a的指针ptr,使得ptr的值不能修改,而ptr所指向的目标变量的值可以修改(即可以通过ptr间接修改整型变量a的值)。注:无需给出整型变量a的定义。 (1) const int size =10;或 int const size =10
6、;(2) int* const ptr = &a;在C语言中,const关键字的一个作用是限定一个变量的值不能被改变,使用const 可以在一定程度上提高程序的安全性和可靠性。const int size = 10;或 int const size = 10;以上代码都可以定义一个“只读”型的整型常量size并将其值初始化为10。当const用于修饰指针时,常见的情形如下:(1) const修饰的是指针所指向的对象,该对象不可改变,指针变量可改变。const int *p; / 或 int const *p;(2) const修饰的是指针,该指针变量不可改变,其指向的对象可改变。int *co
7、nst p;(3) const修饰的是指针以及指针所指向的对象,都不可改变。const int *const p;【问题3】某C程序文件中定义的函数f如下所示,请简要说明其中static的作用,以及形参 表 “const int arr 中 const 的作用。static的作用:说明f是内部函数,只能在本文件中调用它。 const的作用:在函数f中不能修改数组元素的值,若有修改,编译时会报错。 关键字static用于修饰函数中的局部变量时,是通知编译器将该变量的存储空间安排在全局存储区,这样在下一次调用函数时还保留上一次对该变量的修改结果。当一个源程序由多个源文件组成时,用static修饰的
8、全局变量和函数,其作用域为当前文件,对其他源文件不可见,即它们不能被其他源文件引用或调用。当函数的形参用const修饰时,在函数体内部不能被修改。试题三函数numberOfwords (char message)的功能是计算存储在message字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母), 并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略, 即不会出现类似dont形式的词,单词之后都为空格或标点符号。函数中判定单词的规则是:(1) 一个英文字母串是单词;(2)
9、 一个数字串是单词;(3) 表示名词所有格的撇号()与对应的单词看作是一个单词。除上述规则外,其他情况概不考虑。填补C函数中的空缺(1)(6)(1) char *,或 unsigned char(2) isalnum,或 isalpha(*pstr)丨丨 isdigit(3) islower,或!isupper(4) pstrH-,或+pstr,或 pstr=pstr+l,或 pstrf=l(5) wordbufferi,或*(wordbuffer+i)(6) pstr-H-,或+pstr,或 pstr=psti+l,或 pstr+=l 本题考查C语言程序设计基本技术。题目中涉及的知识点主要有
10、字符串、字符指针和函数调用等,首先应认真阅读题目的说明部分,以了解函数代码的功能和大致的处理思路,然后理清代码的框架,明确各个变量(或数组元素)所起的作用,并以语句组分析各段代码的功能,从而完成空缺处的代码填充。函数中空(1)处所在语句为定义变量pstr的声明语句,根据下面对pstr的使用方式,可知pstr是一个指向字符的指针变量,因此空(1)处应填入“char*”。显然,“pstr = message;”使pstr指向了英文语句的第一个字符,下面的while循环则用于遍历语句中的每一个字符:while (*pstr) 对于语句中的一个字符*pstr,它可能是一个单词中的字符、空格、标点符号或
11、其他 字符,由于函数的功能是取出单词并进行统计,因此首先考虑该字符是否属于一个单词 以及是否是单词的开头(字母或数字字符),结合注释,可知空(2)处用于判定当前字 符*pstr是否是单词的开头字符,即是否是字母或数字,由于代码中己给出了(*pstr),因 此最合适的做法是直接调用库函数进行处理,即空(2)处应填入“isalnum”,也可以填 入 “isalpha(*pstr)丨丨 isdigit。得到一个单词的开头字符后就用do-while语句依次取出该单词的每一个字符,直到单词结束为止。根据题目说明,单词中包含的字符为字母、数字或撇号(),因此do-while 继续循环的条件之一是表达式“i
12、salnUm(*pStr)|j*pStr=”的值为“真”,另一个条件是 关于单词长度不超过20的限制。分析空(3)所在的语句(如下所示),显然是对单词中的字母进行计数,在*pstr是 字母(isalPha(*pStr)的返回值为1)的前提下,“pS*pStr-a+”是对小写字母进行计数, “pS*pstr-A+”是对大写字母进行计数,所以空(3)处应判断*pstr是否为小写字母, 应填入“islower”,或者填入“!isupper”。if (isalpha(*pstr) if ( (3) (*pstr) ) ps*pstr_* a *+;else ps*pstr-A1+;空(4)处是令pst
13、r指向下一字符,因此应填入“pstrf+”或其等价形式。空(5)处是设置字符串结尾字符,因此应填入“wordbufferi”或其等价形式。空(6)处是令pstr指向下一字符,因此应填入“pstrf+”或其等价形式。试题四函数SetDiff(LA,LB)的功能是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与LB不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针。例如,单链表LA、LB的示例如图4-1中的(a)、(b)所示,删除与LB共有的元素后的LA如图4-1中的(c)所示。函数 SetDiff(LinkList LA, LinkList LB)的处理思路如下:(1) 从LA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2012 上半年 程序员 考试 答案 下午
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内