综合练习题
一、填空题
1.表达式:25%3=_________,32/7=_________。
2.C++语言中,运算对象必须是整型的算术运算符是_________。
3.若已知a=10,b=20,则表达式a
4.从原有类派生出来的类,称为______;同时,称原有类为_______。
5.派生类可以访问基类中的________成员和________成员,不能访问基类中的_________成员。
6.表达式(a==b) && (a>b)的值是_______。
7.在for循环语句中
for(表达式1;表达式2;表达式3)
语句;
首先求解______,然后求解______,如果条件成立执行_________,最后求解_________。
8.在C++语言中,逻辑假用________表示。
9.类的成员包括______和_________两种,在面向对象的术语中,前者称为属性、后者称为方法。其访问权限有三种,由符号________、________和_______指定,其中具有_________权限的成员只有类中的成员函数才能访问、而具有_________权限的成员在任何函数中都可访问。
10.构造函数是一个特殊的成员函数,其特殊性表现在创建对象时会__________。构造函数名必须与________相同。
11.函数重载是指一组函数具有相同的__________,在函数调用时,编译程序根据________个数和类型确定使用那一个版本。
12.使用重载函数可以实现________多态,使用虚函数可以实现________多态。
13.使用内联函数的目的是要提高程序的效率,但可能会增加编译后程序的_______。
14.当一个变量被声明为另一个变量的引用时,此变量就成为被引用变量的_______。此时,对其中一个变量值的修改,________(会/不会)影响到另一个变量的值。
15.析构函数是一个特殊的成员函数,其特殊性在于__________。定义时,析构函数名与________相同,只是在前面加一个______。
16.派生有_______、________和_________等三种方式,不管哪一种,基类中的________成员对于派生类而言,总是不可访问的。
17.动态多态是指在________时才确定使用哪个_________函数的方式。
18.友员不是类的成员,但必须在__________予以声明,它具有存取类的_________成员的特权。
19.C++中class与struct的主要区别是在缺省访问权限时,_________的成员为私有的,而_________的成员为公有的。
20.函数的递归调用是指函数直接或间接地调用__________。
21.在类中必须声明成员函数的________,成员函数的_________部分可以写在类外。
22.如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是__________类型或__________类型。
23.__________类只能作为基类使用,而不能声明它的对象。
24.进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参_________或__________必须不完全相同。
25._________对象只能调用它的常成员函数,不能调用其他成员函数。
26.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由___________机制支持,而后者则由____________机制支持。
27.引入虚基类的目的是为了解决多重继承中的____________和____________问题。
28.说明一个const成员函数(又称常量成员函数)的方法是,将const写在__________.
29.当使用new动态生成一个对象时,隐含着对____________的一次调用;而当使用delete删除一个对象时,隐含着对____________的一次调用。
30.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数。
31.下面程序将字符数组a复制到字符数组b中。
main()
{
char a[]="I am a boy.",b[20];
int i;
for(i=_______;a[i]!='\0';i++)
{
_____________;
}
______________;
}
32.下面程序段将字符数组b连接到数组a的后面。
main()
{
char a[20]=."I am ";
char b[]=."a student.";
int i,j;
i=strlen(a);
for(j=_____;b[j]!='\0';j++)
{
a[_____]=b[______];
}
a[______]=_______;
}
33.下面程序的功能是计算1-3+5-7+…-99+101的值存在s中,请填空。
#include
main()
{
int i,t=1,s=0;
for(i=1;i<=101;_______)
{
s=s+i*t;
t=_______;
}
}
34.对基类数据成员的初始化必须在派生类构造函数中的_______完成。
二、对错题。判断以下说法的正确性,正确的划√,错误的划×
1.说明函数原型时不需要指明每个参数的类型,只需要说明每个参数的名字就可以了。
2.在不同的类中可以定义相同名字的变量。
3.在类中被说明为public的成员只能被其派生类的成员函数访问,不能被其它的函数访问。
4.如果函数的第一个参数有缺省值,则第二个参数也必须有缺省值。
5.当函数的参数是数组名时,传递的是数组第一个元素的地址。
6.若将一个函数f声明为一个类A的友元函数,则函数f可以直接访问类A的所有成员。
7.函数重载可以实现动态多态,虚函数可以实现静态多态。
8.类的静态数据成员是该类所有对象共享的。
9.若有定义:double x[3][5];则x数组行下标的上限是3,下限是 1。
10.字符串”C++”在内存中存放时,占用3个字节的空间。
11.如果在一个程序块中有两个变量具有相同的名字,并且都有效,只是它们的作用域不同,则优先访问作用域较大的那个变量。
12.所有的表达式都有值。
13.用new动态申请的内存空间,必须用delete来释放。
14.类的静态数据成员需要在定义每个类的对象时进行初始化。
15.基类中被说明为protected和private的成员只能被其派生类的成员函数访问,不能被其它的函数访问。
16.当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。
17.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。
18.在C++中,关键字class与struct具有完却相同的作用。
三、单项选择题
1.C++语言中,最基本的数据类型包括:
A) 整型、实型、逻辑型 B) 整型、字符型、数组
C) 整型、实型、字符型 D) 整型、实型、结构体
2.下面不正确的字符串常量是:
A) …abc? B) “1+2=10” C) “1=2” D) “”
3.下面正确的字符常量是:
A) “c” B) …\\?? C) …W? D) …?
4.C++中,运算对象必须是整型的运算符是:
A) % B) / C) * D) +
5.程序段
for(i=0;i<10;i++)
if(i>5) break;
循环结束后i的值为:
A) 6 B) 7 C) 9 D) 10
6.程序段
for(i=0;i<10;i++)
if(i <=5) break;
循环结束后i的值为:
A) 0 B) 1 C) 5 D) 10
7.判断字符串a和b是否相等,应当使用:
A) if(a==b) B) if(a=b)
C) if(strcpy(a,b)) D) if(strcmp(a,b)==0)
8.程序段
int a,b;
a=5;
b=a++;
cout << b;
的输出应为:
A) 4 B) 5 C) 6 D) 7
9.程序段
int i,a;
for(i=0;i<=10;i++)
a=i;
cout << i;
的输出应为:
A) 0 B) 9 C) 10 D) 11
10.C++语言中的标示符只能有字母、数字和下划线组成,且第一个字符_____。
A) 必须为字母 B) 必须为下划线
C) 必须为字母或下划线 D) 可以是字母或数字
11.若a是int类型变量,则表达式a=25/3%3的值是:
A) 3 B) 2 C) 1 D) 0
12.下面程序段的运行结果是:“_”表示空格。
char c[5]={…a?,…b?,…\0?,…c?,…\0?};
cout << c;
A) …a?…b? B) ab C) ab_c D) 不确定
13.若有说明:char c=…\72?;则变量c:
A) 包含一个字符B) 包含2个字符
C) 包含3个字符D) 说明不合法,c的值不确定
14.以下叙述中,正确的是:
A) continue和break语句只能用于循环体内
B) continue和break语句只能用于分支语句中
C) continue语句只能用于循环体内
D) continue语句只能用于分支语句中
15.设有数组定义:char array[]=”China”;则数组array所占的空间为:
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
16.以下叙述中不正确的是:
A) 在不同的函数中可以使用相同名字的变量
B) 函数中的形参是局部变量
C) 在一个函数内部定义的变量只在本函数范围内有效
D) 在一个函数内部定义的变量在所有函数内部有效
17.以下对C++语言函数的叙述中,正确的是:
A) 在C++中调用函数时,只能把实参的值送给形参,形参的值不能送给实参
B) C++函数既能嵌套定义,又能递归定义
C) C++函数必须有返回值,否则不能使用
D) C++程序中有调用关系的所有函数必须放在同一个源程序中
18.程序段
int *p,a;
p=&a;
a=10;
cout << p;
的输出应为:
A) 10 B) 0 C) 不能确定 D) 语法错误
19.int *p1,*p2,a[10];
p1=a;
p2=&a[5];
则p2-p1的值为:
A) 无法确定 B) 10 C) 5 D) 12
20.若已经定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
若0≤i≤9,则对a数组元素不正确的引用是:
A) a[p-a] B) *(&a[i]) C) p[i] D) a[10]
21.若a是int类型变量,则计算表达式a=1000%999的值是:
A) 0 B) 1 C) 2 D) 3
22.下面程序段中,for循环的执行次数是_____。
int i=10;
for(i=1;i<10;i++)
cout << “*”;
A)9 B)10 C)8 D)7
23.在C++中,允许函数值类型缺省定义,此时该函数隐含的类型是:
A) int B) float C) double D) long
24.变量的指针,其含义是指该变量的_____
A) 值 B) 地址 C) 名 D) 一个标志
25.若已经定义:int a[10],则对a数组元素的正确引用是:
A) a[10] B) a[-3] C) a[6-6] D) a(1)
26.下面程序段的输出为:
char str[]=”China”;
cout << strlen(str);
A) 4 B) 5 C) 6 D) 7
27.以下不能定义为用户标识符的是______。
A)Main B)_0 C)_int D)sizeof
28.数字字符0的ASCII值为48,若有以下程序
void main()
{
char a='1', b='2';
cout << b++ << ”,”;
cout << b-a << endl;
}
程序运行后的输出结果是:
A) 3,2 B)50,2 C)2,2 D)2,50
29.有以下程序
void main()
{
int a,b,d=25;
a=d/10%9;
b=a&&(-1);
cout << a << “,” << b;
}
程序运行后的输出结果是。
A)6,1 B)2,1 C)6,0 D)2,0
30.若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式(a
A)1 B)2 C)3 D)0
31.有以下程序
void main()
{
int p[8]={11,12,13,14,15,16,17,18}, i=0, j=0;
while(i<7)
{
if(p[i]%2)
j+=p[i];
i++;
}
cout << j << endl;
}
程序运行后的输出结果是。
A)42 B)45 C)56 D)60
32.有以下程序
void main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a);
j=strlen(a);
cout << i << “,” << j;
}
程序运行后的输出结果是。
A)2,2 B)7,6 C)7,2 D)6,2
33.以下能正确定义一维数组的选项是。
A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5}; C)char a={'A','B','C'}; D)int a[5]="0123";
34.已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是。A)数组a和数组b所占内存相同B)a数组占内存比b数组少C)a数组占内存比b数组多D)上述说法都不对35.有以下程序
void main()
{
int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)
p[i]=i;
for(i=0;i<3;i++)
cout << a[1][i];
}
程序运行后的输出结果是。
A)012 B)123 C)234 D)345
36.以下叙述中错误的是。
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)程序执行中,数组元素的下标越界时,系统给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数
37.有以下程序
void main()
{
int a[]={1,2,3,4,5,6,7,8,9,0},*p;