C _考试样卷4讲解
- 格式:doc
- 大小:92.51 KB
- 文档页数:10
C++ 考试样卷4注意:将答案写在答题纸上;否则,责任由学生自负。
一. 选择题(以下每题有四个选项可供选择,请选择最正确的一个答案,将标号填入答题纸上,每题1分,共20分)1、能用作用户自定义标识符。
A) friend B) -var C) 3xyz D) Float2、面向对象程序设计将数据与放在一起,做为一个相互依存、不可分割的整体来处理。
A) 对数据的操作B) 信息C) 数据隐藏D) 数据抽象3、一个类的析构函数。
A)唯一的B)允许重载C)至多可有两个D)只能是缺省的4、类型修饰符unsigned修饰类型是错误的。
A) char B) int C) long int D) float5、若执行完以下语句,i和j的值分别为。
int i;int &j=i;i=5;j=i+1;A) 5,5 B) 5,6 C) 6,6 D) 6,56、对于语句int *pa[5];的描述,下列说法正确的是。
A)pa是一个指向数组的指针,所指向的数组是5个int型元素;B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量;C)pa[5]表示某个数组的第5个元素;D)pa是一个具有5个元素的指针数组,每个元素都是一个int型指针。
7、假设整型数i的地址为0x12345678,指针ip地址为0x21850043,则执行以下语句后,k的值为。
int i=100;int *ip=&i;int k=*ip;A) 0x12345678 B) 0x21850043 C) 100 D) 不确定8、在C++中,一个函数带有参数说明时,则参数的默认值应该在中给出。
A) 函数定义B) 函数声明C) 函数定义或声明D) 函数调用9、指针可以用来表示数组元素,若已知语句:int a[3][7];则下列表示中错误的是。
A) *(a+1)[5] B) *(*a+3) C)*(*(a+1)) D)*(&a[0][0]+2)10、有如下定义:int a[5],*p; p=a;则下列描述错误的是[10] 。
A) 表达式p=p+1合法的B) 表达式a=a+1是合法的C) 表达式p-a是合法的D) 表达式a+2是合法的11、#include <iostream.h>int a=3;int f(int);void main( ){ int a=5;f(a);cout << "a=" <<a<<endl;}void f(int b){b=4; a+=b;}程序的输出结果是[11]A)3 B)5 C)7 D)912、以下程序运行结果是[12] 。
#include <iostream.h>void main(){int x=1,y=0,a=0,b=0;switch(x){ case 1:switch(y){case 0:a++;break;case 1:b++;break;}case 2:a++;b++;break;}cout << a<<”,” << b;}A)2,1 B)1,2 C)1,1 D)0,0 13、执行下列程序段时,输出[15] 。
int s1=0,s2=0,s3=0,s4=0;for(int t=1;t<=4;t++)switch(t){case 4:s1++;break;case 3:s2++;break;case 2:s3++;default:s4++;}cout<<s1<<”,”<<s2<<”,”<<s3<<”,”<<s4<<endl;A) 语法出错B) 1,1,1,2 C) 1,2,3,2 D) 1,1,2,214、下列说法正确的是:[13] 。
A) 一个类的对象可以是另一个类的成员B) 一个类可以作为另一个类的派生类C) 一个类定义在另一个类的说明中D) 以上说法均正确15、类MyClass的定义如下:class MyClass{public:MyClass(){value=0;}SetValue(int i){value=i;}private:int value;};则对语句:MyClass *p,my;p=&my;正确的描述是[14] 。
A) 语句p=&my;是把对象my赋值给指针变量p;B) 语句MyClass *p,my;会调用两次类MyClass的构造函数C) 对语句*p.SetValue(5)的调用是正确的D) 语句p->SetValue(5)与my.SetValue(5)等价16、下列各类函数中,不是类的成员函数。
A) 构造函数B) 析构函数C) 友元函数D) 拷贝构造函数17、派生类的对象对它的基类成员中是可以访问的。
A) 公有继承的公有成员B) 公有继承的私有成员C) 公有继承的保护成员D) 私有继承的公有成员18、有关析构函数的说法不正确的是。
A) 析构函数有且只有一个B) 析构函数无任何函数类型C) 析构函数和构造函数一样可以有形参D) 析构函数的作用是在对象被撤销时收回先前分配的内存空间19、通常拷贝构造函数的参数是。
A) 某个对象名B) 某个对象的成员名C) 某个对象的引用名D) 某个对象的指针名20、若类A和类B的定义如下:class A{ int i,j;public:void get();}class B: A{ int k;public:void make();}void B::make(){k=i*j;}则上述定义中,是非法的表达式。
A) void get(); B) int k; C) void make(); D) k=i*j;二、填空题(每空1分,共20分)1、数学式子x2+y2写成C++语言表达式是 [1] 。
2、如果a=1,b=2,c=3,d=4,则条件表达式a<b?a:c<d?c:d的值为[2] 。
3、设有函数定义:int f1(void) {return 100,200;},调用f1时,函数返回值为[3] 。
4、C++使用cin和cout进行输入输出操作的程序必须包含头文件 [4] ,其语句形式为 [5] 。
5、用C++表达式描述命题“a与b中有一个小于c”:[6] 。
6、函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)))中实参的个数为[7] 。
7、定义内联函数所用的关键字[8] ,定义友元所用的关键字为[9] 。
8、执行常量定义语句const int size=100*sizeof(int);后,符号常量size的值为[10] 。
9、设m=1,n=2, 则表达式m++= =n和++m= =n的值分别为[11] 和[12] 。
10、任何类中允许有[13] 、[14] 、[15] 三种类型的数据,数据和成员函数的默认类型为[16] 。
11、C++支持面向对象程序设计的四个要素是:封装性、继承和派生、[17] 和[18] 。
12、若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为[19] 和[20] 。
三、阅读程序,写出程序运行结果(第[3]、[10]空为3分,其余每空1分,共20分)1、写出下列程序的运行结果#include <iostream.h>class CSample{ public:CSample();void Display();private:int i;static int k;};Csmaple::CSample(){i=0;k++;}void CSample::Display(){ cout<<”i=”<<i<<”,”<<”k=”<<k<<endl;}int CSample::k=0;void main(){ CSample a,b;a.Display();b.Display();}程序的输出结果为[1][2] 。
2、#include <iostream.h>void splitfloat(float x, int *p1, float *p2){*p1=(int)x;*p2=x-*p1;}void main(){int n;float x ,f;cin>>x;splitfloat(x,&n,&f);cout<<”n=”<<n<<”,”<<”f=”<<f<<endl;}输入3.1415 ,输出结果为________[3]________3、#include <iostream.h>int nextStudentID=0;class StudentID{ public:StudentID(int id=0){ value=id;cout<<“Assigning student id:”<<value<<endl;}~StudentID(){ - -nextStudentID;cout<<“Destructing ID:”<<value<<endl;}protected:int value;};class student{ public:student(char * pName=“no name”, int ssID=0):id(ssID){ cout<<“Constructing student:”<<pname<<endl;}protected:StudentID id;};void main(){ student s(“Randy”,9818);student t(“Jenny”,9819);}输出结果为____[4]___________[5][6][7][8][9] 。
4、#include <iostream.h>class B{ public:B( ) {};B(int i, int j );void printb();private:int a,b;};class A{ public:A( ) {};A(int i, int j);void printa();private:B c;};A::A(int i, int j ):c(i,j){};void A::printa( ){c.printb( );}B::B(int i, int j ){a=i; b=j;}void B::printb( ){cout<<”a=”<<a<<”,”<<”b=”<<b<<endl;}void main( ){A m(7,8);m.printa( );}输出结果为_____[10]__________5、#include<iostream.h>class B{ public:B();B(int i);~B();void Print() ;private:int b;};B::B(){ b=0;cout<<"B's default constructor called."<<endl;}B::B(int i){ b=i;cout<<"B's constructor called." <<endl;B::~B(){ cout<<"B's destructor called."<<endl; }void B::Print(){ cout<<b<<endl;}class C:public B{ public:C();C(int i,int j);~C();void Print() ;private:int c;};C::C(){ c=0;cout<<"C's default constructor called."<<endl;}C::C(int i,int j):B(i){ c=j;cout<<"C's constructor called."<<endl;}C::~C(){ cout<<"C's destructor called."<<endl; }void C::Print(){ B::Print();cout<<c<<endl;}void main(){ C obj(5,6);obj.Print();}输出结果为_____[11]__________[12][13][14][15][16]四、改错题:指出下列程序的错误,并说明原因(每错2分,共10分)1、#include <iostream.h>class A{public:void A(int i=0){m=i;}void show(){cout<<m;}void ~A(){}private:int m;};void main()A a(5);a.m+=10;a.show();}________[1]________ ________[2]________ ________[3]________ 2、#include <iostream.h>class A{ public:void setA(int);void showA();private:int a;};class B{ public:void setB(int);void showB();private:int b;};class C : public A, private B{ public:void setC(int, int, int);void showC();private:int c;};void A::setA(int x){ a=x; }void B::setB(int x){ b=x; }void C::setC(int x, int y, int z){ SetA(x);SetB(y);c=z;}int main(){ C obj;obj.setA(5);obj.showA();obj.setC(6,7,9);obj.showC();obj.setB(6);obj.showB();return 0;}________[4]________ ________[5]________五、程序填空:(每空2分,共10分)1、下面程序的功能是:从键盘上输入若干个整数按升序排序后输出;# include “iostream.h”void sort(int a[ ],int n){for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++)if( [1] ){int t=a[i];a[i]=a[j];a[j]=t;}}void Input(int *p,int n){cout<<“输入”<<n<<”个整数。