2005年下半年程序员下午试题

考试总分:8分

考试类型:模拟试题

作答时间:60分钟

已答人数:967

试卷答案:有

试卷介绍: 2005年下半年程序员下午试题

开始答题

试卷预览

  • 1. 试题七(15分)阅读以下应用说明以及用VisualBasic编写的程序代码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。[应用说明]本应用程序的运行窗口中将显示一个简单的模拟时钟如下:该圆形钟面上有时针、分针和秒针在运动,不断显示系统的当前时间。在开发该喁喁时,首先建立一个圆形Shape控件作为钟面(背景为白色)。设圆心为象素坐标(X0,Y0),半径为940。再在圆心处建立一个小的实心圆Shape控件作为轴心。钟面上的刻度3,6,9,12为四个标签。时针、分针、秒针(红色)为线型控件,名称分别为LineH、LineM、LineS,线宽属性值分别为:3,2,1,线长属性值分别为500,700,900。这三个线型控件的起点坐标都固定在(X0,Y0)其终点坐标随转角θ而动态变化:设置定时器Timer1使该时钟能反映系统的当前时间,其定时间隔为0.5秒,该定时器的Interval属性值应设置为_____(1)_____。每隔0.5秒,秒针需要调整位置,但分针和时针只是在初始显示时以及在每次秒计数为0时才需要调整位置(可节省计算量)。[程序代码]ConstPi=3.1416ConstX0=1750ConstY0=1150ConstLH=500,LM=700,LS=900PublicfirstAsBooleanPrivateSubForm_Load()LineS.X1=X0'秒针的起点位置LineS.Y1=Y0LineM.X1=X0'分针的起点位置LineM.Y1=Y0LineH.X1=X0'时针的起点位置LineH.Y1=Y0first=TrueEndSubPrivateSubTimer1_Timer()S=Second(Time)S_seta=Pi*______(2)______'秒针的转角LineS.X2=X0+LS*Sin(S_seta)'秒针的终点位置LineS.Y2=Y0-LS*Cos(S_seta)If(____(3)_____)ThenM=Minute(Time)LineM.X2=X0+LM*Sin(Pi*M/30)'分针的终点位置LineM.Y2=Y0-LM*Cos(Pi*M/30)H=Hour(Time)If(H>=12)ThenH=H-12H_seta=Pi*(______(4)______)'时针的转角LineH.X2=X0+LH*Sin(H_seta)'时针的终点位置LineH.Y2=Y0-Lh*Cos(H_seta)first=________(5)________EndIfEndSub[15分]

    A(1)_____。每隔0.5秒,秒针需要调整位置,但分针和时针只是在初始显示时以及在每次秒计数为0时才需要调整位置(可节省计算量)。[程序代码]ConstPi=3.1416ConstX0=1750ConstY0=1150ConstLH=500,LM=700,LS=900PublicfirstAsBooleanPrivateSubForm_Load()LineS.X1=X0'秒针的起点位置LineS.Y1=Y0LineM.X1=X0'分针的起点位置LineM.Y1=Y0LineH.X1=X0'时针的起点位置LineH.Y1=Y0first=TrueEndSubPrivateSubTimer1_Timer()S=Second(Time)S_seta=Pi*______

    B(2)______'秒针的转角LineS.X2=X0+LS*Sin(S_seta)'秒针的终点位置LineS.Y2=Y0-LS*Cos(S_seta)If(____

    C(3)_____)ThenM=Minute(Time)LineM.X2=X0+LM*Sin(Pi*M/30)'分针的终点位置LineM.Y2=Y0-LM*Cos(Pi*M/30)H=Hour(Time)If(H>=12)ThenH=H-12H_seta=Pi*(______

    D(4)______)'时针的转角LineH.X2=X0+LH*Sin(H_seta)'时针的终点位置LineH.Y2=Y0-Lh*Cos(H_seta)first=________

    E(5)________EndIfEndSub[15分]

  • 2. 试题六(共15分)阅读以下说明和C++代码,将解答写入答题纸的对应栏内。[说明]类Stock的定义中有三处错误,分别在代码的第04、06、10行。请补齐下述代码中的空缺1,修改错误并给处修改后该行的完整代码,最后完善程序运行后的输出结果。[C++代码]程序运行后的输出结果为:1:3.5_____(2)__________(3)_____[15分]
  • 3. 试题八(共15分)阅读以下说明和Java代码,将解答写入答题纸的对应栏内。[说明]已知类Stock和类JavaMain都定义在JavaMain.java文件中,类Stock的定义中有四处错误,分别在代码的第01、02、06、07行。请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。[Java代码][15分]
  • 4. 试题一(15分,每空3分)阅读下列说明和流程图,将应填入___(n)___处的字句写在答题纸的对应栏内。[流程图说明]流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符的空白。例如,原字符串"FileName",处理变成"FileName"。流程图1-2、流程图1-3、流程图1-4分别详细描述了流程图1-1中的框A、B、C。假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1)、ch(2)、?、ch(n)中,字符常量KB表示空白字符。流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i)、?、ch(j)依次送入ch(1)、ch(2)、?中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen是取字符串长度函数。[流程图1-1][流程图1-2][流程图1-3][流程图1-4][问题]在流程图1-1中,判断框P中的条件可表示为:i>___(5)___[15分]

    A(1)、ch

    B(2)、?、ch(n)中,字符常量KB表示空白字符。流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i)、?、ch(j)依次送入ch(1)、ch(2)、?中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen是取字符串长度函数。[流程图1-1][流程图1-2][流程图1-3][流程图1-4][问题]在流程图1-1中,判断框P中的条件可表示为:i>___(5)___[15分]

  • 5. 试题二(15,每空3分)阅读以下函数说明和C语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。[说明]函数intfind_Max_Min(inta[],intn)的功能是:找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较a[0]和a[n-1],若a[0]大,则交换a[0]和a[n-1]的值;再比较a[1]和a[n-2],若a[1]大,则交换a[1]和a[n-2]的值;依此类推,直到所有的元素都比较完。然后在数组的前半区从前往后找出小元素,在后半区从后往前找出大元素。[函数]intfind_Max_Min(inta[],intn){/*找出n个元素的数组a中的最大元素、最小元素并输出,返回查找过程中元素的比较次数*/inti,Count=0;inttemp,Maxnum,Minnum;for(i=0;ia[_____(1)_____]{/*数组元素交换代码略*/}}Maxnum=a[n-1];Minnum=a[0];for(i=1;i<n/2+n%2;i++){Count=_____(2)_____;/*元素比较次数计数*/Minnum=_____(3)_____?a[i]:Minnum;/*找出最小元素*/Maxnum=_____(4)_____?_______(5)_____:Maxnum;/*找出最大元素*/}printf("Max=%d\n,Maxnum");printf("Min=%d\n",Minnum);returnCount;}[15分]

    A(1)_____]{/*数组元素交换代码略*/}}Maxnum=a[n-1];Minnum=a[0];for(i=1;i<n/2+n%2;i++){Count=_____

    B(2)_____;/*元素比较次数计数*/Minnum=_____

    C(3)_____?a[i]:Minnum;/*找出最小元素*/Maxnum=_____

    D(4)_____?_______

    E(5)_____:Maxnum;/*找出最大元素*/}printf("Max=%d\n,Maxnum");printf("Min=%d\n",Minnum);returnCount;}[15分]

  • 6. 试题三(15分,每空3分)阅读以下说明和C语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。[说明]某种传感器的输出值Ratio依赖于环境温度temp(-40℃≦temp≦50℃)。对一组环境温度值(ITEMS个),人们已经测量得到了相应的Ratio值(见表1)。该表粗略地描述了曲线Ration(temp)。校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,人们需要用更多的列表值细致地描述曲线K(temp),如表2所示。在表2中,各温度值所对应的K值是对表1进行线性插值再求倒数得到的,具体的计算方法如下:1.根据temp值,在表1中用二分法查找;2.若找到相应的温度值,则按相应的Ratio值求倒数得到K值;3.若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和Ratio2,再按如下公式计算K值:Step=(Ratio1-Ratio2)/(Tp1-Tp2)K=1.0/(Ratio1+Step*(temp-Tp1))在程序中,当temp高于50℃或低于-40℃时,设定K=0。[程序]#includetypedefstruct{intTemp;/*环境温度*/doubleRatio;/*传感器的输出值*/}CURVE;#defineITEMS7doubleGetK(int,CURVE*,int);voidmain(){intDegree;doublek;CURVECurve[ITEMS]={{-40,0.2},{-20,0.60},{-10,0.8},{0,1.0},{10,1.17},{30,1.50},{50,1.8}};printf("环境温度校正系数\n");for(Degree=-40;DegreeTemp)||(Temp>(p+high)->Temp))return0.0;/*超出温度范围时返回0.0*/while(lowTemp)return_____(2)_____;if(TempTemp)high=m-1;elselow=_____(3)_____;}p+=high;Step=(_____(4)_____)/((p+1)->Temp-p->Temp);return1.0/(p->Ratio+Step*(_____(5)_____));}[15分]

    A(1)_____;if(Temp==(p+m)->Temp)return_____

    B(2)_____;if(TempTemp)high=m-1;elselow=_____

    C(3)_____;}p+=high;Step=(_____

    D(4)_____)/((p+1)->Temp-p->Temp);return1.0/(p->Ratio+Step*(_____

    E(5)_____));}[15分]

  • 7. 试题四(15分,每空3分)阅读以下应用说明以及用VisualBasic开发过程中进行的属性设置和所编写的程序代码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。[应用说明]启动某应用程序运行的登录窗口如下:其中的标签(Label1)"用户名(U)"对应文本框Username,标签(Label2)"密码(P)"对应文本框"Password"。当用户在Username文本框中输入用户名"ali88",在Password文本框中输入"zmkm"(显示的字符均为"*"),并单击"确定"按钮时,就会弹出应用程序的主窗口frmAPP,而该登录窗口就会卸载。如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的"确定"按钮后,登录窗口"Password"文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生3次输入错误。在第3次输入错误后,就会立即退出该应用程序。在弹出登录窗口后,当按键"Alt+U"时光标就会停留在Usename文本框中;当按键"Alt+P"时光标就会停留在Password文本框中。当用户按"Enter"键时,就相当于单击"确定"按钮;当用户按"Esc"键时,就相当于单击"取消"按钮,立即退出该应用程序。[属性设置]在开发过程中,部分控件及属性设置如下:[程序代码]PrivateSubcmdOK_Click()_____(3)_____AsInteger'静态变量time的说明If___(4)___ThenUnloadMe'卸载本登录窗口____(5)_____'弹出应用程序主窗口frmAPPElseMsgBox("用户名密码错!")Times=times+1Password.Text=""'清除密码框中的内容Password.SetFocus'将光标定位于密码框Iftimes=3ThenEndEndIfEndSubPrivateSubcmdCancel_Click()EndEndSub[15分]
  • 8. 试题五(共15分)阅读以下说明和C语言函数,将应填入__(n)__处的字句写在答题纸的对应栏内。[说明]二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身就是两棵二叉排序树。函数insert_BST(char*dtr)的功能是:对给定的字符序列按照ASCII码值大小关系创建二叉排序树,并返回指向树根结点的指针。序列中重复出现的字符只建一个结点,并由结点中的Count域对字符的重复次数进行计数。二叉排序树的链表结点类型定义如下:typedefstructBSTNode{charElem;/*结点的字符数据*/intCount;/*记录当前字符在序列中重复出现的次数*/structBSTNode*Lch,*Rch;/*结点的左、右指针*/}*BiTree;[函数]BiTreeinsert_BST(char*str){BiTreeroot,parent,p;char_______(1)________;/*变量定义及初始化*/root=(BiTree)malloc(sizeof(structBSTNode));if(!root||*s=='\0')returnNULL;root->Lch=root->Rch=NULL;root->Count=1;root->Elem=*s++;for(;*s!='\0';s++){______(2)______;parent=NULL;while(p){/*p从树根结点出发查找当前字符*s所在结点*/parent=p;if(*s==p->Elem)/*若树中已存在当前字符结点,则当前的字符计数值加1*/{p->Count++;break;}else/*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/if(*s>p->Elem)p=p->Rch;elsep=p->Lch;}/*while*/if(______(3)_____){/*若树中不存在字符值为*s的结点,则申请结点并插入树中*/p=(BiTree)malloc(sizeof(structBSTNode));if(!p)returnNULL;p->Lch=p->Rch=NULL;p->Count=1;p->Elem=*s;/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/if(p->Elem>parent->Elem)______(4)_____=p;else_________(5)________=p;}}/*for*/returnroot;}[15分]

    A(1)________;/*变量定义及初始化*/root=(BiTree)malloc(sizeof(structBSTNode));if(!root||*s=='\0')returnNULL;root->Lch=root->Rch=NULL;root->Count=1;root->Elem=*s++;for(;*s!='\0';s++){______

    B(2)______;parent=NULL;while(p){/*p从树根结点出发查找当前字符*s所在结点*/parent=p;if(*s==p->Elem)/*若树中已存在当前字符结点,则当前的字符计数值加1*/{p->Count++;break;}else/*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/if(*s>p->Elem)p=p->Rch;elsep=p->Lch;}/*while*/if(______

    C(3)_____){/*若树中不存在字符值为*s的结点,则申请结点并插入树中*/p=(BiTree)malloc(sizeof(structBSTNode));if(!p)returnNULL;p->Lch=p->Rch=NULL;p->Count=1;p->Elem=*s;/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/if(p->Elem>parent->Elem)______

    D(4)_____=p;else_________

    E(5)________=p;}}/*for*/returnroot;}[15分]

相关试卷
相关题库