1、C+程序设计自考题模拟 17 及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.在 int b3=1,3,2,4,5,6,0中,b22的值是_(分数:1.00)A.2B.0C.6D.52.下列关于函数原型及其返回值的描述错误的是_(分数:1.00)A.函数都需要有类型说明B.返回值是由 return 后面的表达式决定的C.函数体内必须有返回语句 return 语句D.return 表达式的值必须与声明函数的类型一致3.C 和 C+共有的特征是_(分数:1.00)A.继承B.函数定义不能嵌套C.封装D.多态性4.对数组进行降幂排序和检索
2、操作,需要包含的头文件是_(分数:1.00)A.mathB.algorithmC.functionalD.iostream5.已知:int a,) 其中 T 是_(分数:1.00)A.函数形参B.模板形参C.函数实参D.模板实参18.下列选项中,与实现运行时多态性无关的是_(分数:1.00)A.函数重载B.指针C.虚函数D.引用19.下列关于运算符重载的叙述中,错误的是_(分数:1.00)A.通过运算符重载,不可以定义新的运算符B.有的运算符只能作为成员函数重载C.若重载运算符为“+”,则相应的运算符函数名是“+”D.重载一个二元运算符时,不一定需要声明两个形参20.已知类 A,类 B 是类
3、A 的公有派生类,类 A 和类 B 中都定义了虚函数 func(),p 是一个指向类 A 对象的指针,则 p-A:func()将_(分数:1.00)A.调用类 A 中的函数 func()B.调用类 B 中的函数 func()C.根据 p 所指的对象类型而确定调用类 A 中或类 B 中的函数 func()D.即调用类 A 中函数,也调用类 B 中的函数二、第部分 非选择题(总题数:20,分数:20.00)21.C+输入/输出操控符中,含义是设置转换基数为十进制的是 1。 (分数:1.00)22.C+程序设计中,有三种基本控制结构:顺序结构、选择结构和 1。 (分数:1.00)23.面向对象的程序
4、设计是以 1 代表求解问题为中心环节。 (分数:1.00)24.表达式 coutendl;还可表示为 1。 (分数:1.00)25.使用关键字 1 说明的函数成为内联函数。 (分数:1.00)26.已知 int a=1,b=2;,则表达式(+a/b)*b-的值为 1。 (分数:1.00)27.动态联编所支持的多态性成为运行时多态性,这由 1 支持。 (分数:1.00)28.静态成员函数 1 访问类的静态数据成员,不能直接访问类的非静态数据成员。 (分数:1.00)29.用 C+语言写成的程序成为 1。 (分数:1.00)30.C+程序设计语言中的 1 机制,可以从现存类中构建其子类。 (分数:
5、1.00)31.声明一个类为另外一个类的友元,格式为“ 1 class 类名”。 (分数:1.00)32.已知类 My Class,在用户未定义折构函有选举权时,则系统为其定义的默认析构函数形式为 1。 (分数:1.00)33.所谓的 1,就是提供的操作与元素类型无关。 (分数:1.00)34.用 operator+(c1,c2)这样的表达式来使用运算符“+”,应将“+”重载为 1 函数。 (分数:1.00)35.对象消失时,使用 1 释放由构造函数分配的内存。 (分数:1.00)36.已知类 AA,“AA*abc();“是该类中一个成员函数的原型,则在类外定义时的函数头为 1。 (分数:1.
6、00)37. 1(a,a+len,b)是将数组 a 的内容原样复制到数组 b。 (分数:1.00)38.UML 中,对象之间的静态关系是通过对象属性之间的连接反映的,称之为 1。 (分数:1.00)39.有如下定义: class MA int Value; public: MA(int n=0): value(n) ; MA * ta, tb; 其中 MA 类的对象名标识符是 1。 (分数:1.00)40.设 A 为 base 类的对象且赋有初值,则语句 base B(A);表示 1。 (分数:1.00)三、改错题(总题数:5,分数:20.00)41.下列程序是求两个字符串数组的所包含的相同字
7、串,试改正程序中的错误。 #includeiostream using namespace std; int main 1 char s1=“Fortran“, s2=“Foxpro“; char *p, *q; p=s1; q=s2; while(*p p+; q+; coutendl; (分数:4.00)42.下列程序段是 Location 类的定义,请找出错误的语句。 class Location private: int X, Y=20; protected: int zeroX, zeroY; int SetZero(int ZeroX, int ZeroY); private: i
8、nt length, height; public: void init(int initX, int initY); int GetX 1; int GetY 2; ; (分数:4.00)43.class A public: void f(B, b); ; class B public: void g(A, a); ; (分数:4.00)44.#includeiostream using namespace std; class A public: void A 1 const int f5 2constreturn 5; int Obj 3return 45; int val; int f
9、8 4; ; int A:f8 5return val; void main 6 const A s; int i=s.f5 7; cout“Value=“iendl; (分数:4.00)45.class A int x; friend class B; ; class B friend class C; class C void func(A *p); void C:func(A *p) p-x-; (分数:4.00)四、完成程序题(总题数:5,分数:20.00)46.用户自定义类 A,完成程序填空,并使其输出为 10 5 10 5 15 5 #includeiostream using n
10、amespace std; class A public: int f1(); int f2(); void setx(int m)x=m; coutxendl; void sety(int n)y=n; coutyendl; int getx()return x; int gety()return y; private: int x, y; ; int A:f1()return x+y; int A:f2()return x-y; int main() A a; _; a.sety(5); couta.getx()“/t“a.gety()endl; cout_endl; (分数:4.00)_
11、47.定义一个类 A,并在 main 函数实现类的实例化。 class Base private: int a; public: Base()a=0; _ /定义构造函数,用参数 aa 初始化数据成员 a ; void main() Base *p; /定义类 A 的指针对象 P _ ; /用 P 指向动态对象并初始化为整数 5 (分数:4.00)_48.输入一行字符,按输入字符的反序建立一个字符结点的单向链表,并输出该链表中的字符。 #includeiostream using namespace std; struct node char ch; node *next; void show
12、(node *head); int main() node *head, *p; char c; head=NULL; while(c=getchar()!=“/n“) /输入一行字符 _ /建立新结点 p-ch=c; p-next=head; /插入表头 head=p; show(head); void show(node *head) /输出链表 node *p=head; cout“链表中的字符是:/n“; while(p) coutp-ch; _ coutendl; (分数:4.00)_49.完成下面类中成员函数的定义。 #includeiostream using namespace
13、 std; class Base private: int val; public: Base(int i) val=i; _int(); ; Base:operator int() _ class Deprived: public Base public: Deprived(int i): Base(i) ; void main() Deprived n(100); int i=n; couti+nendl; (分数:4.00)_50.完成下列程序填空,使其输出为-123.457。 #includeiostream #includeiomanip using namespace std; i
14、nt main() double x=123.456789; cout_-xendl; (分数:4.00)_五、程序分析题(总题数:2,分数:10.00)51.includeiostream using namespace std; class A public: A()a=5; void printa()cout“A:a=“aendl; private: int a; friend class B; ; class B public: void displayl(A t) t.a+; cout“display1:a=“t.aendl; void display2(A t) t.a-; cou
15、t“display2:a=“t.aendl; ; int main() A obj1; B obj2; obj1.printa(); obj2.display1(obj1); ohj2.display2(obj1); obj1.printa(); (分数:5.00)_52.给出下面程序的输出结果。 #includeiostream using namespace std; class A private: int a; public: A(int aa=0)a=aa; cout“a=“aendl; ; class B private: int b; public: B(int bb=0)b=b
16、b; cout“b=“bendl; ; class C: public B private: A a; public: C()cout“C default constructor“endl; C(int i, int j):a(i), B(j)cout“C constructor“endl; ; void main() C c1, c2(5, 6); (分数:5.00)_六、程序设计题(总题数:1,分数:10.00)53.定义一个表示点的结构类型 Point 和一个由直线方程 y=ax+b 确定的直线类 Line。结构类型 Point 有x 和 y 两个成员,分别表示点的横坐标和纵坐标。Lin
17、e 类有两个数据成员 a 和 b,分别表示直线方程中的系数。Line 类有一个成员函数 print 用于显示直线方程;友元函数 setPoint(Line ) 其中 T 是_(分数:1.00)A.函数形参B.模板形参 C.函数实参D.模板实参解析:考点 类模板 解析 T 是模板参数,在类模板体内可以使用,离开该类模板就不能使用。实参是出现在主调函数中,进入被调函数中,实参变量则不能使用。所以模板参数是形参。18.下列选项中,与实现运行时多态性无关的是_(分数:1.00)A.函数重载 B.指针C.虚函数D.引用解析:考点 运行时多态 解析 函数重载体现的是编译时的多态性,所以选 A。19.下列关
18、于运算符重载的叙述中,错误的是_(分数:1.00)A.通过运算符重载,不可以定义新的运算符B.有的运算符只能作为成员函数重载C.若重载运算符为“+”,则相应的运算符函数名是“+” D.重载一个二元运算符时,不一定需要声明两个形参解析:考点 运算符重载 解析 成员函数:单目运算符:参数表中没有参数;双目运算符:参数表中只有一个参数;不能重载的运算符:1不能重载的运算符有:“:“,“.“,“*“,“?“;2必须重载为成员函数的运算符:,(),-,=。20.已知类 A,类 B 是类 A 的公有派生类,类 A 和类 B 中都定义了虚函数 func(),p 是一个指向类 A 对象的指针,则 p-A:fu
19、nc()将_(分数:1.00)A.调用类 A 中的函数 func() B.调用类 B 中的函数 func()C.根据 p 所指的对象类型而确定调用类 A 中或类 B 中的函数 func()D.即调用类 A 中函数,也调用类 B 中的函数解析:考点 继承和派生 解析 使用限定运算符“:”,访问基类 A 的 func()函数。二、第部分 非选择题(总题数:20,分数:20.00)21.C+输入/输出操控符中,含义是设置转换基数为十进制的是 1。 (分数:1.00)解析:dec 考点 C+输入/输出操控符及其含义 解析 dec 设置转换基数为十进制;oct 设置转换基数为八进制;hex 设置转换基数
20、为十六进制;endl 输出一个换行符并刷新流;setw 设置输出数据字段宽度 width。22.C+程序设计中,有三种基本控制结构:顺序结构、选择结构和 1。 (分数:1.00)解析:循环结构 考点 C+语句基本结构 解析 C+语言提供了基本控制结构分为三种:顺序结构、选择结构、循环结构。23.面向对象的程序设计是以 1 代表求解问题为中心环节。 (分数:1.00)解析:对象 考点 面向对象 解析 面向对象的程序设计不是以函数过程和数据结构为中心,而是以对象代表求解问题为中心环节。24.表达式 coutendl;还可表示为 1。 (分数:1.00)解析:cout“/n“(或 cout“/12“
21、或 cout“/xA“) 考点 数据的简单输入/输出格式 解析 endless 操控符的含义是:输出一个换行符并刷新流。换行符等价于“/n“,“/12“,“/xA“。25.使用关键字 1 说明的函数成为内联函数。 (分数:1.00)解析:inline 考点 内联函数 解析 为了加快程序的执行速度,使用关键字 inline 说明该函数为内联函数。26.已知 int a=1,b=2;,则表达式(+a/b)*b-的值为 1。 (分数:1.00)解析:2 考点 运算符的优先级 解析 “+”“-”的优先级高于+-*/,表达式(+a/b)*b-=(+a)/b)*(b-)=(2/2)*2=2。27.动态联编
22、所支持的多态性成为运行时多态性,这由 1 支持。 (分数:1.00)解析:虚函数 考点 多态性 解析 静态联编所支持的多态性成为编译时多态性,当调用函数重载时,编译器可以根据调用时所使用的实参在编译时就确定下来应调用哪个函数。动态联编所支持的多态性成为运行时多态性,这由虚函数支持。28.静态成员函数 1 访问类的静态数据成员,不能直接访问类的非静态数据成员。 (分数:1.00)解析:只能 考点 静态成员 解析 静态数据成员是私有的,通过公有的静态成员函数来访问静态数据成员。静态成员函数只能通过对象名(或指向对象的指针)访问该对象的非静态成员。29.用 C+语言写成的程序成为 1。 (分数:1.
23、00)解析:源程序 考点 程序的编辑、编译和运行的基本概念 解析 用 C+语言写成的程序称为源程序。30.C+程序设计语言中的 1 机制,可以从现存类中构建其子类。 (分数:1.00)解析:继承 考点 继承 解析 继承使得程序员可以在一个一般的类的基础上很快建立一个新类,而不必从零开始设计每个类。31.声明一个类为另外一个类的友元,格式为“ 1 class 类名”。 (分数:1.00)解析:friend 考点 友元函数 解析 声明一个类为另外一个类的友元,格式为 friend class 类名。32.已知类 My Class,在用户未定义折构函有选举权时,则系统为其定义的默认析构函数形式为 1
24、。 (分数:1.00)解析:MyClass(); 考点 析构函数 解析 析构函数前面增加一个“”号(名字与类同名)。33.所谓的 1,就是提供的操作与元素类型无关。 (分数:1.00)解析:泛型算法 考点 泛型算法应用于普通数组 解析 数组不能作为整体输出,引入 STL 库提供的泛型算法,则可以大大简化数组操作。34.用 operator+(c1,c2)这样的表达式来使用运算符“+”,应将“+”重载为 1 函数。 (分数:1.00)解析:友元 考点 运算符重载 解析 显式调用形式:obj1.operator+(OBJ obj2)成员函数 operator+(OBJ obj1, OBJ obj2
25、)-友元函数35.对象消失时,使用 1 释放由构造函数分配的内存。 (分数:1.00)解析:析构函数 考点 析构函数 解析 在对象消失时,应使用析构函数释放由构造函数分配的内存。36.已知类 AA,“AA*abc();“是该类中一个成员函数的原型,则在类外定义时的函数头为 1。 (分数:1.00)解析:AA*AA:abc() 考点 成员函数 解析 在类外实现这些成员函数的形式如下: 返回类型类名:成员函数名(参数列表) 成员函数的函数体/内部实现 所以该函数头为:AA*AA:abc();。37. 1(a,a+len,b)是将数组 a 的内容原样复制到数组 b。 (分数:1.00)解析:copy
26、 考点 泛型算法应用于普通数组 解析 copy(a,a+len,b)是将数组 a 的内容原样复制到数组 b。38.UML 中,对象之间的静态关系是通过对象属性之间的连接反映的,称之为 1。 (分数:1.00)解析:实例连接 考点 类和对象的 UML 标记图 解析 对象之间的静态关系是通过对象属性之间的连接反映,成为实例连接。39.有如下定义: class MA int Value; public: MA(int n=0): value(n) ; MA * ta, tb; 其中 MA 类的对象名标识符是 1。 (分数:1.00)解析:tb 考点 类和对象 解析 题目中*ta 是类对象指针,tb
27、是简单的类对象。40.设 A 为 base 类的对象且赋有初值,则语句 base B(A);表示 1。 (分数:1.00)解析:用对象 A 初始化对象 B 考点 复制构造函数 解析 复制构造函数,采用复制方式使用已有的对象来建立新对象。所以 testB(A)表示用对象 A 初始化对象 B。三、改错题(总题数:5,分数:20.00)41.下列程序是求两个字符串数组的所包含的相同字串,试改正程序中的错误。 #includeiostream using namespace std; int main 1 char s1=“Fortran“, s2=“Foxpro“; char *p, *q; p=s
28、1; q=s2; while(*p p+; q+; coutendl; (分数:4.00)解析:if(p=q) 考点 程序的编辑、编译和运行的基本概念 解析 p,q 是 char 类型的指针,分别指向 s1、s2 数组的首地址,判断所指向地址中存在的数据,应该改为 if(*p=*q)。42.下列程序段是 Location 类的定义,请找出错误的语句。 class Location private: int X, Y=20; protected: int zeroX, zeroY; int SetZero(int ZeroX, int ZeroY); private: int length, h
29、eight; public: void init(int initX, int initY); int GetX 1; int GetY 2; ; (分数:4.00)解析:int X, Y=20; 语句有误 考点 数据成员的赋值 解析 不能在类体内给数据成员赋值。43.class A public: void f(B, b); ; class B public: void g(A, a); ; (分数:4.00)解析:public: void f(B, b); 语句有误 考点 不完全类的声明 解析 在引用未定义的类之前,可以先在引用之前声明该类,而该类的完整定义可以放在程序的其他地方。44.#
30、includeiostream using namespace std; class A public: void A 1 const int f5 2constreturn 5; int Obj 3return 45; int val; int f8 4; ; int A:f8 5return val; void main 6 const A s; int i=s.f5 7; cout“Value=“iendl; (分数:4.00)解析:void A -|_|-; 语句有误 考点 构造函数 解析 定义构造函数时不能指定返回类型,即使是 void 类型也不可以。应改为 A -|_|-;。45.
31、class A int x; friend class B; ; class B friend class C; class C void func(A *p); void C:func(A *p) p-x-; (分数:4.00)解析:p-x-; 考点 友元函数 解析 友元函数不可以传递,类 C 不是类 A 的友元,不能访问类 A 的成员。四、完成程序题(总题数:5,分数:20.00)46.用户自定义类 A,完成程序填空,并使其输出为 10 5 10 5 15 5 #includeiostream using namespace std; class A public: int f1(); i
32、nt f2(); void setx(int m)x=m; coutxendl; void sety(int n)y=n; coutyendl; int getx()return x; int gety()return y; private: int x, y; ; int A:f1()return x+y; int A:f2()return x-y; int main() A a; _; a.sety(5); couta.getx()“/t“a.gety()endl; cout_endl; (分数:4.00)_正确答案:()解析:a.setx(10) a.f1()“/t“a.f2() 考点
33、使用类的对象 解析 分析,第一个空是对 x 进行赋值,输出 x 为 10,所以 a.setx(10);分析结果为 15 5。得出第二个空是进行 f1(),f2()运算,所以,进行这两个函数的调用,a.f1()“/t“a.f2()。47.定义一个类 A,并在 main 函数实现类的实例化。 class Base private: int a; public: Base()a=0; _ /定义构造函数,用参数 aa 初始化数据成员 a ; void main() Base *p; /定义类 A 的指针对象 P _ ; /用 P 指向动态对象并初始化为整数 5 (分数:4.00)_正确答案:()解析
34、:Base(int aa):a(aa); p=new Base(5) 考点 构造函数 解析 定义有参的构造函数,用参数 an 初始化数据成员 a,Base(int aa):a(aa);定义一个指针对象,并初始化值为 5,p=new Base(5)。48.输入一行字符,按输入字符的反序建立一个字符结点的单向链表,并输出该链表中的字符。 #includeiostream using namespace std; struct node char ch; node *next; void show(node *head); int main() node *head, *p; char c; hea
35、d=NULL; while(c=getchar()!=“/n“) /输入一行字符 _ /建立新结点 p-ch=c; p-next=head; /插入表头 head=p; show(head); void show(node *head) /输出链表 node *p=head; cout“链表中的字符是:/n“; while(p) coutp-ch; _ coutendl; (分数:4.00)_正确答案:()解析:p=new node; p=p-next; 考点 结构 解析 建立一个新节点,即动态声明一个结构指针对象 p=new node;。循环输出链表内容,输出一个使指针后移,指向下一个节点
36、p=p-next;。49.完成下面类中成员函数的定义。 #includeiostream using namespace std; class Base private: int val; public: Base(int i) val=i; _int(); ; Base:operator int() _ class Deprived: public Base public: Deprived(int i): Base(i) ; void main() Deprived n(100); int i=n; couti+nendl; (分数:4.00)_正确答案:()解析:operator, re
37、turn val; 考点 定义类成员函数 解析 Base:operator int()是在类外对类体内声明的成员函数的实现,由此可得声明语句 operator int();。类中定义的成员函数才可访问私有数据成员,返回私有数据成员的值,所以定义函数体为return val。50.完成下列程序填空,使其输出为-123.457。 #includeiostream #includeiomanip using namespace std; int main() double x=123.456789; cout_-xendl; (分数:4.00)_正确答案:()解析:setprecision(3) 考
38、点 数据的简单输入/输出格式 解析 观察输出结果是使 double 型数据 123.456789,取反,小数点后精度取 3 位。setprecision(int n),设置浮点数输出精度 n,由此可得 setprecision(3)。五、程序分析题(总题数:2,分数:10.00)51.includeiostream using namespace std; class A public: A()a=5; void printa()cout“A:a=“aendl; private: int a; friend class B; ; class B public: void displayl(A
39、t) t.a+; cout“display1:a=“t.aendl; void display2(A t) t.a-; cout“display2:a=“t.aendl; ; int main() A obj1; B obj2; obj1.printa(); obj2.display1(obj1); ohj2.display2(obj1); obj1.printa(); (分数:5.00)_正确答案:()解析:A:a=5 display1:a=6 display2:a=4 A:a=5 考点 将一个类说明为另一个类的友元 解析 将一个类说明为另一个类的友元,这时候,整个类的成员函数均有友元函数的
40、性能。执行语句obj1.printa(); 输出 A:a=5; obj2.display1(obj1); obj2.display2(obj1);分别输出 display1:a=6 display2:a=4; obj1.printa(); 输出 A:a=5;。52.给出下面程序的输出结果。 #includeiostream using namespace std; class A private: int a; public: A(int aa=0)a=aa; cout“a=“aendl; ; class B private: int b; public: B(int bb=0)b=bb; c
41、out“b=“bendl; ; class C: public B private: A a; public: C()cout“C default constructor“endl; C(int i, int j):a(i), B(j)cout“C constructor“endl; ; void main() C c1, c2(5, 6); (分数:5.00)_正确答案:()解析:b=0 a=0 c default constructor b=6 a=5 c constructor 考点 继承与派生 解析 C c1,定义类 c 的对象,首先调用基类的无参构造函数,输出 b=0,然后对象成员
42、a 的构造函数,即输出 a=0,最后是派生类的构造函数,输出 c default constructor;定义 c2,同上,只是调用有参的构造函数,分别输出 b=6 a=5 c constructor。六、程序设计题(总题数:1,分数:10.00)53.定义一个表示点的结构类型 Point 和一个由直线方程 y=ax+b 确定的直线类 Line。结构类型 Point 有x 和 y 两个成员,分别表示点的横坐标和纵坐标。Line 类有两个数据成员 a 和 b,分别表示直线方程中的系数。Line 类有一个成员函数 print 用于显示直线方程;友元函数 setPoint(Line struet point double x; double y; ; class line public: line(double u, double v) a=u; b=v; void print() cout“y=“a“x+“bendl; friend point setpoint(line private: double a, b; point setpoi