logo

15755063059

咨询时间:08:30--21:30
您现在的位置:福建自考网>模拟题 > 正文

自考模拟题:2020年8月自考《C++程序设计》考前试题和答案

来源:福建自考网   发表时间2020-07-22 11:00:43
自考助学

经历了这么长时间的复习,相信大家的书本知识已经可以融会贯通,历年真题也已经做的差不多了,那么现在就需要多做些模拟题来巩固知识点以及进行查漏补缺。福建自考网小编整理了2020年8月自考《C++程序设计》模拟试卷,希望对大家有所帮助。

一、单项选择题(本大题共20小题,每小题1分,共20分)
第1题 编写C++程序一般需经过的几个步骤依次是()
A. 编辑、调试、编译、连接
B. 编辑、编译、连接、运行
C. 编译、调试、编辑、连接
D. 编译、编辑、连接、运行
【正确答案】 B  

第2题 设有定义int  i;double  j=5;,则10+i+j值的数据类型是()
A. int
B. double
C. float
D. 不确定
【正确答案】 B  

第3题 决定C++语言中函数的返回值类型的是()
A. return语句中的表达式类型
B. 调用该函数时系统随机产生的类型
C. 调用该函数时的主调用函数类型
D. 在定义该函数时所指定的数据类型
【正确答案】 D  

第4题 假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行"delete  []px;”语句时调用该类析构函数的次数为()
A. 0
B. 1
C. n
D. n+1
【正确答案】 C  

第5题 如果表达式++i*k中的"++”和"*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()
A. operator*(i.operator++(),k)
B. operator*(operator++(i),k)
C. i.operator++().operator*(k)
D. k.operator*(operator++(i))
【正确答案】 B  

第6题 在下列成对的表达式中,运算结果类型相同的一对是()
A. 7.0/2.0和7.0/2
B. 5/2.0和5/2
C. 7.0/2和7/2
D. 8/2和6.0/2.0
【正确答案】 A  

第7题 友元关系不能()
A. 提高程序的运行效率
B. 是类与类的关系
C. 是一个类的成员函数与另一个类的关系
D. 继承
【正确答案】 D  

第8题 this指针存在的目的是()
A. 保证基类公有成员在子类中可以被访问
B. 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
C. 保证基类保护成员在子类中可以被访问
D. 保证基类私有成员在子类中可以被访问
【正确答案】 B  

第9题 存在定义int  a[10],x,*pa;,若pa=a[0],下列的四个选项中有一个和其他3个选项不是等价的为()
A. x=*pa;
B. x=*(a+l);
C. x=*(pa+1);
D. x=a[1];
【正确答案】 A  

第10题 在编译指令中,宏定义使用哪个指令()
A. #if
B. #include
C. #define
D. #error
【正确答案】 C  

第11题 使用地址作为实参传给形参,下列说法正确的是()
A. 实参是形参的备份
B. 实参与形参无联系
C. 形参是实参的备份
D. 实参与形参是同一对象
【正确答案】 D  

第12题 类的析构函数是对一个对象进行以下哪种操作时自动调用的是()
A. 建立
B. 撤销
C. 赋值
D. 引用
【正确答案】 B  

第13题 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()
A. x.a
B. x.a()
C. x-<a
D. (*x).a()
【正确答案】 B  

第14题 派生类的构造函数的成员初始化列表中,不能包含()
A. 基类的构造函数
B. 基类的对象初始化
C. 派生类对象的初始化
D. 派生类中一般数据成员的初始化
【正确答案】 C  

第15题 下列for循环的循环体执行次数为()
for(int  i(0),j(10);i=j=4;i++,j--)  
A. 0
B. 1
C. 4
D. 无限
【正确答案】 D  

第16题 在C++中,编写一个内联函数Fun,使用int类型的参数,求其平方并返回,返回值也为int类型,下列定义正确的是()
A. int Fun(int x){return x*x;}
B. int inline Fun(int x){return x*x;}
C. inline int Fun(int x){return x*x;}
D. int Fun(int x){inline return x*x;}
【正确答案】 C  

