自考C++程序设计2018年4月试题
摘要:自考C++程序设计2018年4月试题及答案解析,该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析。
自考C++程序设计2018年4月试题及答案解析
自考C++程序设计2018年4月试题及答案解析,该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析。
一、单项选择题(本大题共20小题,每小题1分,共20分。)在每小题列出的备选项中只有一项是最符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均不得分。
1.下列关于C++标识符的命名不合法的是( )
A.Pad
B.name_1
C.A#bc
D._a12
2.若有以下类型标识符定义:int x=2; char w=a; float y=23.45f; double z=45.6789; 则表达式w*x+y-z的结果类型是( )
A.float
B.char
C.int
D.double
3.局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用下列哪一项提供对全局变量的访问( )
A.作用域运算符
B.指针运算符
C.提取运算符
D.插入运算符
4.下列关于delete运算符的描述中,错误的是( )
A.它必须用于new返回的指针
B.对一个指针可以使用多次该运算符
C.它也适用于空指针
D.指针名前只用一对方括号,不管所删除数组的维数
5.在C++中,类与类之间的继承关系具有( )
A.自反性
B.对称性
C.传递性
D.反对称性
6.对类中声明的变量,下列描述中正确的是( )
A.属于全局变量
B.属于该类,某些情况下也可被该类不同实例所共享
C.只属于该类
D.任何情况下都可被该类所有实例共享
7.在类定义的外部,可以被访间的成员有( )
A.所有类成员
B.private或protected的类成员
C.public的类成员
D.public或 private的类成员
8.已知:int m=10; 下列表示引用的方法中,正确的是( )
A.int &z;
B.int &t=1;
C.int &x=m;
D.float &f=&m;
9.对于int *pa[5]; 的描述中,正确的是( )
A.pa是一个指向数组的指针,所指向的数组是5个i型元素
B.pa是一个指向某数组中第5个元素的指针,该元素是int型变量
C.pa[5]表示数组的第5个元素的值,是int型的值
D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针
10.下列关于构造函数的描述中,错误的是( )
A.构造函数可以设置默认参数
B.构造函数在定义类对象时自动执行
C.构造函数可以是内联函数
D.构造函数不可以重载
11.关于成员函数特征的描述中,错误的是( )
A.成员函数一定是内联函数
B.成员函数可以重载
C.成员函数可以设置参数的默认值
D.成员函数可以是静态的
12.下列不是函数重载所要求的条件是( )
A.函数名相同
B.参数个数不同
C.参数类型不同
D.函数返回值类型不同
13.下列有关模板的描述中,错误的是( )
A.模板把数据类型作为一个设计参数,称为参数化程序设计
B.使用时,模板参数与函数参数相同,是按位置而不是名称对应的
C.模板实例化参数类型包括数据类型和值
D.类模板与模板类是同一个概念
14.用new运算符创建维数组的正确形式是( )
A.int *p=new a[10];
B.float *p =new float[10];
C.int *p= new float[10];
D.int *p= new int[5]={1,2,3,4,5,6};
15.以下关于this指针的叙述中,正确的是( )
A.任何与类相关的函数都有this指针
B.类的成员函数都有this指针
C.类的友元函数都有this指针
D.类的非静态成员函数才有this指针
16.如果有int x, *p; float y, *q; 则下面操作中,正确的是( )
A.p=x
B.p=q
C.p=&x
D.p=&y
17.下列关于运算符重载的表述中,正确的是( )
A.C++已有的任何运算符都可以重载
B.运算符函数的返回类型不能声明为基本数据类型
C.在类型转换符函数的定义中不需要声明返回类型
D.可以通过运算符重载来创建C++中原来没有的运算符
18.友元运算符@obj被C++编译器解释为( )
A.operator@(obj)
B.operator@(obj, 0)
C.obj. operator@( )
D.obj. operator@( 0)
19.考虑函数原型 void test(int a, int b=7, char ch="*"),下面的函数调用中,属于不合法调用的是( )
A.test(5)
B.test(5, 8)
C.test(6, "#")
D.test(0, 0, "*")
20.使用setw( )时需要包含头文件( )
A.iostream. h
B.fstream. h
C.iomanip. h
D.stdli
E.h
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。
11.面向对象程序设计不仅能进行功能抽象,而且能进行_________抽象。
12.C++提供的预处理语句有3种,文件包含、条件编译和_________。
13.在类体外面定义成员函数时,必须用关键字_________重写类模板声明。
14.输入流 istream用来处理标准输入的一个对象的是_________。
15.编译时的多态性通过_________函数实现。
16.假定x=5,y=6, 则表达式x++*++y的值为_________。
17.在C++程序中,对刚创建的对象进行初始化的工作由构造函数来完成;而对象被删除前的一些清理工作则是由_________函数来完成的。
18.在用 class定义一个类时,数据成员和成员函数的默认访间权限是_________。
19.不同对象可以调用相名称的函数,但执行完全不同行为的现象称为_________。
110.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参或_________的构造函数,否则应用程序会产生一个编译错误。
111.在C++中,变量的三个基本要素是指:变量名、变量类型和_________。
112.若有定义int a=3; 则执行完语句a+=a-=a*a; 之后,a的值为_________。
113.如果要把 Student类的返回值为void的成员函数 score( ),声明为类 Teacher的友元函数,则应在类 Teacher的定义中加入语句_________。
114.假定x是一个逻辑量,则x&&0的值为_________。
115.构造函数、析构函数和友元函数中,不是该类成员的是_________。
116.使用对象的引用来初始化创建中的对象的函数是_________。
117.定义类的动态对象数组时,系统只能够自动调用该类的_________构造函数对其进行初始化。
118.复制构造函数使用_________作为形式参数。
119.当编译系统编译含有虚函数的类时,将为它建立一个虚函数表,表中的每一个元素都指向一个_________。
120.在函数体之前加_________关键字可以防止覆盖函数改变数据成员的值。
三、改错题(本大题共5小题,每小题2分,共10分)
21.#include ﹤iostream﹥using namespace std;void setzero(int &a) {a=0;}void main( ){int x=7; y=9;setzero(x);setzero(y);cout ﹤﹤x﹤﹤y ﹤﹤ endl;}
22.#include ﹤ iostream﹥using namespace std;class f{int a, b;public:void set( int aa, int bb) {a=aa; b=bb}void show( ) {cout ﹤﹤a ﹤﹤" "﹤﹤b﹤﹤ endl;}};void main ( ) {f. set(1, 2); f. show( );
23.#include ﹤iostream﹥using namespace std;void main( ){int a=11, b=12;const int *p=a;cout﹤﹤a﹤﹤b﹤*p﹤endl;}
24.#include ﹤iostream﹥using namespace std;void main( ){int a[6]={1,2,3,4,5,6,7};int i; for(i=0; i﹤7; i++)cout ﹤﹤a[li] ﹤﹤ endl;}
25.#include using namespace std;class person{int x; public: void person( ){x=1; }void set( int a) {x=a;}void get( ) {cout ﹤﹤x﹤﹤ endl;}};void main( ){person p;p. set(6);p. get( );}
四、完成程序题(本大题共5小题,每小题4分,共20分)
31.完成程序,使其输出结果为28_________using namespace std;int a[8]={1,2,3,4,5,6,7};void fun(int b[ ], int n);void main( ){int m=8; fun(a, m);cout ﹤﹤a[7]﹤﹤ endl;}void fun (int b[ ], int n) {int i; for(_________) b[7]+=b[i];}
32.完成程序,使其输出结果为x=30#include "stdafx. h"#include ﹤iostream﹥using namespace std;class Sample{ private:intx; public: Sample( ) {Sample(int a) { x=a;}void disp( ){cout﹤﹤"x="﹤﹤x ﹤﹤ endl;}friend Sample operator+( Sample &s1, Sample &s2);};_________Sample &s1, Sample &s2) {returm Sample(s1. x +s2. x);}void main( ) {Sample obj1(10);Sample obj2(20);Sample obj3;_________; obj3. disp( );}
33.#include ﹤iostream﹥using namespace std;class base{_________;public:base (int x, int y){a=x, b=y; }_________( base &p) {cout ﹤﹤p. a ﹤﹤" "﹤﹤p. b﹤﹤ endl;};void main( ){base b(78, 87); b. show(b);}
34.#include ﹤iostream﹥#include ﹤fstream﹥using namespace std;void main( ){char *p="abcde";_________myf("ab. txt");myf ﹤﹤p; cout﹤﹤"this is a txt file";_________;//关闭文件ab.txt}
35.完成程序,使其输出结果为 n=2,sum=2 n=3,sum=5 n=5,sum=10#include ﹤iostream﹥using namespace std;class Sample {int n;static int sum;public:Sample(int x) {n=x;}void add( ){_________;}void disp( ) {cout ﹤﹤"n="﹤﹤n﹤﹤"sum="﹤﹤sum﹤﹤end;}};_________;void main( ) {Sample a(2), b(3), c(5);a. add( );a. disp( );b. add( );b. disp( );c. add( );c. disp( );}
五、程序分析题(本大题共2小题,每小题10分,共20分)
41.#include ﹤iostream.h﹥using namespace std;void main( ){int a[3][4]={{1,2,7,8},{5,6,11,15},{9,20,3,7}};int m=a[0][0];int i, j;for(i=0; i﹤3; i++)for(j=0; j﹤4; j++)if(a[i][j]﹥m) m=a[i][j];cout﹤﹤"m is:" ﹤﹤endl;cout ﹤﹤m﹤﹤ endl;}
42.#include ﹤ iostream.h﹥using namespace std;class example{ public:example(int n) {i=n; cout﹤﹤"Constructing";}~example( ) {cout ﹤﹤"Destructing";}int get_i( ){return i;}private:int i;};int sqr_int( example o) {retum o. get_i( )*o. get_i( );}void main( ) {example x(10);cout ﹤﹤x. get_i( )﹤﹤ endl;cout ﹤﹤ sqr_it(x)﹤﹤endl;}
六、程序设计题(本大题共1小题,共10分)
51.声明一个circle类,有数据成员Radius(半径, foat型),成员函数GetArea( )计算圆的面积。在main函数中声明一个circle类的对象c1,其半径为5.6。调用 GetArea( )函数计算c1的面积,并显示该计算结果(cout﹤"圆的面积:"﹤﹤c1. Getarea﹤endl;)。
延伸阅读
- 考前自救指南:希赛自考题库快速提分
- 自考专属刷题工具,刷题即提分!
- 最后9天,自考历年真题应该怎么刷?
- 自考备考一站式服务:希赛自考题库APP
- 0基础逆袭秘籍:希赛全套自考学习包(含智能题库)
- 避开备考误区!用希赛自考APP快速提分!
自考微信公众号
扫码添加
自考备考资料免费领取
去领取
扫描二维码