一、简答题

1.以下说法中不正确的是
[]
A. C++程序中必须有-一个主函数main( ) ,而且是从main( )的第- - 条语句开始执行
B.非主函数都是在执行主函数时,通过函数调用或嵌套调用而得以执行的
C.主函数可以在任何地方出现
D.主函数必须出现在固定位置
2.若有定义int *p= new int(0) ,则下列说法正确的是
[]
A.系统用指针变量p来表示所指整型变量
B.声明-一个指针变量p,指向名为new的存储单元
C:系统为指针变量p分配-个整型数据的存储空间
D.通过运算符new ,分配一个整 型数据的存储空间,并将其内存地址赋予指针变量
3.以下有关类与对象的叙述中,错误的是
[]
A.对象是类的-一个实例
B.一个类可以有多个对象
C.任何一个对象都归属于- -个具体的类
D.只要是某个类的对象,那么该对象就可以访问这个类的所有成员
4.以下有关构造函数的叙述中,错误的是
[]
A.构造函数名必须和类名- -致
B.构造函数在定义对象时自动执行
C.在一个类中构造函数有且仅有一个
D.构造函数可以在类体内声明在类体外实现
5.以下叙述中正确的是
[]
A.类成员的定义必须放在类体内部
B.在类中,不作特别说明的数据成员均为私有类型
C.在类中,不作特别说明的数据成员均为公有类型
D.类成员的定义必须是成员变量在前,成员函数在后
6.友元函数的主要作用是
[]
A. 提高程序的效率
B.加强类的封装性
C.实现数据的隐蔽性
D.增加成员函数的种类
7.在C++中,字符型数据在内存中的存放形式为
[]
A.原码
B. BCD码
C. ASCII
D.反码
8.下列变量命名中,非法的是
[]
A. A LONG
B. MyCar
C. my_ car
D. a48
9.关于对类的描述中,错误的是
[]
A.类是创建对象的样板
B.类是具有唯- -标识符的实体
C.类就是C语言中的结构类型
D.类是具有共同行为的若千对象的统一描述体
10.不能作为函数重载的判断依据的是
[]
A. const
B.返回类型
C.参数个数
D. 参数类型
11. 已知:“int a=5;char c=’a’ ;”则输出语句cout<<c+1<<a <<c;的显示结果是
[]
A.65a
B.985a
C.98’5’a
D.65’a’
12.下面程序的输出结果是
[]

  1. #include < iostream >
  2. using namespace std;
  3. int main( )
  4. {
  5. inta=1,b= -2,c=3;
  6. if(a<b)
  7. if(b <0)c =0;
  8. else c+ =1;
  9. cout<<c<< endl;
  10. retum 0;

A.0
B.2
C.3
D.4
13. C++ 语言的跳转语句中,对于break和continue说法正确的是
[]
A. break语句只应用于循环体中
B. continue语句只应用于循环体中
C. break是无条件跳转语句, continue不是
D. break和continue的跳转范围不够明确,容易产生问题
14.下列函数的说明中,表示纯虚函数的是
[]
A. virtual int vf( int)
B. void vf( int) =0
C. virtual void vf() =0
D. virtual void vf( int) |}
15.以下关于运算符重载的描述中,错误的是
[]
A.运算符重载其实就是函数重载
B. 成员运算符比友元运算符少一个参数
C.需要使用关键字operator
D.成员运算符比友元运算符多一个参数
16.对于下面定义的类Myclass,在函数f()中将对象成员n的值修改为50的语句应该是
[]

  1. class Myclass
  2. {public:
  3. Myclass(inti){n=i;}
  4. void SetNum( int x) {n=x;}
  5. private : .
  6. int n;
  7. };
  8. int f( )
  9. { Myclass * P = new Myclass(45);

A. p->SetNum(50)
B. SetNum(50)
C.p- >n=50
D. p- >SetNum(50)
17.下面关于对象概念的描述中错误的是
[]
A.任何对象都必须有继承性
B.对象是属性和方法的封装体
C.对象间的通信靠消息传递
D.操作是对象的动态属性
**18.考虑函数原型void pass(int x,inty=5,char z=’
‘),下面的函数调用中,属于不合
法调用的是
[]
A. pass (5)
B. pass (5,8)
C. pass(6,’#”‘) .
D. pass (0,0,’*’)
19.下列关于虚函数的描述中,正确的是
[]
A.使用虚函数就一定产生多态性
B.虚函数只能是类中的一个成员函数,但不能是静态成员
C.一个类中仅可以说明一个纯虚函数
D.在构造函数和析构函数中调用虚函数采用动态联编
20.有以下程序段,其输出结果是**
[]

  1. #include < iostream >
  2. using namespace std;
  3. void main( )
  4. {
  5. char b[] =”Hello, you" ;
  6. b[5]='! ;
  7. cout<<b << endl;
  8. }

A. Hello ,you
B. Hello
C. Hello! you
D. !

二、填空题

21. 一般 C++语言源程序文件的后缀是. cpp;经过编译后,生成文件的后缀是. obj;经过
连接后,生成文件的后缀是.exe

22. C++ 语言中提供了3种循环语句:**while**循环语句、for循环语句和do_ while循环语句。

23.在”int a=10, p= &a;”语句中,p的值是**变量a的地址

24.执行3条语句“inta,b,
c=&a;int p=c;p=&b;” 后,e指向a。

25.若有以下定义:double w[9];则w数组元素下标的下限是0,上限是**8*

26.设int x[3][4] ;则x数组中含有**12**个int类型的数组元素。
27.将数学表达式image.png写成C++语盲表达式为:**ab+(aa+bb)/(2 ab)
28.模板函数的真正代码是在源程序中调用函数时产生。

29.源程序文档化要求程序应加注释,注释一般分为序言性注释和**功能性注释**。

30.重载函数必须有不同的**形参列表

31.在类中定义和实现的函数可以成为内联函数,它能够 加快程序执行速度。

32.在C++中输人输出是通过流来完成的,输出操作是将一个对象 的状态转换成一个**字符**序列。

33.C++语言中,派生类继承了基类的全部数据成员和除构造函数及析构函数之外的全部函数。

**34.定义以下变量并假设已赋确定的值:“char w;int x;foat y;double z;” ,则表达式“w
x+z -y”的数据类型是**double

35.若有一个Myclass类,则执行语句”MyCass obj1 ,obj2[2], p;”后,自动调用该类的构造函数3

36. this 指针保证每个对象拥有自己的数据成员,又共享处理这些数据成员的**代码

37.若有整型变量a=1,b= -2,c=3;则表达式a-b>b? c:a+b的值为**3

38.所谓“引用”就是将一个新标识符和一块已经存在的**存储区域**相关联,通常用于函数的参数表中或者作为函数的返回值。

39. C++ 为结构动态分配内存的一般格式是“指针名=new 结构名;”,当不再使用这个空间时必须用“delete指针名;”释放空间。

40. C++程序中使用string类定义存储字符串的对象时,必须在程序中包含这个类的头文件,
*即使用语句#include

三、程序改错题

41.以下是对类Sample的定义

  1. #include < iostream >
  2. using namespace std ;
  3. class Sample
  4. {
  5. public :
  6. Sample(int val) ;
  7. ~Sample();
  8. private:
  9. float a=2.5;
  10. Sample();
  11. };

Sample( int val) ;改为Sample( float val) ;
42.
image.png
正确代码:

  1. //以下代码是修改正后的
  2. #include <iostream>
  3. using namespace std;
  4. void swap(int &, int &);
  5. int main()
  6. {
  7. int a = 5, b = 10;
  8. swap(a, b);
  9. cout << "a=" << a << ",b=" << b << endl;
  10. return 0;
  11. }
  12. void swap(int &x, int &y)
  13. {
  14. int temp;
  15. temp = x;
  16. x = y;
  17. y = temp;
  18. }

1.编译器报错 main函数必需返回int
2.void swap( int x,int y)改为void swap( int &x , int&y )

43.此程序改正后的运行结果为12511 21
image.png

  1. /*
  2. 1 2 4 7 11
  3. 改为:
  4. 1 2 5 11 21
  5. */
  6. #include <iostream>
  7. using namespace std;
  8. int f(int);
  9. int main()
  10. {
  11. int i;
  12. for (i = 0; i < 5; i++)
  13. cout << f(i) << " ";
  14. return 0;
  15. }
  16. int f(int i)
  17. {
  18. static int k = 1;
  19. for (; i > 0; i--)
  20. k += i;
  21. return k;
  22. }

int k=l;改为static int k =1;

44.
image.png

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int x = 15;
  6. while (10 < x < 50)
  7. {
  8. x++;
  9. if (x / 3)
  10. {
  11. x++;
  12. break;
  13. }
  14. }
  15. cout << x << endl;
  16. return 0;
  17. }

while(10 10&&x <50)

45.此程序调用findmax()函数,返回数组中的最大值
image.png

  1. #include <iostream>
  2. using namespace std;
  3. int findmax(int *a, int n)
  4. {
  5. /* cout << "a的值为:" << a << endl;
  6. //输出 a的值为:0x61fe00
  7. //输出 *a的值为:12 由于数组名代表着数组的首地址,即a == &a[0]
  8. cout << "*a的值为:" << *a << endl; */
  9. int *p, *s;
  10. for (p = a, s = a; p - a < n; p++)
  11. if (*p > *s)
  12. *s = *p;
  13. return (*s);
  14. }
  15. int main()
  16. {
  17. int x[5] = {12, 2, 8, 47};
  18. cout << findmax(x, 5) << endl;
  19. return 0;
  20. }

if( p< s) s= p;改为if(p> s)s=p;)

