试题类型

选择题

填空

写结果

改正错误

程序填空

 

C++程序设计》笔试考试模拟(100分)

一.   选择题(每题1, 25 )

1.下列字符列中,可作为C++语言程序自定义标识符是(  )。

     A.switch       B.student        C.break           D.do 

2  运算符 +<==% 中,优先级最低的运算符是(    )。

     A. +          B.<        C.=              D.%

3  设变量mnabcd的值均为0,执行(m = a==b)||(n=c==d)后,mn的值是( )。

     A.00        B. 01        C. 10         D. 11

4. 字符串”vm\t \\\np\102qu”的长度是(   )。

A. 8          B. 9         C. 16           D. 17    

6.

5.设有代码“int a = 6;”,则执行了语句“a + = a - = a*a;”后,变量a的值是(  )。

A.0            B. -24          C. -40         D. 60

6.    void main()

 { int x=-1;

do

 {x=x*x;}

while(!x);}

下列说法正确的是(       )。

A.是死循环              B.循环执行两次

C.循环执行一次          D.有语法错误

7.下面有关for循环的正确描述是(      )。

Afor循环只能用于循环次数已经确定的情况

Bfor循环是先执行循环体语句,后判断表达式

C.在for循环中,不能用break语句跳出循环体

Dfor循环的循环体语句中,可以包含多条语句,但必须用大括号括起来

8.下面程序段(      )。

x=3;

