歷年計(jì)算機(jī)軟考程序員部分真題

字號(hào):

試題一(15分,每空3分)
    閱讀下列說明和流程圖,將應(yīng)填入__(n)__的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
    【流程圖說明]
    下面的流程圖描述了對(duì)8位二進(jìn)制整數(shù)求補(bǔ)的算法。
    該算法的計(jì)算過程如下:從二進(jìn)制數(shù)的低位(最右位)開始,依次向高位逐位查看,直到首次遇到“1”時(shí),停止查看。然后,對(duì)該“1”位左面的更高位(如果有的話),逐位求反,所得的結(jié)果就是對(duì)原二進(jìn)制數(shù)求補(bǔ)的結(jié)果。
    例如:對(duì)二進(jìn)制整數(shù)10101000求補(bǔ)的結(jié)果時(shí)01011000。
    設(shè)8位二進(jìn)制整數(shù)中的各位,從低位到高位,依次存放在整型數(shù)組BIT的BIT[1]~BIT[8]中。例如,二進(jìn)制整數(shù)10101000存放在數(shù)組BIT后,就有BIT[1]=0,BIT[2]=0,…,BIT[7]=0,BIT[8]=1。若流程圖中存在空操作,則用NOP表示。
    流程圖中__(1)__處按“循環(huán)變量名:循環(huán)初值,增量,循環(huán)終值”格式描述。
    試題二(15分,每空3分)
    閱讀下列說明和流程圖,將應(yīng)填入__(n)__的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
    【函數(shù)說明】
    函數(shù)sort(int a[],int n)的功能時(shí)對(duì)數(shù)組a中的a[0]~a[n-1]這n個(gè)元素進(jìn)行排序。排序過程如下:第一趟對(duì)所有的偶數(shù)下標(biāo)p,比較a和a[p+1],若a>a[p+1],則將兩者交換;第二趟對(duì)所有的奇數(shù)下標(biāo)q,比較a[q]和a[q+1],若a[q]>a[q+1],則將兩者交換;第三趟對(duì)偶數(shù)下標(biāo),第四趟對(duì)奇數(shù)下標(biāo),…,依次類推,直至整個(gè)數(shù)組元素有序排列為止。
    【函數(shù)]
    void sort (int a[],int n)
    {
       int I ,j,t,tag=1;
    for(j=0;j<n;j++= {
     for (I=__(1)__;i<n-1;__(2)__= {
        if (a>a[I+1]) {t=a;a=a[I+1];a[I+1]=t;tag=0;}
     }
     tag++
     if (__(3)__) break;
    }
    }
    對(duì)包含十個(gè)元素的數(shù)組a采用上述方法排序時(shí),元素間的比較次數(shù)最少為__(4)__次,最多為__(5)__次。
    試題三(15分,每空3分)
    閱讀下列說明和流程圖,將應(yīng)填入__(n)__的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
    【函數(shù)說明]
    函數(shù)movetoend(LinkedList La int i)的功能時(shí):將線性表示A的第I個(gè)元素移到表尾。若移動(dòng)成功,則返回0,否則返回-1。線性表A采用帶頭結(jié)點(diǎn)的單鏈表表示,La為表A的頭指針,如下圖所示。
    鏈表結(jié)點(diǎn)的類型定義為:
    typedef struct node {
    int key;
    struct node *next;
    }*LinkedList
    【函數(shù)]
    int movetoend(LinkedList La,int i)
    {
    LinkedList p ,q,prep;
    Int k=1;
    P=La->next;prep=La;
    While(__(1)__){      /*查找第I個(gè)元素并使指針p指向該結(jié)點(diǎn)*/
     Prep=p; p=->next;k++
    }
    if (!p||k>i)return -1;
    if (__(2)__)        /*第I個(gè)元素結(jié)點(diǎn)已經(jīng)是表尾結(jié)點(diǎn),則無需移動(dòng)*/
    return 0;
    q=p;
    while(__(3)__)q=q-﹥next; /*查找表尾并使q指向表尾結(jié)點(diǎn)*/
    __(4)__=p->next;
    p->next=NULL;
    __(5)__;
    return 0;
    }
    從下列的2道試題(試題四至試題五)中任選1道解答。如果解答的試題數(shù)超過1道,則題號(hào)小的1道解答有效。
    試題四(15分,每空3分)
    閱讀下列說明和流程圖,將應(yīng)填入__(n)__的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
    【說明]
    某單位舉辦了一場知識(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ù)如下表1所示,對(duì)競賽情況進(jìn)行統(tǒng)計(jì)和排名的結(jié)果如表2所示。
    表1:輸入數(shù)據(jù)
    提交時(shí)間選手編號(hào)題目編號(hào)是否正確
    09:3714AN
    09:508AY
    09:519BN
    09:5214AN
    10:145AN
    10:169BN
    10:235AY
    10:238BY
    10:2714AY
    表2:輸出結(jié)果
    名次選手編號(hào)完成題目數(shù)量總用時(shí)(分鐘)
    182133
    251103
    3141127
    統(tǒng)計(jì)和排名的規(guī)則如下:
    1. 若選手X在競賽時(shí)提交的題目P解答正確,2. 則解答該題目所用時(shí)間如下計(jì)算:
    解答題目P的用時(shí)=提交題目P正確的時(shí)間-競賽的開始時(shí)間+罰時(shí)
    罰時(shí)=提交題目P錯(cuò)誤解答的次數(shù)×20
    例如:表1中14號(hào)選手在10:27提交了題目A的正確解答,因此該選手正確解答該題目所用時(shí)間為87分鐘,由于之前的兩次提交錯(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的選手不參加排名。
    函數(shù)void Statistic()的功能是:讀取輸入數(shù)據(jù),進(jìn)行統(tǒng)計(jì)、排名并輸出結(jié)果。
    #define MAXN 300
    typedef struct {
    int no; /*選手編號(hào)*/
    int num; /*完成的題目數(shù)量*/
    int time; /*完成題目的總用時(shí)*/
    int d[8]; /*d用于記錄提交第I個(gè)題目錯(cuò)誤答案的次數(shù)*/
    int a[8]; /*a用于記錄第I個(gè)題目是否已經(jīng)提交正確答案*/
    }Info;
    【函數(shù)】
    void Statistic () {
    char ch,pass;
    int I,j,k,h,m,t,time,MaxIndex;
    Info R[MAXN+1];
    For(I=1;I<=MAXN;I++){ /*數(shù)組R的元素置初值0*/
     R no=0; R num=0; R time=0;
     For(j=0;j<8;j++){R.d[j]=0;R.a[j]=0;}
    }/*for*/
    MaxIndex=0;
    While(1) {
     /*錄入一名選手提交答案的信息(小時(shí):分鐘,選手編號(hào),題目號(hào),是否正確)*/
     scanf(”%d:%d,%d,%c”,&h,&m,&k,&ch,&pass);
     if (h= =0) break;
     R[k] no=k;
     Time=__(1)__;
     If (isupper(ch)) ch=’a’+ch-‘A’;
     If (pass !=’Y’&& pass !=’Y’) { R[k] d[ch-‘a(chǎn)’]++;continue;}
     If (R[k] a[ch-‘a(chǎn)’]= =1) continue;
     R[k] a[ch-‘a(chǎn)’]=1;
     R[k] num++;
     R[k] time+=__(2)__;
     if (k>MaxIndex) MaxIndex=k;
    }     /*while*/
    for (I=1;I     for(t=I,j=I+1;j<=MaxIndex;j++)
     if (R[t] num     if(__(4)__) { R[0]=R[t];R[t]=R;R=R[0];}
    }  /*for*/
    k=1;R[0]=R[1];
    for(I=1;I<=MaxIndex;I++) /*輸出排名情況*/
    if(R[i].num>0){
     if (R num!=R[0] num || R time!=R[0] time) k++;
     R[0]=__(5)__;
     Printf(“%d: %3d %4d %5d ”,k,R no,R num R time);
    } /*if*/
    } /*Statistic*
    試題五(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
     #include
    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[“<getarea()<     }
    }
     };
     試題八(15分,每空3分)
    閱讀以下說明和Java程序,將應(yīng)填入__(n)__處的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)
    【說明】
    以下程序的功能時(shí)三角形、矩形和正方形的面積輸出。
    程序由5個(gè)類組成:areatest是主類,類Triangle,Rectangle和Square分別表示三角形、矩形和正方形,抽象類Figure提供了一個(gè)計(jì)算面積的抽象方法。
    【程序】
    public class areatest{
    public static viod main(string args[]){
     Figure[]Figures={
    New Triangle(2,3,3),new rectangle(5,8),new square(5)
     };
     for (int i= 0;i< Figures.length;i++){
    system.out.println(Figures+”area=”+ Figures.getarea());
     }
    }
    }
    public abstract class figure{
    public abstract double getarea();
    }
    public class rectangle extends __(1)__ {
    double height;
    double width;
    public rectangle (double height, double width){
     this.height= height;
     this. width = width;
    }
    public string tostring(){
     return”rectangle: height=”+ height +”, width=”+ width +”:”;
    }
    public double getarea(){
     return __(2)__
    }
    }
    public class square exends __(3)__
    {
    public square(double width) {
     __(4)__ ;
    }
    public string tostring(){
     return” square:width=”+width”:”;
    }
    }
    public class rectangle entend __(5)__
    {
    double la;
    double lb;
    double lc;
    public triangle(double la ,double lb,double lc){
     this.la=la; this.lb=lb; this.lc=lc;
    }
    public string tostring(){
     return” triangle:sides=”+la+”, ”+lb+”, ”+lc+”:”;
    }
    public double get area(){
     double s=(la+lb+lc)/2.0;
     return math.sqrt(s*(s-la) *(s-lb) *(s-lc));
    }
    }