第17题 定义析构函数时,说法正确的是()
A. 其名与类名完全相同
B. 返回类型是void类型
C. 无形参,也不可重载
D. 函数体中必须有delete语句
【正确答案】 C  

第18题 假定一个类的构造函数为A(int  aa,int  bb){a=aa++;b=a*++bb;},则执行A  x(4,5);语句后,x.a和x.b的值分别为()
A. 4和5
B. 4和20
C. 4和24
D. 20和5
【正确答案】 C  

第19题 如果class类中的所有成员在定义时没有指明权限,则所有成员默认权限是()
A. public
B. protected
C. private
D. static
【正确答案】 C  

第20题 在C++语言中,数据封装要解决的问题是()
A. 数据的规范化
B. 便于数据转换
C. 避免数据丢失
D. 防止不同模块之间数据的非法访问
【正确答案】 D
 
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。
第1题 单目运算符作为类成员函数重载时,形参个数为___个。
【正确答案】 (P189)0
[解析]单目运算符使用成员函数重载可以不用形参,双目运算符使用一个参数。  

第2题 假设int  a=1,b=2;则表达式(++a/b)*b--的值为___。
【正确答案】 2
[解析]前缀++或――表示先使变量值变化,再使用,这和后缀恰恰相反。但是编译cout<<(++a/b)*b--时,先++a/b值为1,后1*b--,先取b=2,结果为2,再让b=1。  

第3题 每个对象都是所属类的一个___。
【正确答案】 (P69)实例
[解析]类是对象的抽象,对象是类的一个实例。  

第4题 设类A有成员函数void  f(void);若要定义一个指向类成员函数的指针变量pf来指向f,该指针变量的声明语句是:___。
【正确答案】 (P117)void (A::*pf)(void)=A::f;
[解析]void(A::*pf)(void)=A::f;指向成员函数的指针,它相当于两条语句:void(A::*pf)(void);和pf=A::f;。  

第5题 在单继承和多继承方式中,面向对象的程序设计应尽量使用___继承。
【正确答案】 (P138)单
[解析]多继承是单继承的扩展,且多继承易产生二义性等问题。  

第6题 在C++中,虚函数帮助实现了类的___。
【正确答案】 (P170)多态性
[解析]动态多态性是通过基类指针或引用结合虚函数来实现的。  

第7题 在删除一个动态对象时,将自动调用该动态对象所属类的___函数。
【正确答案】 (P80)析构
[解析]在下列情况下,析构函数会自动被调用:
(1)如果一个对象被定义被一个函数体内,当这个函数结束时,该对象的析构函数被自动调用。
(2)若使用new运算符动态创建一个对象,在使用delete运算符释放时,delete将会自动调用析构函数。  

第8题 编译时的多态性通过___函数实现。
【正确答案】 (P165)重载
[解析]编译多态性,实现的方法主要通过函数的重载或运算符的重载。  

第9题 在C++中,访问指针所指向的对象的成员使用___运算符。
【正确答案】 -<或.
[解析]使用指针访问成员有两种方法:成员运算符".”或指向运算符".”。  

第10题 在C++中,访问一个指针所指向的对象的成员所用的指向运算符是___。
【正确答案】 -<
[解析]指针使用成员有两种方法:"-<”指向运算符和".”成员访问运算符。  

第11题 静态成员定义的关键字为___。
【正确答案】 static
[解析]静态成员是类中所有对象共享特征,使用static关键字来说明。静态数据成员在每个类对象中并不占有存储空间,静态数据成员的值对每个 对象都是一样的,但它的值可以被任何一个对象更新,从而实现了同一类的不同对象之间的数据共享。静态数据成员具有静态生存期,必须对它进行初始化。静态数 据成员初始化的一般格式如下:<数据类型说明符<<类名<::<静态数据成员名<=<初始值<;。  