四、程序填空题

46.程序在主函数中创建派生类Derived的对象obj ,调用f( )函数后输出DBC
image.png
class Derived : public Base
ptr->f( );

47. 程序的运行结果为:12
image.png**
cout<Derived d(12) ;

48.
image.png
double operator( ) ( double x, double y) const
void main( )

49.程序运行结果为3
image.png

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 16, b = 21, m = 0;
  6. switch (1)
  7. {
  8. case 0:
  9. m++;
  10. break;
  11. case 1:
  12. m++;
  13. switch (b % 3)
  14. {
  15. case 0:
  16. m++;
  17. case 1:
  18. cout << "case 1 execute" << endl;
  19. m++;
  20. break;
  21. }
  22. cout << m << endl;
  23. return 0;
  24. }
  25. }

注意:没有break 还会执行后面的case,所以m=3
switch(表达式值为1即可)
case 0:m ++ ;

50.定义平面上一个点的类point,有双精度型私有数据成员横坐标x和纵坐标y公有成
员函数有写人函数input()、求原点距离函数distance( )和显示函数show(),请完成
point( )的类图。
image.png
double x ,y ;
void distance( ){}

五、运行结果题

51.
image.png
The sorted numbers :2347

52.
image.png
xl:2,x2:4,y:4(格式和数值各2分)

