文档详情

C++第五章习题解答.doc

发布:2017-05-28约1.72万字共18页下载文档
文本预览下载声明
第五章 数组与指针习题 一、.基本概念与基础知识自测题 5.1 填充题 5.1.1 数组定义时有三个要素:数组名,数组元素的 (1) 和数组元素的 (2) 。按元素在数组中的位置进行访问,是通过 (3) 进行的,称为 (4) 或 (5) 访问。为了使数组声明中数组的大小修改更为方便,总是将 (6) 用于声明数组长度。 答案:(1)类型 (2)数量 (3)下标运算符 (4)下标 (5)索引 (6)常变量 5.1.2 C/C++中的多维数组用的是一个 (1) 的定义,即多维数组的基本定义是 (2) 构成的数组,三维数组的元素是 (3) 。 答案:(1)嵌套 (2)以数组作为元素 (3)二维数组 5.1.3 计算机内存是一维编址的,多维数组在内存中的存储 (1) ,C/C++多维在内存中的排列是 (2) 方式,即越 (3) 的下标变化 (4) 。设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为 (5) + (6) 。 答案:(1)必须要转化为一维方式, (2)按行方式 (3)右 (4)越快 (5)a数组的首地址 (6)(i*n+j)*u 5.1.4 对于多维数组, (1) 的大小是确定的,所谓“不检查数组边界”只是不检查 (2) 的边界,而 (3) 的边界是在控制之中的,所以多维数组名作为函数的参数只可以 (4) 缺省。 答案:(1)较低各维的 (2)最高维(第一维) (3)较低各维 (4)最高维 5.1.5 指针变量保存了另一变量的 (1)值,不可以任意给指针变量赋一个地址值,只能赋给它 (2) 和 (3) 的地址。使用变量名来访问变量,是按 (4) 来直接存取变量称为 (5) 方式;而借助指针变量取得另一变量的地址,访问该变量称为 (6) 方式。 答案:(1)地址 (2)NULL (3)已经分配了内存的变量的地址 (4)按变量的地址 (5)直接访问 (6)间接访问 5.1.6 固定指向一个对象的指针,称为 (1) ,即 (2) ,定义时const放在 (3) 。而指向“常量”的指针称为 (4) ,指针本身可以指向别的对象,但 (5) ,定义时const放在 (6) 。 答案:(1)指针常量 (2)指针本身是常量 (3)const放在类型说明之后,变量名之前 (4)常量指针 (5)不能通过该指针修改对象 (6)const放在类型说明之前 5.1.7 数组名在表达式中被自动转换为指向 (1) 的指针常量,数组名是地址,但数组名中放的地址是 (2) ,所以数组名 (3) 。这样数组名可以由 (4) 来代替,C++这样做使用时十分方便,但丢失了数组的另一要素 (5) ,数组名是指向数组 (6) 的指针,而不是指向数组 (7)的。编译器按数组定义的大小分配内存,但运行时对 (8) 不加检测,这会带来无法预知的严重错误。 答案:(1)数组第一个元素 (2)不可改变的 (3)称指针常量 (4)指针 (5)数组元素的数量 (6)元素 (7)整体 (8)对数组的边界不加检测 5.1.8 有一个三维数组: int z3d[2][3][4]; 给出指向三维数组第i行第j列第k页元素的指针的三种表达方式 (1) , (2) , (3) 。再给出这些元素的三种表达方式 (4) , (5) , (6) 。 答案:(1)z3d[i][j]+k或z3d[i][j][k] (2)*(z3d[i]+j)+k (3)*(*(z3d+i)+j)+k (4)z3d[i][j][k]或*(z3d[i][j]+k) (5)*(*(z3d[i]+j)+k) (6)*(*(*(z3d+i)+j)+k) 5.2简答题 5.2.1 物理上,C++是怎样访问数组元素的?请对访问方法作简单介绍。 答:物理上,C++语言的下标运算符[ ]是以指针作为操作数的,a[i]被编译系统解释为*(a+i),即表示为a所指(固定不可变)元素向后第i个元素。无论我们是以下标方式或指针方式存取数组元素时,系统都是转换为指针方法实现。这样做对多维数组尤其方便。 5.2.2 什么是回溯算法? 答:回溯法是对枚举法的一种改进。回溯法的基本思想是,通过对问题的分析找出解决问题的线索,先在一个局部上找出满足问题条件的局部的解,然后逐步由局部解向整个问题的解的方向试探,若试探成功就得到问题的解,试探失败逐步向后退,改变局部解再向前试探。回溯法能避免枚举法的许多不必要的搜索,使问题比较快地得到解决。 5.2.3 用数组名作为函数的参数时,可否加上数组的长度?如果需要加则怎样加?为什么? 答:被调函数中作为形式参数的一维数组不需要说明长度,即使说明了大小也不起作用,因为C++只传递数组首地址,而对数组边界不加检查。
显示全部
相似文档