文档库 最新最全的文档下载
当前位置:文档库 › c++复习题

c++复习题

一、选择题
1. 下列叙述中正确的是:B
A. C++语言程序中,main()函数必须在其它函数之前,函数内可以嵌套定义函数
B. C++语言程序中,main()函数的位置没有限制,函数内不可以嵌套定义函数
C. C++语言程序中,main()函数必须在其它函数之前,函数内不可以嵌套定义函数
D. C++语言程序中,main()函数必须在其它函数之后,函数内可以嵌套定义函数
2. 一个C++语言程序总是从___c____开始执行:
A. 主程序 B. 子程序 C. 主函数 D. 第一个函数
3.已知函数test定义为:a
 void test()
 {
…………
 }
 则函数定义中void的含义是:
A. 执行函数test后,函数没有返回值
B. 执行函数test后,函数不再返回
C. 执行函数test后,函数返回任意类型值
D. 以上三个答案都是错误的
4.以下对于C++语言的描述中,正确的是:a
A. C++语言中调用函数时,值传递方式只能将实参的值传递给形参,形参的值不能传递给实参
B. C++语言中函数既可以嵌套定义,也可以递归调用
C. 函数必须有返回值
D. C++程序中有调用关系的所有函数必须放在同一源程序文件中
5. C++语言中函数返回值的类型是由___c___决定的?
A. return语句中的表达式类型




1.在下列关键字中,用于说明类中公有成员的是__.
A. public B. private C. protected D. friend
2.下列的各函数中, ___不是类的成员函数.
A.构造函数 B.析构函数 C.友元函数 D.复制构造函数
3.___不是构造函数的特征。
A. 构造函数的函数名与类名相同 B. 构造函数可以重载
C. 构造函数可以设置缺省参数 D. 构造函数必须指定类型说明
4.___是析构函数的特征。
A. 一个类中只能定义一个析构函数 B. 析构函数在对象创建时调用
C. 析构函数的定义只能在类体内 D. 析构函数可以有一个或多个参数
5.关于成员函数特征的下述描述中,___是错误的。
A. 成员函数一定是内联函数 B. 成员函数可以重载
C. 成员函数可以设置参数的缺省值 D. 成员函数可以是静态的
6.复制构造函数的形参是___。
A. 某个对象名 B. 某个对象的成员名
C. 某个对象的引用名 D. 某个对象的指针名
7.如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就___。
A. 出现编译错误 B. 没有构造函数
C. 必须显示定义 D. 隐式定义缺省的构造函数
8.静态成员函数仅能访问___。
A. 静态的数据成员 B. 非静态的成员函数
C. 非静态的数据成员 D. 以上都不对
9.静态数据成员的初始化必须在___。
A. 类内 B. 类外 C. 在构造函数内 D. 静态成员函数内
10.友元作用___。
A. 提高程序的运用效率 B. 加强类的封装性
C. 实现数

据的隐藏性 D. 增加成员函数的种类

二:判断题
1. 使用关键字class定义的类中缺省的访问权限是私有(private)的。
2. 构造函数和析构函数都不能重载。
3. 说明或定义对象时,类名前不需加class关键字。
4. 可以在类的构造函数中对静态数据成员进行初始化。
5. rotected和private区别在于:protected成员可以被派生类访问,而private成员则不能被派生类访问。

