手机版 网站地图 NEWS自考
logo
免费咨询

400-869-6989

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

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

来源:福建自考网 发表时间:2020-07-22 11:00
经历了这么长时间的复习,相信大家的书本知识已经可以融会贯通,历年真题也已经做的差不多了,那么现在就需要多做些模拟题来巩固知识点以及进行查漏补缺。福建自考网小编整理了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;} 
  }; 
  void  main() 
  {Der  b; 
  b.set(20);     
  b.show();
  b.set(10,30);
  b.show();
}
【正确答案】 a=20,b=0
 a=10,b=30
[解析]调用基类函数使用形式:类名::成员。   
 
六、程序设计题(本大题共1小题,共10分)
第1题 编写一个时间类,实现时间的加、减、读和输出。
  #include  <time.h>
  #include  <iostream.h>
  #include  <string.h>
  #include  <stdlib.h>
  class  Time
  {public:
Time(char*  s=NULL);
void  operator+(Time&  ti);
void  operator-(Time&  ti);
void  Display();
  protected:
int  hour;
int  minute;
int  second;
};
    result[0]=?0?+hour%10;
result[1]=?0?+hour/10;
result[3]=?0?+minute%10;
  result[4]=?0?+minute/10;
result[6]=?0?+second%10;
result[7]=?0?+second/10;
cout <<result <<endl;
}
void main()
{Time a;
Time b("02:15:30");
  a+b;
a.Display();
}
" />
【正确答案】 Time::Time(char* s)
{char str[9]={0};
  char t[3]={0};
  if(s)
strncpy(str,s,8);
  else
_strtime(str);
hour=atoi( strncpy(t,str,2))%24;
minute=atoi(strncpy(t,&str[3],2))%60;
second=atoi(strncpy(t,&str[6],2))%60; 
}
void Time::operator+(Time& ti)
{int st;
  st=second+ti.second;
second=(st)%60;
st=st/60+minute+ti.minute;
minute=(st)%60;
st=st/60+hour+ti.hour;
hour=(st)%24;
}
void Time::operator-(Time& ti)
{int st;
st=60+second-ti.second;
second=st %60;
st=60+st/60+minute-ti.minute-1;
minute=st%60;
st=24+st/60+hour-ti.hour-1;
hour=(st)%24;
}
void Time::Display()
{char result[9]="XX:XX:XX";
  result[0]=?0?+hour%10;
result[1]=?0?+hour/10;
result[3]=?0?+minute%10;
  result[4]=?0?+minute/10;
result[6]=?0?+second%10;
result[7]=?0?+second/10;
cout <<result <<endl;
}
void main()
{Time a;
Time b("02:15:30");
  a+b;
a.Display();
}  

 

以上就是“自考模拟题:2020年8月自考《C++程序设计》考前试题和答案”的所有内容,希望能帮到大家。想要获取更多自考免费真题库和模拟题库可以关注福建自学考试官网公众号,免费领取。

自考应试的技巧有哪些?

温馨提示:如果你对" 自考模拟题:2020年8月自考《C++程序设计》考前试题和答案"问题不是很了解,还有什么疑问,请及时联系咨询老师: 025-87716975或者QQ咨询在线老师 QQ在线咨询 。)

TAG标签: 模拟试卷

报名电话:025-87716975

网上报名: 点击进入福建自考网上报名系统

江苏大学自考招生

与"自考模拟题:2020年8月自考《C++程序设计》考前试题和答案"相关的文章

浙江自考网上报名

更多福建自考专业

长沙理工大学自考招生
自考本科有哪些专业
无法在这个位置找到: youcexuanfu.htm.htm

合作伙伴

最近更新: