2012年上半年程序员下午题_第1页
2012年上半年程序员下午题_第2页
2012年上半年程序员下午题_第3页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2012上半年程序员真题下午题试题一(共15分)阅读以下说明和流程图,填补流程图中的空缺(1)(5).将解答填入答题纸的对应 栏内。【说明】己知数组Al:n中各个元素的值都是非零整数.其中有些元素的值是相同的(重复)。 为删除其中重复的值,可先通过以F流程图找出所有的重复值,并对所有重复值賦0标记. 该涼程图采用了双重循环.处理恿路:如果数组A某个元素的值在前面曾出现过.则该元素賦标记值0例如.假 设数组A的各元素之值依次为2, 5, 5, 1, 2, 5, 3.则经过该流程图处理后,各元素之值 依次为 2 5, 0. 1, 0, 0. 3.【涼程图】试题二(共15分)阅读以卜说明、C程序代码

2、和问题1至问题乳将解答写在答题纸的对应栏内.【说明1】设在某C系统中为毎个字待型数据分配1个字节,为毎个整型(int)数据分配4个字 节.为每个指针分配4个字节,sizeof(x)用于计算为x分配的字节数.【C代码】include <stdio.h>"include <string.h>int main() int arr(5H10# 20, 30;char mystr(=MJustAtestn"char eptr=mystr;printfC%d %d %dnMf sizeof(int)# sizeof(unsigned int), strlen(a

3、rr);printff*%d %dn", sizeof(char), sizeof(mystr);printff*%d %d %dn* sizeof(ptr), sizeof(*ptr)# strlen(ptr); return 0;)【说明2】const是C语言的一个关键字,可以用来定义“只读”壁变虽。【问题1】(8分)诗写出以上C代码的运行结果。【问题2】(4分)(1) 请定义一个“只读”型的整型常S size,并将其值初始化为10:(2) 请定义一个指向整型变虽a的指针ptr.使得ptr的值不陡修改.而ptr所指向的 目标变虽的值可以修改(即可以通过ptr间接修改整型变呈a的值