do

     {y=x--;

      if(!y) {cout<<x; continue;}

cout<<#;}

while(1<=x  && x<=2);

A.将输出##                  B.将输出##*

C.是死循环                  D.含有不合法的控制表达式

9.以下正确的说法是(       )。

   A.用户若需要调用标准函数,调用前必须重新定义

   B.用户可以直接调用所有标准库函数

   C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数

     D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数

10.在参数传递过程中,对形参和实参的要求是()。

   A.函数定义时,形参一直占用存储空间

   B.实参可以是常量、变量或表达式

   C.形参可以是常量、变量或表达式

   D.形参和实参类型和个数都可以不同

11.对数组名作函数的参数,下面描述正确的是()。

A.数组名作函数的参数,调用时将实参数组复制给形参数组

B.数组名作函数的参数,主调函数和被调函数共用一段存储单元

C.数组名作参数时,形参定义的数组长度不能省略

D.数组名作参数,不能改变主调函数中的数据

12. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则(      )不是对a数组元素的正确引用(其中0i<10)。

Ap[i]        B*(*(a+i))    Ca[p-a]           D*(&a[i])

13. 以下程序的输出结果是(       )

#include <iostream.h>

void main()

{   char s[]="12134211",*p;

        int v1=0,v2=0,v3=0,v4=0;   

        for (p=s;*p;p++)           

        switch(*p)

            {  

                case '1':v1++;

                case '3':v3++;

                case '2':v2++;

            default:  v4++;

            }

    cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;

}

A4,2,1,1    B4,7,5,8    C7,3,2,1      D8,8,8,8

14. 下列声明结构体变量错误的是(  )。

 Astruct  student             B struct  student

    { int no;                        int no;

char name[16];                      char name[16]; 

st1,st2;                      ;

struct student  st1,st2;

    Cstruct  student            D  struct  student

    { int no;                 {   int no;

char name[16];                char name[16]; 

;                            ;

 struct  st1,st2;           student st1,st2;

15. 对类的构造函数和析构函数描述正确的是(    )。

A.构造函数可以重载,析构函数不能重载

B.构造函数不能重载,析构函数可以重载

C.构造函数可以重载,析构函数也可以重载

D.构造函数不能重载,析构函数也不能重载

16. 下面对于友元函数描述正确的是(  )。

    A.友元函数的实现必须在类的内部定义     B.友元函数是类的成员

    C.友元函数破坏了类的封装性和隐藏性      D.友元函数不能访问类的私有成员

17. 派生类的对象对它的基类成员中(     )是可以访问的。

 A.公有继承的公有成员       B.公有继承的私有成员

    C.公有继承的保护成员       D.私有继承的公有成员

18. C++类体系中,不能被派生类继承的有(  )。

A.构造函数    B.虚函数    C.静态成员函数     D.赋值操作函数

19.以下(  )成员函数表示虚函数。

 Avirtual int vf(int);      Bvoid vf(int)=0;

    Cvirtual void vf()=0;      Dvirtual void vf(int) { };

20. 下面对静态数据成员的描述中,正确的是(  )。

 A.静态数据成员可以在类体内进行初始化

 B.静态数据成员不可以在类体内进行初始化

 C.静态数据成员不能受private控制符的作用

 D.静态数据成员可以直接用类名调用

21. 继承具有(   ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。

 A.规律性        B.传递性       C.重复性    D.多样性

22.若有以下定义,则释放指针所指内存空间的操作是 (     )

        float r=news float[10];

     A.delete r ;               B.delete  *r;

     C.delete []r;              D.delete  r[];

23.若有以下定义,则对字符串的操作错误的是(      )

       char  s[10]=Program,t[]=test;

    A. strcpy(s,t);               B. cout<<strlen(s);

    C. strcat(this,t);          D. cin>>t;

24.if语句中的表达式是(             )

A.只能是表达式            B.只能是关系表达式和逻辑表达式

C.只能是逻辑表达式        D.可以是任意表达式

25.在用关键字class定义的类中,以下叙述正确的是(     )

      A.       在类中,不作特别说明的数据成员均为私有类型

       B.       在类中,不作特别说明的数据成员均为公有类型

       C.       类成员的定义必须是成员变量定义在前,成员函数定义在后

       D.       类的成员定义必须放在类定义体内部

二. 填空题 (每空1分,共25)

1C++程序有且只有一个                     

2.若有变量定义 int x = 7; float a = 2.5, c = 4.7;表达式

a + (int)(x/3*(int)(c + 2)/2) % 4 的值是                                                      

3.   ”xy中至少有一个小于z”C++语言表达式是                     

4.将字符串s2拷贝到字符数组s1的函数调用是                  

5.执行语句“ x = (a = 4, b = a++);”后,变量xab的值依次为     

6.表述“xy中有一个大于z”的C++语言表达式是    

7.字符串str长度的函数调用是            

8.执行语句“ y = (x = 3, z = --x);”后,变量的值依次为_        

9.设 #define a(x)  x*x;

cout<<a(4+6)<<endl;

上述程序段运行结果为           

10.设x为整型变量,表达数学关系式:13 < x < 19C++语言表达式是         

11.设有代码“static int a[3][4]={{1,2}, {3}, {4,5,6}};”则a[1][1]值为     

12.若有定义:char  u;  int  b;  float  v;  double  d;

则表达式u * b + d - v的值的类型为              

13.假定所有变量均已正确定义,下列程序段运行后x的值是      

    a = b = c = 0; x = 35;

       if(!a)x--;else if(b);if(c)x = 3;else x = 4; 

14.类的构造函数的主要作用是          

15C++将类继承分为                 两种。

16.建立类对象时,为节省内存,系统一般只分配用于   _内存。

17派生类可以定义其_ _____中不具备的数据和操作。

18operatorC++的一个关键字,它经常和C++的一个运算符连用,构成一个运算符函数名。运算符函数的返回类型不能是       类型。

19.在继承机制下,当对象消亡时,编译系统先执行________的析构函数,然后再执行_______的析构函数。

20C++文件的两种类型,分别是                             

21.在保护继承关系下,基类有公有成员和保护成员将成为派生类中的            成员,它们只能由派生类的               来访问。

三.写出下列程序运行结果(每题4分,共24)

1. #include<iostream.h>

void main( )

{int I;

 for(I=1;I<=5;I++)

  switch(I%2)

{case 0:I++; cout<<*;break;    

 case 1:I+=2; cout<<&;

 default: cout<<\n;}}

2.  #include <iostream.h>

void fun( );

int n=5;

void main(  )

{   int n=10;

    cout<<n<<endl;

    fun();

}

void fun( )    

{     cout<<n<<endl;

}

3. #include <iostream.h>

int b=5;

int  fun(int n);

void main(  )

{   int i;

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

          { cout<<fun(i)<<endl;}    

}

int  fun(int n)

{     static  int  a=1;           

       int c=10;             

      a=a+100;

      b=b+100;

      c=c+100;

      return a+b+c;

}

4.  #include <iostream.h>

int gcd(int m,int n)

{   if(m%n==0)   return  n;

       else return  gcd(n,m%n);        

}

void main(  )

{       int x=40,y=116;                  

            cout<<gcd(y,x)<<endl;             

}                                        

5. #include <iostream.h>

#include <conio.h>

class Point{

       int x,y;

   public:

      Point(){x=1;y=1;} 

     Point(int tx,int ty)

     {x=tx;y=ty;}

      ~Point(){cout<<"Point "<<x<<','<<y<<" is deleted."<<endl; }

};

void main()

{ Point obj1;

     Point obj2(10,20); }

6 #include<iostream.h>

class count

{   static int n;

public:

         count()

        {n++;}

        void show()

         {cout<<n<<endl;}

         ~count()

         {cout<<n<<endl;n--;

       }

};

int count::n=0;

void main()

{  count  a;

    a.show();

   {count b[4];

    b[3].show();

   }

a.show();

}

 四.改正错误(每题有二处错误,在错误语句或表达式画线,并写出正确语句。)(每题 4分,共16)

1.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。

#include<iostream.h>

 #include<stdlib.h>

 const int N=10;

 int find(int *p,int n,int x) 

{ int i ;               

   *(p+n)=x;          

   while(*p+i!=x)       

   i++;               

   if(i!=n)             

   return 1;           

   else              

   return -1;          

 }

 void main()

 {int i,pos,x;

 int *p=new int [N];

 for(i=0;i<N;i++)

 *(p+i)=rand()%50;

 for(i=0;i<N;i++)

 cout<<*(p+i)<<'\t';

 cout<<"\ninput x: ";

 cin>>x;

 pos=find(p,N,x);

 if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;

   else cout<<"No find!"<<endl;

 }

下列程序求字符串长度。

#include<iostream.h>

int fun(char s)               

{ int i=0;

while(s[i]!='\n')       

{i++;}

return i;

}

void main()

{char s[80];

cin.getline(s,80);    //读一行字符

cout<<"length:"<<fun(s)<<endl;}

2#include<iostream.h>

class Point

{private:

int x,y;        

void init(int a,int b)     

{ x=a;y=b;}

void show()

          { cout<<"x=  "<<x<<"    y="<<y<<endl;}

};

void main()

{ Point  a(24,50);

         a.show();

}

3. #include <iostream.h>

class Amplifier{

   float invol,outvol;

public:

   Amplifier(float vin,float vout)

   {invol=vin;outvol=vout;}

   float gain();

};

 Amplifier::float gain()  { return outvol/invol; }

void main()

{  Amplifier amp(5.0,10.0);

   cout<<"\n\nThe gain is =>"<<gain()<<endl;

}

 

4#include <iostream.h>

class Amplifier{

   float invol,outvol;

public:

   Amplifier(float vin,float vout)

     {invol=vin;outvol=vout;}

      float gain();

};

   Amplifier::float gain()     

{ return outvol/invol;}

void main()

{  Amplifier amp(5.0,10.0);

 cout<<"\n\nThe gain is =>"<<gain()<<endl;       

 }

.程序填空(每空2分,共10)

 1.有一个一维数组,存放10个职工的年龄,别写两个函数求职工的最大年龄和最小年龄。

#include <iostream.h>

void max_age(int arr[  ]);

                 

int  max , min;         

void main(  )

{     int i;

    int array[10];

    cout<<"input 10 data:";

    for(i=0;i<10;i++)

    {  cin>>array[i];}

    max_age(array);

    min_age(array);

    cout<<"max_age is :"<<max<<endl;  //使用全局变量max

    cout<<"min_age is :"<<min<<endl;  //使用全局变量min

}

void max_age(int arr[  ])

{     int j;

    max=arr[0];          //使用全局变量max

           for(j=1;j<10;j++)

                if (         )

                        max=arr[j];   //使用全局变量max

}

void min_age(int arr[  ])

{int k;

    min=arr[0];          //使用全局变量min

for(k=1;k<10;k++)

                if (min>arr[k])

                                ;    //使用全局变量min

}

2.下列函数swap实现数据交换功能功能,请填空。

#include<iostream.h>

void swap(int *p,int *q)

{int temp;

 temp=*p;

            ;                //1

          ;                //2

}

void main()

{int a,b;

int *p1,*p2;

cout<<"请输入两个正数:";

cin>>a>>b;

p1=&a;

p2=&b;

swap(p1,p2);

C++程序设计》上机考试模拟(50)

 

1.根据π/4 =1-1/3+1/5-1/7+…求π的近似值,直到最后一项的值小于0.000001为止。(10分)

 

2.有一行字符,要求将每个单词中的第一个字母改成大写字母(如果已经是大写则不变)(提示读一行字符用cin.getline( )  ) 10分)

 

3. 编写一个函数求满足以下条件的最大的n

 

   12+22+32+…+n2<1000

4.定义一个抽象类shape用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。程序中通过基类有指针来调用派生类中的虚函数,计算不同形状的面积。(15分)