江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
江苏计算机等级vc++2008春试题

  第二部分Visual C++程序设计   

 

  一、选择题(用答题卡答题,答案依次填在答题号内)

  21•下列关于switch语句的描述中正确的是(21) 

    Aswitch语句中的default子句可以没有,也可以有多个

    Bswitch语句中的每个子句中必须有break语句

    cswitch语句中的default子句只能放在最后

    D.switch语句中的case子句后面的表达式只能是整型表达式

  22•下列函数原型说明中,错误的是  (22)    

    Aint &fl();             Bint f2(double =5);

    Cvoid f3(void (*p)());  Dint f4(int a=O,int b);

  23.设有说明语句;

    float y=5.16347;int x;

    则以下表达式中,可以实现将y中的数值保留小数点后两位,第三位四舍五入的表达式是

    A.y=(y*100+0.5)/100.0    B.x=y*100+0.5,y=x/100.0

  C.y=y*100+0.5/100.0      Dy=(y/100+0.5)*100.0

  24设有说明语句;

    char s[80]="Hello";int a[20]={1 2};

    下列选项中,存在语法错误的是  (24) 

    Acin>>s;    Bcout<<s;    Ccin>>a;  Dcout<<a;

  25•下列关于new运算符的叙述中不正确的是(25) 

    A•使用运算符new创建对象时必须定义初始值

    B•使用运算符new创建对象时会调用类的构造函数

    C•运算符new可以用来动态创建对象和对象数组

    2•使用new运算符创建的对象可以使用运算符delete撤销

  26•若有说明语句;

    int s[4][6],t[6][4],(*p)[6];

    则以下选项中正确的是  ( 26 ) 

    A.p=t   B.p=s  cp=s[0];    Dp=t[0];

  27.以下叙述中不正确的是  (27) 

    A•在函数内的复合语句中定义的变量在本函数范围内有效

    B•形式参数是局部变量

    C•在函数内定义的变量只在本函数范围内有效

    O•在不同函数中可以使用相同名字的变量

28•以下有关抽象类的叙述中不正确的是  (28) 

    A.抽象类至少含有一个纯虚函数

  B.抽象类至少含有一个没有函数体的虚函数      

  c.在抽象类的派生类中可以据供纯虚函数的实现代码 

  D.可以说明抽象类的对象

29.下列关于构造函数的描述中不正确的是

    A.构造函数可以设置缺省参数

    B.构造函数在定义类的对象时自动执行,但不用显示调用

    C.构造函数可以对静态数据成员进行初始化 

    D.构造函数可以重载

30.设有类定义:

    class B{

    public

       void G(float x=O){cout<<x<<endl;}

       void G(double x){cout<<x<<endl;}   

    }  r;

则以下选项中存在语法错误的是_____

A.r.G();    B.r.G(10);    C.r.G(3.14);   D.r.G(-1.0f);

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

•基本概念题(5)

1.在构造函数和析构函数中,可以定义为虚函数的是________

2 若有说明语句:

    float a[]={1,2,3,4,5}; int b=&a[3]-&a[0];

则执行以上语句后,b的值为_______

3.在C++中,重载赋值运算符"="只能用______函数实现,而重载插入运算符"<<"和提取

运算符">>"只能用_______函数实现

4.设e是表达式,其类型可以是:floatdoubleintcharenum,C++中规定,在开关语句

switch(e),e的值类型不能是________

  ●阅读程序题(13)   

  5[程序](2)

    #include <iostream.h>

    int fun(int);

    void main(void)

    {  int a=2;

       for(int i=O;i<3;i++) cout<<fun(a++)<<endl;

}

    int fun(int a)

    {int b=0;

    static int c=3;

    return(b++,c++,a+b+c);

    }

    程序输出的第二行是( )  ,第三行是(  ) 

  6[程序](2)

    #include<iostream.h>

    void ff(int &m,int &n)

    {int t=m+n;

    m=n;  n=t;

    }

    void main(void)

    {int a,b,i;

      for(a=b=i=1;i<=5;i++){

         ff(a,b);

         cout<<a<<'\t'<<b<<endl;

      } 

    }

    程序输出的第二行是( )  ,第四行是(  )

 7[程序](2)

    #include  <iostream.h>

    void f1(int n,int &i,char s[])

    {s[i]='0'+n%10;

     n=n/lO;    i++;

     if(n==0)s[i]=0;  else f1(n,i,s);

    }

    void f2(int n,int i,char s[])

    {if(n){

        int k;

        k=n%10

        f2(n/lO,i+1,S);

        s[i]='0'+k;  

      }

    }

    void main(void)

    {char s[20];

    int i=0;

    f1(24675,i,s);

    s[i]=0;

    cout<<"s="<<s<<end1;

    static char s1[20];

    f2(1357,0,s1);

    cout<<"s1="<<s1<<end1;

    }    '

  程序输出的第一行是(  )  ,第二行是(  )