三、编程实现
1. 创建一个类,具有public、private和protected数据成员和函数成员。创建该类的一个对象,看看试图存取所有的类成员时会得到一些什么信息。编写一个全局friend函数来访问该类的私有数据成员。
2. 创建一个没有任何构造函数的类,显示可以用缺省的构造函数创建对象。然后为该类创建一个非缺省的构造函数(带一个参数),试着在编译一次,解释发生的现象。
3. 建立一个类,该类包含const成员函数和非const成员函数,然后建立这个类的const和非const对象。分别为这两种类型的对象调用两种成员函数,解释发生的现象。
4. 利用静态数据成员的概念,编写一个类,可以统计目前存在多少个该类的对象。
5. 列举调用复制构造函数的三种情况。
6. 编写几何点(二维平面上)的类Point,包括位置属性(二维坐标x,y),成员函数包括点的位置获取函数GetX()和GetY(),点的位置设置函数SetX()和SetY(),和点的位置移动函数MoveTo()以及点的信息打印函数Display()。
7. 编写几何图形圆的类Circle,包括两个属性:圆心O(用上题中的Point类实现)和半径R。成员函数包括:圆心位置获取函数GetO()和半径获取函数GetR();半径位置设置函数SetR();圆的位置移动函数MoveTo();圆的半径设置函数SetR();以及圆的信息打印函数Display()。
8. 编写复数类Complex。实现各种常用构造函数,实现整数、实数向复数的转化函数,实现整数、实数和复数以及复数之间的加、减、乘、除各种运算,实现==、!=等逻辑运算。



B. 调用该函数的主调函数类型
C. 定义函数时所指定的函数类型
D. 以上说法都不正确
6.在一个源文件中定义的全局静态变量的作用域为:
A. 本程序的全部范围
B. 本函数的全部范围
C. 从定义该变量的位置开始到本文件结束
D. 以上说法都不正确
7. 以下说法错误的是:
A. 全局变量就是在函数外定义的变量,因此又叫做外部变量
B. 一个函数中既可以使用本函数中的局部变量,也可以使用全局变量
C. 局部变量的定义和全局变量的定义的含义不同
D. 如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全

局变量通常不起作用
8. 当一个函数无返回值时,定义它的函数类型应是___。
A. void B. int C. 任意 D. 无
9.程序应该必须包含的部分是:
A. 头文件 B. 注释 C. 高级语言 D. 数据结构和算法
10.下列哪项不是面向对象程序设计的主要特征?
A. 封装 B. 继承 C. 多态 D. .结构
11.对象之间的相互作用和通信是通过消息。下列哪项不是消息的组成部分?
A. 接受消息的对象 B. 要执行的函数的名字
C. 要执行的函数的内部结构 D. 函数需要的参数

二、改错题

1.指出下面程序中的错误
 void main( )
 {
cout<<"This is a string"
 }
