if(__(4)__){R[0]=R[t];R[t]=R[i];R[i]=R[0];}
}/*for*/
k=1;R[0]=R[1];
for(i=1;i<=MaxIndex;i++)/*输出排名情况*/
if(R[i].num>0){
if(R[i].num!
=R[0].num||R[i].time!
=R[0].time)k++;
R[0]=__(5)__;
printf(“%d:
%3d%4d%5d\n”,k,R[i].no,R[i].num,R[i].time);
}/*if*/
}/*Statistic*/
试题五(15分,每空3分)
[应用说明]
某单位举办了一场知识竞赛,参加竞赛的选手为300名,依次从1~300进行编号。
竞赛时间为9:
00~11:
00。
8道竞赛题目依次从‘A’~‘H’编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。
若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。
选手提交答案的情况及判定结果由专入即时录入,录入数据包括提交答案的时间、选手编号、题目编号(A~H)、是否正确(Y/N)。
对竞赛情况进行统计和排名的规则如下:
1.若徒手X在竞赛时提交的题目P解答正确,则解答该题目所用时间如下计算:
解答题目P的用时=提交题目P正确的时间-竞赛的开始时间+罚时
罚时=提交题目P错误解答的次数×20
例如:
表1中14号选手在10:
27提交了题目A的正确解答,因此该选手正确解答该题目所用的时间为87分钟,由于之前的两次提交错误解答,罚时为2×20=40分钟,所以14号选手解答题目A的用时=87+40=127(分钟)
2.已经提交正确答案的题目再次提交时不再计算。
3.竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。
4.排名里,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前;若完成的题目数和所用时间均相等,则名次相同;完成题目数为0的选手不参加排名。
本应用程序的运行窗口如下图所示:
窗口中的两个文本框为Txt_time和Txt_player,分别用于录入提交答案的时间和选手编号。
组合列表框Combo1提供题目编号(A~H),录入时从中选择。
检查框Chk_yn用于输入解答是否正确信息。
当单击“确定”按钮(Cmd_confirm)时,录入的提交信息加入列表框List1中,排名情况在列表框List2输出。
单击“关闭按钮时退出应用程序。
在开始过程中,需要编写的部分程序代码如下:
[程序代码]
PrivateTypeInfo
NoAsInteger‘选手编号
NumAsInteger‘完成的题目数量
TimeAsInteger‘完成题目的总用时
D(8)AsInteger‘d[i]用于记录提交第i个题目错误答案的次数
A(8)AsInteger‘a[i]用于记录第i个题目是否已经提交正确答案
EndType
DimR(301)ASInfo‘R[j]用于统计编号为j的选手提交答案的情况
DimMaxIndexAsInteger‘MaxIndex记录提交答案的选手编号最大者
PrivateSubForm_Load()
Fori=1to8
Combo1.AddItemChr(__
(1)__)
Next
Combo1.Text=Combo1.List(0):
Txt_time.Txt=””:
Txt_player.Text=””
Fori=1to300
R(i).num=0:
R(i).time=0:
R(i).no=i
Forj=1to8
R(i).d(j)=0:
R(i).a(j)=False
Nextj,I
EndSub
PrivateSubCmd_confirm_Click()
Dimh,m,k,timeAsInteger,ch,pass,s1AsString
K=InStr(Txt_time.Text,”:
”):
ifk<2ThenGoToerror1
H=Val(Left(Txt_time.Text,k-1)):
m=Val(Mid(Txt_time.Text,k+1))
Ifh>11Orh=11Andm>0Orm>=60ThenGoToerror1
Time=___
(2)___‘计算答题时间,以分钟为单位
IfTxt_player.Text<1OrTxt_player.Text>300ThenGoToerror1
Ch=___(3)___ ‘取题目编号
Pass=Iif(Chk_yn.___(4)___=0,”N”,”Y”)
S=Txt_time.Text+Space(4)+Txt_player.Text
S1=s1+Space(10-Len(Txt_player.Text))+ch+Space(8)+pass
List1.AddItems1
K=Val(Txt_player.text)‘k为选手编号
R(k).no=k‘编号为k的选手提交信息记录在下标为k的数组元素中
Ifk>MaxIndexThenMaxIndex=k
M=Asc(ch)-Asc(“A”)
Ifpass<>”Y”Then‘编号为k的选手提交第m个题目的解答不正确
R(k).d(m)=R(k).d(m)+1
ElseIfR(k).a(m)<>TrueThen‘已经提交正确的题目的解答不再计算
R(k).a(m)=True;R(k).num=R(k).num+1
R(k).time=R(k).time+___(5)___
CallStatistic‘调用过程Statistic进行实时排名和输出
EndIf
ExitSub
Error1:
MsgBox”录入信息有误”,vbOKOnly
EndSub
试题六(15分,每空3分)
[说明]
以下程序的功能是计算三角形、矩形和正方形的面积并输出程序由4个类组成:
类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述三种图形面积的通用接口。
[C++程序]
#include
#include
ClassFigure{
Public:
VirtualdoublegetArea()=0;//纯虚拟函数
};
ClassRectangle:
___
(1)___{
Protected:
Doubleheight;
Doublewidth;
Public:
Rectangle(){};
Retangle(doubleheight,doublewidth){
this->height=height;
this->width=width;
}
DoublegetArea(){
Return___
(2)___;
}
}
ClassSquare:
___(3)___{
Public:
Square(doublewidth){
___(4)___;
}
};
ClassTriangle:
___(5)___{
Doublela;
Doublelb;
Doublelc;
Public:
Triangle(doublela,doublelb,doulblelc){
this->la=la;this->lb=lb;this->lc=lc;
}
DoublegetArea(){
Doubles=(la+lb+lc)/2.0;
Returnsqrt(s*(s-la)*(s-lb)*(s-lc));
}
}
Voidmain(){
Figure*figures[3]={
NewTriangle(2,3,3),newRectangle(5,8),newSquare(5)};
For(inti=0;i<3;i++){
Cout<<”figures[“<getArea()<}
}
试题七(15分,每空3分)
[应用说明]
设一个简单的“通讯录”存储在一个ACCESS类型的数据库表中,包括姓名、电话和email三个字段。
下面的应用程序实现对“通讯录”数据库表中的记录进行增加、删除及修改处理,其运行界面如下:
(1)数据控件(data1)与“通讯录”数据库表相连接,用户可通过“”和“”按钮指定表中的当前记录。
(2)文本框Txt_name、Txt_phone和Txt_email分别与数据库表中的“姓名”、“电话”和“eamil“字段绑定,用于显示当前记录的内容。
(3)应用程序启动时,“确定“按钮(Cmd_ok)和“取消”按钮(Cmd_cancel)不可操作,文本框中显示表中的第一条记录,这时文本框处于不可操作状态。
(4)单击“增加”按钮(Cmd_add)或”修改”按钮(Cmd_modify)后,方可以编辑记录内容,同时“增加”、“删除”、“修改”和“退出”按钮变为不可操作状态。
“增加”和“修改”操作需通过“确定”和“取消”按钮确认。
(5)单击“删除按钮(Cmd_del)后,弹出对话框,再单击“确定”按钮,当前记录被删除。
[程序代码]
PrivateSubenableop(isEnabledAsBoolean)
Txt_name.Enabled=isEnabled:
Txt_phone.Enabled=isEnabled
Txt_eamil.Enabled=isEnabled
Cmd_ok.Enabled=isEnabled:
Cmd_cancel.Enabled=isEnabled
Cmd_add.Enabled=notisEnabled:
Cmd_del.Enabled=NotisEnabled
Cmd_end.Enabled=NotisEnabled:
Cmd_modify.Enabled=NotisEnabled
EndSub
PrivateSubForm_Load()
Callenableop(False)
Data1.Refresh
IfData1.Recordset.RecordCount=0Then
Cmd_del.Enabled=False:
Cmd_modify.Enabled=___
(1)___
EndIf
EndSub
PrivateSubCmd_add_Click()‘单击“增加”按钮的代码
Callenableop(___
(2)___)
Data1.Recordset.AddNew‘在数据库表中添加一个新记录
Txt_name.___(3)___
EndSub
PrivateSubCmd_del_Clikc()‘单击“删除”按钮的代码
OnErrorGoToerror3
Ans=MsgBox(“确定删除吗?
”,vbYesNo+vbInformation,“操作提示!
”)
If(ans=vbYes)Then
Data1.Recordset.___(4)___
Data1.Recordset.MoveNext
Ifdata1.Recordset.EOFThenData1.Refresh
EndIf
ExitSub
Error3:
MsgBoxErr.Description,vbOKOnly,“错误提示!
”
EndSub
PrivateSubCmd_ok_Click()‘单击“确定”按钮的代码
OnErrorGoToerror1
Data1.Recordset.___(5)___
Callenableop(False)
ExitSub
Error1:
MsgBoxErr.Description,vbOKOnly,“错误提示!
”
Data1.UpdateControls
Callenableop(False)
EndSub
’“修改”和“取消”按钮的程序代码(略)
试题八(15分,每空3分)
[说明]
以下程序的功能是计算三角形、矩形和正方形的面积并输出程序由5个类组成:
AreaTest是主类,类Trianlge、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。
[程序]
publicclassAreaTest{
publicstaticvoidmain(Stringargs[]){
Figure[]figures={newTriangle(2,3,3),newRectangle(5,8),newSquare(5)};
for(inti=0;iSystem.out.println(figures[i]+"area="+figures[i].getArea());
}
}
}
publicabstractclassFigure{
publicabstractdoublegetArea();
}
publicclassRectangleextends___
(1)___{
doubleheight;
doublewidth;
publicRectangle(doubleheight,doublewidth){
this.height=height;
this.width=width;
}
publicStringtoString(){
return"Rectangle:
height="+height+",width="+width+":
";
}
publicdoublegetArea(){
return___
(2)___;
}
}
classSquareextends___(3)___{
publicSquare(doublewidth){
___(4)___;
}
publicStringtoString(){
return"Square:
width="+width+":
";
}
}
classTriangleextends___(5)___{
doublela;
doublelb;
doublelc;
publicTriangle(doublela,doublelb,doublelc){
this.la=la;this.lb=lb;this.lc=lc;
}
publicStringtoString(){
return"Triangle:
sides="+la+","+lb+","+lc+":
";
}
publicdoublegetArea(){
doubles=(la+lb+lc)/2.0;
returnMath.sqrt(s*(s-la)*(s-lb)*(s-lc));
}
}
试题一
(1)i:
1,1,8
(2)1→sw
(3)0→bit[i]
(4)nop,或空操作
(5)1→bit[i]
试题二
(1)j%2,及其等价形式
(