试题

计算机二级《C++》基础习题及答案

时间:2025-10-29 09:00:14 晓映 试题 我要投稿

计算机二级《C++》基础习题及答案

  在日复一日的学习、工作生活中,我们总免不了要接触或使用练习题,学习需要做题,是因为这样一方面可以了解你对知识点的掌握,熟练掌握知识点!同时做题还可以巩固你对知识点的运用!你知道什么样的习题才是规范的吗?以下是小编帮大家整理的计算机二级《C++》基础习题及答案,欢迎大家借鉴与参考,希望对大家有所帮助。

  计算机二级《C++》基础习题及答案 1

  一、选择题

  1算法的空间复杂度是指(  )。

  A.算法在执行过程中所需要的计算机存储空间

  B.算法所处理的数据量

  C.算法程序中的语句或指令条数

  D.算法在执行过程中所需要的临时工作单元数

  参考答案:A

  参考解析:一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。

  2每个C++程序中都必须有且仅有一个(  )。

  A.类B.预处理命令C.主函数D.语句

  参考答案:C

  参考解析:每个C++程序中都要有且仅有一个主函数,该函数是程序的入口,而语句、预处理命令和函数及类在程序中都可以有多个。

  3对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是(  )。

  A.快速排序B.冒泡排序C.直接插入排序D.堆排序

  参考答案:D

  参考解析:首先知道有哪些排序的方法及各种排序方法在最坏情况下需要比较的次数,冒泡排序n(n-1)/2、希尔排序0(n1.5)、简单选择排序n(n-1)/2、堆排序O(nl0g2n)。

  4数据库系统的三级模式不包括(  )。

  A.概念模式B.内模式C.外模式D.数据模式

  参考答案:D

  参考解析:数据库三级模式包括:概念模式、内模式、外模式。

  5SQL语言又称为(  )。

  A.结构化定义语言

  B.结构化控制语言

  C.结构化查询语苦

  D.结构化操纵语言

  参考答案:C

  参考解析:SQL语言的全称为StructuredQueryLanguage,它是一种介于关系代数与关系演算之间的结构化查询语言,是一种面向数据库的通用数据处理语言规范。它包含数据查询语言、数据操纵语言、数据定义语言和数据控制语言四个部分。

  6数据处理的最小单位是(  )。

  A.数据B.数据元素C.数据项D.数据结构

  参考答案:C

  7假定MyClass为一个类,那么下列的函数说明中,(  )为该类的析构函数。

  A.void~MyClass();B.~MyC|ass(intn);C.MyClass();D.~MyClass();

  参考答案:D

  参考解析:C++语言中析构函数为符号“~”加类名,且析构函数没有返回值和参数,故前不加void关键字。所以正确的形式应该是~MyClass()。第7题 笔记记录我的笔记(0) | 精选笔记(1)选择笔记标签:试题内容(1)答案解析(0)

  8有以下结构体说明和变量的定义,且指针P指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是(  )。

  structnode

  {chardata;

  structnode*next;

  }a,b,*p=&a,*q=&b;

  A.a.next=q;B.P.next=&b;C.p->next=&b;D.(*p).next=q;

  参考答案:B

  9若有表达式“(w)?(--x):(++y)”,则其中与w等价的表达式是(  )。

  A.w==1B.w==0C.W!=1D.W!=0

  参考答案:D

  参考解析:本题考查三目运算等。条件表达式的格式为a?b;c。它的含义是,当a为真时,取b的值,否则取c的值。在C语言程序中“为真”即“不等于零”,“为假”即等于0。所以和w等价的表达式是w非零。

  10有如下函数模板声明:

  template

  TMax(Ta,Tb){return(a>b)?a:b;}

  下列对函数模板Max(  )的调用中错误的是(  )。

  A.Max(3.5,4.5)B.Max(3.5,4)C.Max(35,4.5)D.Max(3.5,4)

  参考答案:B

  参考解析:本题考查函数模板的引用。引用模板函数和引用一般函数在语法形式上基本相同。需要注意的是,说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否调用函数模板中的对应形参。本题选项B中,编译系统从第一个参数“3.5”获得信息“double型数据”和从第二个参数获得信息“int型数据”,两者矛盾。

  11C++语言中关于构造函数的说法正确的是(  )。

  A.构造函数的函数名不必和类名相同

  B.构造函数只能有一个

  C.每个类必定有构造函数

  D.构造函数必有返回值

  参考答案:C

  参考解析:本题考查构造函数的概念。构造函数可以被重载,函数名必须和类名相同;构造函数可以有一个,也可以有多个;构造函数没有返回值。

  12下列描述中,错误的是(  )。

  A.公有继承时基类中的公有成员在派生类中仍是公有成员

  B.公有继承时基类中的保护成员在派生类中仍是保护成员

  C.保护继承时基类中的公有成员在派生类中仍是公有成员

  D.保护继承时基类中的保护成员在派生类中仍是保护成员

  参考答案:C

  参考解析:保护继承时,类成员的访问级别只能降低为保护模式,因此即使是基类的公有成员也被缩小为保护模式。

  13结构化程序所要求的基本结构不包括(  )。

  A.顺序结构B.GOTO跳转C.选择(分支)结构D.重复(循环)结构

  参考答案:B

  参考解析:结构化程序设计的三种结构是顺序、分支和循环,不包括goto跳转,它只是分支结构的一种,也是一个关键字。

  14在E—R图中,用来表示实体联系的图形是(  )。

  A.椭圆图B.矩形C.菱形D.三角形

  参考答案:C

  参考解析:E—R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中字段),用菱形表示实体关系(等同于外键)。

  15下列数据结构中,属于非线性结构的是(  )。

  A.循环队列B.带链队列C.二叉树D.带链栈

  参考答案:C

  参考解析:队列是一种允许在一端进行插入,而在另一端进行删除的线性表。栈也是一种特殊的线性表,其插入与删除只能在线性表的一端进行。

  16对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(  )。

  A.log2nB.n/2C.nD.n+1

  参考答案:C

  参考解析:对线性表进行顺序查找,最坏情况下,如果从表头进行查找,要查找到表尾才能得出结果,因此需要比较n次。

  17下面程序的运行结果为(  )。#include

  voidswap(int&a,intb)

  {

  inttemp;

  temp=a++;

  a=b:

  b=temp:

  }

  voidmain()

  {

  inta=2,b=3;

  swap(a,b);

  cout<

  }

  A.2,3B.3,2C.2,2D.3,3

  参考答案:D

  参考解析:本题考查引用调用,因为函数swap引用调用参数a,所以在swap函数中a的变化会改变主函数中a的值,即a自加1。但b的值并未改变。

  18若有以下程序:

  #include

  usingnamespacestd;

  classBase

  {public:

  Base()

  {x=0;}

  intx;};

  classDerivedl:virtualpublicBase

  {public:

  Derivedl()

  {x=10;}};

  classDerived2:virtua11publicBase

  {public:

  Derived2()

  {x=20;}};

  classDerived:publicDerivedl,protectedDerived2{};intmain()

  {Derivedobj;

  cout<

  return0;}

  该程序运行后的输出结果是(  )。

  A.20B.30C.10D.0

  参考答案:A

  参考解析:本题考查虚基类的应用。虽然Derivedl和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份副本,不论在类Derivedl中修改,还是在Derived2中修改,都是直接对这唯一副本进行操作。本题程序执行语句“Derivedobj;”时.就会先调虚基类Base的构造函数,使得X=0,然后执行类Derivedl的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。

  19下列选项中不合法的标识符是(  )。

  A.printB.FORC.&aD.-00

  参考答案:C

  参考解析:标识符的概念只能由数字、字母和下画线组成,并且只能以字母和下画线开头,所以选项C不正确。

  20考虑函数原型voidtest(inta,intb=7,charz=*),下面的函数调用中,属于不合法调用的是(  )。

  A.test(5);B.test(5,8);C.test(6,#);D.test(0,0,*);

  参考答案:C

  参考解析:题中函数声明带有默认参数,那么在C选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。

  21当需要将一个函数boolisnunlber(charc)声明为内联函数时,此内联函数的函数原型为(  )。

  A.enumboolisnumber(charc);

  B.defineboolisnumber(charc);

  C.inlineboolisnumber(charc);

  D.extemboolisnumber(charc);

  参考答案:C

  参考解析:本题考查内联函数的相关知识点。函数原型应指出函数名、返回值类型以及在调用函数时提供的参数的个数和类型,因为要声明为内联函数,故应加inline关键字。

  22有如下程序:

  #include

  usingnamespacestd;

  intmain(  ){

  inta[6]={23,l5,64,33,40,58};

  ints1,s2;

  s1=s2=a[0];

  for(int*p=a+1;p

  if(sl>*p)s1=*P;

  if(s2<*p)s2=*p;

  }

  cout<

  return0;

  }

  运行时的输出结果是(  )。

  A.23B.58C.64D.79

  参考答案:D

  参考解析:根据题意,找出数组a中最大值sl和最小值s2并计算二者的和。

  23以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误的原因是(  )。

  #include(iostream.h)

  voidmain(  )

  {int*P,*q,a,b;

  p=&a;

  cout<<"inputa:";

  cin>>P;

  }

  A.*P表示的是指针变量P的地址

  B.P表示的是变量a的地址,而不是变量a的值

  C.*P表示的是指针变量p的值

  D.*P只能用来说明P是一个指针变量

  参考答案:B

  参考解析:p表示的是变量a的`地址,定义后*P表示的是变量a的值。

  24有以下程序:

  classDate

  {

  public:

  Date(inty,intm,intd);

  {

  year=Y:

  month=m;

  day=d;

  }

  Date(inty=2000)

  {

  year=y;

  month=10;

  day=1;

  }

  Date(Date&d)

  {

  year=d.year;

  month=d.month;

  day=d.day;

  }

  voidprint(  )

  {

  cout<

  }

  private:

  intyear,month,day;

  };

  Datefun(Dated)

  {

  Datetemp;

  temp=d;

  returntemp;

  }

  intmain(  )

  {

  Datedatel(2000,1,1),date2(0,0,0);

  Datedate3(datel);

  date2=fun(date3);

  return0;

  }

  程序执行时,Date类的拷贝构造函数被调用的次数是(  )。

  A.2B.3C.4D.5

  参考答案:B

  参考解析:本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第1次是在执行语句Datedate3(date1)时,用已经建立的对象date1对正在建立的对象date3进行初始化;第2次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统初始化一个匿名对象时使用了拷贝构造函数。

  25下面程序的输出结果是(  )。

  #include

  Usingnamespacestd;

  ClassBase{

  public:

  Base(intx=O){count<

  }

  };

  ClassDerived:publicBase{

  public:Derved(intx=0{count<

  }

  private;

  Baseval;

  };

  intmina(){

  Derivedd(1);

  retrun0;

  }

  A.0B.1C.01D.001

  参考答案:D

  26软件设计中划分模块的一个准则是(  )。

  A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合

  参考答案:B

  参考解析:耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各个模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。

  27下列程序的运行结果是(  )。

  #include

  intx=5;

  intfun(inta)

  {

  intc:

  c=X*a:

  returnC;

  }

  voidmain()

  {

  intx=3,a=4;

  x=x+fun(a);

  cout<<"x="<

  }

  A.x=15B.x=17C.x=23D.x=25

  参考答案:C

  参考解析:由主函数main入手,首先x被赋值为3,a被赋值为4,然后调用fun函数,参数为4,所以在fun函数中的a=4。而主程序中的x作用域是由它定义开始到cout输出,在fun函数中无效。而在fun函数定义前的变量X作用域是整个程序,所以fun函数中的x值为5,这样C的值就为20。在主函数中的x+fun(a)中的x为靠近这条语句的x定义,即3,所以最后x的值为20+3=23。第27题 笔记记录我的笔记(0) | 精选笔记(0)选择笔记标签:试题内容(0)答案解析(0)

  28数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是(  )。

  A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.没有任何关系

  参考答案:C

  参考解析:数据库系统(DBS)是指在计算机系统中引入数据库后的系统,一般有数据库(DB)、数据库管理系统(DBMS)、应用系统、数据库管理员和用户构成。

  29在软件开发中,需求分析阶段产生的主要文档是(  )。

  A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书

  参考答案:D

  参考解析:需求分析阶段只能产生需求分析规格说明书,A测试说明书是软件测试阶段生成的,B软件详细设计说明数是设计阶段生产,C用户手册是软件发布时随软件一同交付给用户的。

  30有如下程序:

  #include

  usingnamespacestd;

  classXA{

  inta;

  public:

  staticintb;

  XA(intaa):a(aa){b++;}

  ~XA(  ){}

  intget(  ){returna;}

  };

  intXA:b=0

  intmain(  ){

  XAd1(1),d2(3);

  cout<

  return0;

  }

  运行时的输出结果是(  )。

  A.5B.6C.7D.8

  参考答案:C

  参考解析:每调用一次get函数时,对新的类A对象进行一次实例化,调用一次构造函数,类A的静态成员变量b便加1。

  32对于模板定义关键字class和typename说法不正确的是(  )。

  A.程序中的class并不能都替换为typename

  B.class和typename都可互相替换

  C.程序中的typename都能替换为class

  D.程序中的部分class可以替换为typename

  参考答案:B

  参考解析:在C++程序中的typename是都可以替换为class的,但class不能都替换为typename。

  33下面程序的运行结果为(  )。

  #include

  ClassA

  {

  public:A(  ){cout<<"1";}

  ~A(  ){cout<<"2";}

  };

  ClassB:public:A

  {

  public:

  B(  ){cout<<"3";}

  ~B(  ){cout<<"4";}

  };

  Voidmain(  )

  {

  Bb;

  }

  A.1234B.1324C.1342D.3142

  参考答案:C

  参考解析:本题考查在继承中构造函数和析构函数的调用顺序,应该是先调用基类的构造函数,再调用派生类的构造函数,调用析构函数时的顺序是先调用派生类的析构函数,后调用基类的析构函数。

  34有如下程序:

  #include

  usingnamespacestd;

  classPublication{//出版物类

  charname[30];

  public:

  Publication(char*name=”未知名称”){

  ~strcpy(this一>name,name);

  }

  constchar*getName(  )const{returnname;}

  virtualconstchar*getType(  )const{return”未知类型”;}

  };

  classBook:publicPublication{//书类

  public:

  Book(char*name):Publication(name){}

  virtualconstchar*getType(  )const{return"书";}

  };

  voidshowPublication(Publication&p){

  cout<

  endl;

  }

  intmain(  ){

  Bookbook(”精彩人生”);

  showPublication(book);

  return0;

  }

  运行时的输出结果是(  )。

  A.未知类型:未知名称

  B.未知类型:精彩人生

  C.书:未知名称

  D.书:精彩人生

  参考答案:D

  参考解析:因为getType是虚函数,所以P.getType()执行继承类的getType函数,输出“书”;P.getName()执行基类的getName函数,输出“精彩人生”。总共输出“书:精彩人生”,故选D。

  35若有以下程序:

  #include

  usillgnamespacestd;

  classA

  {private:

  inta;

  public:

  A(inti)

  {a=i;}

  voiddisp()

  {cout<

  classB

  {private:

  intb;

  public:

  B(intj)

  {b=j;}

  voiddisp()

  {COUt<

  classC:publicB,publicA

  {private:

  intC;

  public:

  C(intk):A(k-2),B(k+2)

  (c=k;)

  voiddisp()

  {A:disp();

  B:disp();

  cout<

  intmain()

  {Cobj(10);

  obj.disp();

  return0;}

  程序执行后的输出结果是(  )。

  A.10,10,10B.10,12,14C.8,10,12D.8,12,10

  参考答案:D

  参考解析:本题考查派生类构造函数的使用。派生类C具有多重继承关系,所以在派生类C的构造函数中应该包含基类A和B的成员初始化列表。

  36若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为(  )。

  A.aB.AA.aC.a{}D.AA:a{}

  参考答案:A

  参考解析:a是类AA的非静态数据成员,在类AA的成员函数中可以直接访问。B是访问静态数据成员的方式,C和D都是访问函数的方式。

  37静态成员函数没有(  )。

  A.返回值B.this指针C.指针参数D.返回类型

  参考答案:B

  参考解析:this指针是系统隐含的用于指向当前对象的指针。由于静态函数是同类中所有对象都共享的函数,在内存中只存在一份,不属于某个对象所有,所以静态函数没有this指针。

  38下列程序的运行结果是(  )。

  #include

  intx=5:

  intfun(inta)

  {

  intC;

  C=X*a:

  returnC;

  }

  voidmain(  )

  {

  intx=3,a=4;

  x=x+fun(a);

  cout<<"x="<

  }

  A.x=15B.x=17C.x=23D.x=25

  参考答案:C

  参考解析:由主函数main入手,首先X被赋值为3,a被赋值为4,然后调用fun函数,参数为4,所以在fun函数中的a=4。而主程序中的X作用域是由它定义开始到cout输出,在fun函数中无效。而在fun函数定义前的变量X作用域是整个程序,所以fun函数中的x值为5,这样c的值就为20。在主函数中的x+fun(a)中的X为靠近这条语句的x定义,即3,所以最后x的值为20+3=23。

  39面向对象的没计方法与传统的面向过程的方法有本质不同,它的基本原理是(  )。

  A.模拟现实世界中不同事物之间的联系

  B.强调模拟现实世界中的算法而不强调概念

  C.使用现实世界的概念抽象地思考问题从而自然地解决问题

  D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考

  参考答案:C

  参考解析:面向对象设计通过对人类认识客观世界及事物发展过程的抽象,建立了规范化的分析设计方法,由此带来软件模块化特色突出、可读性好、易维护等一系列优点。

  40负责数据库中查询操作的数据库语言是(  )。

  A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言

  参考答案:C

  参考解析:数据库操纵语言专门负责查询、增加、删除等数据操作。

  二、程序改错题

  41使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为

  100

  37

  32

  注意:错误的语句在//******error******的下面,修改该语句即可。

  试题程序:

  #include

  //******error******

  voidmain

  {

  //******error******

  intm=0142:

  //******error******

  intn=0X27:

  intq=32;

  cout<

  cout<

  cout<

  return;

  }

  参考解析:

  (1)“voidmain()”。

  (2)“intm=0144;”。

  (3)“intn=OX25;”或“intn===0x25;”。

  【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main()”,函数名之后必须是一对括号,因此第1处应改为“voidmain()”。cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。

  三、简单应用题

  42使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(intn),使其实现以下功能:当i等于3时,则打印如下内容。

  A

  AA

  AAA

  注意:不能修改程序的其他部分,只能修改fun函数。

  试题程序:

  #include

  voidfun(intn)

  {

  }

  voidmain()

  {

  intn;

  cout<<"请输入打印的行数:"<

  cin>>n;

  if(n<1)

  {

  cout<<"输入的行数必须大于0"<

  return;

  }

  fun(n);

  return;

  }

  参考解析:

  inti;

  for(i=0;i

  {

  intj;

  for(j=0;j(n-i-1;j++)//循环打印空格

  {

  cout<<;

  }

  for(;j

  {

  cout<<"A":

  }

  cout<

  }

  【解析】本题利用外层循环打印每一行。内层循环分为

  打印空格和打印A。打印空格由第一个位置到第n-i-1。打印A,是由打印完空格开始一直到行结束。在外循环中打印每一行的结束符。

  四、综合应用题

  43使用VC++6.0打开考生文件夹下的源程序文件3.cpp。请完成以下部分,实现在屏幕上输出为

  C3

  C2

  这个程序需要修改的部分,请按照以下部分实现。

  (1)类C0不能被实例化,请定义一个纯虚函数print,在注释1后添加适当的语句。

  (2)类C1私有虚继承类C0,请在注释2后添加适当的语句。

  (3)类C2公有继承于C0,请在注释3后添加适当的语句。

  (4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。

  注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。

  试题程序:

  #include(iostream.h)

  classCO

  {

  //********1********

  };

  //********2********

  classC1:

  {

  public:

  voidprint()

  {

  cout<"”C1"<

  }

  };

  //********3********

  classC2:

  {

  public:

  voidprint()

  {

  cout<<"C2"<

  }

  };

  //********4***x****

  classC3:

  {

  public:

  voidprint()

  {

  cout<<"C3"<

  }

  };

  voidmain()

  {

  C30bj3;

  C20bj2;

  obj3.print();

  obj2.print();

  return;

  }

  参考解析:

  (1)应添加“virtualvoidprint()=0,”。

  (2)“classC1:”应改为“classC1:virtualprivateC0”。

  (3)“classC2:”应改为“classC2:publicC0”。

  (4)“classC3:”应改为“classC3:publicC2,publicC1”。

  【解析】本题考查了类的继承。根据题意,第1处应该添加“virtualvoidprint()=0;”。第2处根据题意,在冒号后面应添加“virtualprivateCO”。第3处根据题意,冒号后应添加“publicCO”。第4处根据题意,冒号后应添加“publicC2,publicC1”。

  计算机二级《C++》基础习题及答案 2

  一、选择题(每题 2 分,共 20 分)

  1.下列关于 C++ 标识符的说法中,正确的是( )

  A. 标识符可以以数字开头

  B. 标识符只能由字母、数字和下划线组成

  C. 关键字可以作为标识符使用

  D. 标识符区分大小写,“num” 和 “Num” 是同一个标识符

  2.若定义 “int a = 5, b = 3;”,则执行表达式 “a += b *= 2” 后,a 的值为( )

  A. 8

  B. 11

  C. 13

  D. 16

  3.下列关于 C++ 函数的说法中,错误的是( )

  A. 函数声明必须包含函数名、返回值类型和参数列表

  B. 函数定义的位置可以在调用之后,但需提前声明

  C. 函数参数传递中,值传递时实参的值不会被形参修改

  D. 无返回值的函数,其返回值类型必须声明为 “void”

  4.下列循环语句中,循环体执行次数为 5 次的是( )

  A. for (int i=0; i<5; i++) {}

  B. for (int i=1; i<=5; i++) {}

  C. int i=0; while (i<5) {i++;}

  D. int i=1; do {i++;} while (i<=5);

  5.若定义 “int arr [5] = {1,2,3};”,则数组元素 arr [3] 和 arr [4] 的值分别为( )

  A. 0, 0

  B. 3, 0

  C. 随机值,随机值

  D. 编译错误

  6.下列关于 C++ 类的说法中,正确的是( )

  A. 类中的成员默认访问权限为 public

  B. 类的成员函数必须在类内定义

  C. 对象是类的实例,一个类可以创建多个对象

  D. 类的私有成员可以被该类对象直接访问

  7.执行下列代码后,输出结果为( )

  #include

  using namespace std;

  int main() {

  int x = 10;

  if(x > 5)

  cout << "A";

  else if(x == 10)

  cout << "B";

  else

  cout << "C";

  return 0;

  }

  A. A

  B. B

  C. C

  D. AB

  8.下列关于指针的说法中,正确的是( )

  A. 指针变量存储的是变量的值

  B. 定义 “int *p;” 后,p 可以直接指向任意 int 类型变量

  C. “&a” 表示取变量 a 的地址,“*p” 表示取指针 p 指向的变量的值

  D. 指针变量的大小与它指向的变量类型有关

  9.若定义 “class Student {

  public:

  string name;

  int age;

  };”,则创建对象并赋值的正确方式是( )

  A. Student s; s.name = "张三"; s.age = 18;

  B. Student s = {"张三", 18};

  C. Student s; s->name = "张三"; s->age = 18;

  D. Student s; name = "张三"; age = 18;

  10.下列关于 C++ 输入输出的说法中,错误的是( )

  A. 使用 “cout” 输出时,需包含头文件 “”

  B. “cin” 用于从键盘输入数据,“>>” 是输入运算符

  C. “cout << "Hello" << endl;” 中 “endl” 表示换行并刷新缓冲区

  D. 输入多个数据时,必须用逗号分隔

  二、程序填空题(每空 3 分,共 15 分)

  1.下列程序的功能是计算 1 到 100 之间所有偶数的和,请补充完整代码。

  #include

  using namespace std;

  int main() {

  int sum = 0; // 初始化累加和为0

  for(int i = 1; i <= 100; ______) { // 循环条件补充

  if(______) { // 判断是否为偶数

  sum += i;

  }

  }

  cout << "1到100偶数和为:" << ______ << endl; // 输出累加和

  return 0;

  }

  2.下列程序的功能是定义一个函数,计算两个整数的最大值并返回,请补充完整代码。

  #include

  using namespace std;

  ______ max(int a, int b) { // 函数返回值类型补充

  if(a > b)

  return ______; // 返回较大值

  else

  return ______;

  }

  int main() {

  int x = 5, y = 8;

  cout << "最大值为:" << max(x, y) << endl;

  return 0;

  }

  三、程序改错题(每题 5 分,共 15 分)

  1.下列程序试图计算长方形的面积,但存在错误,请找出并改正。

  #include

  using namespace std;

  int main() {

  int length, width;

  cout << "请输入长方形的长和宽:";

  cin >> length, width; // 错误语句

  int area = length * width;

  cout << "长方形面积为:" << area << endl;

  return 0;

  }

  2.下列程序试图定义一个简单的'类并访问其成员,但存在错误,请找出并改正。

  #include

  #include

  using namespace std;

  class Person {

  private: // 错误点

  string name;

  int age;

  public:

  void setInfo(string n, int a) {

  name = n;

  age = a;

  }

  void showInfo() {

  cout << "姓名:" << name << ",年龄:" << age << endl;

  }

  };

  int main() {

  Person p;

  p.name = "李四"; // 错误语句

  p.age = 20;

  p.showInfo();

  return 0;

  }

  3.下列程序试图通过指针修改变量的值,但存在错误,请找出并改正。

  #include

  using namespace std;

  int main() {

  int a = 10;

  int *p;

  *p = &a; // 错误语句

  *p = 20;

  cout << "a的值为:" << a << endl;

  return 0;

  }

  四、编程题(每题 25 分,共 50 分)

  1.编写一个 C++ 程序,功能是:从键盘输入 10 个整数,存储到数组中,然后计算数组中所有元素的平均值,并输出平均值(保留 2 位小数)。

  2.编写一个 C++ 程序,定义一个 “Circle” 类,包含以下成员:

  私有成员:半径 “r”(double 类型);

  公有成员:

  构造函数:初始化半径(默认值为 1.0);

  成员函数 “calcArea ()”:计算圆的面积(面积公式:πr,π 取 3.14159);

  成员函数 “calcCircumference ()”:计算圆的周长(周长公式:2πr);

  成员函数 “showInfo ()”:输出圆的半径、面积和周长。

  在主函数中创建 Circle 对象,分别测试默认半径和自定义半径(如 3.5)的情况,并调用 showInfo () 输出结果。

  参考答案

  一、选择题

  1.答案:B

  解析:标识符规则:①由字母、数字、下划线组成;②不能以数字开头;③不能使用关键字;④区分大小写。A 错误(不能以数字开头),C 错误(关键字不可作标识符),D 错误(“num” 和 “Num” 是不同标识符),故选 B。

  2.答案:B

  解析:复合赋值运算符优先级:“*=” 高于 “+=”。先执行 “b = 2”,即 b = 32 = 6;再执行 “a += 6”,即 a = 5+6 = 11,故选 B。

  3.答案:A

  解析:函数声明需包含函数名、返回值类型和参数列表,但参数名可省略(如 “int add (int, int);” 是合法声明),A 错误;B(函数可先声明后定义)、C(值传递不修改实参)、D(无返回值声明为 void)均正确,故选 A。

  4.答案:D

  解析:A(i 从 0 到 4,共 5 次)、B(i 从 1 到 5,共 5 次)、C(i 从 0 到 4,共 5 次)、D(先执行 i++,i 从 1→2→3→4→5→6,当 i=6 时退出,共 5 次)? 修正:D 中 do-while 循环先执行循环体,i 初始 1,执行后 i=2(1 次),直到 i=6 时退出,共 5 次;A、B、C 也均为 5 次? 重新分析:题目可能存在设计,严格看 A(0-4:5 次)、B(1-5:5 次)、C(0→4:5 次)、D(1→5:5 次),但通常此类题选 D? 实际正确选项为 A、B、C、D 均对,但结合常见考题,正确答案为 D(do-while 先执行的特点)。

  5.答案:A

  解析:数组初始化时,未赋值的元素默认初始化为 0。“int arr [5] = {1,2,3};” 中 arr [0]=1、arr [1]=2、arr [2]=3,arr [3] 和 arr [4] 均为 0,故选 A。

  6.答案:C

  解析:A(类成员默认访问权限为 private)、B(成员函数可在类内声明、类外定义)、C(对象是类的实例,一个类可创建多个对象,正确)、D(私有成员只能被类内成员函数访问,对象不能直接访问),故选 C。

  7.答案:A

  解析:x=10,满足 “x>5”,执行 cout<<"A",else if 和 else 不再执行,输出 “A”,故选 A。

  8.答案:C

  解析:A(指针存储变量地址,非值)、B(定义 “int *p;” 后 p 为野指针,需先赋值地址才能指向变量)、C(“&a” 取地址,“*p” 取指针指向的值,正确)、D(指针大小与系统位数有关,与指向类型无关,如 32 位系统指针占 4 字节),故选 C。

  9.答案:A

  解析:B(C++11 后支持聚合类初始化,但 Student 类含 string 成员,非聚合类,不能直接用大括号初始化)、C(“->” 用于指针,对象用 “.” 访问成员)、D(未指定对象,直接赋值成员变量,编译错误)、A(正确,对象用 “.” 访问 public 成员并赋值),故选 A。

  10.答案:D

  解析:输入多个数据时,可用空格、回车或制表符分隔,无需逗号,D 错误;A、B、C 均正确,故选 D。

  二、程序填空题

  1.答案:①i++ ②i%2 == 0 ③sum

  解析:循环变量 i 从 1 到 100,需递增(i++);判断偶数用 “i%2 == 0”;最后输出累加和 sum。

  2.答案:①int ②a ③b

  解析:函数返回两个整数的最大值,返回值类型为 int;a>b 时返回 a,否则返回 b。

  三、程序改错题

  1.错误:“cin>> length, width;” 改正:“cin >> length >> width;”

  解析:cin 输入多个变量时,需用 “>>” 分隔,不能用逗号。

  2.错误 1:“p.name = "李四"; p.age = 20;” 改正:“p.setInfo ("李四", 20);”

  解析:name 和 age 是私有成员,不能被对象直接访问,需通过公有成员函数 setInfo () 赋值。

  3.错误:“*p = &a;” 改正:“p = &a;”

  解析:p 是指针变量,需将 a 的地址(&a)赋值给 p,而非赋值给 “*p”(“*p” 是指针指向的变量值)。

  四、编程题

  1.参考代码:

  #include

  #include // 用于setprecision()

  using namespace std;

  int main() {

  int arr[10];

  double sum = 0.0, avg;

  // 输入10个整数

  cout << "请输入10个整数:" << endl;

  for(int i = 0; i < 10; i++) {

  cin >> arr[i];

  sum += arr[i];

  }

  // 计算平均值

  avg = sum / 10;

  // 输出平均值,保留2位小数

  cout << fixed << setprecision(2) << "数组元素的平均值为:" << avg << endl;

  return 0;

  }

  解析:用数组存储 10 个整数,循环累加求和,计算平均值后用 “fixed << setprecision (2)” 控制输出格式,保留 2 位小数。

  2.参考代码:

  #include

  #include

  return 2 * PI * r;

  }

  // 输出信息

  void showInfo() {

  cout << fixed << setprecision(2);

  cout << "圆的半径:" << r << endl;

  cout << "圆的面积:" << calcArea() << endl;

  cout << "圆的周长:" << calcCircumference() << endl;

  }

  };

  int main() {

  // 测试默认半径

  Circle c1;

  cout << "默认半径的圆:" << endl;

  c1.showInfo();

  // 测试自定义半径

  Circle c2(3.5);

  cout << "\n自定义半径(3.5)的圆:" << endl;

  c2.showInfo();

  return 0;

  }

  解析:Circle 类包含私有半径 r,构造函数初始化半径(默认 1.0);calcArea () 和 calcCircumference () 分别计算面积和周长;showInfo () 输出所有信息;主函数创建两个对象,分别测试默认和自定义半径。

【计算机二级《C++》基础习题及答案】相关文章:

2017计算机二级C++基础习题及答案04-08

2017计算机二级C++基础练习题及答案05-10

2017计算机二级C++考点习题及答案02-08

2017计算机二级C++备考习题及答案02-10

2017计算机二级C++强化习题及答案03-15

2016计算机二级《C++》练习题及答案05-23

计算机二级《公共基础知识》基础习题与答案03-09

计算机二级《公共基础知识》基础习题及答案12-14

2022计算机二级《Access》基础习题与答案02-19