一起答

2011年程序员考试考前密卷(六)-下午试题

  • 卷面总分:75分
  • 浏览次数:0
  • 测试费用:免费
  • 答案解析:是
  • 练习次数:28次
  • 作答时间:150分钟
试卷简介
2011年程序员考试考前密卷(六)-下午试题:1.2011年程序员考试全真模拟试卷-下午试题,考前复习的好帮手!2. 每道题都配有答案解析,强化复习效果
部分试题预览
  1. ●试题八

    阅读以下说明和Java代码,将解答写入答题纸的对应栏内。

    【说明】

    下面的程序是从命令行输入3个数传递到public static void main(String args[])方法中(如java IsTriangle 3 4 5),并判断这3个数能否构成三角形的3条边,并显示相应的结果。请在程序的每条横线处填入适当的语句,使程序的功能完整。

    注意:请勿改动main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。

    public class IsTriangle{

    public static void main(String args[]){

    int a[]=new (1) [args. (2) ];

    for(int i=0;i<3; (3) )

    {

    a[i]= (4) 

    }

    if( (5) )

    System.out.println(a[0]+ ","+a[1]+ ","+a[2]"能构成三角形的3条边");

    else

    System.out.println(a[0]+ ","+a[1]+ ","+a[2]"不能构成三角形的3条边");

    }

    }

  2. ●试题六

    阅读以下应用说明及Visual Basic部分程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    单击窗体上的"测试"(cmdTest)按钮,出现一个输入框,要求输入一串字符,将该字符串中的非字母字符删除后,显示在窗体中的一个文本框(txtShow)中。

    【程序代码】

    Private Sub cmdTest_Click()

    Dim strT1,strT2 As String

    Dim strCh As (1) 

    Dim intL As Integer

    Dim intI As Integer

    strT1= (2) ("请输入一串字符","字符串输入")

    intL= (3) 

    strT2=″″

    For intI=l To intL

    strCh=Mid(strT1,intI,1)

    If(strCh>"A"And (4) ) Or (strCh>"a" And suCh<"z")Then

    strT2=strT2+strCh

    End If

    Next intI

    txtShow.Text= (5) 

    End sub

  3. ●试题七

    阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    以下程序的功能是设计一个栈类stack,并建立一个整数栈。

    【程序】

     #include

     #include

       B.h>

    const int Max=20;∥栈大小

    template

    class stack{∥栈元素数组

    T s[Max];∥栈顶下标

    int top;

    public:

    stack()

    {

    top=-1;∥栈顶初始化为-1

    }

    void push(const T&item);∥item入栈

    T pop();∥出栈

    int stackempty()const;∥判断栈是否为空

    };

    template

    void stack::push(const T&item)

    {

    if(top== (1) )

    {

    cout<<"栈满溢出"<

    exit (1) ;

    }

    top++;

    s[top]=item;

    }

    template

    T stack::pop()

    {

    T temp;

    if(top== (2) )

    {

    cout<<″栈为空,不能出栈操作″<

    exit (1) ;

    }

    temp=s[top];

    top--;

    return temp;

    }

    template

    int stack::stackempty()const

    {

    return top==-1;

    }

    void main()

    {

    stackst;

    int a[]={1,2,3,4,5 };

    cout<<"整数栈"<

    cout<<"入栈序列:"<

    for(int i=0;i<4;i++)

    {

    cout<[i]<<" ";

     (3) ;

    }

    cout<

    while( (4) )

    cout<< (5) <<" ";

    cout<

    }

  4. ●试题五

    阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    本应用程序的运行窗口如图2所示。

    窗口中的3个文本框和两个按钮名称分别为Txt_salary、Txt_base、Txt_tax、Cmd_compute和Cmd_quit。运行时,文本框Txt_base中存放的是免税金额基数(应扣除的基本费用)。当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击"计算"按钮Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。

    个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为800元,税率如表1所示。

    设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额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元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。

    在开发过程中,需要编写的程序代码如下;

    【程序】

    Option Base 0

    Private Sub Cmd_compute_Click()

    Dim paylevel,taxPrate

    paylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,1000001)

    taxPrate=Array(5,10,15,20,25,30,35,40,45)

    K= (1) 

    S=0

    If(K>0)Then

    For j=1 To 9

    If (2) Then

    S=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100

    Else

    S=S+ (3) *taxPrate(j-1)/100

    Exit For

    End If

    Next j

    Ent If

     (4) =Str$(S)

    End Sub

    Private Sub Cmd_quit_Click()

    End

    End Sub

    Private Sub Form_Load()

    Txt_tax.Text=″″

    Txt_salary.Text=″″

    Txt_base.Text=800

    Txt_tax.Locked=True

    Txt_base.Enabled= (5) 

    End Sub

  5. ●试题四

    阅读下列程序说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    本程序从若干个原始文件合并成的合并文件中恢复出其中一个或全部原始文件。所有文件均作为二进制文件进行处理。合并文件中先顺序存储各原始文件,然后顺序存储各原始文件的控制信息,即文件名、文件长度和在合并文件中的位置(偏移量)。其结构为:

    typedef struct{char fname[256]/*原始文件名*/

    long length;/*原始文件长度(字节数)*/

    long offset;/*原始文件在合并文件中的位置(偏移量)*/

    }FileInfo;

    在合并文件最后存储如下一个特殊的标志信息作为合并文件的结束标记:

    FileInfo EndF1ag={"Combined File",0,_offset};

    其中_offset是第一个原始文件的控制信息在合并文件中的位置(偏移量)。

    启动本程序的命令行的格式是:

    程序名合并文件名[原始文件名]

    如果不指定原始文件名,默认恢复合并文件中的所有原始文件。

    程序中涉及的部分文件操作的库函数简要说明如下:

    int fread (void *buffer,int size,int count,FILE *fbin):从二进制文件流fbin中读取count块长度为size字节的数据块到buffer指向的存储区。返回值为实际读取的数据块数。

    int fwrite(void *buffer,int size,int count,FILE *fbin):各参数和返回值的意义与fread相同,但对文件进行写操作。

    int fseek(FILE *fbin,long offset,int position):将文件流fbin的读/写位置以position为基准移动offset字节。position的值可以是SEEK_SET(文件头),SEEK_CUR(当前位置),SEEK_END(文件尾);offset为正,表示向文件尾方向移动,为负表示向文件头方向移动,为零表示到基准位置。

    long ftell(FILE *fbin):返回文件流fbin的当前读/写位置(相对于文件头的偏移量)。上述偏移量均以字节为单位,即偏移字节数。

    【程序】

    #include

    #include

    typedef struct{char fname[256];long length;long offset;

    }FileInfo;

    void copyfile(FILE *fin,FILE *fout,int fsize)

    {char buf[1024];int siz=1024;

    while(fsize!=0){/*每次复制siz个字节,直至复制完fsize个字节*/

    if(siz >fsize) (1) ;

    fread(buf,1,siz,fin);fwrite(buf,1,siz,fout);

    fsize= (2) ;}

    }

    int dofile(FILE *fin,FileInfo *inp)

    { long offset;

    FILE *fout;

    if((fout=fopen(inp->fname,"wb"))==NULL){

    printf("创建文件错误:%s\n",inp->fname);

    return 1;

    }

    offset= (3) ;/*保留合并文件读/写位置*/

    fseek( (4) );/*定位于被恢复文件首*/

    copyfile(fin,fout,inp->length);

    fclose(fout);

    printf("\n---文件名:%\n文件长:%1d.

    \n",inp->fname,inp->length);

     (5) ;/*恢复合并文件读/写位置*/

    return 0;

    }

    int main(int argc,char *argv[])

    {FileInfo finfo;

    char fname[256];FILE *fcmbn;

    if(argc<2){printf("输入合并文件名:");scanf("%s",fname);}

    else strcpy(fname,argv[1]);

    if((fcmbn=fopen(fname,"rb"))==NULL){

    printf("文件打开错误:%s\n",fname);return 1;

    }

    fseek(fcmbn,-sizeof(FileInfo),SEEK_END);/*定位于合并文件末尾的标志信息*/

    fread(&finfo,1,sizeof(FileInfo),fcmbn);

    if(finfo.length!=0 || strcmp(finfo.fnane,"CombinedFile")){

    printf("指定的文件不是合法的合并文件\n");

    fclose(fcmbn);return 2;

    }

    fseek(fcmbn,finfo.offset,SEEK_SET);/*定位于首个原始文件的控制信息*/

    for(;;){/*恢复一个(argc>2)或全部(argc=2)原始文件*/

    fread(&finfo,1,sizeof(FileInfo),fcmbn);

    if(finfo.length==0)break;

    if(argc>2 && strcmp(finfo.fname,argv[2]))continue;

    if(dofile(fcmbn,&finfo)!=0)break;

    }

    fcolse(fcmbn);return 0;

    }

  6. ●试题三

    阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    函数diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求L3中的所有整数都是L1,并且不是L2中的整数,还要求L3中的所有整数都两两不等。

    【函数】

    #include<mallo

       C.h>

    typedef struct node{

    int d;

    struct node *next

    }Node;

    void diff(Node *A,Node *B,Node **r)

    {

    int lastnum;

    Node*p;

    *r=NULL;

    if(!A)return;

    while( (1) )

    if(A->dd)

    {

    lastnum=A->d;

    p=(Node*)malloc(sizeof(Node));

    p->d=lastnum;

    p->next=*r; (2) ;

    do

    A=A->next;

    while( (3)  );

    }

    else if(A->d>B->d)

    B=B->next;

    else{

     (4) ;

    lastnum=A->d;

    while (A && A->d==lastnum)A=A->next;

    }

    while(A)

    {

    lastnum=A->d;

    p=(Node*)malloc(sizeof(Node));

    p->d=lastnum;

     (5) ;

    *r=p;

    while (A && A->d==lastnum) A=A->next;

    }

    }

  7. ●试题二

    阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    该程序运行后,输出下面的数字金字塔

    【程序】

    #include

    main ()

    {char max,next;

    int i;

    for(max=′1′;max<=′9′;max++)

    {for(i=1;i<=20- (1) ;++i)

    printf(" ");

    for(next= (2) ;next<= (3) ;next++)

    printf("%c",next);

    for(next= (4) ;next>= (5) ;next--)

    printf("%c",next);

    printf("\n");

    }

    }

  8. ●试题一

    阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

    【函数1.1说明】

    函数strcpy(char*to,char*from)将字符串from复制到字符串to。

    【函数1.1】

    void strcpy(char*to,char*from)

    {while( (   1 ) );}

    【函数1.2说明】

    函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

    【函数1.2】

    void merge(int a[ ],int n,int b[ ],int m,int *c)

    { int i,j;

    for(i=j=0;i<n && j<m;)

    *c++=a[i]<b[j]? a[i++]:b[j++];

    while( (2) )*c++=a[i++];

    while( (3) )*c++=b[j++];

    }

    【函数1.3说明】

    递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。

    【函数1.3】

    int sum(int a[ ],int n)

    { if(n>0)return (4) ;

    else (5) ;

    }