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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷18及答案与解析.doc

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 18及答案与解析 1 阅读以下说明和流程图,回答问题 1-2,将解答填入对应的解答栏内。 说明 下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数 m和 n,假定 m大于等于 n,算法的主要步骤为: (1)以 n除 m并令 r为所得的余数; (2)若 r等于 0,算法结束; n即为所求; (3)将 n和 r分别赋给 m和 n,返回步骤 (1)。 流程图 问题 1 将流程图中的 (1) (4)处补充完整。 问题 2 若输入的 m和 n分别为 27和 21,则 A中循环体被执行的次数是 (5)。 2 阅读下列程序说明和

2、C代码,将应填入 (n)处的字句写在对应栏内。 函数 2.1说明 函数 void find(int *a, int n, int * max, int * min)的功能是在长度为 n的整型数组 a中,查找最大元素和最小元素的下标。 main()中给出了调用 find函数的一个实例。 函数 2.1 #include stdio.h void find(int *a, int n,int *max,int * min) int i; *max =* min=0; for(i=1;i n;i+ +) if(ai a* max) (1); else if(ai a*min) (2); return;

3、 main() int a=4,6,8,9,0,6,max,min; find(a,6,(3); printf(“%5d%5dn“, max,min); 函数 2.2说明 以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串前端的公共部分。例如:输入的两个字符 串分别是 abcdefg和 abceef,则输出为 abc。 函数 2.2 #include stdio.h main() char str1100,str2100,str100,c; int i=0,s; printf(“nInput string 1:“);gets(str1); printf(“nInput stri

4、ng 2:“);gets(str2); while(4) i+; printf(“%sn“,str); 3 阅读下列函数说明和 C函数,将应填入 (n)处的字句写对应栏内。 说明 二叉树的二叉链表存储结构描述如下: typedef struct BiTNode datatype data; struct BiTNode *lchild, * rchild; /*左右孩子指针 */ BiTNode,* BiTree; 对二叉树进行层次遍历时,可设置一个队列结构,遍历从二叉树的 根结点开始,首先将根结点指针入队列,然后从队首取出一个元素,执行下面两个操作: (1) 访问该元素所指结点; (2) 若

5、该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。 此过程不断进行,当队列为空时,二叉树的层次遍历结束。 下面的函数实现了这一遍历算法,其中 Visit(datatype a)函数实现了对结点数据域的访问,数组 queueMAXNODE用以实现队列的功能,变量 front和 rear分别表示当前队首元素和队尾元素在数组中的位置。 函数 void LevelOrder(BiTree bt) /*层次遍历二叉树 bt*/ BiTree QueueMAXNODE; int front,rear; if(bt= =NULL)return; front=-1; re

6、ar=0; queuerear=(1); while(front (2) ) (3); Visit(queuefront- data); /*访问队首结点的数据域 */ if(queuefront lchild!: NULL) rear+; queuerear=(4); if(queuefront- rchild! =NULL) rear+; queuerear=(5); 4 阅读下列程序说明和 C代码,将应填入 (n)处的字句写在对应栏内 说明 本程序在33方格中填入 1到 10以内 9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。 方格的序号如

7、下图所示。程序采用试探法,从序号为 0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为 8的方格也填入合理的整数后,就找到了一个解。 为检查当前方格所填整数的合理性,程序引入数组 CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实 上, CheckMatrix中只要求第 i个方格中的数向前兼容,即填写第 4个方格时,只检查在它之前、与之相邻的第 1, 3个方格是否满足和为素数的条件。 程序 #include stdio.h in

8、t pos,a9,b11; /*用于存储方格所填入的整数 */void write(int a) /*方格输出函数 */ int isPrime(int m) /* 素数判断函数,若 m为素数则返回 1,否则返回 0*/ int selectNum(int start) /* 找到 start到 10之间尚未 使用过的最小的数,若没有则返回 0*/ int j; for(j=start;j =10;j+) if(bj) return j; return0;int check() /*检查填入 pos位置的整数是否合理 */ int i,j int checkMatrix3=-1,0,-1,1,

