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

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

1、初级程序员下午试题-70 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.阅读以下说明和流程图,回答问题将解答填入对应栏。 说明 本流程图实现采用递归函数来求一个整数数组中从元素 0 到元素 n 中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有 n 的元素的数组的最小值时,只要求将前 n-1 的元素的最小值与第 n 个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。 注:int min(int X,int y)为返回两数中最小数的函数。 int minInArra

2、y(int a,int n)为返回数组中最小数的函数。 minA 为数组中最小值。 问题 l 将流程图的(1)(4)处补充完整。 问题 2 min()函数的定义为U (5) /U。(分数:15.00)填空项 1:_二、B试题二/B(总题数:1,分数:15.00)2.阅读以下函数说明和 C 语言函数,将应填入U (n) /U处的字句写在对应栏内。 说明 1 函数 int function(int a)的功能是判断指定的正整数是否为素数,若是,返回 1,否则返回 0。 C 函数 1 int function(int a) int yes,i; i=2;yes=1; while(i=a/2 i+;

3、return yes; 说明 2 函数 int deleteARR(int*arr,intn)的功能是指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。函数返回值是互不相同的元素个数。 C 函数 2 int deleteARR(int*arr,int n) int k,j; k=0;j=1; while(jn) if(U (3) /U) U (4) /U=arrj; j+; return U(5) /U; (分数:15.00)填空项 1:_三、B试题三/B(总题数:1,分数:15.00)3.阅读以下函数说明和 C 语言函数,将应填入U (n) /U处的字句写在对应

4、栏内。 说明 已知一棵二叉树用二叉链表存储,t 指向根结点,p 指向树中任一结点。下列算法为输出从 t 到 P 之间路径上的结点。 C 程序 #define Maxsize 1000 typedef struct node TelemType data; struct node*1child,*rchild; BiNode,*BiTree; void Path(BiTree t,BiNode*P) BiTree*stackMaxsize,*stacklMaxsize,*q; int tagMaxsize,top=0,topl; q=t; /*通过先序遍历发现 P*/ do(while(q!=N

5、ULL stacktop=q; tagtop=0; U (2) /U; if(top0) if(stacktop=P) break; /*找到 P,栈底到栈顶为 t 到 P*/ if(tagtop=1)top-; elseq=stacktop; q=q-rchild; tagtop=1; U(3) /U; top-; topl=0; while(top0) q=stacktop; /*反向打印准备 */ topl+; U (4) /U; top-; while(U (5) /U) /*打印栈的内容 */ q=stackltopl; printf(q-data); topl-; (分数:15.0

6、0)填空项 1:_四、B试题四/B(总题数:1,分数:15.00)4.阅读以下函数说明和 C 语言函数,将应填入U (n) /U处的字句写在对应栏内。 说明 某银行共发出 M 张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多支持储蓄卡持有者的 N 笔“存款”或“取款”业务。程序中用数组 cardMN+3中的每一行存放一张储蓄卡的有关信息,其中: cardi0存放第 i 张卡的卡号; cardi1存放第 i 张卡的余额; cardi2存放第 i 张卡的当日业务实际发生笔数; cardi3cardiN+2存放第 i 张卡的当日存取款金额,正值代表存款,负值代表取款。 当持卡者输入正确的卡号、

7、存款或取款金额后,程序进行相应的处理;若输入不正确的数据,程序会提示持卡者重新输入;若输入的卡号为负数时,银行终止该卡的当日业务。 C 程序 #includestdio.H #define M 6 #define N 5 long cardMN+3=9801,2000,0,9812,2000,2,9753,3000,1, 8750,500,0,9604,2800,3,),(8901,5000,5,; int locate(long cardN+3,int m,long no) int i; for(i=0;im;i+) if( U(1) /U=no) return i; U (2) /U; m

8、ain() long cardNo,money; int k; while(1) printf(“请输入卡号:/n“); scanf(“%1d“, if(cardNo0) break; k=locate(card,M,cardNo); if(k=-1) printf(“不存在%id 号的储蓄卡/n“,cardNo); continue; printf(“请输入金额(正值代表存款,负值代表取款):/n“); scanf(“%id“, if(cardk1+money0) printf(“存款余额不足,不能完成本次的取款业务/n“); continue; if(cardk2=N) printf(“已

9、完成本卡的当日业务/n“); continue; /*处理一笔业务的数据 */ cardkU (3) /U=money; U (4) /U; U (5) /U; (分数:15.00)填空项 1:_五、B试题五/B(总题数:1,分数:15.00)5.阅读以下说明和 C+代码,将解答写入对应栏内。 说明 类 Stock 的定义中有三处错误,分别在代码的第 04、06、10 行。请补齐下述代码中的空缺(1)(3),修改错误并给出修改后该行的完整代码,最后完善程序运行后的输出结果。 C+程序 01 #includeiostream.h 02 using namespace std; 03 class

10、Stock 04 protected: 05 Stock()shares=0; share_val=0.0;Output(); 06 Stock(int n=0,double pr=3.5): U(1) /U /初始化 shares 值为 n 07 share_val=pr; 08 Output(); 09 ;10 voidStock(); 11 void Output()(coutshares;share valendl; 12 public: 13 /成员函数 14 private: 15 /成员变量 16 int shares; 17 double share_val; 18 ; 19

11、20 void main() /构造三个 Stock 对象 a,b,C 21 Stock a(1); 22 Stock b; 23 Stock C;Stock(); 24 /其他代码省略,且代码无输出 25 程序运行后的输出结果为: 1:3.5 U (2) /U U (3) /U(分数:15.00)填空项 1:_六、B试题六/B(总题数:1,分数:15.00)6.阅读以下说明和 Java 代码,将解答写在对应栏内。 说明 已知类 Stock 和类 JavaMain 都定义在JavaMain.java 文件中,类 stock 的定义中有四处错误,分别在代码的第 01、02、06、07 行。请修改

12、错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。 Java 代码 01 public class Stock 02 static 03 shares=0; 04 Share_val=0.0; 05 06 private Stock()tgetData(); 07 private Stock(int n,double pr=0) 08 shares=n; 09 share val=pr; 10 getData(); 11 12 public void getData() 13 System.out.print(shares+“:“+share_val+“ “); 14 15

13、Drivate int shares; /非静态变量 16 Drivate double share val; /非静态变量 17 ; 18 19 publiC class JavaMain 20 public static void main(String args) 21 Stock a=new Stock(); 22 Stock b=new Stock(1,67.5); 23 /其他代码省略,且代码无输出 24 25 (分数:15.00)填空项 1:_初级程序员下午试题-70 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.阅读以下说

14、明和流程图,回答问题将解答填入对应栏。 说明 本流程图实现采用递归函数来求一个整数数组中从元素 0 到元素 n 中的最小值。该算法思想是这样的,首先我们假设有一个求数组中最小元素的函数,然后,在求某一具有 n 的元素的数组的最小值时,只要求将前 n-1 的元素的最小值与第 n 个元素比较即可。不断地重复这一过程,直到数组中只剩下一个元素,那么它必定是最小值。 注:int min(int X,int y)为返回两数中最小数的函数。 int minInArray(int a,int n)为返回数组中最小数的函数。 minA 为数组中最小值。 问题 l 将流程图的(1)(4)处补充完整。 问题 2

15、min()函数的定义为U (5) /U。(分数:15.00)填空项 1:_ (正确答案:minInArray(a,n); (2) 1; (3) minA=an-1;)解析:(4) minA=min(minInArray(a,n-1),an); (5) xy?x:y; 解析 本题目考查流程图。 题目是利用递归来求数组中的最小值,则一定是反复的调用一个求数组最小值的函数,直到比较数组中最后只剩下两个数,则(1)中填入的应是“minlnArray(a,n)”,然后,判断 n 的值是否为 1,如果是,则说明数组中只有一个数,则它一定就是最小值,可以直接输出,所以(2)应填入“1”,(3)应填入“min

16、A=an”;如果 n 的值不是 1,则说明要继续递归,则再次调用求数组最小值的函数,把数组前 n-1 项的最小值同第n 项做比较,所以(4)填入“minA=min(minInArray(a,n-1),an)”,由于 min()是一个比较函数,返回两数中较小的数,我们可以用三元运算符直接定义为 x y?x:y。二、B试题二/B(总题数:1,分数:15.00)2.阅读以下函数说明和 C 语言函数,将应填入U (n) /U处的字句写在对应栏内。 说明 1 函数 int function(int a)的功能是判断指定的正整数是否为素数,若是,返回 1,否则返回 0。 C 函数 1 int functi

17、on(int a) int yes,i; i=2;yes=1; while(i=a/2 i+; return yes; 说明 2 函数 int deleteARR(int*arr,intn)的功能是指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。函数返回值是互不相同的元素个数。 C 函数 2 int deleteARR(int*arr,int n) int k,j; k=0;j=1; while(jn) if(U (3) /U) U (4) /U=arrj; j+; return U(5) /U; (分数:15.00)填空项 1:_ (正确答案:yes 或 ye

18、s=1 或 yes !=0 (2) a/i*i=a 或 a%i=0 或!(a%i))解析:(3) arrk!=arrj (4) arr+k (5) k+1 或+k解析 对于函数 1,增加了一个判断的标志 yes,开始进入素数判别循环时置 yes=1,则(1)应填“yes”或“yes=1”或“yes !=0”;一旦数 n 能被某个不等于零的真因子整除,退出循环,则(2)应填“a/i *i=a”或“a%i=0”或“!(a%i)”。 对于函数 2,用 k 记录数组 arr中不同元素的个数,同时设置工作指针 j,将 arrj与已得到的互不相同元素的最后一个元素进行比较,若不相等,则将其作为已比较的互不

19、相同元素的最后一个元素,所以(3)填“arrk!=artj”,(4)填“arr+k”。最后返回互不相同的元素个数 k+1,即(5)填“k+1”或“+k”。三、B试题三/B(总题数:1,分数:15.00)3.阅读以下函数说明和 C 语言函数,将应填入U (n) /U处的字句写在对应栏内。 说明 已知一棵二叉树用二叉链表存储,t 指向根结点,p 指向树中任一结点。下列算法为输出从 t 到 P 之间路径上的结点。 C 程序 #define Maxsize 1000 typedef struct node TelemType data; struct node*1child,*rchild; BiNo

20、de,*BiTree; void Path(BiTree t,BiNode*P) BiTree*stackMaxsize,*stacklMaxsize,*q; int tagMaxsize,top=0,topl; q=t; /*通过先序遍历发现 P*/ do(while(q!=NULL stacktop=q; tagtop=0; U (2) /U; if(top0) if(stacktop=P) break; /*找到 P,栈底到栈顶为 t 到 P*/ if(tagtop=1)top-; elseq=stacktop; q=q-rchild; tagtop=1; U(3) /U; top-;

21、topl=0; while(top0) q=stacktop; /*反向打印准备 */ topl+; U (4) /U; top-; while(U (5) /U) /*打印栈的内容 */ q=stackltopl; printf(q-data); topl-; (分数:15.00)填空项 1:_ (正确答案:top+ (2) q=q-1child (3) while(top0) (4) stackltop1=q)解析:(5) top10 解析 本题本质上是对二叉树的先序遍历进行考核,但不是简单地进行先序遍历,而是仅遍历从根结点到给定的结点 p 为止。本题采用非递归算法来实现,其主要思想是:初

22、始化栈:根结点进栈,栈不空则循环执行以下步骤直到发现结点 p;当前结点不为空且不为 P 进栈;栈顶为p,则结束,否则转;若右子树访问过,则栈顶的右孩子为当前结点,转。 扫描左孩子,当相应的结点不为 P 时进栈,所以(1)填“top+”,(2)填“q=q-1child”。在栈不为空时则一直在 do while 循环中查找,因此(3)填“while(top0)”。在进行反向打印准备时,读取 stacktop的信息放到stackltop中,即(4)填“stackltop1=q”。打印栈中所有内容,所以(5)填“top10”。四、B试题四/B(总题数:1,分数:15.00)4.阅读以下函数说明和 C

23、语言函数,将应填入U (n) /U处的字句写在对应栏内。 说明 某银行共发出 M 张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多支持储蓄卡持有者的 N 笔“存款”或“取款”业务。程序中用数组 cardMN+3中的每一行存放一张储蓄卡的有关信息,其中: cardi0存放第 i 张卡的卡号; cardi1存放第 i 张卡的余额; cardi2存放第 i 张卡的当日业务实际发生笔数; cardi3cardiN+2存放第 i 张卡的当日存取款金额,正值代表存款,负值代表取款。 当持卡者输入正确的卡号、存款或取款金额后,程序进行相应的处理;若输入不正确的数据,程序会提示持卡者重新输入;若输入的卡

24、号为负数时,银行终止该卡的当日业务。 C 程序 #includestdio.H #define M 6 #define N 5 long cardMN+3=9801,2000,0,9812,2000,2,9753,3000,1, 8750,500,0,9604,2800,3,),(8901,5000,5,; int locate(long cardN+3,int m,long no) int i; for(i=0;im;i+) if( U(1) /U=no) return i; U (2) /U; main() long cardNo,money; int k; while(1) printf

25、(“请输入卡号:/n“); scanf(“%1d“, if(cardNo0) break; k=locate(card,M,cardNo); if(k=-1) printf(“不存在%id 号的储蓄卡/n“,cardNo); continue; printf(“请输入金额(正值代表存款,负值代表取款):/n“); scanf(“%id“, if(cardk1+money0) printf(“存款余额不足,不能完成本次的取款业务/n“); continue; if(cardk2=N) printf(“已完成本卡的当日业务/n“); continue; /*处理一笔业务的数据 */ cardkU

26、(3) /U=money; U (4) /U; U (5) /U; (分数:15.00)填空项 1:_ (正确答案:cardi0 (2) return-1 (3) cardk2+3 (4) cardk1+=money (5) cardk2)解析:解析 按照程序的说明,函数 Locate 是对用户输入的卡号进行比较,当找到对应的卡号,则返回持卡者对应的记录号,否则返回-1。cardi0中存放着第 i 张卡的卡号,所以(1)填“cardi0”,(2)填“return-1”。当找到持卡者的卡号为 k 时,由于 cardk2存放实际的交易次数,因此这次发生的交易数应该存放的位置为 cardkcardk

27、2+3,即(3)填“cardk2+3”。在交易发生后,存款额要发生改变,即(4)填“cardk1+=money”,同时其交易次数增 1,(5)填“cardk2”。五、B试题五/B(总题数:1,分数:15.00)5.阅读以下说明和 C+代码,将解答写入对应栏内。 说明 类 Stock 的定义中有三处错误,分别在代码的第 04、06、10 行。请补齐下述代码中的空缺(1)(3),修改错误并给出修改后该行的完整代码,最后完善程序运行后的输出结果。 C+程序 01 #includeiostream.h 02 using namespace std; 03 class Stock 04 protecte

28、d: 05 Stock()shares=0; share_val=0.0;Output(); 06 Stock(int n=0,double pr=3.5): U(1) /U /初始化 shares 值为 n 07 share_val=pr; 08 Output(); 09 ;10 voidStock(); 11 void Output()(coutshares;share valendl; 12 public: 13 /成员函数 14 private: 15 /成员变量 16 int shares; 17 double share_val; 18 ; 19 20 void main() /构

29、造三个 Stock 对象 a,b,C 21 Stock a(1); 22 Stock b; 23 Stock C;Stock(); 24 /其他代码省略,且代码无输出 25 程序运行后的输出结果为: 1:3.5 U (2) /U U (3) /U(分数:15.00)填空项 1:_ (正确答案:shares(n))解析:04 代码行修改结果:public: 06 代码行修改结果:Stock(int n,double pr=3.5):shares(n) 10代码行修改结果:Stock() (2) 0:0 (3) 0:0 解析 本题考查的是用 C+程序编程。 根据程序中的注释,要求初始化 shars

30、 的值为 n,因此根据初始化语法应为“shares(n)”;第四行定义了构造函数的访问控制为 protected,但构造函数应该是公共的,所以第四行应该更改为“public”:第六行的构造函数定义了默认值,这样构造一个对象的时候可以填写不同参数,但这个构造函数会和 stock()的无参构造函数混淆,所以,不能够带有默认值,可以将带有默认参数的构造函数更改为:“Stock(int n,double pr=3.5)”或者“Stock(int n,double pr)”。函数的析构函数不能够有任何的返回值,所以第十行应为“Stock()”:运行程序后,程序的输出结果为:1:3.5 0:0 0:0六、

31、B试题六/B(总题数:1,分数:15.00)6.阅读以下说明和 Java 代码,将解答写在对应栏内。 说明 已知类 Stock 和类 JavaMain 都定义在JavaMain.java 文件中,类 stock 的定义中有四处错误,分别在代码的第 01、02、06、07 行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。 Java 代码 01 public class Stock 02 static 03 shares=0; 04 Share_val=0.0; 05 06 private Stock()tgetData(); 07 private Stock(int

32、 n,double pr=0) 08 shares=n; 09 share val=pr; 10 getData(); 11 12 public void getData() 13 System.out.print(shares+“:“+share_val+“ “); 14 15 Drivate int shares; /非静态变量 16 Drivate double share val; /非静态变量 17 ; 18 19 publiC class JavaMain 20 public static void main(String args) 21 Stock a=new Stock();

33、 22 Stock b=new Stock(1,67.5); 23 /其他代码省略,且代码无输出 24 25 (分数:15.00)填空项 1:_ (正确答案:01 代码行修改结果:class Stock)解析:02 代码行修改结果: 06 代码行修改结果:public Stock()getData(); 07 代码行修改结果:public Stock(int n,double pr) 程序运行的输出结果为:0:0.0 1:67.5 解析 本题考查的是用 Java程序编程。 因为 JavaMain 和 Stock 定义在同一个文件中,所以只能够有一个公共类,因此 Stock 前的public 应该去掉;因为 shares 和 share_val 都是非静态变量,所以不能够用静态初始化块进行初始化,所以应该把静态初始化块改为非静态初始化块,将 static 关键字去掉;定义中的构造函数为私有的,但构造函数在 JavaMain 类中被使用,因此构造函数应该为公共的。所以 06 和 07 行的代码应该将 private改为 public;构造函数中调用了输出函数,所以 JavaMain 程序运行后输出结果为:0:0.0 1:67.5。

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

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

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