53.定义一个生日类,数据成员有年、月、日。定义一个人员类,数据成员有姓名、性别、生
日。人员类中的生日是生日类的对象,两个类都有构造函数和显示函数。在主函数
中声明一个人员类对象,屏幕显示其数据。

  1. #include <iostream>
  2. using namespace std;
  3. class birth
  4. {
  5. private:
  6. int year, month, day;
  7. public:
  8. birth(int x, int y, int z)
  9. {
  10. year = x;
  11. month = y;
  12. day = z;
  13. }
  14. void show()
  15. {
  16. cout << "生日是" << year << "年" << month << "月" << day << "日" << endl;
  17. }
  18. };
  19. class person
  20. {
  21. private:
  22. char *name;
  23. char *sex;
  24. birth birdy;
  25. public:
  26. person(char *p, char *q, int x, int y, int z) : birdy(x, y, z)
  27. {
  28. name = p;
  29. sex = q;
  30. }
  31. void show()
  32. {
  33. cout << "姓名为" << name << "性别为" << sex;
  34. birdy.show();
  35. }
  36. };
  37. // person::person(char *p, char *q, int x, int y, int z) : birdy(x, y, z)
  38. // {
  39. // name = p;
  40. // sex = q;
  41. // }
  42. int main()
  43. {
  44. person prsn((char *)"张三", (char *)"男", 2000, 4, 28);
  45. prsn.show();
  46. return 0;
  47. }

**