9、-1,0,-1,1,3,-1,2,4,-1,3,- 1,4,6,-1,5,7,-1; for(i=0;(j=(1) =0;i+) if(! isPrime(2)return 0; return 1;void extend() /*为下一方格找一个尚未使用过的整数 */ (3)=selectNum(1); bapos=0;void change() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯 */ int j; while(pos=0 if(pos 0)return; (4);apos =j;bj=0; void find() int ok=1; pos=0;apos=1;bapos

10、=0; do if(ok) if( (5) ) write(a);change(); else extend(); else change(); ok=check(pos); while(pos=0);void main() int i; for(i=1;i =10;i+)bi=1; find(); 5 阅读以下应用说明和 Visual Basic程序,根据要求回答问题 1问题 2。 【说明】 某机动车驾驶员模拟考试系统的 “交通 禁令标志识别 ”窗体中,共有 1个按钮(CmdTest)、 6个标签、 1个包含 10个单选按钮的控件数组 (OptPicture),如图 2-15所示。其中,标签

11、 (LblPrompt1)“禁令标志 ”与标签 (LblTest)相对应,标签(LblPrompt2)“图片答案 ”与标签 (LblAnswer)相对应,标签 (LblEvaluate)为结果提示。 窗体 (Frm001)对象和单选按钮控件数组 (OptPicture)对象的部分属性及属性值如表 2-15所示。 该程序运行时,单击【测试】按钮 (CmdTest),在标签 (LblTest)中随机显示一个交通禁令标志名称,用户单击控件数组 (OptPicture)相应单选按钮后,程序在标签(LblAnswer)给出用户所击单选按钮对应的交通禁令标志名称,在标签 (LblEvaluate)给出正确

12、或错误的提示结果,如图 2-15和图 2-16所示。 【 Visual Basic 程序】 Dim (4) As StringPrivate Sub cmdTest_Click() Dim i As Integer For i = 0 To 9 (5) Next i lblPrompt2.Visible = False lblAnswer.Visible = False lblEvaluate.Visible = False i = Int(Rnd * 10) lblTest.Caption = tname(i)End SubPrivate Sub Form_Load() Dim i As I

13、nteger For i = 0 To 9 optPicture(i).Value = False (6) lblPrompt2.Visible = False lblAnswer.Visible = False lblEvaluate.Visible = False tname(0)= “禁止向左向右转弯 “ tname(1)= “禁止直行和向右转弯道 “ tname(2)= “禁止直行和向左转弯 “ tname(3)= “禁止驶入 “ tname(4)= “禁止掉头 “ tname(5)= “禁止车辆长时停放 “ tname(6)= “禁止机动车通行 “ tname(7)= “禁止非机动车

14、通行 “ tname(8)= “禁止超车 “ tname(9)= “禁止车辆临时或长时停放 “End SubPrivate Sub optPicture_Click(Index As Integer) lblPrompt2.Visible = True lblAnswer.Visible =(7) lblEvaluate.Visible = True lblAnswer. Caption=(8) If (9) Then lblEvaluate.ForeColor = vbRed lblEvaluate.Caption = “ 恭喜你 !回答正确 !“ Else lblEvaluate.Fore

15、Color = vbBlue lblEvaluate.Caption= “很遗憾,回答错误。 “ End IfEnd Sub 5 请根据图 2-15和图 2-16的显示效果和【 Visual Basic程序】,将表 2-15中窗体对象、单选按钮控件数组对象的 (1) (3)空缺处的属性值填写完整。 6 请根据【说明】和图 2-15和图 2-16的显示效果,将【 Visual Basic程序】中(4) (9)空缺处的程序语句填写完整。 7 阅读以下说明和 C+程序,将应填入 (n)处的字句写在对应栏内。 说明 下面的词典类 Dic实现了简单的英译汉功能。程序运行后的输出 为 “我是一个学生 ”。

16、 C+程序 #include iostream.h #include string.h #define Max 100 class Dic int top; char wordsMax 12; char meanMax 20; public: Die()top=0; void add(char w,char m) strcpy(wordstop,w); strcpy(meantop,m); (1); void trans(char str) int i=0,j=0,k=0,s; char w12,h200; while(l) if(stri! = /读取单词的一个字符,记录在 w中 else

17、wj=0; for(s=0;s top;s+) if(strcmp(wordss,w) (2) 0) break; if(s top) /找到了,翻译成对应 的 means strcpy(w,means); j=(3); else /未找到,翻译成 (unknown) strcpy(w,“(unknown)“; j=9; for(s=0;s j;s+) hk+=ws; if(stri=0) (4); break; j=0; i+; cout h endl; ; void main() Dic obj; obj.add(“I“,“我 “); obj.add(“am“,“是 “); obj.add

18、(“student“,“学生 “); obj.add(“a“,“一个 “); obj.trans(“(5)“); 8 阅读以下技术说明及 Java程序,将 Java程序中 (1) (5)空缺处的语句填写完整。 【说明】 用创建 Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印 “是素数 ”,如果不是,则打印 “不是素数 ”;如果没有参数输入,显示 “请输入一个命令行参数 ”。 【 Java程序】 import java.io.* ; public class TestThread /Java Application主类 public static void main(S

19、ting args ) if (args length l) /要求用户输入一个命令行,否则程序不能进行下去 system.out.println(“请输入一个命令行参数 “); system.exit(0) ; /创建用户 Thread子类的对象实例,使其处于NewBorn状态 primeThread getPrimes = new primeThread (Integer.parseInt(args0); getPrimes.start () ; /启动用户线程,使其处于 Runnable状态 while(getPrimes.isAlive() /说明主线程在运行 try Thread.

20、sleep (500); /使主线程挂起指定毫秒数,以便用户线程取得控制权, /sleep是 static的类方法 Catch(InterruptedException e) /sleep方法可能引起的异常,必须加以处理 return ; /while循环结束 System.out.println (“按任意键继续 “ ) ; /保留屏幕,以便观察 try (1); Catch(IOException e) /main方法结束 class primeThread extends Thread /创建用户自己的 Thread子类 run()中实现程序子线程操作 boolean m_bContin

21、ue=true; /标志本线程是继续 int m_nCircleNum ; /循环的上限 prime Thread(int Num) /构造函数 m_nCircleNum =Nam; boolean ReadyToGoOn () /判断本线程是否继续执行 return ( (2) ); public void run () /继承并重载父类 Thread的 run ()方法,在该线程被启动时自动执行 int number =3; boolean flag=true; while (true) /无限循环 for(3); i+) /检查 number是否为素数 if(number %i=0) (

22、4); system, out. println (flag); if (flag) /打印该数是否为素数的信息 system,out.print in (number+ “是素数 “) ; else sys rem.out.print In (number+ “是素数 “) ; number+ ; /修改 number的数值,为下一轮素数检查做准备 if (number m_nCircleNum) /到达要求检查数值的上限 m_bCont inue= false ; /则准备结束此线程 return ; /结束 run()方法,结 束线程 (5); try /经过一轮检查之后,暂时休眠一段时

23、间 sleep(500); /使主线程挂起指定毫秒数,以便父线程取得控制权 Catch(InterruptedException e) Return; /for循环结束 /while循环结束 /run()方法结束 /primeThread类定义结束 软件水平考试(初级)程序员下午(应用技术)模拟试卷 18答案与解析 1 【正确答案】 问题 1 (1) n m或 nm或其它等效形式 (2) mt (3) nr (4) m%n 问题 2 (5) 1 【试题解析】 (1) (2)当 n的值大于 (等于 )m时,应交换两者的值,再使用欧几里得算法; (3) (4)略; (5)m, n和 r在执行循环

24、A前后的值分别为:2 【正确答案】 (1) * max=i (2) * min=i (3) i number (4)flag =false (5)flag=true 【试题解析】 这是一道要求读者用创建 Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。 多线程是 Java语言的一大特性。多线程就是同时存在 n个执行体,按几条不同的执行线索共同工作的情况。程序就是一段静态的代码,可以理解为一组计算机命令的集合。进 程就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程更小的单位,一个进程在执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以

25、理解为进程的子集。 线程是有状态和声明周期的,每个 Java程序都会有一个缺省的主线程,对于应用程序 applcation来说, main()方法就是一个主线程。 Java语言使用的是 Thread类及其子类的对象来表示线程的。创建一个新线程的生命周期有如下工作状态。 1)新建。当一个 Thread类或者其子类的对象被声明并创建时,新的线程对象 处于新建状态,此时它已经有了相应的内存空间和其他资源。 2)就绪。处于新建状态的线程被启动后,将进入线程队列排队等待 CPU服务,这个时候具备了运行的条件,一旦轮到 CPU的时候,就可以脱离创建它的主线程独立开始自己的生命周期。 3)运行。就绪的线程被

26、调度并获得 CPU的处理权后进入了运行状态,每一个Thread类及其子类的对象都有一个重要的 run()方法,当线程对象被调度执行的时候,它将自动调用本对象的 run()方法,从第一句代码开始执行。可见,对线程的操作应该写到 run()方法中。 4)阻塞 。一个正在执行的线程如果在某种情况下不能执行而进入阻塞状态,此时它不能进入排队状态,只有引起阻塞的原因消失的时候,线程才可以继续进入排队状态等待 CPU处理。 5)死亡。处于死亡状态的线程不具有继续执行的能力,线程死亡的主要原因是正常运行的线程完成了全部工作,即执行完了 run()方法,另外就是被提前强制地终止了。 线程的调度也有优先级别,即

