2016年計算機軟件水平考試程序員練習(xí)試題1

字號:

●試題一
    閱讀下列說明和流程圖,將應(yīng)填入(n)的語句寫在答題紙的對應(yīng)欄內(nèi)。
    


    【流程圖】
    圖1
    下面的流程圖描述了對16位二進制整數(shù)求補的算法。計算過程是:從二進制數(shù)的低位(最右位)開始,依次向高位逐位查看,直到首次遇到"1"時,停止查看。然后,對該"1"位左面的更高位(如果有的話),逐位求反,所得的結(jié)果就是對原二進制數(shù)求補的結(jié)果。
    例如:對二進制整數(shù)10111001 10101000求補的結(jié)果是01000110 01011000。
    設(shè)16位二進制整數(shù)中的各位,從低位到高位,依次存放在整型數(shù)組BIT的BIT[1]~BIT[16]中。例如,二進制整數(shù)10111001 10101000存放在數(shù)組BIT后,就有BIT1[1]=0,BIT[2]=0,……,BIT[15]=0,BIT[16]=1。
    流程圖(如圖1所示)中 (1) 處按"循環(huán)變量名:循環(huán)初值,增量,循環(huán)終值"格式描述。若流程圖中存在空操作,則用NOP表示。
    ●試題二
    閱讀下列程序說明和C程序,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
    【說明】
    程序8用于計算某公司每個職工應(yīng)繳納的個人所得稅額和全體職工繳納的個人所得稅總額,職工的當(dāng)月收入(工資或薪金)通過鍵盤輸入,每次輸入一個職工的工號和工資(或薪金)。由于該公司的工資或薪金是不定時發(fā)放的,所以輸入過程中每個職工的收入會出現(xiàn)多次輸入,整個輸入以工號小于等于0結(jié)束。
    假設(shè)個人所得稅法規(guī)定:個人收入所得,按月計稅,以每月收入總額減除免稅金額800元后的余額作為該月的月應(yīng)納稅所得額。適用稅率如表2所示。
    


    上表表明,個人收入所得稅是按照超額累進的稅率來征收的。
    設(shè)一個人的月應(yīng)納稅所得額為K(元),用下面的公式計算其應(yīng)繳納的個人所得稅額S(元);
    若0<K≤500,則S=K×5%;
    若500<K≤2000,則S=500×5%+(K-500)×10%;
    若2000<K≤5000,則S=500×5%+1500×10%+(K-2000)×15%;
    若5000<K≤20 000,則S=500×5%+1500×10%+3000×15%+(K-5000)×20%;
    


    


    例如,某人某月收入總額為4100元,減去800元后,應(yīng)納稅所得額為3300元,其應(yīng)繳納的個人所得稅額為500*5%+1500*10%+1300*15%=370元。
    【程序】
    # include
    # define MaxNum50
    # define BASE 800/*免稅金額基數(shù)*/
    int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,1000001};
    int taxPrate[]={5,10,15,20,25,30,35,40,45};/*稅率表*/
    typedef struct{
    int Id;/*職工的工號*/
    long Salary;/*職工的工資*/
    }Info;
    /*查找工號為Id的職工在數(shù)組employee中的下標(biāo),返回值為0表示沒有*/
    int find (int Id ,Info employee[],int m){
    int j;
    employee[0].Id=Id;
    for(j=m; (1) ;j--);
    return j;
    }
    void main(void)
    {Info employee[MaxNum+1];
    long Wage;
    double sum=0,K,S;
    int i,j,N=0,Code;
    scanf(″%d %ld″,&Code,&Wage);/*讀入職工號、工資或薪金*/
    while(Code>0){
    i=find(Code,empolyee,N);
    if(i>0)employee[i].Salary+=Wage;
    else{ (2) ;
    employee[N].Id=Code;employee[N].Salary=Wage;
    }
    scanf(″%d %ld″,&Code,&Wage);
    }
    for(i=1;i<=N;i++){
    K= (3) ;/*計算月應(yīng)納稅所得額*/
    S=0;/*月應(yīng)納稅額賦初值*/
    if(K>0){
    for(j=1;j<=9;j++)
    if (4) /*月應(yīng)納稅所得額超過第j級*/
    S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;
    else{S=S+ (5) *taxPrate[j-1]/100;break;}
    }
    printf(″職工%d應(yīng)繳納的個人所得稅額:%10.21f\n″,employee[i].Id,S);
    sum+=S;
     }
     printf(″全體職工個人所得稅總額:%10.21f\n″,sum);
    }
    
    
    


    


    