第12题 下面程序的输出结果为___  
自考模拟题:2020年8月自考《C++程序设计》考前试题和答案

【正确答案】 33  

第13题 带有___的类称为抽象类。
【正确答案】 (P173)纯虚函数
[解析]类中至少有一个纯虚函数,该类就称为抽象类,抽象类不能定义对象。  

第14题 控制格式输入输出的操作中,函数___是用来设置填充字符。要求给出函数名和参数类型。
【正确答案】 (P195)setfill(char)
[解析]格式控制方法的使用,如setw,setfill等等。  

第15题 在定义成员函数时,函数体之前加上___防止覆盖函数改变数据成员的值。
【正确答案】 (P114)const
[解析]使用const关键字说明的成员函数称为常成员函数,常成员函数的说明格式如下:<返回类型说明符<<成员函数名<(<参数表<)const;
在使用常成员函数时要注意:
(1)const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。
(2)常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。
(3)常对象只能调用它的常成员函数,而不能调用其他成员函数。  

第16题 C++是通过引用运算符___来定义一个引用的。
【正确答案】 (P10)
[解析]引用是C不具有使用方法,它表示变量的别名,在函数中使用很频繁,因为调用形式同传值调用,但修改形参实参也会相应改变的特征。  

第17题 执行___操作将释放由指针所指向的动态分配的数据空间。
【正确答案】 (P10)delete
[解析]delete用来删除new创建的对象。  

第18题 有int  a=1,b=2;则表达式a+++--b的值为___。
【正确答案】 2
[解析]a++是后加,--b是前减。  

第19题 在面向对象的程序设计中,将一组对象的共同特性抽象出来形成___。
【正确答案】 (P38)类
[解析]类是相似特征的对象的抽象,对象是类的一个实例。  

第20题 将指向对象的引用作为函数的形参,形参是对象的引用,实参是  ___。
【正确答案】 (P53)对象名
[解析]实参与形参类型要一致,形参是对象的引用,实参应该是对象名。  

三、改错题(本大题共5小题,每小题4分,共20分)
第1题 #include<iostream.h<
class  A
{public:
A(int  i=8):y(i){}
static  int  x;
int  y;
};
 int  x=20;//对类成员初始化
 void  main  ()
 {A  a;
 cout<<a.x<<“,  “<<a.y<<endl;
 }

【正确答案】 int x=20;//静态数据成员初始化,需要在外进行,格式错。
 [修改]int A::x=20;  