4、人注:无需给出整型变虽a的定义.【问题3】(3分)某C程序文件中定义的换数£如下所示,请简要说明其中static的作用,以及形参表“const int arr( * 中 const 的作用.static int f(const int arr()/函数体内的语句省略7试题三(共15分)阅读以下说明和C函数.填补C函数中的空缺(1)(6).将解答写在答题纸的对应 栏内.【说明】tfinumberOfwords(char message)的功能是计算存储在message字符数组中的一段英 文语句中的单词数目,输出每个单词(单词长度超过20时仅输出其前20个字母).并计算 每个英文字母出现

5、的次数(即频数),字母计数时不区分大小写.假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即 不会出现类似don-t形式的词.单词之后都为空格或标点符号.的数中判定单词的规则是:(1)一个英文字母串是单词:(2)一个数字串是单词:(3)表示名词所有格的撤号0与对应的单词看作是一个单词.除上述规则外.其他情况概不考电.例如.句子 MThe 1990's witnessed many changes in people's concepts of conservation. ” 中 有10个单词,输出如下:The1990'switnessedman

6、ychangesinpeople'sconceptsofconservation闻数numberOfwords中用到的部分标准库换数如下表所述.两数原型说明int islower(int ch);若ch表示一个小写英文字母.则返回一个非0整数,否则返回0int isupper(int ch);若ch表示一个大写英文字母.则返回一个非0蔡数,否则返回0int isalnum(int ch);若ch表示一个英文字母或数字字符,则返回一个非0整数,否则返回0int isalpha(int ch);若ch表示一个英文字母.则返回一个非0整数,否则返回0int isdigit(int ch);若

7、ch表示一个数字字符.则返回一个非0整数.否则返回0【C函数】int numberOfwords (char messaged)char wordbuffer21, i=0:/* i 用作 wordbuffer 的下标/(1) pstr;int ps26)=0;/ ps(0用于表示字母'A或0的频数/ps用于表示字母®或b的频数,依此类推/int wordcounter=0:pstr=message;while (*pstr) f( (2) (*ostrD /调用旳数判定是否为一个单词的开头字符/i=0;do/将一个单词的字符逐个存入wordbufferd并进行字母计数*/

8、wordbufferi+=*pstr;if (isalpha (*pstr) if( ( 3) ( pstr) ps(*pstr-'a'+;else pslpstr-'A'*;(4) ;/* pstr指向下一字符/while (i<20 && (isalnum(*pstr)| | pstr=,");if(i>=20) /处理超长单词(含名词所有格形式/while (isalnum (*pstr)| | *pstr='") pstr+;)(5) ='0:/设迓暂存在wordbuffer中的单词结尾/w

9、ordcounter"; /单词计数/puts (wordbuffer); /* 输岀单词/ :/* pstr指向下一字符/return wordcounter;试题四(共15分)阅读以下说明和C函数.填补C两数中的空缺(1)(5),将解答写在答题纸的对应 栏内.【说明】曲数SetDiff(LA,LB)的功陡是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与 LB不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针.例如,单链表LA、LB的示例如下图中的(a)、(b)所示,删除与LB共有的元素后的 LA如F图中的(C)所示.试題四<15分阅读以下说明和C的数.埔

10、补C函数中的空缺<1) <5>>梅解答写在答題纸的对应 栏内.【说明】由数SetDiff(LAAB)的功能是梅LA与LB中的共有元素从LA中删除.使得LA中仅保留与 LB不同的元素.而LB不变.LA和LB为含头结点的怕链表的头捋针例如.单链表LA. LB的示例如F图中的<a>.(b>所示.SH除与LB兀有的元素后的 LA如2阳中的<C>所示。儀友 的结点类型主文如下typedef struct Node int data;struct Node *next;Node# LinkList;函数 SetDiff(UnkUst LA, LinkL

11、ist LB)的处理也路如下z("从LA的第一个元素结点开始.令LA的第一个元素为当前元素.(2) 在LB中进行顺序査找.査找与3的当前元素相同者.方法是令3的当前元素先 与LB的第一个元索进行比较.若相等.则结束在LB中的査找过程.否则继续与LB的卜一 个元彖比较朿貝以上过程克到LB中的某一个元彖与LA的当前元未相等(表明戏找成功人 或者到达LB的表尾(表明査找失败)为止.(3) 结束在LB表的一次査找后.若在LB中发现了与LA的当前元素相同者.则删除LA的当前元素.否则保留LA的当前元素。(4) 取LA的下一个元素为当前元素瑜复(2). (3).血到LA的农加【C函数】void

12、SetDiff (UnkList LA, LinkList LB)LinkList pre, pa, pb;厂pa用于指向职链表LA的当前元索结点.pre指向"所指元索的前殛 V/ pb 0J于折问箪链衣LB的元索馅点/(1;厂开始时令"指向LA的第一个元素/pre=LA;while (pa) pb=LB->next;/庄LB中戏找与LA的当帕元素相同祈克到找到喊不到达表尾 Vwhile( (2)if (pa >data=pb->data)break; :If(lpb) P若任LB中没有找到与LA中当前尤素相同者.则继续考察LA的后续尤素/prepa;pa

13、»pa->next;elser 若住LB中找到与LA的当前元索相同打.則IM除LA的当前尤素 V pre->next= (4);free (pa);p=(5);试题五(共15分)阅读以下说明和C*代码填补O+代码中的空缺(1)(6).将解答写在答题纸的 对应栏内【说明】已知某公可按周给员工发放工资.其工资系统需记录每名员工的员工号.姓名、工资等 信息.其中一些员工是止式的按年崭分周发放(每年按52周计算):另一兰员工是计时工. 以小时工资为基准.按毎周工作小时数核鼻发放。下面是实现该工资系统的C*代码.其中定义了四个类:工资系统类PayRoll.员工类 Employee.

14、正式工类 Salaried 和计时工类 Hourlyt Salaried 和 Hourly 是 Employee 的 Jp类 【C卄代码】头文件和域名空间略 const int EMPLOYEE_NUM=5; class Employee 员工号员工姓名周发放工资protected:int empCode;string name; double salary; public:Employee(const int empCode, const string &name ) this->empCode=empCode; this->name=name;virtual Emplo

15、yee()virtual void pay()=0;double getSalary() return this>salary; ;class Salaried(1)private:double payRate; 年崭public:Salaried(const int empCode, const string &namet double payRate):Employee (empCode, name) this->payRate=payRate;计算正式员工的周发放工资数void pay()this->salary= (2): cout«this->

16、;name « M:M «this->salary«endl;;class Hourly private:double payRate; int hours;小时工资数 周工作小时数public:Hourly (const int empCode const string &name, int hours, double payRate) :EmployeeCempCode, name) this->payRate=payRate; this->hours=hours;void pay() th is->sa I a ry= (4): 计算计时工的周发放工资数cout« this->name «« this->salary « endl;class Pay Roll public:void pay (Employeeee()(for (int i=0; ivEMPLOYEE.NUM; i*+) ei->pay();int main() Pay Roll payRolhnew PayRoll;(5) employees EMPLOYEE_NUM= new sa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论