●試題三
    閱讀下列程序說明和C代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
    【說明】
    下面的程序功能的功能是以行為單位對字符串按下面的條件進行排序。排序條件為:從字符串中間一分為二,右邊部分按字符的ASCⅡ值降序排序,排序后左邊部分與右邊部分進行交換。如果原字符串長度為奇數(shù),則最中間的字符不參加排序,字符仍放在原位置上
    例如:位置:0 1 2 3 4 5 6 7
    源字符串:h g f e a b c d
    則處理后字符串:d c b a h g f e
    函數(shù)ReadDat()實現(xiàn)從文件in.dat中讀取數(shù)據(jù)(每行字符串長度均小于80),函數(shù)WriteDat()把結(jié)果dat輸出到文件out.dat中。
    【程序】
    #include
    #include
    #include
    char dat[20][80];
    void jsSort()
    {
    int i,j,k,strl;
    char ch;
    for(i=0;i<20;i++)
    {
    strl=strlen(dat[i]);
    for(j= (1) ;j
    for(k=j+1;k<strl;k++)
    if( (2) )
    {
    ch=dat[i][j];
    dat[i][j]=dat[i][k];
    dat[i][k]=ch;
    }
    for(j=0; (3) j++)/*前后兩部分進行交換*/
    {
    ch=dat[i][j];
    dat[i][j]=dat[i][(strl+1)/2+j];
    dat[i][(strl+1)/2+j]=ch;
    }
    }
    }
    void main()
    {
    readDat();
    jsSort();
    writeDat();
    }
    readDat()
    {
    FILE*in;
    int i=0;
    char*p;
     (4) ;
    while(i<20 && fgets(dat[i],80,in)!=NULL)
    {
    p=strchr(dat[i],"\n");
    if(p)*p=0;
    i++;
    }
    fclose(in);
    }
    writeDat()
    {
    FILE*out;
    int i;
    clrscr();
    out=fopen("out.dat","W");
    for(i=0;i<20;i++)
    {
    printf("%s\n",dat[i]);
    printf( (5) );
    }
    fclose(out);
    }
    


    


    


    
    

●試題四
    閱讀下列函數(shù)說明和C代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
    【說明4.1】
    假設(shè)兩個隊列共享一個循環(huán)向量空間(如圖1-2所示),其類型Queue2定義如下:
    typedef struct{
    DateType data [MaxSize];
    int front[2],rear[2];
    }Queue2;
    對于i=0或1,front[i]和rear[i]分別為第i個隊列的頭指針和尾指針。函數(shù)EnQueue(Queue2*Q,int i,DateType x)的功能是實現(xiàn)第i個隊列的入隊操作。
    【函數(shù)4.1】
    int EnQueue(Queue2*Q,int i,DateType x)
    {∥若第i個隊列不滿,則元素x入隊列,并返回1;否則,返回0
    if(i<0‖i>1)return 0;
    if(Q->rear[i]==Q->front[ (1) ]
    return 0;
    Q->data[ (2) ]=x;
    Q->rear[i]=[ (3) ];
    return 1;
    }
    【說明4.2】
    函數(shù)BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)的功能是遞歸法判斷兩棵二叉樹是否相等,若相等則返回1,否則返回0。函數(shù)中參數(shù)T1和T2分別為指向這兩棵二叉樹根結(jié)點的指針。當(dāng)兩棵樹的結(jié)構(gòu)完全相同,并且對應(yīng)結(jié)點的值也相同時才被認(rèn)為相等。
    已知二叉樹中的結(jié)點類型BinTreeNode定義為:
    struct BinTreeNode{
    char data;
    BinTreeNode*left,*right;
    };
    其中data為結(jié)點值域,left和right分別為指向左、右子女結(jié)點的指針域,
    【函數(shù)4.2】
    int BTreeEqual(BinTreeNode*T1,BinTreeNode*T2)
    {
    if(T1==NULL && T2==NULL)return 1;∥若兩棵樹均為空,則相等
    else if( (4) )return 0;∥若一棵為空一棵不為空,則不等
    else if( (5) )return 1;∥若根結(jié)點值相等并且左、右子樹
    ∥也相等,則兩棵樹相等,否則不等
    else return 0;
    }
    ●試題五
    閱讀以下應(yīng)用說明及Visual Basic程序代碼,將應(yīng)填入(n)處的字句寫在答題紙的對應(yīng)欄內(nèi)。
    【應(yīng)用說明5.1】
    本應(yīng)用程序的窗體中有一個下拉式列表框(名稱為Combo1)和兩個文本框(名稱分別為Txt1和Txt2)。運行時,用戶從Combol的列表中進行選擇,程序就會將選中條目的內(nèi)容以及編號(從0開始)分別在文本框Txt1和Txt2中顯示出來。
    【程序代碼5.1】
    Private Sub Combol_Click()
    Txt1.Text=Combol. (1)
    Txt2.Text=Combol. (2)
    End Sub
    (注:可供 (2) 處選擇的選項:List,Index,ListIndex,ListCount,Number)
    【應(yīng)用說明5.2】
    本應(yīng)用程序的運行窗口如圖2所示。
    


    當(dāng)用戶在輸入框(名為TxtIn)中輸入數(shù)值數(shù)據(jù),并從下拉式列表框(名為CmbOp)中選擇所需的運算后。輸出框(名為TxtOut)中就會顯示運算的結(jié)果。用戶單擊"清除"按鈕(名為CmdClear)后,輸入框和輸出框都清空。
    開發(fā)該應(yīng)用的部分程序代碼如下:
    


    【程序代碼5.2】
    Private Sub CmbOp_Click()
    Dim DataIn As Double,DataOut as Double
    DataIn= (3)
    Select Case (4)
    Case ″取整數(shù)部分″
    DataOut=Int(DataIn)
    Case ″求平方根″
    If DataIn<0 Then
    MagBox ″負(fù)數(shù)不能開平方!″
    Else
    DataOut=Sqr(DataIn)
    End If
    Case ″取絕對值″
    DataOut=Abs(DataIn)
     (5)
    TxtOut.Text=str$(DataOut)
    End Sub