2.指出下面程序中的错误
 #include
 void main( )
 {
cin>>x;
int p=x*x;
cout<<"p=< }
3.指出下面程序中的错误
 #include
 void main( )
 {
int i,j;
i=5;
int k=i+j;
cout<<"i+j="< }
4."A"与'A'是等价的。
三、编程题及间答题:

1.写出能被编译、连接和运行的、最小的C++程序。
2.给出下面程序输出的结果:
 #include
 void main( )
 {
int a;
char ch;
ch='a' ;
ch++;
a=ch;
cout< }
3. 下面的程序共有17行,程序中变量num、i、temp、对象cout和函数func()的作用域范围分别是什么?
 1、#include
 2、int num;
 3、void func();
 4、void main()
 5、{
 6、 char name[20];
 7、 int i;
 8、 for(i=0;i<20;i++)
 9、 {
 10、 char temp;
 11、 temp=name[i];
 12、 cout< 13、 }
 14、}
 15、void func()
 16、{
 17、 cout<<"A function!";
 18、}
4. 阅读下面的程序,回答问题:
 //file1.cpp
 static int i = 20;
 int x;
 static int g(int p)
 {
return i + p;
 }
 void f(int v)
 {
x = g(v);
 }
 //file2.cpp
 #include
 extern int x;
 void f(int);
 void main()
 {
int i = 5;
f(i);
cout << x;
 }
 回答以下问题:
 (1)、 程序的运行结果是什么样的?
 (2)、 为什么文件file2.cpp中要包含头文件
 (3)、 在函数main()中是否可以直接调用函数g(),为什么?
 (4)、 如果把文件file1.cpp中的两个函数定义的位置换一下,程序是否正确,为什么?
 (5)、 文件file1.cpp和file2.cpp中的变量i的作用域分别是怎样的?在程序中直接标出两个变量各自的作用域
5. 给出下列程序中的输出结果。
 (1) #include
int add(int a,int b);
void main()
{
extern int x,y;
cout< }
int x=20,y=5;
int add(int a,int b)
{
int s=a+b;
return s;
}
 (2

) #include
void fn(int n)
{
int x=5;
static int y=10;
if(n>0)
{
++x;
++y;
cout< }
}
void main()
{
int m=1;
fn(m);
}
 (3)分析如下程序输出结果:
#include "iostream.h"
fun(int a,int b,int c)
{
c=a*b;
}
void main()
{
int c;
fun(2,3,c);
cout<<"c="< }
 (4). 分析如下程序输出结果:
#include "iostream.h"
void outputab(int a,int b)
{
cout<<"a= "<2. 答:错误有二,首先变量必须先定义后使用,而x未定义就输入值是错误的。第二,如果程序要输出p的值,括号位置是不对的,第二个语句应写为:cout<<"p="<3. 答:变量应先定义再使用,但还要注意,变量要初始化后才能引用。因j未初始化, k的结果是不可预料的。
4. 二者一个是字符串,一个是字符,是不等价的,前者由两个字节组成(字符'A'与字符'\0'),而后者只有一个字节。
参考答案:
1. void main(){}
2.将输出 98
3. num 的作用域为从第__2__行到第__18__行.
 i 的作用域为从第__7__行到第__14__行.
 temp 的作用域为从第__10__行到第__13__行.
 cout 的作用域为从第__1__行到第__18_行.
 func 的作用域为从第__3__行到第__18__行.
4. (1)、 程序的运行结果:25
 (2)、 因为程序中需要利用cout对象进行输出,而cout是在C++标准I/O库iostream中定义的类ostream的一个对象。
 (3)、 在函数main()中不可以直接调用

函数g(),因为g()是静态函数,只在它所在的文件内可见。
 (4)、 如果把文件file1.cpp中的两个函数定义的位置换一下,程序不正确,因为C++规定所有使用的变量和函数需要先声明,后使用。在函数f中用到了函数g,所以函数f不能出现在函数g的定义或声明之前。
 (5)、 文件file1.cpp中的变量i的作用域从它的定义开始到文件结束。File2.cpp中的变量i的作用域从它的定义开始到main函数结束。
5. (1) 25 (2) 6 , 11
 (3) 分析这道题首先要弄清楚两点:1:未赋初值的变量,它的值是什么。2:形参变量的值和实参变量的值的关系。本题在main函数中定义了一个整型变量c,系统为其分配了一个存储单元。此单元中的原有信息并未被清除,这时变量c的值是不确定的"随机数"。调用函数fun时,将实参常量2和3分别传给了形参a和b,实参变量c中的随机值传给了形参变量c。通过函数fun的运算,形参变量c中存放了a*b的运算结果,这一结果并不能反馈给实参变量c。因此在主函数中输出的c值是一个不确定的值。
 (4) 输出结果为:
 a= 300 b= 400
 a= 300 b= 400
 本题只要把握住一点即可:当函数调用的参数传递方式为值传递时,形参变量的值的改变不影响到实参变量。因此在outputab函数内部对变量a、b的赋值并不会对main函数中的a、b的值造成影响。
6. 使用函数可以将大程序分成许多独立的模块,而且函数能在模块中单独编译并链接。使用函数还可将复杂的过程分解为简单的模块组合。函数声明要给出名称、返回值和参数。函数体中则是程序调用该函数时该函数所需执行的语句。
7. C++函数调用的一般形式为: 函数名(实参1,实参2……)
其中实参可以是常量、变量或者是表达式。本题中容易知道前面的rec1,rec2+1均为实参,前者是一个变量,后者是一个表达式;关键是要正确识别(rec3,rec4),这也是一个表达式--逗号表达式。因为逗号表达式的优先级最低,所以只有用圆括号括起来才可以将他们看成是一个表达式。明确这一点后,就可以清楚地辨别出上述语句共有3

相关文档