【计算机类职业资格】初级程序员下午试题-32及答案解析.doc

上传人:sofeeling205 文档编号:1330093 上传时间:2019-10-17 格式:DOC 页数:7 大小:70.50KB
下载 相关 举报
【计算机类职业资格】初级程序员下午试题-32及答案解析.doc_第1页
第1页 / 共7页
【计算机类职业资格】初级程序员下午试题-32及答案解析.doc_第2页
第2页 / 共7页
【计算机类职业资格】初级程序员下午试题-32及答案解析.doc_第3页
第3页 / 共7页
【计算机类职业资格】初级程序员下午试题-32及答案解析.doc_第4页
第4页 / 共7页
【计算机类职业资格】初级程序员下午试题-32及答案解析.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、初级程序员下午试题-32 及答案解析(总分:120.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.说明 下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。 流程图 (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.说明 下面的程序利用递归算法计算 x 和 y 的最大公约数。 函数 2.1 main ( ) int x,y,k,t; scanf(“ % d% d“ , if(xy) t=x;x=y; y=t; U (1)

2、/U; while(k! =0) y=x; U(2) /U; k=y%x; prinff( “% d“ ,x); 函数 2.2 说明 函数 fun(char *str,char *substr 的功能是计算子串 sugbstr 在串 str 中出现的次数。 函数 2.2 fun(ehar * str, char * substr) int x,y,z; U(3) /U; for(x=0;str x ! = /O;x + + ) for(y=x,z=0;sabstrz = =stry;U (4) /U,y+ +) if( (5) = =/0) num + +; break; return(num

3、); (分数:15.00)_三、B试题三/B(总题数:1,分数:15.00)3.说明 用链式存储结构实现的栈称为链栈。若链栈元素的数据类型为 datatype,以 LinkStack 记链栈结构,其类型定义为: typedef struct node datatype data; stmct node * next; StackNode, * LinkStack; 由于栈的主要操作都是在栈顶进行的,因此我们把链表的头部作为栈顶。设 top 为栈顶指针,即:LinkStack top。 下面各函数的功能说明如下: (1)LinkStack Init_LinkStack():建立并返回空的链栈;

4、(2)int Empty_LinkStack(LinkStack top):判断 top 所指链栈是否空; (3)LinkStack Push_LinkStack(LinkStacktop,datatypex):将数据 x 压人 top 所指链栈的栈顶,返回新栈指针; (4)LinkStack Pop_LinkStack (LinkStacktop, datatype*x):弹出 top 所指链栈的栈顶元素 x,返回新栈指针。 函数 LinkStaek Init_LinkStack( ) returnNULL; int Empty_LinkStack ( LinkStaek top) if(t

5、op = = NULL) return 1; else return 0; LinkStaek Push_LinkStaek( LinkStaektop, datatype X) StaekNode *s; s=malloc (sizeof(StaekNode) ); U(1) /U= x; U(2) /U= top; U (3) /U; return top; LinkStaek Pop_LinkStack (LinkStacktop, datatype * x) StaekNode *p; if(top = = NULL) return NULL; else * x =U (4) /U;

6、p = top; U (5) /U; free (p); return top; (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.说明若矩阵 Amn中存在某个元素 aij满足:a ij是第 i 行中最小值且是第 j 列中的最大值,则称该元素为矩阵A 的一个鞍点。下面程序的功能是输出 A 中所有鞍点,其中参数 A 使用二维数组表示,m 和 n 分别是矩阵A 的行列数。程序void saddle (int A , int m, int n) int i,j,min;for (i=0;i m;i + + ) min:U (1) /U;for (j=1; jn; j+ +)i

7、f(Aijmin)U (2) /U;for (j=0; jn; j+ +)if (U (3) /U) p=0;while (pmif (p = m)printf (“%d,%d,%d/n“,i,j,min);问题 1 将函数代码中的(1)(4)处补充完整问题 2在上述代码的执行过程中,若 A 为矩阵*,则调用 saddle(A,3,3)后输出是U (5) /U。(分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.说明我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:GB 11643-1989和GB 11643-1999。CB 11643-1989中规定的是 15

8、位身份证号码,排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。GB 11643 -1999中规定的是18 位身份证号码,是特征组合码,它由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其中,校验码 C 由本体码按如下过程求得:(1)计算校验码和 S=a18W18+a17W17+a2w2,其中 i 表示 18 位身份证号,码每一位的序号,从右至左,最左侧为 18,最右侧为 1;ai表示身份证号码第 i 位上的号码;w i表示第 i 位上的权值,其值为 2i-1

9、模11 的结果;(2)计算校验码值 R,其值为校验和模 11 的结果;(3)根据下面对应关系找出校验码 C:R 0 1 2 3 4 5 6 7 8 9 10C 1 0 X 9 8 7 6 5 4 3 2由上述计算过程可以看出,18 位身份证号码中可能包含非数字的字母 X(代表数字 10)。下面的应用程序基于这一算法实现了身份证号码的升位查询:(分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.说明 本程序使用类来管理员工的通讯地址信息。已知程序的输出为: 输出记录:5 姓名:王丽华 街道地址:中华路 15 号 市:襄樊市 省;湖北省 邮政编码:430070 C+程序 #i

10、nclude iostream, h #include string, h class employee. protected: char name10; char street 20 ; char city10; charU (1) /U10; char post7; int no; U (2) /U: U(3) /U(char ,char ,char ,char ,char ,int); void changename ( char n ) strcpy ( name, n); void changestreet( char s ) strcpy(street,s) ; void chan

11、gecity ( char c ) strcpy ( city, c ); void changeprov( char p ) strcpy(prov,p); void changeno(int nnm) U (4) /U; void display( ); ; employee:U (3) /U(char n ,char s ,char c ,char p1 ,char p2 ,int nam) strcpy(name,n); strcpy ( street, s); strcpy ( city, c); strcpy ( prov, p1 ); strcpy ( post, p2 ); n

12、o = nam; void employee: display( ) cont “输出记录: “ no endl; cout “姓名: “ name endl; coot “街道地址: “ street endl; cout “市: “ city endl; cout “省: “ prov endl; cout “邮政编码: “ post endl; void main( ) employee cmp(“王华“ ,“中华路 15 号“ ,“武汉市“,“湖北省“,“430070“, 1 ); emp. changename( “五丽华“ ); emp. changecity ( “襄樊市“ );

13、 emp. changeno(5); U(5) /U;(分数:15.00)_七、B试题七/B(总题数:1,分数:15.00)7.说明 设某单位 Acess 数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下: (分数:15.00)_八、B试题八/B(总题数:1,分数:15.00)8.说明 本程序的功能是给公司的员工 Tom,Jack,Green 增加薪水。三人的职位分别是 programmer, Manager,CEO。 程序由 6 个类组成:WorkerTest 是主类,prog

14、rammer,Manager,CEO 三个类,薪水增加的规则是 programmer 的涨幅是 5%;Manager 的是 10%;CEO 也是 Manager,但是它除了有 Manager 的涨幅,还有 1000 元的 bonus。接口 SalaryRaise 提供了一个增加薪水的方法 raise()。 java 程序 public class WorkerTest public WorkerTest( ) public static void main( String args) Programmer programmer = new Programmer( “Tom“ ,3000); M

15、anager manager = new Manager( “Jack“ ,4000); CEO ceo = new CEO( “Green“ ,4000); Worker worker = new Worker3; programmer, raise( ); manager, raise( ); ceo. raise( ); worker0 = programmer; worker 1 = manager; worker2 = ceo; for ( int i = 0 ;i worker, length; i + + ) System. out. prinfln (“ Name:“ + wo

16、rker i. getName ( ) +“ / tSalary:“ + worker i. getSalary (); public interface SalaryRaise void raise( ); public class Worker public String name; public doubleU (1) /U; public Worker( ) public String getName( ) return name; public void setName( String name) this. name = name; public double getSalary(

17、 ) return salary; public void setSalary(double salary) this. salary = salary; public class Programmer extends Worker implementsU (2) /U public Programmer( ) public void raise( ) double pets=0.05; double sala = this. getSalary( ) * (1 + pers); this. setSalary (sala); public Programmer( Siring name, d

18、ouble salary) t this. name = name; this. salary = salary; public class Manager extendsU (3) /Uimplements SalaryRaise public Manager( ) public Manager(String name, double salary) this. name = name; this. salary = salary; public void raise( ) double pets = 0.1; double sala = this. getSalary() * (1 + p

19、ers); this. setSalary(sala); public class CEO extends Manager implements SalaryRaise public CEO() public CEO( String name,double salary) this. name = name; this. salary = salary; public void raise( ) double bonus = 1000; U(4) /U; double sala = this. getSalary( ); U (5) /U; this. setSalary(sala); (分数

20、:15.00)_初级程序员下午试题-32 答案解析(总分:120.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.说明 下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。 流程图 (分数:15.00)_正确答案:()解析:(1)MAX0 (2)L+1 (3)MAXL (4) (5)L0 解析本题用到的三个变量及其作用分别为:A,存放输入的一个字符;MAX,存放当前为止最长单词的长度;L,存放当前单同的长度。 (1)使用变量 MAX应先赋予初值,由

21、上下文知其初值为 0; (2)读取当前单词时,每读人一个字母,单词长度值 L 应增 1; (3)当前单词长度 L 比 MAX 时,应更新 MAX 的值; (4)若当前字符不是句点,应当继续读取字符; (5)读取下一个单词前,应当重置 L 的值。二、B试题二/B(总题数:1,分数:15.00)2.说明 下面的程序利用递归算法计算 x 和 y 的最大公约数。 函数 2.1 main ( ) int x,y,k,t; scanf(“ % d% d“ , if(xy) t=x;x=y; y=t; U (1) /U; while(k! =0) y=x; U(2) /U; k=y%x; prinff( “

22、% d“ ,x); 函数 2.2 说明 函数 fun(char *str,char *substr 的功能是计算子串 sugbstr 在串 str 中出现的次数。 函数 2.2 fun(ehar * str, char * substr) int x,y,z; U(3) /U; for(x=0;str x ! = /O;x + + ) for(y=x,z=0;sabstrz = =stry;U (4) /U,y+ +) if( (5) = =/0) num + +; break; return(num); (分数:15.00)_正确答案:()解析:k=yx (2)x=k (3)int num=

23、0 (4)z+ (5)substrz+1 (1)(2)使用递归算法计算 x 和 y 的最大公约数时,不妨令 yx,如果 y 除 x 余数得。则 x 即为所求;否则令 yx,x余数,继续上述判断。 (3)此处应声明变量 num 并初始化; (4)次循环的功能是从 str 的第 y 个位置起与 substr 做比较,循环过程中 y 和 z 应同时增 1; (5)若上面的循环重复执行,直到到达 substr 结束,则表示 substr 在 str 中出现一次。三、B试题三/B(总题数:1,分数:15.00)3.说明 用链式存储结构实现的栈称为链栈。若链栈元素的数据类型为 datatype,以 Lin

24、kStack 记链栈结构,其类型定义为: typedef struct node datatype data; stmct node * next; StackNode, * LinkStack; 由于栈的主要操作都是在栈顶进行的,因此我们把链表的头部作为栈顶。设 top 为栈顶指针,即:LinkStack top。 下面各函数的功能说明如下: (1)LinkStack Init_LinkStack():建立并返回空的链栈; (2)int Empty_LinkStack(LinkStack top):判断 top 所指链栈是否空; (3)LinkStack Push_LinkStack(Lin

25、kStacktop,datatypex):将数据 x 压人 top 所指链栈的栈顶,返回新栈指针; (4)LinkStack Pop_LinkStack (LinkStacktop, datatype*x):弹出 top 所指链栈的栈顶元素 x,返回新栈指针。 函数 LinkStaek Init_LinkStack( ) returnNULL; int Empty_LinkStack ( LinkStaek top) if(top = = NULL) return 1; else return 0; LinkStaek Push_LinkStaek( LinkStaektop, datatyp

26、e X) StaekNode *s; s=malloc (sizeof(StaekNode) ); U(1) /U= x; U(2) /U= top; U (3) /U; return top; LinkStaek Pop_LinkStack (LinkStacktop, datatype * x) StaekNode *p; if(top = = NULL) return NULL; else * x =U (4) /U; p = top; U (5) /U; free (p); return top; (分数:15.00)_正确答案:()解析:(1)s-data (2)s-next (3)

27、top=s (4)top-data (5)top=top-next (1)(3):LinkStack Push_LinkStack(Link- Stacktop,datmype x)函数的功能是将 x 压入栈顶,因此首先为其创建一个节点s,使 s-data 等于 x,使 s- next 指向原来的栈顶 top,最后将,作为新栈的栈顶并返回。 (4)(5):LinkStack Pop_LinkStaek(LinkStacktop, datatype*x)的功能是弹出原栈顶元素,返回这个元素以及新栈的指针。当原链栈不空时,取出栈顶元素 top -data 赋给参量*x 作为返回值,将 top-ne

28、xt 更新为新栈的栈顶,并且释放原来 top 节点的空间。四、B试题四/B(总题数:1,分数:15.00)4.说明若矩阵 Amn中存在某个元素 aij满足:a ij是第 i 行中最小值且是第 j 列中的最大值,则称该元素为矩阵A 的一个鞍点。下面程序的功能是输出 A 中所有鞍点,其中参数 A 使用二维数组表示,m 和 n 分别是矩阵A 的行列数。程序void saddle (int A , int m, int n) int i,j,min;for (i=0;i m;i + + ) min:U (1) /U;for (j=1; jn; j+ +)if(Aijmin)U (2) /U;for (

29、j=0; jn; j+ +)if (U (3) /U) p=0;while (pmif (p = m)printf (“%d,%d,%d/n“,i,j,min);问题 1 将函数代码中的(1)(4)处补充完整问题 2在上述代码的执行过程中,若 A 为矩阵*,则调用 saddle(A,3,3)后输出是U (5) /U。(分数:15.00)_正确答案:()解析:问题 1(1)Ai0 (2)min=Aij (3)Ai j=min (4)Apj=min 或 min=AP j 问题 2(5)1,2,11 解析本算法的基本思想是:对矩阵 A 逐行处理,求出每一行的最小值,对于这一行上等于最小值的那些元素,

30、逐个判断该元素是否是所在列的最大元,如果是则打印输出。 (1)由上下文可知 min 代表第 i 行的最小值,此处应对其赋初值:本行第一个元素; (2)遍历第 i 行后面的元素,若有元素比 miu 小,则应更新 min 的值; (3)此处应挑出本行中取最小值的元素进行判断; (4)此循环用于判断min 是否是本列的最大元。 (5)所给矩阵中只有一个鞍点 11,若行列号从。开始计,它位于第 l 行第 2 列。五、B试题五/B(总题数:1,分数:15.00)5.说明我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:GB 11643-1989和GB 11643-1999。CB 11643-19

31、89中规定的是 15 位身份证号码,排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。GB 11643 -1999中规定的是18 位身份证号码,是特征组合码,它由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其中,校验码 C 由本体码按如下过程求得:(1)计算校验码和 S=a18W18+a17W17+a2w2,其中 i 表示 18 位身份证号,码每一位的序号,从右至左,最左侧为 18,最右侧为 1;ai表示身份证号码第 i 位上的号码;w i表示第 i 位上的权

32、值,其值为 2i-1 模11 的结果;(2)计算校验码值 R,其值为校验和模 11 的结果;(3)根据下面对应关系找出校验码 C:R 0 1 2 3 4 5 6 7 8 9 10C 1 0 X 9 8 7 6 5 4 3 2由上述计算过程可以看出,18 位身份证号码中可能包含非数字的字母 X(代表数字 10)。下面的应用程序基于这一算法实现了身份证号码的升位查询:(分数:15.00)_正确答案:()解析:(1)Exit Sub(2)Right(3)Mid(code,19-i,1) (4)S=S Mod 11 (5)12-S 解析 (1)输入错误时,应即刻退出过程; (2)注意到“19”是夹在

33、15 位身份证号码左端 6 位与右端 9 位之间的,按照参数调用格式可以推断此处函数是 Right; (3)此处应填入身份证号码中第 i 位(从左端起、序号自 18 递减)上的号码,它位于字符串 code 的第 19-i 位(从左端起、序号自 1 递增),因此可用 Mid(code, 19-i,1)来获取; (4)略; (5)从校验码值与校验码的转换关系可知:当校验码值大于等于 3 时,校验码值与校验码之和为 12。六、B试题六/B(总题数:1,分数:15.00)6.说明 本程序使用类来管理员工的通讯地址信息。已知程序的输出为: 输出记录:5 姓名:王丽华 街道地址:中华路 15 号 市:襄樊

34、市 省;湖北省 邮政编码:430070 C+程序 #include iostream, h #include string, h class employee. protected: char name10; char street 20 ; char city10; charU (1) /U10; char post7; int no; U (2) /U: U(3) /U(char ,char ,char ,char ,char ,int); void changename ( char n ) strcpy ( name, n); void changestreet( char s ) s

35、trcpy(street,s) ; void changecity ( char c ) strcpy ( city, c ); void changeprov( char p ) strcpy(prov,p); void changeno(int nnm) U (4) /U; void display( ); ; employee:U (3) /U(char n ,char s ,char c ,char p1 ,char p2 ,int nam) strcpy(name,n); strcpy ( street, s); strcpy ( city, c); strcpy ( prov, p

36、1 ); strcpy ( post, p2 ); no = nam; void employee: display( ) cont “输出记录: “ no endl; cout “姓名: “ name endl; coot “街道地址: “ street endl; cout “市: “ city endl; cout “省: “ prov endl; cout “邮政编码: “ post endl; void main( ) employee cmp(“王华“ ,“中华路 15 号“ ,“武汉市“,“湖北省“,“430070“, 1 ); emp. changename( “五丽华“ );

37、 emp. changecity ( “襄樊市“ ); emp. changeno(5); U(5) /U;(分数:15.00)_正确答案:()解析:(1)prov (2)public (3)employee (4)no=num (5)emp.display() 解析本程序创建一个 employee类,包括姓名、街道地址、市、省和邮政编码和记录号等信息以及若干函数:构造函数 employee()初始化每个成员;changname ()、changeno()等用于更改类中各属性的值;dis- play()函数用于打印数据。其中的数据成员是保护的,函数是公共的。七、B试题七/B(总题数:1,分数:

38、15.00)7.说明 设某单位 Acess 数据库中有一张员工信息表,其中记录了员工编号、姓名、性别等基本信息。下面的应用程序利用数据控件(Data)实现了对这张表中记录的增加、删除和修改操作。其运行界面如下: (分数:15.00)_正确答案:()解析:Addhem(2)Delete(3)False(4)Update(5) ret=vbYes 解析 (1)组合列表框中的列表项是在窗体加载时添加的,其方法是调用组合框控件对象的 Addhem 方法; (2)从数据集中删除记录应使用 Delete 方法;(3)若数据控件的 ReadOnly(只读)属性为真,则数据记录不可更改,因此此处取假值; (4

39、)数据集的Edit 方法用于对可更新的当前记录进行编辑修改。Update 方法则用于将修改的记录内容保存到数据库中。(5)询问窗口返回两种值,一是单击按钮“是(Y)”返回的 vbYes,二是单击按钮“否(N)”按钮返回的vbNo。选择前者将结束程序。八、B试题八/B(总题数:1,分数:15.00)8.说明 本程序的功能是给公司的员工 Tom,Jack,Green 增加薪水。三人的职位分别是 programmer, Manager,CEO。 程序由 6 个类组成:WorkerTest 是主类,programmer,Manager,CEO 三个类,薪水增加的规则是 programmer 的涨幅是

40、5%;Manager 的是 10%;CEO 也是 Manager,但是它除了有 Manager 的涨幅,还有 1000 元的 bonus。接口 SalaryRaise 提供了一个增加薪水的方法 raise()。 java 程序 public class WorkerTest public WorkerTest( ) public static void main( String args) Programmer programmer = new Programmer( “Tom“ ,3000); Manager manager = new Manager( “Jack“ ,4000); CEO

41、 ceo = new CEO( “Green“ ,4000); Worker worker = new Worker3; programmer, raise( ); manager, raise( ); ceo. raise( ); worker0 = programmer; worker 1 = manager; worker2 = ceo; for ( int i = 0 ;i worker, length; i + + ) System. out. prinfln (“ Name:“ + worker i. getName ( ) +“ / tSalary:“ + worker i. getSalary (); public interface SalaryRaise void raise( ); public class Worker public String name; public doubleU (1) /U; public Worker( ) public String getName( ) return name

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

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