27、同等排列的情况下,优先级高的线程可以被 CPU提前处理。 Thread类有 3个线程优先级的静态常量: MIN-PRIORITY、 NORM-PRIORITY和 MAX-PRIORITY。其中, MIN-PRIORITY代表最小优先级,默认数值为 1: NORM-PRIORITY代表普通优先级,默认数值为 5; MAX-PRIORITY代表最高优先级,默认数值为 10。 对于一个新建线程,系统会遵循以下原则为其指定优先级。 1)新建线程将继承创建它的父线程的优先级。父线程是指执行创建新线程对象语句的线程,它可能是程序的主线程,也可能是某一个用户自定义的线程。 2)通常情况下,主线程具有普通优先

28、级。 另外,可以通过调用 Thread类的方法 setPriority(int a)来修改系统自动设置的线程优先级,使之符合程序的特定需要。 Java编程实现多线程有两种途径,一种是创建自己的线程子类,另一种是实现一个接口 Runnable。无论是哪种途径最终都需要使用 Thread类及其方法。Thread类有 2种构造方法: public Thread()用来创建一个线程对象和 public Thread(Runnabler)创建线程对象,参数 r成为被创建的目标对象。这个口标必须实现 Runnbale接口,给出该接口的 run()方法的方法体,在方法体中进行操作。用两个构造方法创 建完的线

