2007年上半年程序员下午试卷

考试总分:8分

考试类型:模拟试题

作答时间:60分钟

已答人数:967

试卷答案:有

试卷介绍: 2007年上半年程序员下午试卷

开始答题

试卷预览

  • 1. 试题五(共15分)阅读以下应用说明以及用VisualBasic开发过程中所编写的程序代码,将应填入_(n)处的字句写在答题纸的对应栏内。[应用说明]某应用的登录界面如下:登录界面中的文本框txtUserID和txtPassword分别用于接受用户输入的用户名和口令,命令按钮为确定(cmdOk)和取消(cmdCancel)。ADO数据控件Adodc1与数据库EmployeeData连接。在EmployeeData中,表“Users”的字段“UserID”和“Pswd”分别记录了所有的合法用户名和口令。在登录界面中,输入正确的用户名和口令并单击“确定”按钮后,就会打开应用程序的主窗口frmApp。用户名或密码输入错误时,给出提示信息并返回登录界面。[VisualBasic程序代码]PrivateSubcmdOK_Click()Adodc1.C_dj="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\data\EmployeeData.mdb;PersistSecurityInfo=False"Adodc1.RecordSource="select*(1)"Adodc1.RefreshDousrname=(2)pwd=Adodc1.Recordset("Pswd")Adodc1.Recordset.MoveNextLoopUntil(usrname=(3))Or(Adodc1.Recordset.EOF)IfusrnametxtUserID.TextThenMsgBox"无效的用户ID,请重新输入!",,"提示信息"ElseIf(4)ThenMsgBox"欢迎进入系统主界面!",,"提示信息"Unloadme(5)’打开应用程序的主窗口ElseMsgBox"无效的用户密码,请重新输入!",,"提示信息"EndIfEndIfEndSub[15分]
  • 2. 试题七(共15分)阅读以下应用说明、VisualBasic开发说明以及程序代码,将应填入(n)的字句写在答题纸的对应栏内。[应用说明]某交通灯演示程序启动后,其运行窗口中包括红绿灯标志以及当前红绿灯状态剩余秒数的动态显示(如下图)。红灯与绿灯持续的时间分别为30秒与40秒。持续时间结束时,立即变更红绿灯,并重新显示剩余秒数。[VisualBasic开发说明]在开发过程中,先在窗体内制作形状“红绿灯框架”(长方形,透明),在该框架中,上部制作形状“红灯”(ShpRed,圆形),默认属性为透明;下部制作形状“绿灯”(ShpGreen,圆形),初始设置其填充方式属性FillStyle为实心,填充颜色属性FillColor为绿色。再设置两个图像框(Image1在左,Image2在右),使其能分别装入数字图像文件,以显示当前红绿灯状态剩余的秒数。10个数字图像文件N0.bmp~N9.bmp分别用于显示数字0、1、…、9,这些文件存放在该应用程序所在目录中,以便在程序运行时按需要选择装入这两个图像框。为使图像文件装入图像框时能自动改变大小以适应图像框,这些图像框的Stretch属性都应设置成(1)。为使这些数字能每秒变化一次,开发窗体中设置了计时器Timer1,其Enable属性设置成True,其Interval属性设置成1000。程序中,全局变量Light用以标志当前红灯(0)或绿灯状态(1),RedT和GreenT分别表示红灯或绿灯状态剩余的秒数。计时器Timer1的定时过程是在该程序启动1秒后首次执行的,以后每隔1秒执行1次。开发者应考虑对以下四种情况的处理:绿灯持续、绿灯转红灯、红灯持续、红灯转绿灯。过程LoadNumber的功能是:将红绿灯剩余秒数N(2位整数)分离出两个一位数i与j,再将其变换成字符,删除前面可能产生的空格,再将数字图像文件Ni.bmp与Nj.bmp装入两个图像框(其中i与j应以相应的数字字符代替)。[VisualBasic程序代码]PublicLightAsInteger,RedTAsInteger,GreenTAsIntegerPrivateSubForm_Load()Light=1:GreenT=40:RedT=0’初始化设置EndSubPrivateSubTimer1_Timer()’计时器定时过程IfLight=1Then’绿灯状态时(2)IfGreenT>0Then’绿灯持续时CallLoadNumber(GreenT)’调用过程,显示数字GreenTElse’绿灯转红灯时ShpRed.FillStyle=0’置红灯形状实心ShpRed.FillColor=vbRed’为红灯形状填充红色ShpGreen.FillStyle=1’置绿灯形状透明CallLoadNumber(30)Light=0:RedT=30EndIfElse’红灯状态时RedT=RedT-1IfRedT>0Then’红灯持续时CallLoadNumber(RedT)Else’红灯转绿灯时ShpRed.FillStyle=1ShpGreen.FillStyle=0ShpGreen.FillColor=vbGreen(3)Light=1:GreenT=40EndIfEndIfEndSubSubLoadNumber(NAsInteger)’根据剩余秒数N将数字图像装入图像框DimiAsInteger,jAsIntegeri=Int((4))j=(5)Image1.Picture=LoadPicture("N"&Trim(Str(i))&".bmp")’显示十位上的数字Image2.Picture=LoadPicture("N"&Trim(Str(j))&".bmp")’显示个位上的数字EndSub[15分]
  • 3. 试题一(共15分)阅读以下说明和流程图,回答问题1和问题2,将解答填入答题纸的对应栏内。[说明]为便于管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”和10个数字组成,其格式为:ISBN组号-出版者号-书名号-校验码。其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,信息处理技术员考试大纲的标准书号为:ISBN7-302-11191-X。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号。第2段上的“302”表示清华大学出版社。标准书号的校验过程如图1-1所示,计算校验码的过程如图1-2所示,其中,Mod(S,11)表示S除以11得到的余数。[流程图][问题1]请填补流程图中的空缺(1)~(4)。[问题2]设“程序员考试大纲”标准书号前9个数字为7-302-08493,请写出其校验码。[15分]

    A(1),a

    B(2),…,a(10),则校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a

    C(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,信息处理技术员考试大纲的标准书号为:ISBN7-302-11191-X。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号。第2段上的“302”表示清华大学出版社。标准书号的校验过程如图1-1所示,计算校验码的过程如图1-2所示,其中,Mod(S,11)表示S除以11得到的余数。[流程图][问题1]请填补流程图中的空缺(1)~(4)。[问题2]设“程序员考试大纲”标准书号前9个数字为7-302-08493,请写出其校验码。[15分]

  • 4. 试题二(共15分)阅读以下说明和C语言函数,将解答填入答题纸的对应栏内。[说明]下面待修改的C程序完成的功能是:对于给定的一个长正整数,从其个位数开始,每隔一位取一个数字(即取其个位、百位、万位等数字),形成一个新的整数并输出。例如,将该程序修改正确后,运行时若输入“14251382”,则输出的整数为“4532”。下面给出的C程序代码中有五个错误,请指出所有的错误。[C程序代码][15分]
  • 5. 试题三(共15分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]函数count_months(DATEstart,DATEend)的功能是:计算两个给定日期之间所包含的完整月份数。该函数先算出起止日期中所含的完整年数,再计算余下的完整月份数。规定两个相邻年份的同月同日之间的间隔为1年。例如,2007.5.30~2008.5.30的间隔为1年。若相邻两年中前一年是闰年,并且日期是2月29日,则到下一年的2月28日为1年,即2008.2.29~2009.2.28的间隔为1年。规定两个相邻月份的相同日之间的间隔为1个月,但需要特别考虑月末的特殊情况。例如,2007.1.29~2007.2.28的间隔为1个月,同理,2007.1.30~2007.2.28、2007.1.~2007.2.28的间隔都是1个月。计算起止日期间隔不足一年的完整月份数时,分两种情况:1)起止日期不跨年度。先用终止日期的月号减去起始日期的月号得到月份数,然后再根据情况进行修正。例如,起止日期为2008.3.31~2008.9.20,通过月号算出月份数为6。修正时,通过调用函数makevalid将2008.9.31改为2008.9.30,与终止日期2008.9.20比较后,将月份数修正为5。2)起止日期跨年度。计算方法如下例所示:对于起止日期2008.7.25~2009.3.31,先计算2008.7.25~2008.12.25的月份数为5,再算出2008.12.25~2009.3.25的月份数为3,因此2008.7.25~2009.3.31之间的完整月份数为8。日期数据类型定义如下:typedefstruct{intyear;intmonth;intday;/*日期的年号(4位)、月和日号*/}DATE;程序中使用的函数cmp_date()、isLeapYear()和makevalid()说明如下:[C语言函数]intcount_months(DATEstart,DATEend){intyears=0,months=0;DATEr;if(cmp_date(start,end)>0){r=start;start=end;end=r;}years=end.year-start.year;/*计算年数*/r=start;r.year=end.year;if(cmp_date(r,end)>0){/*修正年数*/(1);r.year--;}if(r.year0)/*修正月份数*/(4);months+=(5);/*计算总月份数*/returnmonths;}[15分]
  • 6. 试题四(共15分)阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]函数sort(NODE*head)的功能是:用冒泡排序法对单链表中的元素进行非递减排序。对于两个相邻结点中的元素,若较小的元素在前面,则交换这两个结点中的元素值。其中,head指向链表的头结点。排序时,为了避免每趟都扫描到链表的尾结点,设置一个指针endptr,使其指向下趟扫描需要到达的最后一个结点。例如,对于图4-1(a)的链表进行一趟冒泡排序后,得到图4-1(b)所示的链表。链表的结点类型定义如下:typedefstructNode{intdata;structNode*next;}NODE;[C语言函数]voidsort(NODE*head){NODE*ptr,*preptr,*endptr;inttempdata;ptr=head->next;while(1)/*查找表尾结点*/ptr=ptr->next;endptr=ptr;/*令endptr指向表尾结点*/ptr=(2);while(ptr!=endptr){while((3)){if(ptr->data>ptr->next->data){tempdata=ptr->data;/*交换相邻结点的数据*/ptr->data=ptr->next->data;ptr->next->data=tempdata;}preptr=(4);ptr=ptr->next;}endptr=(5);ptr=head->next;}}[15分]
  • 7. 试题六(共15分)阅读下列说明和C++代码,请回答问题1至问题3,将解答写在答题纸的对应栏内。[说明]已知下列程序运行时的输出应为:1:11:11:1[问题1]请补齐下述代码中的空缺1和2。[问题2]类Stock的定义中有两处错误,请指出错误所在行号并给出该行修改后的完整结果。[问题3]指出该代码是否存在内存泄漏。[C++程序][15分]
  • 8. 试题八(共15分)阅读以下说明和Java代码,请回答问题1和问题2,将解答写在答题纸的对应栏内。[说明]已知类Stock和类cxyjava都定义在cxyjava.java文件中,类Stock的定义中第14行前共有四行出现了错误,将下面代码修改正确并完善后的输出结果为:0:01:23[问题1]请指出错误所在行号并给出该行修改后的完整结果。[问题2]请补齐第21行代码中的空缺。[Java代码][15分]
相关试卷
相关题库