試題五(15分,每空3分)
閱讀下列說明及Visual Basic程序代碼,將應(yīng)填入__(n)__的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【應(yīng)用說明]
某單位舉辦了一場知識(shí)競賽,參加競賽的選手為300名,依次從1~300進(jìn)行編號(hào)。競賽時(shí)間為9:00~ 11:00。8道競賽題目依次從‘A’~‘H’編號(hào),選手可按任意次序答題,每完成一道題目,可立即提交答案。若答題正確(Y),則選擇其他題目進(jìn)行解答,否則,可繼續(xù)做該題目或選擇其他題目進(jìn)行解答,直至競賽結(jié)束。
選手提交答案的情況及判定結(jié)果由專人即時(shí)錄入,錄入數(shù)據(jù)包括提交答案的時(shí)間、選手編號(hào)、題目編號(hào)(A~H)、是否正確(Y/N)。
對(duì)競賽情況進(jìn)行統(tǒng)計(jì)和排名的規(guī)則如下:
1.若選手X在競賽時(shí)提交的題目P解答正確,則解答該題目所用時(shí)間如下計(jì)算:
解答題目P的用時(shí)=提交題目P正確的時(shí)間-競賽的開始時(shí)間+罰時(shí)
罰時(shí)=提交題目P錯(cuò)誤解答的次數(shù)×20
例如:表1中14號(hào)選手在10:27提交了題目A的正確解答,因此該選手正確解答該題目所用時(shí)間為87分鐘,由于他在09:37和09:52兩次提交了題目A的錯(cuò)誤解答,因此罰時(shí)為2×20=40分鐘,所以14號(hào)選手解答題目A的用時(shí)=87+40=127(分鐘)。
2.已經(jīng)提交正確答案的題目再次提交時(shí)不再計(jì)算。
3.競賽結(jié)束時(shí),選手的總用時(shí)為所有解答正確的題目用時(shí)累加所得,解答不正確的題目不計(jì)時(shí)。
4.排名時(shí),完成題目數(shù)量多者排名靠前;若完成的題目數(shù)相同,則用時(shí)少者排名靠前;若完成的題目數(shù)和所用時(shí)間均相等,則名次相同;完成題目數(shù)為0的選手不參加排名。
本應(yīng)用程序的運(yùn)行窗口如下圖所示:
窗口中的兩個(gè)文本框?yàn)門xt_time和Txt_player,分別用于錄入提交答案的時(shí)間和選手編號(hào)。組合列表框Combol提供題目編號(hào)(A~H),錄入時(shí)從中選擇。檢查框Chk_yn用于輸入解答是否正確信息。當(dāng)單擊“確定”按鈕(Cmd_comfirm)時(shí),錄入的提交信息加入列表框List1中,排名情況在列表框List2輸出。單擊“關(guān)閉”按鈕時(shí)退出應(yīng)用程序。
在開發(fā)過程中,需要編寫的部分程序代碼如下:
【程序代碼]
Private Type Info
No as integer ’選手編號(hào)
Num as Integer ’完成題目數(shù)量
Time as integer ’完成題目的總用時(shí)
D(8) as integer ’d用于記錄提交第i個(gè)題目錯(cuò)誤答案的次數(shù)
A(8) as Boolean ’a用于記錄第i個(gè)題目是否已經(jīng)提交正確答案
End type
Dim R(301) as info ’R[j]用于統(tǒng)計(jì)編號(hào)為j的選手提交答案的情況
Dim MaxIndex as Integer ’MaxIndex記錄提交答案的選手中編號(hào)最大者
Private Sub From_Load ()
For i=1 to 8
Combo1.additem chr(__(1)__)
Next
Combol.text = combol.list(0): txt_time .text=””: txt_player.text=””
For i=1 to 300
R(i).num=0: R(i).time=0: R(i).no=i
For j=1 to 8
R(i).d(j)=0: R(i).a(j)=false
Next j,i
End Sub
Private sub cmd_confirm_click()
Dim h, m,k, time as integer,ch ,pass,s1 as string
K= Instr(txt _time .text,”:”):if k<2 then goto error1
H=val(left(txt_time.text,k-1)):m=val(mid(txt_time.text,k+1))
If h>11 or h=11 and m>0 or m>=60 then goto error1
Time =__(2)__ ’計(jì)算答題時(shí)間,以分鐘為單位
If txt_plater.text<1 or txt_player .text>300 then goto error1
Ch= __(3)__
Pass=IIf(chk_yn.__(4)__ =0,”N”,”Y”)
S1=txt_time.text+space(4)+txt_player.text
S1=s1+space(10-len(txt_player.text))+ch+space(8)+pass
List1.additem s1
K= val(txt_player.text) 'k為選手編號(hào)
R(k).no=k '編號(hào)為k的選手的提交信息記錄在下標(biāo)為k的數(shù)組元素中
If k >maxindex then maxindex=k
M = asc(ch)-asc(“a”)
If pass <>”Y” then '編號(hào)為k的選手提交第m個(gè)題目的解答不正確
R(k).d(m)=R(k).d(m)+1
Else if R(k).a(m)<>true then '已經(jīng)提交正確的題目的解答不再計(jì)算
R(k).a(m)=true:R(k).num=R(k).num+1
R(k).time=R(k).time + __(5)__
Call statistic '調(diào)用過程statistic進(jìn)行實(shí)時(shí)排名和輸出
End if
Exit sub
Error1:msgbox”錄入信息有錯(cuò)誤!”,vbOKOnly
End sub
從下列的3道試題(試題六至試題八)中任選1道解答。如果解答的試題數(shù)超過1道,則題號(hào)小的1道解答有效。 |
試題六(15分,每空3分)
閱讀以下說明和C++程序,將應(yīng)填入 __(n)__處的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)
【說明】
以下程序的功能是計(jì)算三角形、矩形和正方形的面積并輸出。
程序由4個(gè)類組成:類Triangle,Rectangle和Square分別表示三角形、矩形和正方形;抽象類Finure提供了一個(gè)純虛擬函數(shù)getArea(),作為計(jì)算上述三種圖形面積的通用接口。
【C++程序】
#include<iostream.h>
#include<math.h>
class Figure{
public:
virtual double getArea()=0; //純虛擬函數(shù)
};
class Rectangle:__(1)__ {
protected:
double height;
double width;
public:
Rectangle(){};
Rectangle(double height,double width){
This->height=height;
This->width=width;
}
double getarea(){
return __(2)__ ;
}
};
class Square:__(3)__ {
public:
square(double width){
__(4)__ ;
}
};
class triangle:__(5)__ {
double la;
double lb;
double lc;
public:
triangle(double la ,double lb,double lc){
this ->la=la; this->lb; this->lc;
}
double getArea(){
double s=(la +lb+lc)/2.0;
return sqrt(s*(s-la)**(s-lb) *(s-lc));
}
};
viod main(){
figure* figures[3]={
new triangle(2,3,3),new Rectangle(5,8),new Square(5)};
for (int i=0;i<3;i++){
cout<<”figures[“<<i<<”]area= “<<(figures)->getarea()<<endl;
}
}
};