ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:122.50KB ,
资源ID:493042      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-493042.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文([计算机类试卷]2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc)为本站会员(amazingpat195)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

[计算机类试卷]2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc

1、2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺 (1) (5),将解答填入答题纸的对应栏内。 【说明】 已知数组 Al: n中各个元素的值都是非零整数,其中有些元素的值是相同的 (重复 )。为删除其中重复的值,可先通过以下流程图找出所有的重复值,并对所有重复值赋 0标记之。该流程图采用了双重循环。 处理思路:如果数组 A某个元素的值在前面曾出现过,则该元素赋标记值 0。例如,假设数组 A的各元素之值依次为 2, 5, 5, 1, 2, 5, 3,则经过该流 程图处理后,各元素之值依次为 2, 5, 0, 1, 0,

2、0, 3。 【流程图】 2 阅读以下说明、 C程序代码和问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 设在某 C系统中为每个字符型数据分配 1个字节,为每个整型 (int)数据分配 4个字节,为每个指针分配 4个字节, sizeof(x)用于计算为 x分配的字节数。 【 C代码】 #include #include int main() int arr5=10, 20, 30; char mystr=”JustAtest n”; char * ptr= mystr; printf(” d d d n”, sizeof(int), sizeof(unsigned int), siz

3、eof(arr); printf(” d d n”, sizeof(char), sizeof(mystr); printf(” d d d n”, sizeof(ptr), sizeof(*ptr), strlen(ptr); return 0: 【问题 1】 请写出以上 C代码的运行结果。 【说明】 const是 C语言的一个关键字,可以用来定义 “只读 ”型变量。 【问题 2】 (1)请定义一个 “只读 ”型的整型常量 size,并将其值初始化为 10; (2)请定义一个指向整型变量 a的指针 ptr,使得 ptr的值不能修改,而 ptr所指向的目标变量的值可以修改 (即可以通过 ptr

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

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

6、tnessed many changes in peoples concepts of conservation 函数 numberOfwords中用到的部分标准库函数如下所述。 【 C函数】 int numberOfwords(char message) char wordbuffer21, i=0; *i用作wordbuffer的下标 * (1) pstr; int PS26=0; *ps0用于表示字母 A或 a的频数 * *ps1用于表示字母 B或 b的频数,依此类推 * int wordcounter=0; pstr=message; while(*pstr) if( (2) (*ps

7、tr) *调用函数判断是否为一个单词的开头字符 * i=0: do *将一个单词的字符逐个存入 wordbuffer,并对字母计数 * wordbufferi+=*pstr; if(isalpha(*pstr) if (3) ( *pstr)ps*pstr-a+; else ps *pstr- A+; (4) ; *pstr指向下一字符 * while(i20&(isalnum(*pstr)|*pstr=” ”); if(i=20) *处理超长单词 (含名词所有格形式 )* while(isalnum(*pstr)|*pstr=” ”)pstr+; (5) = 0; *设置暂存在wordbuf

8、fer中的单词结尾 * wordcounter+; *单词计数 * puts(wor。 dbuffer); *输出单词 * (6) ; *pstr指向下一字符 * return wordcounter: 4 阅读以下说明和 C函数,填补 C函数中的空缺 (1) (5),将解答写在答题纸的对应栏内。 【说明】 函数 SetDiff(LA, LB)的功能是将 LA与 LB中的共有元素从LA中删除,使得 LA中仅保留与 LB不同的元素,而 LB不变, LA和 LB为含头结点的单链表的头指针。 例如,单链表 LA、 LB的示例如下图中的 (a)、 (b)所示,删除与 LB共有的元素后的 LA如下图 中

9、的 (c)所示。 链表的结点类型定义如下: typedef struct Node int data: struct Node*next: Node, *LinkList; 函数SetDiff(LinkList LA, LinkList LB)的处理思路如下: (1)从 LA的第一个元素结点开始,令 LA的第一个元素为当前元素; (2)在 LB中进行顺序查找,查找与 LA的当前元素相同者,方法是:令 LA的当前元素先与 LB的第一个元素进行比较,若相等,则结束在 LB中的查找过程,否则继续与 LB的下一个元素比较,重复以 上过程,直到 LB中的某一个元素与 LA的当前元素相等 (表明查找成功

10、),或者到达 LB的表尾 (表明查找失败 )为止; (3)结束在 LB表的一次查找后,若在 LB中发现了与LA的当前元素相同者,则删除 LA的当前元素,否则,保留 LA的当前元素; (4)取 LA的下一个元素为当前元素,重复步骤 (2)、 (3),直到 LA的表尾。 【 C函数】 void SetDJ ff(LinkLJ st LA, LinkLi st LB) LinkList pre, pa, pb; *pa用于指向单链表 LA的当前元素结点, pre指向 pa所指元素的 前驱 * *pb用于指向单链表 LB的元素结点 * (1) ; *开始时令 pa指向 LA的第一个元素 * pre:

11、LA; while(pa) pb=LB-next; *在 LB中查找与 LA的当前元素相同者,直到找到或者到达表尾 * while( (2) ) if(pa-data= =pb-data) break; (3) ; if(!pb) *若在 LB中没有找到与 LA中当前元素相同者,则继续考查 LA的后续元素 * pre=pa; pa=pa-next; else *若在 LB中找到与 LA的当前元素相同者,则删除 LA的当前元素 * pre-next= (4) ; free(pa); pa= (5) ; 5 阅读以下说明和 C+代码,填补 C+代码中的空缺 (1) (6),将解答写在答题纸的对应栏

12、内。 【说明】 已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放 (每年按 52周计算 );另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。 下面是实现该工资系统的 C+代码,其中 定义了四个类:工资系统类 PayRoll、员工类 Employee、正式工类 Salaried和计时工类 Hourly, Salaried和 Hourly是Employee的子类。 【 C+代码】 头文件和域名空间略 const int EMPLOYEE_NUM=5; class Employee protected: int e

13、mpCode: 员工号 string name: 员工姓名 double salary: 周发放工资 public: Employee(const int empCode, const string&name) this-empCode=empCode: this-name=name; virtual Employee() virtual void pay()=0; double getSalary() return this-salary; ; class Salaried (1) private: double payRate; 年薪 public: Salaried(const int

14、empCode, const string&name double payRate) : Employee(empCode, name) this-payRate=payRate: void pay() this-salary= (2) ; 计算正式员工的周发放工资数 cout this-name ”: ” this-salary endl; ; class Hourly (3) private: double payRate; 小时工资数 int hours; 周工作小时数 public: Hourly(const int empCode, const string &name, int h

15、ours, double payRate) : Employee(empCode, name) this-payRate=payRate; this-hours=hours, void pay() this-salary= (4) ; 计算计时工的周发放工资数 cout this-named ”: ” this-salary endl: ; class PayRoll public: void pay(Employee*e) for(int i=0; i EMPLOYEE_NUM; i+) ei-pay(); ; int main() PayRoll*payRoll=new PayRoll:

16、(5) employeesEMPLOYEE_NUM= new Salaried(1001, ”Zhang San”, 58000 00), 此处省略对其他职工对象的生成 new Hourly(1005, ”L1”, 12, 50 00), ; payroll-pay( (6) ): double total=0 0; for(int i=0; i EMPLOYEE_NUM; i+) total+=employeesil-getSalary(); 统计周发放工资总额 cout ”总发放额 =” total endl; delete payroll; return 0; 6 阅读以下说明和 Jav

17、a代码, 填补 Java代码中的空缺 (1) (6),将解答写在答题纸的对应栏内。 【说明】 已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放 (每年按 52周计算 );另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。 下面是实现该工资系统的 Java代码,其中定义了四个类:工资系统类 PayRoll、员工类 Employee、正式工类 Salaried和计时工类 Hourly, Salaried和 Hourly是Employee的 子类。 Java代码】 abstract class Employee pr

18、otected String name; 员工姓名 protected int empCode; 员工号 protected double salary; 周发放工资 public Employee(int empCode, String name) this empCode=empCode; this name=name; public double getSalary() return this salary; publ ic abstract void pay(); class Salaried (1) Employee private double annualSalary; Sala

19、ried(int empCode, String name, double payRate) super(empCode, name); this annualSalary=payRate; public void pay() salary= (2) ; 计算正式员工的周发放工资数 System out println(this name+”: ”+this salary); class Hourly (3) Employee private double hourlyPayRate; private int hours; Hourly(int empCode, String name, in

20、t hours, double payRate) super(empCode, name); this hourlyPayRate=payRate; this hows=hours public void pay() salary= (4) ;计算计时工的周发放工资数 System out println(this na lle+”: ”+this salary); public class PayRoll private (5) employees= new Salaried(1001, ”Zhang San”, 58000 00), 此处省略对其他职工对象的生成 new Hourly(10

21、05, ”Li”, 12, 50 00) ; public void pay(Employee e) for(int i=0; i e length; i+) ei pay(): public static void main(String args) PayRoll payroll=new PayRoll(): payRoll pay( (6) ): double total=0 0; for(int i=0; i payRoll employees length; i+) 统计周发放工资总额 total+=payroll employeesi getSalary(); System out

22、 println(total); 2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷答案与 解析 1 【正确答案】 (1)n 1 (2)Ai (3)i+1 (4)Aj (5)A(j) 【试题解析】 本题考查考生对程序流程的理解能力。 根据题意,本题处理流程采用双重循环。其中,外层循环变量 i用于标识未经处理前的原始数组的下标,内层循环变量 j用于标识与原始数组中的元素进行比较的数组的下标。在比较时,南于最后一个元素是与前面的元素进行比较,因此, (1)处应填入 n 1。 (2)处用于判断原始数组中是否有 0元素,应填入 Ai。 类似的 思路, (3)处用于设置与原始数组中的元素

23、进行比较的数组的下标。由于其初始元素为第二个元素,因此应填入 i+1。 (4)处用于判断比较数组中是否有 0元素,应填入 Aj。 根据题目描述的处理思路,如果数组 A某个元素的值在前面曾出现过,则该元素赋标记值 0。因此,若 A(i)=A(j),应将该元素赋标记值 0。这里需要注意数组下标的选择,显然第一个元素不会标记为 0,因此, (5)处应填入 A(j)。 2 【正确答案】 【问题 1】 4 4 20 1 11 4 1 10 【问题 2】 (1)const int size=10;或 int const size=10; (2)int*const ptr= a; 【问题 3】 static

24、的作用:说明 f是内部函数 (局部函数 ),只能在本文件中调用它。 const的作用:在函数 f中不能修改数组元素的值,若修改,编译时会报错。 【试题解析】 本题考查考生对 C语言中常用关键字的掌握和应用情况。 【问题 1】本问题考查 sizeof运算符,用于计 算数据空间的字节数。 在第一个输出语句 printf(” d d d n”, sizeof(int), sizeof(umsigned int),sizeof(arr)中,由于 int型数据占 4个字节,因此 sizeof(int)和 sizeof(unsigned int)的值都是 4。 arr是整型数组,共有 5个元素,因此 si

25、zeof(arr)的值为 45=20。 在第二个输出语句 printf(” d d n”, sizeof(char), si-zeof(mystr)中,由于char型数据占 1个字节, 因此 sizeof(char)的值是 1。 mystr是一个字符数组由于其包含 10个字符,加上字符串结束标志,共 11个字符。因此,其 sizeof的操作结果为 11。 在第三个输出语句 printf(” d d d n”, sizeof(ptr), sizeof(*ptr),strlen(ptr)中, ptr为一个指针,所有指针变量的 sizeof操作结果均为 4,因此,sizeof(ptr)的值为 4。

26、*ptr的值为字符 J,因此 sizeof(*ptr)的值为 1。 strlen()函数用于汁算字符数组中的字符数,以 0作为结束判断条件,不计算 0。因此,strlen(ptr)的值为 10。 【问题 2】本问题考查 const的用法。 (1)const加在 int x的前面,用来定义一个不可被改变的整型常量 x,这个 x必须在声明时赋值。因此,定义一个 “只读 ”型的整型常量 size,并将其值初始化为10,可用语句实现为: const int size=10。 (2)题目的描述用于定义 const指针,即允许通过指针修改数据,但不能修改指针本身,其语法格式为:类型 *const p= x

27、。因此,定义一个指向整型 变量 a的指针ptr,使得 ptr的值不能修改,而 ptr所指向的目标变量的值可以修改,可用语句实现为: int*const ptr= a。 【问题 3】在题目所给的函数 f中, static关键字修饰 f,说明 f是一个局部函数,只能在本文件中调用它,而其他文件则无法调用。形参表中的 const关键字表明在函数 f中不能修改数组 arr元素的值,若修改,编译时会报错。 3 【正确答案】 (1)char*或 Lresigned char* (2)isalnum或 isalpha(*pstr)|isdigit (3)islower或 !isupper (4)pstr+或

28、其等价形式 (5)wordbufferi或 *(wordbuffer+i) (6)pstr+或其等价形式 【试题解析】 本题考查考生利用 C语言的库函数解决实际问题。 (1)处用于声明 pstr,从该函数的第 8行的 pstr=message赋值语句可以看出,该处应填入 char*。 程序接下来对整个一段英文语句中的所有字符进行循环。 (2)处调用函数判断是否为一个单词的开头字符。由于一个单词的开头字符可以 是英文字符或数字,因此可调用题目提供的库函数 isalnum进行判断。因此, (2)处应填入 isalnum。 (3)处所在的程序段实现对字母计数。 if(isalpha(* pstr)用

29、于判断是否为英文字符,而且英文字符分为大写字母和小写字母。若为大写字母,执行对大写字母计数,即 ps*pstr一 A+;若为小写字母,执行对小写字母计数,即 ps*pstr一 a+。因此, (3)处应填入 islower或 !isupper。 (4)处用于实现将 pstr指向下一字符,这在对字符串进行处理时 十分常见,应填入 pstr+或 +pstr或其等价形式。 (5)处用于实现设置暂存在 wordbuffer中的单词结尾,而 i为一个单词中字符计数的下标,单词结尾标志在单词中最后一个字符后面的位置。因此, (5)处应填入wordbufferi或 *(wordbuffer+i)。 (6)处用

30、于实现将 pstr指向下一字符,和 (4)完全相同,应填入 pstr+或 +pstr或其等价形式。 4 【正确答案】 (1)pa=LA-next (2)pb!=NULL或 pb或其等价形式 (3)pb=pb-next (4)pa-next (5)pre-next 【试题解析】 本题考查考生对链表基本操作的掌握。 (1)处用于实现将 pa指向 LA的第一个元素。由于单链表 LA包含头结点,其第一个元素应为头结点的后继结点。因此, (1)处应填入 pa=LA-next。此时, pre指向 LA的头结点。 根据题目描述的函数 SetDiff(LinkList LA, LinkListLB)的处理思路

31、,在单链表LB中顺序查找与 LA中当前元素相同的结点。 (2)处需要填入一个循环条 件,该循环条件应能实现对单链表 LB的遍历。因此, (2)处应填入 pb!=NULL或其等价形式。 if(pa-data=pb-data)break语句用于实现处理思路中描述的 “相等,则结束在LB中的查找过程 ”。而 (3)处需要实现将选择了 B中的下一个元素,因此应填入pb=pb-next。 (4)和 (5)用于实现 LA中元素的删除。要删除单链表 LA的当前元素,应使其前驱结点的 next指针指向当前结点的后继结点的 next指针。因此, (4)处应填入 pa-next。当前指针 pa应指向 pre的后继

32、结点,则 (5)处应填入 pre-next。 5 【正确答案】 (1): public Employee (2)payRate 52 (3): public Employee (4)hotlrs*PayRate (5)Employee*或 static Employee* (6)employees 【试题解析】 本题考查考生利用 C+语言设计程序的能力,涉及类、函数和虚函数的定义和相关操作,以及继承关系。考生需要根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成程序的设 计。 根据题目中有关信息的描述, Salaried和 Hourly是 Employee的子类,它们之间是继承关系。

33、 (1)和 (3)处需要体现出类之间的继承关系。在子类的构造函数中,调用父类的构造函数,所以继承的权限为 public,其语法为: public父类名。因此, (1)处和 (3)处均应填入 public Employee。 根据题目的描述及程序段的注释, (2)处实现计算正式员工的周发放工资数。正式员工的周发放工资数为年薪除以总周数,因此应填入 payRate 52。 (4)处实现计算计时工的周发放工资数 。计时工的周发放工资数为周工作小时数乘以小时工资数。因此, (4)处应填入 hours*PayRate。 (5)处用于生成 5个员工的信息,此处缺少一个类型修饰符。由对象的生成信息可知,此处

34、应填入 Employee*或 static Employee*。 (6)处调用工资系统类 PayRoll中的 pay函数。由类 PayRoll中构造函数 void pay(Employee*e)的形式可以确定, (6)处应填入 employees。 6 【正确答案】 (1)extends (2)annualSalary 52 (3)extends (4)hours * hocurlyPayRate (5)Ernployee (6)payRoll Employees 【试题解析】 本题考查考生利用 Java语言设汁程序的能力,涉及类、方法和抽象方法的定义和相关操作以及继承关系。考生需要根据给出的

35、案例和执行过程说明,认真阅读理清程序思路,然后完成程序的设计。 根据题目中有关信息的描述, Salaried和 Hourly是 Employee的子类,它们之间是继承关系。 (1)和 (3)处需要体现出类之间的继承关系。在子类的构造方法中,调用父类的构造方法。在 Java语言中,子类继承父类的语法格式为: class子类名extends父类名。因此, (1)处和 (3)处均应填入 extends。 根据题目的描述及程序段的注释, (2)处实现计算正式员工的周发放工资数。正式员工的周发放工资数为年薪除以总周数,因此应填入 annualSalary 52。 (4)处实现汁算计时工的周发放工资数。计时工的周发放工资数为周工作小时数乘以小时工资数。因此, (4)处应填入 hours*hourlyPayRate。 (5)处用于生成 5个员工的信息,此处缺少一个类型修饰符。南对象的生成信息可知,此处应填入父类的类名,即 Employee。 (6)处调用工资系统类 PayRolI中的 pay函数。由类 PayRoll中构造方法 public void pay(Employee e)的形式可以确定, (6)处应填入 pay Rolll employees。

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1