第2题 #include<iostream.h<
class  Aton
{int  X,Y;
protected:
int  zx,zy;
public:
void  init(int  i,int  j){zx=i;zy=j;}
Aton(int  i,int  j,int  n=0,int  m=0)
{X=i,Y=j,zx=m,zy=n;
}
};
void  main()
{Aton  A(25,20,3,5);
A.init(5,9);
cout<<A.X<<endl;
【正确答案】 int X,Y;因为X,Y都是私有的,在类外无法直接访问。
[修改]public:int X,Y;  

第3题 #include<iostream.h<
void  main()
{int  i(3),j(8);
int    *  const  p=i;
cout<<*p<<endl;
p=j;
cout<<*p<<endl;
}
【正确答案】 int  * const p=i;在指针变量前加const表示一个常指针即地址不能变化,它指向的变量不能改变且定义时必须设置指向变量或对象的地址。
 [修改]int *p=i;  

第4题 #include<iostream.h<
class  A
{int  i;
public:
virtual  void  fun()=0;
A(int  a)
{i=a;}
};
class  B:public  A
{int  j;
public:
void  fun()
{cout<<“B::fun()\n“;  }
B(int  m,int  n=0):A(m),j(n){}
};
void    main()
{A  *pa;
B  b(7);
pa=b;
}
【正确答案】 B(int m,int n=0):A(m),j(n){}因为基类是抽象类,不能被实例化,所以在派生类中不能调用初始化基类对象。所以B(int m,int n=0):A(m),j(n){}错误,删去A(m)。
[修改]B(int m,int n=0):j(n){}  

第5题 #include<iostream.h<
class  fract
{private:
int  den;
int  num;
public:
fract(int  d=0,int  n=1):den(d),num(n){}
friend  fract  operator+=(fract  ,fract  );
void  show(){cout<<den<<?/?<<num;}
};
friend  fract    operator+=(fract    f1,fract    f2)
{f1.den=f1.den*f2.num+f1.num*f2.den;
 f1.num*=f2.num;
return  f1;
}
void  main()
{fract  fr(3,4);
 fr+=fract(5,7);
 fr.show();
 cout<<endl;
}

【正确答案】 friend fract  operator+=(fract  f1,fract  f2)定义函数时,不能用friend修饰。
  [修改]fract  operator+=(fract  f1,fract  f2)  
 
四、完成程序题(本大题共5小题,每小题4分,共20分)
第1题 先为数组a输满数据,再为x输入一个数据,在数组a中找出第一个与x相等的元素并将其下标输出,若不存在 这样的元素,则输出“Not  found!“标志。
 #include<iostream.h<
void  main()
 {int  i,x,a[10];
 cout<<“输入数组中的10个数据:“;
 for(i=0;i<10;i++)
cin<<a[i];
 cout<<endl<<“输入要查找的一个数据:“;
cin<<x;
cout<<x<<endl;
for(i=0;i<10;i++)
if(_____)break;
if  (_____)
cout<<x<<“在数组中的位置是:“<<x<<endl;
else
cout<<“Not  found!  \n“<<endl;
}
【正确答案】 a[i]==x,i<10
[解析]在for循环中没有使用{},所以for只有一条语句组成的循环体。只有在找到该数据的情况下,强制退出循环,所以第一个判断是a[i]==x;第二个也是判断它是不成立时输出Not found!,另外成立条件就是i<10,没有超出数组范围。  

第2题 功能用冒泡法对数组a中的整数由小到大进行排序。
 #include<iostream.h<
void  sort(int  b[],int  n)
 {  int  i,j=0,t;
 for(i=1;i<n;i++)
{  for(j=0;________;j++)
 {  if(b[j]<b[j+1])
 {t=b[j];________;b[j+1]=t;}
 }
 }
 }
 void  main()
 {  int  a[]={3,2,7,1,19,6,2,8};
 int  i;
 for(i=0;i<8;i++)
cout<<a[i]<““;
 cout<<endl;
sort(a,8);
 for(i=0;i<8;i++)
cout<<a[i]<<““;
 cout<<endl;
}
【正确答案】 j<n-i,b[j]=b[j+1]
[解析]由t=b[j];;b[j+1]=t;可知相邻元素交换,所以第二个空为b[j]=b[j+1],两次循环分别控制外层循环的次数,内层循环的次数,由冒泡排序的算法可知第一空应填入j<n-i。
过程:i=1时内层循环应该是7(0~n-i)次,即8个数需要比较7次大数至于a[7]。
i=2时内层循环应该是6次,即余7个数需要比较6次大数至于a[6]。
 所以答案为b[j]=b[j+1]和j<n-i。  

第3题 完成下面类中成员函数的定义。
#include<iostream.h<
template<class  T<
class  f
{private:
T  x,y,s;
 public:
f(T  a=0,T  b=0){x=a;y=b;}
void  sum()
{s=x+y;}
T  gets();
};
template<class  T<
________gets()
{
return  s;
}
void  main()
{______a(1.5,3.8);
a.sum();
cout<<a.gets()<<endl;
}
【正确答案】 T f<T<::gets(),f <double<
[解析]定义模板函数的格式。定义模板类时要指出它的类型。  

第4题 请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
 11,10
 13,12
 #include<iostream.h<
class  A
 {int  a;
 public:
A(int  i=0){a=i;}
int  Geta(){return  a;}
void  show(){cout<<a<<endl;}
 };
 class  B
 {A  a;
 int  b;
 public:
B(int  i,int  j)_________
{}
void  show(){cout<<a.Geta()<<“,“<<b<<endl;}
 };
 void  main()
 {B  b[2]={B(10,11),B(12,13)};
 for(int  i=0;i<2;i++)
__________
 }
【正确答案】 :a(j),b(i),b[i].show();
[解析]在构造函数中对数据成员初始化,从结果先输出a,后b,所以对a=j,b=i;在循环中输出成员,调用show成员。  

第5题 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
#include  <  iostream  <
using  namespace  std;
void  copystr(________)
{ int  n=0;
while(n<m-1)
{ n++;
p1++;
}
while(*p1!=?0?)
{ *p2=*p1;
p1++;
p2++;
}
*p2=?0?;
}
void  main()
{int  m;
char  str1[20],str2[20];
cout<<“输入字符串1:  “;
__________
cout<<“输入从m个字符开始复制:“;
cin<<m;
if(strlen(str1)<m)
cout<<“输入超过str1的长度“<<endl;
else
{ copystr(str1,str2,m);
cout<<“复制的字符串是:“<<str2<<endl;
}
}
【正确答案】 char *p1,char *p2,int m,gets(str1);
p,q都是字符指针,从m位置取字符。所以char *p1,char *p2,int m。cin.get(str1,20),不要使用cin,因为cin把空格也作为结束符了,这样导致str1不能有空格。  
 
五、程序分析题(本大题共2小题,每小题5分,共10分)
第1题 给出下面程序输出结果。
#include<iostream.h<
class  a
{public:
a(int  i=10){x=i;cout<<“a:“<<x<<endl;}
int  x;
};
class  b:public  a
{public:
b(int  i):A(i){x=i;cout<<“b:“<<x<<“,  “<<a::x<<endl;}
private:
a  A;
int  x;
};
void  main()
{b  B(5);
}
【正确答案】 a:10
  a:5
  b:5,10
  [解析]定义对象B,先调用基类构造函数,在b构造函数中使用的是A(i),注意大小写,不是a(i),也就是说调用基类的构造函数时没有 实参值,所以采用默认值;在初始化类成员A,即A(i),i=5,所以输入为a:5;最后是b类的构造函数,x=5,来自基类x=10,输出 b:5,10。  
第2题 给出下面程序输出结果。
 #include<iostream.h<
class  Bas
 {private:
int  a;
 public:
void  set(int  x)
{a=x;}
void  show()
{cout<<“a=“<<a<<“,“;}
 };
 class  Der:public  Bas
 {private:
int  b;
 public:
void  set(int  x,  int  y=0)
 {Bas::set(x);b=y;}
void  show()
{Bas::show();cout<<“b=“<<b<<endl;} 

声明:

(一)由于考试政策等各方面情况的不断调整与变化,本网站所提供的考试信息仅供参考,请以权威部门公布的正式信息为准。

(二)本网站在文章内容来源出处标注为其他平台的稿件均为转载稿,免费转载出于非商业性学习目的,版权归原作者所有。如您对内容、版权等问题存在异议请与本站联系,我们会及时进行处理解决。

考试提醒

【报名时间:2月19日-3月1日】

  • 微信公众号
  • 微信公众号 扫一扫加关注微信公众号

    与考生自由互动、并且能直接与专业老师进行交流解答。

  • 考生交流群 扫一扫加入微信交流群

    与考生自由互动、并且能直接与专业老师进行交流解答。

备考资料免费领取

报名层次:
所报专业:
姓       名:
电       话:

我已阅读并同意 《用户协议》《隐私政策》

微信公众号

关注微信公众号回复“免费资料”即可获取!

关注公众号

回复“免费资料”领取复习资料

微信公众号

微信公众号

<<点击收起

在线咨询

APP
下载

联系
电话
扫描
二维码
反馈
建议
回到
顶部

15755063059