29、程就是一个新建的状态,等待处理。接着启动线程的start()方法,启动线程对象,线程进入排队状态 (即就绪状态 )。然后线程操作 run()方法,该方法里的内容是被系统处理的内容。如果想使线程进入休眠状态,则可以调用 sleep(int millsecond)方法, millsecond是以毫秒为单位的休眠时间。也可调用 sleep(int millsecond,int nanosecond)方法,其中 nanosecond是以纳秒为单位的休眠时间。终止线程用 isAlive()方法来完成。在调用 stop()方法 终止一个线程之前,最好先用 isAlive()方法检查一下该线程是否仍然存活,

30、杀死不存在的线程可能会造成系统错误。 对于本试题所给出的程序是一个 Java Application,其中定义了两个类,一个是程序的主类 TestThread,另一个是用户自定义的 Thread类的子类 primeThread。程序的主线程,即 TestThread主类的 main()方法首先根据用户输入的命令行参数创建一个 primeThread类的对象,并调用 start()方法启动该子线程对象,使之进入就绪状态。主线程首先输出一行信息表 示自己在活动,然后调用 sleep()方法使自己休眠一段时间以便子线程获取处理器。这是因为主线程创建的子线程与之优先级相同,如果主线程不让出处理器,则子

31、线程只能等待主线程执行完毕才能获得处理器,进入运行状态的子线程将检查一个数值是否是素数并显示出来,然后休眠一段时间以便父线程获得处理器。获得处理器的父线程将显示一行信息表示自己在活动,然后调用 sleep()方法使自己也休眠一段时间以便子线程获得处理器。获得处理器的父线程将显示一行信息表示自己在活动然后再休眠。如此循环,每次子线程启动都检查新增的数据是否为素数并 打印,直至该数大于其预定的上限。此时子线程从 run()方法返回并结束其运行,然后主线程也结束。 (1)空缺处所填写的语句用于等待一个键盘输入,否则就保留屏幕,因此 (1)空缺处应填入 “system.in.read()”。 m_bC

32、ontinue是本线程是否继续的标志, (2)空缺处应填入该标志以判断本线程是否继续执行。 由于子线程中所检查的数值大于其预定的上限之前 while循环一直都进行,根据(3)空缺处所在的 for循环语句的 “i+”和 if(number %i=0)判断语句可知,对于检查 number是否为素数的 (3)空缺处应填入 inti=2; i number。 flag是用来标志该数是否是素数的,如果为真,则表示是素数。 number%i=0表示数 number不是素数,所以 (4)中缺处应填入 “flag=false”。 (5)空缺处应填入 “flag=true”以恢复 flag,准备检查下一个 number。

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