admin 管理员组文章数量: 887021
2023年12月16日发(作者:transient英文解释)
练习题1
1.1 判断题
×1.C++语言和C语言都是面向对象的程序设计语言。
√2.面向对象方法具有封装性、继承性和多态性。
√3.C语言是C++语言的一个子集。C++语言继承了C语言。
×4.C++语言程序与C语言程序一样都是函数串。
×5.C++语言支持封装性和继承性,不支持多态性。
√6.C++语言比C语言对数据类型要求更加严格了。
√7.C++语言对C语言进行了一次改进,使得编程更加方便了。
×8.C++源程序在编译时可能出现错误信息,而在连接时不会出现错误信息。
√9.编译C++源程序时,出现了警告错(Warning)也可以生成可执行文件。
√10.C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。
1.2 单选题
1.下列关于面向对象概念的描述中,错误的是( C )。
A.面向对象方法比面向过程方法更加先进
B.面向对象方法中使用了一些面向过程方法中没有的概念
C.面向对象方法替代了结构化程序设计方法
D.面向对象程序设计方法要使用面向对象的程序设计语言
2.下列各种高级语言中,不是面向对象的程序设计语言是( D )。
A.C++
C.VB
B.Java
D.C
3.下列关于类的描述中,错误的是( A )。
1
A.类就是C语言中的结构类型
B.类是创建对象的模板
C.类是抽象数据类型的实现
D.类是具有共同行为的若干对象的统一描述体
4.下列关于对象的描述中,错误的是( C )。
A.对象是类的一个实例
B.对象是属性和行为的封装体
C.对象就是C语言中的结构变量
D.对象是现实世界中客观存在的某种实体
5.下列关于C++程序中使用提取符和插入符的输入/输出语句的描述中,错误的是( C )。
A.提取符是对右移运算符(>>)重载得到的
B.插入符是对左移运算符(<<)重载得到的
C.提取符和插入符都是双目运算符,它们要求有两个操作数
D.提取符和插入符在输入/输出语句中不可以连用
1.3 填空题
1.C++语言具有面向对象方法中要求的三大特性: 封装性 、 继承性 和
多态性 。
2.C++程序中,有且仅有一个 主 函数。
3.C++程序是由 类 和 函数 组成的。
4.C++源程序的扩展名是 cpp 。
5.使用插入符进行标准输出文件输出时,使用的输出流对象名是 cout 。
2
1.6 通过对1.5题中3个程序的修改,回答下列问题
1. 从1.5题中第1题程序的修改中,总结出编程应该注意哪些问题。
答:C++程序要包含iostraem.h,main()函数前应加类型说明符void。
2. C++程序中所出现的变量是否必须先说明后使用?在函数体内说明变量时是否都要放在函数体的开头?
答:C++程序中所出现的变量必须先说明后使用。在函数体内说明变量时不一定要放在函数体的开头。
3. 使用cout和插入符(<<)输出字符串常量时应注意什么?
答:可输出一个字符串常量,也可输出多个字符串常量。每输出一个字符串常量要使用一次插入符(<<)。
4. 程序中定义过的变量,但没有赋值,也没有默认值,这时能否使用?
答:不能使用。因为它的值不确定。
5.一个程序编译通过并已生成执行文件,运行后并获得输出结果,这一结果是否一定正确?
答:不一定正确。可能还有算法错。
第2章 变量和表达式及数组
练习题2
2.1 判断题
√ 1.C++语言的合法字符集与C语言的完全相同。
× 2.标识符规定大小写字母没有区别。
× 3.C++程序中,不得使用没有定义或说明的变量。
√ 4.变量的存储类指出了变量的作用域和寿命。
3
√ 5.变量的数据类型指出了变量在内存中存放的字节数。
× 6.定义变量时,变量的存储类说明符不得省略。
× 7.自动类变量与内部静态类变量的作用域和寿命都是相同的。
× 8.自动类变量可以定义在函数体外,这时应加说明符auto。
× 9.外部类变量与外部静态类变量的作用域是相同的。
× 10.变量被定义后是否有默认值与存储类无关,与数据类型有关。
√ 11.C++程序中,通常使用const来定义符号常量,定义时必须指出类型。
× 12.变量被定义或说明后,它一定具有有意义的值。
× 13.字符串常量与字符常量的区别仅表现在定义形式上的不同,一个用双撇号,另一个用单撇号。
× 14.所有变量的可见性和存在性都是一致的。
√ 15.变量在它的作用域内一定是可见的,又是存在的。
√ 16.C++语言中除了包含C语言的所有运算符外,还规定自身的若干个运算符。
√ 17.增1和减1运算符以及赋值运算符都具有副作用。
× 18.增1和减1运算符不仅可以作用在变量上,也可以作用在表达式上。
× 19.关系运算符可以用来比较两个字符的大小,也可以比较两个字符串的大小。
× 20.移位运算符在移位操作中,无论左移还是右移,对移出的空位一律补0。
× 21.变量的类型高低是指它被存放在内存的地址值大小。
× 22.使用sizeof运算符可以求得某种类型和某个变量在内存中占的字节数,不能求得某个表达式的类型在内存中所占的字节数。
√ 23.在C++语言中,非保值转换应用强制类型转换。
4
√ 24.表达式中各操作数计算顺序取决于运算符的优先级和结合性。
√ 25.在C++程序中,变量值是可以改变的,变量的地址值是不能改变的。
√ 26.数组中所有元素的类型都是相同的。
× 27.定义数组时必须对数组进行初始化。
√ 28.数组某维的大小可以用常量表达式,不可用变量名。
× 29.定义一个数组没有对它进行初始化,则该数组的元素值都是无意义的。
√ 30.用来给数组进行初始化的初始值表内的数据项的个数必须小于等于数组元素个数。
× 31.在定义一个数组时,对其部分元素进行了初始化,没有初始化的元素的值都是无意义的。
√ 32.数组被初始化时是判越界的。
× 33.字符数组就是字符串。
√ 34.使用printf( )函数输出显示字符串时使用格式符%s,输出显示字符时使用%c或%d。
× 35.给数组元素赋值时只可用常量表达式。
2.2 单选题
1.下列变量名中,非法的是( C )。
A.A25
B.My_car
D.abc C.My-str
2.下列常量中,十六进制int型常量是( A )。
A.0x5f
C.046
B.x2a
D.7a
3.下列常量中,不是字符常量的是( B )。
5
A.'n'
C.'x'
B."y"
D.'7'
4.在函数体内定义了下述变量a,a的存储类为( D )。
int a;
A.寄存器类
C.静态类
B.外部类
D.自动类
5.下列关于变量存储类的描述中,错误的是( C )。
A.任何变量定义后都具有一个确定的存储类
B.变量的存储类确定了变量的作用域和寿命
C.定义变量时没有存储类说明符者一律为自动类
D.内部静态类变量和外部静态类变量的存储类说明符都是static
6.下列关于变量数据类型的描述中,错误的是( A )。
A.定义变量时int型数据类型可以省略
B.变量的数据类型可以决定该变量占内存的字节数
C.变量的数据类型是可以被强制的
D.变量的数据类型是有高低之分的
7.长双精度浮点型常量的后缀是( C )。
A.U
C.L
B.F
D.无
8.下列运算符中,不能用于浮点数操作的是( D )。
A.++
C.*=
B.+
D.&(双目)
9.下列运算符中,优先级最高的是( A )。
A.*(双目)
6
B.||
C.>> D.%=
10.下列运算符中,优先级最低的是( B )。
A.==
C.|
B.?:
D.&&
11.已知:int a(3);下列表达式中,错误的是( C )。
A.a%2==0
C.(a2)++
B.a--+2
D.a>>=2
12.已知:int b(5),下列表达式中,正确的是( D )。
A.b="a"
C.b%2.5
B.++(b1)
D.b=3,b+1,b+2
13.下列关于类型转换的描述中,错误的是( C )。
A.类型转换运算符是(<类型>)
B.类型转换运算符是单目运算符
C.类型转换运算符通常用于保值转换中
D.类型转换运算符作用于表达式左边
14.下列表达式中,其值为0的是( A )。
A.5/10
B.!0
C.2>4?0:1 D.2&&2||0
15.下列表达式中,其值不为逻辑值的是( A )。
A.算术表达式
C.逗号表达式
B.关系表达式
D.逻辑表达式
16.下列关于数组概念的描述中,错误的是( B )。
A.数组中所有元素类型是相同的
B.数组定义后,它的元素个数是可以改变的
7
C.数组在定义时可以被初始化,也可以不被初始化
D.数组元素的个数与定义时的每维大小有关
17.下列关于数组维数的描述中,错误的是( C )。
A.定义数组时必须将每维的大小都明确指出
B.二维数组是指该数组的维数为2
C.数组的维数可以使用常量表达式
D.数组元素个数等于该数组的各维大小的乘积
18.下列关于数组下标的描述中,错误的是( B )。
A.C++语言中数组元素的下标是从0开始的
B.数组元素下标是一个整常型表达式
C.数组元素可以用下标来表示
D.数组元素的某维下标值应小于该维的大小值
19.下列关于初始值表的描述中,错误的是( C )。
A.数组可以使用初始值表进行初始化
B.初始值表是用一对花括号括起的若干个数据项组成的
C.初始值表中数据项的个数必须与该数组的元素个数相等
D.使用初始值表给数组初始化时,没有被初始化的元素都具有默认值
20.下列关于字符数组的描述中,错误的是( D )。
A.字符数组中的每一个元素都是字符
B.字符数组可以使用初始值表进行初始化
C.字符数组可以存放字符串
D.字符数组就是字符串
21.下列关于字符串的描述中,错误的是( C )。
A.一维字符数组可以存放一个字符串
8
B.二维字符数组可以存放多个字符串
C.可以使用一个字符串给二维字符数组赋值
D.可以用一个字符串给二维字符数组初始化
22.已知:int a[5] = {1, 2, 3, 4}; 下列数组元素值为2的数组元素是( B )。
A.a[0]
C.a[2]
B.a[1]
D.a[3]
23.已知:int ab[ ][3] = {{1, 5, 6}, {3}, {0,2}}; 数组元素ab[1][1]的值为( A )。
A.0
C.2
B.1
D.3
24.已知:char s[ ]="abcd";输出显示字符'c'的表达式是( C )。
A.s
B.s+2
D.s[3] C.s[2]
25.已知:char ss[ ][6]={"while", "for", "else", "break"};输出显示"reak"字符串的表达式是( B )。
A.ss[3]
C.ss+3
2.3 填空题
1.C++语言中,基本数据类型包含有整型、 浮点型 、 字符型 、空值型和 布尔型 。
2.变量的存储类可分为 自动类 、 寄存器类 、 外邹类 和静态存储类。
3.浮点型常量可分为单精度、 双精度 和 长双精度 浮点型常量。
4.结合性从右至左的运算符有 单目运算符 、 双目运算符 和赋值运
9
B.ss[3]+1
D.ss[3][1]
算符。
5.条件表达式是由 三目 运算符组成的,该表达式的类型是由冒号左边和右边两个操作数中 类型高 的操作数类型决定的。
6.已知:double dd[ ][3]={{1.2, 2.4, 3.6}, {4.8, 5.2},{6.4}}; 这里dd是一个
二 维数组的数组名,该数组共有 9 个元素,每个元素的类型是
double 。数组元素dd[0][0]的值是 1.2 ,dd[1][1]的值是 5.2 ,数组元素dd[2][2]的值是 0 。
7.已知:char ss[ ][6]={"while", "break", "for", "else"}; 字符数组ss是 二
维数组,它的第1维大小应该是 4 。使用cout和<<输出字符串"for"时,对应的表达式是 ss+2 。使用cout和<<输出字符串"break"的子串"reak"时,对应的表达式是 ss[1]+1 。使用cout和<<输出字符串else中的字符's'时,对应的表达式是
ss[3][2] 。
2.5 编程题
1.已知:int a=3,b=5;编程计算下列两个代数式的值,并比较它们是否相等。
(a+b)2
和
a2+2ab+b2
答: 编程如下:
#include
void main()
{
int a=3,b=5;
10
int d1=(a+b)*(a+b);
int d2=a*a+2*a*b+b*b;
cout<<"d1="< } 从结果中可以看出d1和d2值是相等的。 2.已知:int x=5;编程求下列代数式的值。 f(x)=3x3+2x2+5x+2 答:编程如下: #include void main() { int x=5; int f=3*x*x*x+2*x*x+5*x+2; cout< } 3.从键盘上输入两个double型数,编程输出其中最小者。 答:编程如下: #include void main() { double a,b; cout<<"请输入两个double型数:"; 11 cin>>a>>b; cout<<"输入的两个数中较小的是"; if(a<=b) cout< else cout< } 4.华氏温度转换成摄氏温度的计算公式如下: C=(F32)*5/9 其中,C表示摄氏温度,F表示华氏温度。从键盘上输入一摄氏温度,编程输出对应的华氏温度。 答:编程如下: #include void main() { double c,f; cout<<"请输入一个摄氏温度值:"; cin>>c; f=9.0/5.0*c+32.0; cout<<"摄氏温度为"< } 5. 从键盘上输入5个浮点数,输出它们的和以及平均值。 12 答:编程如下: #include void main() { double a,b,c,d,e; cout<<"请输入5个double型数:"; cin>>a>>b>>c>>d>>e; double f=a+b+c+d+e; cout<<"输入的5个数的和是"< } 6. 将字符串"12345",逆向输出为"54321"。 答:编程如下: #include void main() { char a[]="12345"; cout< } 2.6 简单回答下述问题 1. C++语言中注释符的格式如何?注释信息的功能是什么? 答:注释符格式有2种: 格式一: /* <注释信息> */ 格式二: // <注释信息> 13 注释信息是用来对程序进行提示和说明的。 2. 使用const定义符号常量比使用#define定义符号常量有何优点? 答:使用const定义符号常量时要指出数据类型,而用#define定义符号常量时不需提出类型,因此前者比后者对类型要求更严格,这样会更安全。 3. 内部静态存储类变量有何特点? 答:内部静态存储类变贯的特点是作用域较小,但寿命很长,这种变量作用域与寿命不一致,因此会出现不可见但又存在的情况。 4. 在使用插入符(<<)输出若干个表达式值时,有的表达式中使用的运算符的优先级低于插入符优先级时应该如何处理? 答:这时需将表达式用括号括起来,己改变其优先级。 5.由多种不同运算符组成的表达式,其类型如何确定?例如, int a, b, c; … a=b>c?b:c; 这是一个条件表达式还是赋值表达式? 答:表达式类型由优先级低的运算符组成的表达式来确定。 这是一个赋值表达式,因为赋值运算符优先级低于三目运算符。 6. 数组元素个数是由什么决定的? 答:数组元素个数是由维数及其大小来决定的。一维数组元素个数是该维的大小,二维数组的元素个数是两维大小之积等。 7. 数组元素下标有何规定? 答:C++语言中,数组元素下标从0开始。 8. 初始值表中数据项的类型和个数有何规定? 14 答:初始值表中数据项的类型应与该变是类型相同,个数应小于或等于被初始化的数组元素的个数。 9. 字符数组和字符串有什么关系? 答:字符数组中可存放字符串,而字符数组不都是存放字符串的。如果字符数组中有字符串结束符,则说明该字符数存放的是字符串。 10.一个数组中的元素类型是否一定相同?何时定义的数组元素具有默认值? 答:数组中元素类型必须相同。存储类为外部和静态的数组其元素具有默认值。 第3章 语句和预处理 练习题3 3.1 判断题 √ 1.表达式和表达式语句是不同的。 × 2.空语句是一种没有用处的语句。 × 3.复合语句就是分程序。 × 4.条件语句中if子句和else子句都是必须有并且仅有一个。 √ 5.条件语句中else if子句可以没有,也可以有多个。 √ 6.开关语句可实现多路分支。 × 7.开关语句的<语句序列>中必须有一个break语句,否则该开关语句便无法退出。 × 8.任何循环语句都是至少执行一次循环体。 × 9.退出for循环语句必须是for后面括号内的中间一个表达式的值为0。 15 √ 10.do-while循环语句至少要执行一次循环体。 × 11.循环语句的循环体中可以出现if语句,if语句的if体内不能出现循环语句。 × 12.goto语句中所使用的语句标号是一种标识符,它的作用域是文件级的。 √ 13.break语句和continue语句都可以出现在循环体中,但是它们的作用是不同的。 × 14.文件包含命令所能包含的文件类型是不受限制的。 3.2 单选题 1.下列关于语句的描述中,错误的是( A )。 A.C++程序中的函数是由若干条语句组成的 B.每条语句都要实现某种操作 C.条件语句是用来实现分支操作的 D.循环语句是用来在一定条件下重复执行某段程序的 2.下列关于条件语句的描述中,错误的是( C )。 A.if语句中最多只能有一个else子句 B.if语句的if体内可以出现开关语句 C.if语句中else if子句和else子句的顺序是没有限制的 D.if语句中else子句是与它最近的if子句配对的 3.下列关于开关语句的描述中,错误的是( B )。 A.开关语句中,case子句的个数是不受限制的 B.开关语句中,case子句的语句序列中一定要有break语句 C.开关语句中,default子句可以省略 D.开关语句中,右花括号具有退出开关语句的功能 16 4.下列关于循环语句的描述中,错误的是( A )。 A.while循环语句中<条件>给定的表达式不能为非0的常量,否则便是死循环 B.for循环语句的循环体内可以出现while循环语句、do-while循环语句和for循环语句 C.循环语句的循环体可以是空语句 D.循环语句的循环体内可以出现break语句,也可以出现continue语句 5.已知:int i(3);下列do-while循环语句的循环次数是( D )。 do{ cout< i--; }while(i!=0); A.0 C.1 B.3 D.无限 6.下列for循环语句的循环次数是( B )。 for(int i(0), j(5); i=3; i++, j--); A.3 C.5 B.无限 D.0 7.下列while循环语句的循环次数是( A )。 while(int i(0)) i--; A.0 C.2 B.1 D.无限 8.下列程序段执行后,j值是( B )。 for(int i(0), j(0); i<10; i++) 17 if(i) j++; A.0 C.10 B.9 D.无限 9.已知:typedef char CH;下列描述中,正确的是( A )。 A.使用CH定义的变量是char型变量 B.使用CH定义的是一个字符常量 C.使用CH定义的变量其类型不确定 D.使用CH定义的是一个字符串 10.下列关于预处理命令的描述中,错误的是( D )。 A.预处理命令最左边的标识符是# B.预处理命令是在编译前处理的 C.宏定义命令可以定义符号常量 D.文件包含命令只能包含.h文件 3.3 填空题 1.表达式语句是一个表达式后边加上 分号(;) 组成的。空语句是 只有一个分号的语句 。 2.复合语句是由 两条 条或 两条 条以上的语句加上 花括号({}) 组成的。 3.分程序是一种带有 说明 语句的复合语句。 4.循环语句的共同特点是都应具有 循环体 和 退出循环的条件 。 5.下列程序是求100之内的能被7整除的自然数之和。 3.6 简单回答下列问题 1. 分程序是复合语句吗?复合语句与分程序的区别是什么? 答:分程序是复合语句。复合语句与分程序的区别在于含有说明语句的复合 18 语句称为分程序。 2. if语句中,else子句的功能是什么? 答:该子句的功能是当if子句和所有else if子句的条件都为0时,则执行else子句。 3. 在开关语句中,是否每个case子句后面的<语句序列>中都应该有break语句? 答:通常case子句后面的<语句序列>中都有break语句,根据需要也可以没有break语句。 4. 循环语句的循环体中出现的continue语句的作用是什么? 答:结束本次循环,转到循环头判断是否继续循环。 5. 文件包含命令的功能吗?该命令一定要放在程序首部吗? 答:该预处理命令是将指定的包含文件内容放在该命令出现的地方。通常放在程序开头,便于后边语句的使用。 第4章 指针和引用 练习题4 4.1 判断题 × 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。 √ 2.指针的类型是它所指向的变量或对象的类型。 × 3.定义指针时不可以赋初值。 √ 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。 × 5.指针可以加上或减去一个int型数,也可以加上一个指针。 √ 6.两个指针在任何情况下相减都是有意义的。 √ 7.数组元素可以用下标表示,也可以用指针表示。 19 × 8.指向数组元素的指针只可指向数组的首元素。 √ 9.指向一维数组的指针是一个二级指针。 × 10.指针数组的元素可以是不同类型的指针。 √ 11.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 × 12.引用是一种变量,它也有值和地址值。 √ 13.引用是某个变量的别名,引用是被绑定在被引用的变量上。 √ 14.创建引用时要用一个同类型的变量进行初始化。 √ 15.指针是变量,它可以有引用,而引用不能有引用。 4.2 单选题 1.下列关于定义一个指向double型变量的指针,正确的是( B )。 A.int a(5);double *pd=a; C.double d(2.5),*pd=d; B.double d(2.5),*pd=&d; D.double a(2.5),pd=d; 2.下列关于创建一个int型变量的引用,正确的是( A )。 A.int a(3),&ra=a; B.int a(3),&ra=&a; D.int a(3),ra=a; C.double d(3.1);int &rd=d; 3.下列关于指针概念的描述中,错误的是( B )。 A.指针中存放的是某变量或对象的地址值 B.指针的类型是它所存放的数值的类型 C.指针是变量,它也具有一个内存地址值 D.指针的值(非常量指针)是可以改变的 4.下列关于引用概念的描述中,错误的是( A )。 A.引用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 20 D.创建引用时必须进行初始化 5.已知:int a[5],*p=a;则与++*p相同的是( D )。 A.*++p C.*p++ B.a[0] D.++a[0] 6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是( C )。 A.&(a+1) C.&p[2] B.&(p+1) D.*p++ 7.已知:int a[3][4],(*p)[4];下列赋值表达式中,正确的是( A )。 A.p=a+2 C.p=*a B.p=a[1] D.p=*a+2 8.已知:int b[3][5]={0};下列数组元素值的表示中,错误的是( D )。 A.**(b+1) B.(*(b+1))[2] D.*(b+2) C.*(*(b+1)+1) 9.已知:int a=1,b=2,*p[2];下列表达式中正确的是( C )。 A.p=&a B.p=&b D.p[ ]={&a,&b}; C.p[0]=&a,p[1]=&b 10.已知:int a(5),&ra=a;下列描述中,错误的是( D )。 A.ra是变量a的引用,即为变量的别名 C.ra的地址值为&a 仍为5 4.3 填空题 1.单目运算符&作用在变量名左边,表示该变量的 地址值 ,单目运算符*作用在指针名的左边,表示取该变量的 值 。 21 B.ra的值为5 D.改变ra的值为10,变量a值 2.指向一维数组元素的指针是 一 级指针,指向二维数组元素的指针是 一 级指针,指向一维数组的指针是 二 级指针,指向一级指针的指针是 二 级指针,一维一级指针数组名是 二 级指针的地址值,二维数组的数组名是 二 级指针的地址值。 3.在一个二维数组b[3][5]中,b[0]与 *b 是等价的,&b[1]与 b+1 是等价的。 4.指针的运算有4种,它们是 赋值 运算、一个指针加减整型数的运算、两个指针相减和 比较 运算。 5.引用不是变量,它是某个变量或对象的 别名 。引用的值是 被引用的变量的值 ,引用的地址值是 被引用的变量的地址值 。 4.6 简单回答下列问题 1. 指针与一般变量有何不同? 答:指针是变量,它不同于一般量。其一是指针存放的是地址值,其二指针的类型是它所指向的变量类型。 2. 指针可以作哪些运算? 答:指针的运算有4种: 赋值运算 加减一个整型数运算 在一定条件下,两个指针可以比较运算 在一定条件下,两个指针可以相减运算 3. 指针可以作数组元素,这种数组叫什么数组? 答:指针作数组元素的数组称为指针数组。 4. 什么是字符指针?字符指针与字符数组有何不同? 答:指符指针是指向字符串的指针。字符指针是变量指针,字符数组名是常 22 量指针。 5. 什么是引用?引用有哪些特征? 答:引用不是变量,是变量或对象的别名。引用的值和地址值都是被引用的变量的值和地址值。当被引用的变量值被改变,则引用的值也被改变,反之亦然。 第5章 函数 练习题5 5.1 判断题 √ 1.函数的调用可以嵌套,函数的定义不能嵌套。 × 2.C++语言中,函数可以用原型说明,也可用简单说明。 × 3.定义函数时,存储类可以缺省,数据类型也可以省略。 × 4.函数可以没有参数,但是不能没有返回值。 × 5.函数定义时必须给出函数体,函数体内至少有一条语句。 √ 6.没有参数的两个函数是不能重载的。 √ 7.函数调用方式有传值调用和引用调用两种,传值调用中又分传值和传址两种。 √ 8.函数的存储类有外部的和静态的两种,它们的作用域分别是程序级的和文件级的。 × 9.没有返回值的函数不能设置为内联函数。 × 10.函数可以设置默认的参数值,默认参数值必须设置在函数定义时的形参上。 5.2 单选题 1.当一个函数没有返回值时,该函数类型应说明为( A )。 23 A.void C.无 B.int D.任意 2.下列关于设置函数默认的参数值的描述中,错误的是( C )。 A.可对函数的部分参数或全部参数设置默认值 B.在有函数说明时,默认值应设置在函数说明时,而不是定义时 C.设置函数默认参数值时,只可用常量不可用含有变量的表达式 D.设置函数参数默认值应从右向左设置 3.下列关于被调用函数中return语句的描述中,错误的是( D )。 A.一个函数中可以有多条return语句 B.return语句具有返回程序控制权的作用 C.函数通过return语句返回值时仅有一个 D.一个函数中有且仅有一条return语句 4.函数返回值的类型是由( B )决定的。 A.调用该函数的调用函数的类型 B.定义该函数时所指定的类型 C.return语句中表达式的类型 D.接收函数返回值的变量或对象的类型 5.下列设置函数参数默认值的说明语句中,错误的是( C )。 A.int fun(int x , int y=10); C.int fun(int x=5, int y); B.int fun(int x=5, int =10); D.int fun(int x , int y=a+b); (其中,a和b是已定义过具有有效值的变量) 6.下列选择重载函数的不同实现的判断条件中,错误的是( D )。 A.参数类型不同 C.参数顺序不同 24 B.参数个数不同 D.函数返回值不同 7.已知:int fun (int &a),m=10;下列调用fum()函数的语句中,正确的是( C )。 A.fun(&m); C.fun (m); B.fun (m*2); D.fun (m++); 8.在函数的引用调用中,函数的实参和形参分别应是( C )。 A.变量值和变量 C.变量名和引用 B.地址值和指针 D.地址值和引用 9.在函数的传址调用中,函数的实参和形参分别应是( B )。 A.变量值和变量 C.变量名和引用 B.地址值和指针 D.地址值和引用 10.说明一个内联函数时,应加关键字是( A )。 A.inline C.void 5.3 填空题 1.如果将调用一个函数的过程分为3个步骤,第1步是 转去执行被调用函数 ,第2步是 执行被调用函数的语句 ,第3步是返回操作。 2.函数的存储类分两种,它们分别是 外部 函数和内部函数,其中 内部 函数的存储类说明不可省略,该说明符是 static 。 3.使用关键字inline说明的函数称为 内联 函数,具有相同函数名但具有不同实现的函数称为 重载 函数。 4.在调用一个函数过程中可以直接或间接地调用该函数,则该函数称为 被调用 函数。这种调用称为 嵌套 调用。 5.在引用调用中,函数实参用 变量名 ,形参用 引用名 。 5.6 简单回答下列问题 25 B.static D.extern 1. 没有返回值的函数是否有函数类型?函数参数类型与函数的类型是否有关系? 答:没有返回值的函数的类型为void。没有关系。 2. 函数的缺省的存储类是什么?函数的存储类与函数什么关系? 答:函数的缺省的存储类是外部类。函数的存储类决定了函数的作用域。 3. 函数的调用方式有哪两种?传址和引用调用方式有何不同? 答:函数的调用方式有两种:传值调用和引用调用。传址调用时实参用地址值,形参用指针,引用调用时实参用变量名,形参用引用名。 4. 内联函数与一般函数有何不同? 答:内联函数的函数体是在编译时被替换,一般函数的函数体是在调用时被转去执行。前者可以提高速度,后者可以减少代码,各有利弊。 5. 对重载函数设置默认参数值,对重载函数的选择是否会有影响? 答:是会有影响的。 第6章 ;类和对象(一) 练习题6 6.1 判断题 × 1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。 × 2.类中的成员函数都是公有的,数据成员都是私有的。 × 3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。 √ 4.类定义后,它的成员个数及名称就不会再被改变了。 26 × 5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。如果类中没有定义任何构造函数时,就无法给定义的对象初始化。 √ 6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。 √ 7.对象成员的表示方法与结构变量成员的表示方法相同。 √ 8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。 √ 9.构造函数是一个其名与类名相同的特殊的成员函数。 × 10.析构函数是一个函数体为空的成员函数。 √ 11.构造函数和析构函数都是系统自动调用的成员函数。 × 12.构造函数和析构函数都可以重载。 √ 13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。 × 14.静态成员是指静态对象的成员。 × 15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。 √ 16.静态成员都可以使用类名加作用域运算符的方法来引用。 × 17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。 √ 18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。 × 19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。 √ 20.常对象需要引用常成员函数,而不能引用非常成员函数。 × 21.常对象的数据成员都是常数据成员。 √ 22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成 27 员。 × 23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。 √ 24.友元类中的所有成员函数都是友元函数。 √ 25.类型转换函数是一种特殊的成员函数,定义时不加类型说明,无函数参数。 √ 26.单参数的构造函数具有类型转换的作用。 6.2 单选题 1.下列关于类的定义格式的描述中,错误的是( C )。 A.类中成员有3种访问权限 B.类的定义可分说明部分和实现部分 C.类中成员函数都是公有的,数据成员都是私有的 D.定义类的关键字通常用class,也可用struct 2.下列关键字中,不属于定义类时使用的关键字是( D )。 A.class C.public B.struct D.default 3.下列关于成员函数的描述中,错误的是( A )。 A.成员函数的定义必须在类体外 B.成员函数可以是公有的,也可以是私有的 C.成员函数在类体外定义时,前加inline可为内联函数 D.成员函数可以设置参数的默认值 4.下列关于对象的描述中,错误的是( D )。 A.定义对象时系统会自动进行初始化 B.对象成员的表示与C语言中结构变量的成员表示相同 28 C.属于同一个类的对象占有内存字节数相同 D.一个类所能创建对象的个数是有限制的 5.下列关于构造函数的描述中,错误的是( C )。 A.构造函数可以重载 B.构造函数名同类名 C.带参数的构造函数具有类型转换作用 D.构造函数是系统自动调用的 6.下列关于析构函数的描述中,错误的是( A )。 A.析构函数的函数体都为空 B.析构函数是用来释放对象的 C.析构函数是系统自动调用的 D.析构函数是不能重载的 7.下列关于静态成员的描述中,错误的是( C )。 A.静态成员都是使用static来说明的 B.静态成员是属于类的,不是属于某个对象的 C.静态成员只可以用类名加作用域运算符来引用,不可用对象引用 D.静态数据成员的初始化是在类体外进行的 8.下列关于常成员的描述中,错误的是( C )。 A.常成员是用关键字const说明的 B.常成员有常数据成员和常成员函数两种 C.常数据成员的初始化是在类体内定义它时进行的 D.常数据成员的值是不可以改变的 9.下列关于友元函数的描述中,错误的是( B )。 A.友元函数不是成员函数 29 B.友元函数只可访问类的私有成员 C.友元函数的调用方法同一般函数 D.友元函数可以是另一类中的成员函数 10.下列关于类型转换函数的描述中,错误的是( C )。 A.类型转换函数是一种成员函数 B.类型转换函数定义时不指出类型,也没有参数 C.类型转换函数的功能是将其函数名所指定的类型转换为该类类型 D.类型转换函数在一个类中可定义多个 6.3 填空题 1.类体内成员有3个访问权限,说明它们的关键字分别是 公有 、 私有 和 保护 。 2.使用class定义的表中,成员的默认访问权限是 私有 的;由struct定义的类中,成员的默认的访问权限是 公有 的。 3.如果一个类中没有定义任何构造函数时,系统会 自动提供一个 默认 构造函数;同样,类中没有定义析构函数时,系统会自动提供一个 默认 析构函数。 4.静态成员是属于 类 的,它除了可以通过对象名来引用外,还可以使用 类名限定 来引用。 5.友元函数是被说明在 类体 内的 非 成员函数。友元函数可访问该类中的 成员。 6.6 简单回答下列问题 1. 一个类中是否必须有用户定义的构造函数?如果用户没有定义构造函 30 数,又如何对创建的对象初始化? 答:一个类用户可以不定义构造函数,这时系统自动提供一个默认的构造函数,并可用该构造函数对创建的对象初始化。 2. 拷贝构造函数具有几个参数?它有类型转换的作用吗? 答:拷贝构造函数具有一个参数,即为该类对象的引用。拷贝构造函数没有类型转换作用。 3. 静态成员属于类的,是否每个对象都可以引用该静态成员? 答:可以。 4. 常对象可以引用非常成员函数吗?非常对象可以引用常成员函数吗? 答:不可以。可以。 5.友元函数能否访问类中的保护成员?友元函数访问类中私有成员与成员函数访问私有成员的形式相同吗? 答:能。相同。 第7章 类和对象(二) 练习题7 7.1 判断题 × 1.定义对象指针时也要调用构造函数。 √ 2.对象指针可用同类对象的地址值给它赋值。 × 3.对象指针成员表示与对象引用相同。 √ 4.常类型指针有两种,一种是指针的地址值是常量,另一种是指针所指向的变量或对象是常量。 × 5.指向对象的常指针的地址值是可以改变的。 × 6.指向常对象的指针所指向的对象是可以改变的。 31 √ 7.this指针是系统生成的指向当前被某个成员函数操作对象的指针。 × 8.对象引用可以用一个同类对象的地址值对它赋值。 × 9.定义对象引用时,可以对其引用进行初始化,也可以不进行初始化。 × 10.对象数组的元素可以是不同类的对象。 × 11.对象指针数组可以使用不同类的对象的地址值进行初始化。 × 12.给对象数组元素赋值时都要创建临时对象。 √ 13.指向一维对象数组的指针是一个二级指针。 × 14.自身类对象可作该类的子对象。 √ 15.子对象的初始化要在构造函数的成员初始化列表中进行。 √ 16.使用new运算符创建的对象称为堆对象。 √ 17.任何对象都可以使用delete运算符来释放。 × 18.使用new运算符创建的对象数组其元素都具有默认值。 √ 19.类的作用域范围指的是类体内。 × 20.对象的存储类只有外部的和静态的。 7.2 单选题 1.f1()函数是类A的公有成员函数,p是指向类的成员函数f1()的指针,下列表示中正确的是( C )。 A.p=f1() C.p=A::f1 B.p=f1 D.p=A::f1() 2.p是指向类A数据成员a的指针,a是类A的一个对象。在给a成员赋值为5的下列表达式中,正确的是( C )。 A.a.p=5 32 B.a->p=5 D.*a.p=5 C.a.*p=5 3.Void Set(A&a);是类A中一个成员函数的说明,其中A&a的含义是( A )。 A.类A的对象引用a作该函数的参数 B.类A的对象a的地址值作函数的参数 C.表达式变量A与变量a按位与作函数参数 D.指向类A对象指针a作函数参数 4.已知:const A a;其中A是一个类名,指向常对象指针的表示为( D )。 A.const * A pa; C.A * const pa; B.const A *pa; D.const *pa A; 5.下列关于子对象的描述中,错误的是( D )。 A.子对象不可以是自身类的对象 B.子对象是另一个类的对象 D.一个类中只能有一个子C.子对象的初始化要包含在构造函数中 对象 6.执行下列说明语句,其调用构造函数的次数为( A )。 A a[5],*p[2];其中,A是一个类名 A.5 C.7 B.6 D.10 7.下列关于运算符new的描述中,错误的是( D )。 A.它可以创建对象或变量 B.它可以创建对象数组或一般类型数组 C.用它创建对象或对象数组时要调用相应的构造函数 D.用它创建的对象可以不用delete运算符释放 8.下列关于运算符delete的描述中,错误的是( B )。 A.使用该运算符可以释放用new运算符创建的对象或对象数组 33 B.使用该运算符可以释放所有对象 C.使用delete运算符时会自动调用析构函数 D.用它释放对象数组时,它作用的指针名前要加下标运算符[ ] 9.定义不同存储类对象时,必须要加的存储类说明符是( C )。 A.auto C.statie B.extern D.register 10.下列关于this的描述中,错误的是( D )。 A.this是一个由系统自动生成的指针 B.this指针是指向对象的 C.this指针在用对象引用成员函数时系统创建的 D.this指针只能隐含使用,不能显式使用 7.3 填空题 已知:class A{ public:A (int i) { a=i;}
版权声明:本文标题:C++课后习题及其答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702704234h427456.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论