下半年计算机软考程序员下午真题及答案word+Word格式.docx
《下半年计算机软考程序员下午真题及答案word+Word格式.docx》由会员分享,可在线阅读,更多相关《下半年计算机软考程序员下午真题及答案word+Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
/*找出n个元素的数组a中的最大元素、最小元素并输出,返回查找过程中元素的比较次数*/
inti,Count=0;
inttemp,Maxnum,Minnum;
for(i=0;
i<
n/2;
i++){
Count=Count+1;
/*元素比较次数计数*/
if(a[i]>
a[_____
(1)_____]
{ /*数组元素交换代码略*/ }
}
Maxnum=a[n-1];
Minnum=a[0];
for(i=1;
n/2+n%2;
Count=_____
(2)_____;
/*元素比较次数计数*/
Minnum=_____(3)_____?
a[i]:
Minnum;
/*找出最小元素*/
Maxnum=_____(4)_____?
_______(5)_____:
Maxnum;
/*找出最大元素*/
}printf("
Max=%d\n,Maxnum"
);
printf("
Min=%d\n"
Minnum);
returnCount;
}
[NextPage]
试题三(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。
[程序]
#include<
stdio.h>
typedefstruct{
intTemp;
/*环境温度*/
doubleRatio;
/*传感器的输出值*/
}CURVE;
#defineITEMS7
doubleGetK(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;
Degree<
=50;
Degree++){
k=GetK(Degree,Curve,ITEMS);
printf("
%3d%4.2f\n"
Degree,k);
}
}
doubleGetK(intTemp,CURVE*p,intn)
{ /*用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值*/
intlow,high,m;
doubleStep;
low=0;
high=n-1;
if((Temp<
p->
Temp)||(Temp>
(p+high)->
Temp))
return0.0;
/*超出温度范围时返回0.0*/
while(low<
=high){
m=_____
(1)_____;
if(Temp==(p+m)->
Temp)
return_____
(2)_____;
if(Temp<
(p+m)->
Temp)high=m-1;
elselow=_____(3)_____;
p+=high;
Step=(_____(4)_____)/((p+1)->
Temp-p->
Temp);
return1.0/(p->
Ratio+Step*(_____(5)_____));
试题四至试题五选答1道
试题四(15分,每空3分)
阅读以下应用说明以及用VisualBasic开发过程中进行的属性设置和所编写的程序代码,将应填入_____(n)_____处的字句写在答题纸的对应栏内。
[应用说明]
启动某应用程序运行的登录窗口如下:
其中的标签(Label1)"
用户名(U)"
对应文本框Username,标签(Label2)"
密码(P)"
对应文本框"
Password"
当用户在Username文本框中输入用户名"
ali88"
,在Password文本框中输入"
zmkm"
(显示的字符均为"
*"
),并单击"
确定"
按钮时,就会弹出应用程序的主窗口frmAPP,而该登录窗口就会卸载。
如果用户名或密码输入错误,则会弹出报警信息框。
当用户单击其中的"
按钮后,登录窗口"
文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。
本应用程序允许发生3次输入错误。
在第3次输入错误后,就会立即退出该应用程序。
在弹出登录窗口后,当按键"
Alt+U"
时光标就会停留在Usename文本框中;
当按键"
Alt+P"
时光标就会停留在Password文本框中。
当用户按"
Enter"
键时,就相当于单击"
按钮;
Esc"
键时,就相当于单击"
取消"
按钮,立即退出该应用程序。
[属性设置]
在开发过程中,部分控件及属性设置如下:
[程序代码]
PrivateSubcmdOK_Click()
_____(3)_____AsInteger '
静态变量time的说明
If___(4)___Then
UnloadMe '
卸载本登录窗口
____(5)_____ '
弹出应用程序主窗口frmAPP
Else
MsgBox("
用户名密码错!
"
)
Times=times+1
Password.Text="
'
清除密码框中的内容
Password.SetFocus '
将光标定位于密码框
Iftimes=3Then
End
EndIf
EndSub
PrivateSub
cmdCancel_Click()
End
EndSub
试题五(共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;
Count=1;
Elem=*s++;
for(;
*s!
='
;
s++){
______
(2)______;
parent=NULL;
while(p){
/*p从树根结点出发查找当前字符*s所在结点*/
parent=p;
if(*s==p->
Elem) /*若树中已存在当前字符结点,则当前的字符计数值加1*/
{p->
Count++;
break;
}
else /*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/
if(*s>
Elem)p=p->
Rch;
elsep=p->
Lch;
} /*while*/
if(______(3)_____){/*若树中不存在字符值为*s的结点,则申请结点并插入树中*/
p=(BiTree)malloc(sizeof(structBSTNode));
if(!
p)returnNULL;
p->
Lch=p->
Elem=*s;
/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/
if(p->
Elem>
parent->
Elem)______(4)_____=p;
else_________(5)________=p;
}
} /*for*/
returnroot;
}
从下列的3道试题(试题六至试题八)中任选1道解答。
如果解答的试题数超过1道,则题号小的1道解答有效。
试题六(共15分)
阅读以下说明和C++代码,将解答写入答题纸的对应栏内。
类Stock的定义中有三处错误,分别在代码的第04、06、10行。
请补齐下述代码中的空缺1,修改错误并给处修改后该行的完整代码,最后完善程序运行后的输出结果。
[C++代码]
程序运行后的输出结果为:
1:
3.5
_____
(2)_____
_____(3)_____
试题七(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.1416
ConstX0=1750
ConstY0=1150
ConstLH=500,LM=700,LS=900PublicfirstAsBoolean
PrivateSubForm_Load()
LineS.X1=X0 '
秒针的起点位置
LineS.Y1=Y0
LineM.X1=X0 '
分针的起点位置
LineM.Y1=Y0
LineH.X1=X0 '
时针的起点位置
LineH.Y1=Y0
first=True
PrivateSubTimer1_Timer()
S=Second(Time)
S_seta=Pi*
______
(2)______ '
秒针的转角
LineS.X2=X0+LS*Sin(S_seta) '
秒针的终点位置
LineS.Y2=Y0-LS*Cos(S_seta)
If(____(3)_____)Then
M=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-12
H_seta=Pi*(______(4)______) '
时针的转角
LineH.X2=X0+LH*Sin(H_seta) '
时针的终点位置
LineH.Y2=Y0-Lh*Cos(H_seta)
first=________(5)________
EndIf
试题八(共15分)
阅读以下说明和Java代码,将解答写入答题纸的对应栏内。
已知类Stock和类JavaMain都定义在JavaMain.java文件中,类Stock的定义中有四处错误,分别在代码的第01、02、06、07行。
请修改错误并给出修改后该行的完整代码,并写出改正错误后程序运行的输出结果。
[Java代码]
参考答案
试题一
(1)i<
=n
(2)ch(j)=KB
(3)k<
=j
(4)ch(k-i+1)
(5)n
试题二
(1)n-i-1
(2)Count+2
(3)a[i]<
Minnum
(4)a[n-i-1]>
Maxnum
(5)a[n-i-1]
试题三
(1)(low+high)/2
(2)1.0/(p+m)->
Ratio
(3)m+1
(4)(p+1)->
Ratio-p->
(5)Temp-p->
Temp
试题四
(1)密码(&
p)
(2)true
(3)Statictimes
(4)Username.Text=″ali88″andPassword.Text=″zmkm″
(5)frmApp.Show
试题五
(1)*s=str
(2)p=root
(3)p==NULL
(4)parent->
Rch
(5)parent->
Lch
试题六
(1)shares(n)
04代码行修改结果:
public:
06代码行修改结果:
Stock(intn,doublepr=3.5):
shares(n){
10代码行修改结果:
~Stock(){}
输出结果
(2)0∶0
(3)0∶0
试题七
(1)500
(2)S/30
(3)S=0orfirst
(4)H/6+M/360
(5)False
试题八
01代码行修改结果:
classStock{
02代码行修改结果:
{
publicStock(){getData();
07代码行修改结果:
publicStock(intn,doublepr){
程序运行的输出结果为:
0∶0.01∶67.5