8[程序](2)

    #include  <iostream.h>

    char *f(char *s1,char *s2)

    {char *p,*p1;

     int n=0;

    while(*(s1+n))n++;

    char *buf=new char[n+1];

    p=buf;p1=s1;

    while(*p++=*p1++);

    p=s1p1=s2;

    while(*p++=*p1++);

    cout<<buf<<endl;

    p--;p1=buf;

    whi1e(*p++=*p1++);

    de1ete []buf;

    return s1;

    }

    void main(void)

    {char s1[30]="about ",s2[]="time ";

    cout<<f(s1,s2)<<endl;

    }

    程序输出的第一行是______  ,第二行是_______

9[程序](3)

    #include<iostream.h>

    int fun(int x,int y)

    {  cout<<x<<'\t'<<y<<endl;

       return(x>y?x:y);

    }

    void main(void)

    {int a=3,b=6,k=4,m;

    m=fun(fun(a,b),fun(b,k));

    cout<<"m="<<m<<endl;

    }

  程序输出的第一行是_____,第三行是______,第四行是________

lO[程序](2)

    #include <iostream.h>

    class Base

    {public:

      void virtual f(){cout<<"Base::f()"<<endl;}

      void virtual g(){cout<<"Base::g()"<<endl;}

    };

    class A:public Base

    {public

     void f(int a=O){cout<<"A::f()"<<endl;}

    };

    class B:public A

    { void f(){cout<<"B::f()"<<endl;}

      void g(){cout<<"B::g()"<<endl;}

    };

    void main(void)

    {  B b;  

       Base *p=&b;

       A *q=&b;

       P->f();p->g();

       q->f();q->g();

    }

程序输出的第一行是(  ) ,第三行是(  ) 

完善程序题(12)   

11.下面的程序功能是:将一个字符串中的单词分行输出。例如,对字符串:"What is your name?",执行程序后,输出结果为

   What

   is 

   your

   name?

[程序](4)

   #include <iostream.h>

 

   char *nextWord(char **pp)

    {static char word[81];

    while(**pp=='')  _______; 

    char *pw=word;

    while(**pp&&**pp!=' ')

      *pw++=*(*pp)++;

    _______   ;

    return   ______ ;

    }

    void main(void)

    {char s[]="What is your name?"*ps=s;

    do{cout<<nextWord(_________)<<endl;   

    }   

12.以下程序的功能是:二维数组a中每列元素都是从小到大有序排列的,将一维数组b中的

    元素依次插入到数组a的每列中,并保持a中每列数据的有效性,最后将执行插入操作

    后的数组a以矩阵形式输出。例如:

    原数组  1  3  2                                  1  3  1

            4  6  8                                  2  6  2

            8  9  10   数组b{2 7 1}操作后的数组a:4  7  8

                                                     8  9  10

    [程序](4)

    #include <iostream.h>

    #include <iomanip.h>

    #define ROW 4

    #define COL 3

    void f(int a[][COL],int b[])

    {int i,j;

    for(_________ ){

      for(j=ROW-1;j>0;j--)

       if(a[j-1][i]>b[i])

           (24)  ;

       else    break;

       (______)    ;

     }

    }

    void main(void)

    {int a[ROW][COL]={1,3,2,4,6,8,8,9,10};

     int b[COL]={2,7,1};

     cout<<"插入前数组中的数据依次为:"<<'\n';

    for(int i=0;i<ROW-1;i++){

      for(int j=0;j<COL;j++)cout<<setw(5)<<a[i][j];

      cout<<endl;

    }   

    cout<<endl

   __________;

    cout<<"插入后数组中的数据依次为:"<<'\n';

      for(i=0;i<ROW;i++){

        for(int j=0;j<COL;j++) cout<<setw(5)<<a[i][j];

        cout<<endl;

      }

    }