### 第4章-数组C++-习题答案解析
#### 单项选择题解析
**题目1**
- **题目:** 若有说明 `int a[3][4];` 则 `a` 数组元素的非法引用是【 】
- A. `a[0][2*1]`
- B. `a[1][3]`
- C. `a[4-2][0]`
- D. `a[0][4]`
- **答案:** D
- **解析:** 数组下标从0开始,因此在 `a[3][4]` 的定义下,合法的下标范围为0到2(对于第一个下标)和0到3(对于第二个下标)。选项D中的 `a[0][4]` 的列下标超出了合法范围,因此是非法引用。
**题目2**
- **题目:** 在 C++语言中,引用数组元素时,其数组下标的数据类型允许是【 】
- A. 整型常量
- B. 整型表达式
- C. 整型常量或整型表达式
- D. 任何类型的表达式
- **答案:** C
- **解析:** 数组下标必须是整型表达式或整型常量,因为数组下标用于索引数组元素的位置,需要精确的整数值。
**题目3**
- **题目:** 以下不正确的定义语句是【 】
- A. `double x[5]={2.0,4.0,6.0,8.0,10.0};`
- B. `int y[5]={0,1,3,5,7,9};`
- C. `char c1[]={'1','2','3','4','5'};`
- D. `char c2[]={'\x10','\xa','\x8'};`
- **答案:** B
- **解析:** 选项B中的 `y` 定义了5个元素的数组,但初始化时提供了6个值,这会导致编译错误,因为初始值的数量超过了数组的大小。
**题目4**
- **题目:** 对以下说明语句的正确理解是【 】
- `int a[10]={6,7,8,9,10};`
- **答案:** B
- **解析:** 这条语句将5个初值依次赋给 `a[0]` 至 `a[4]`。未指定的元素将自动初始化为0。
**题目5**
- **题目:** 若有说明 `int a[ ][4]={0,0};` 则下面不正确的叙述是【 】
- A. 数组 `a` 的每个元素都可得到初值0
- B. 二维数组 `a` 的第一维大小为1
- C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小
- D. 只有元素 `a[0][0]` 和 `a[0][1]` 可得到初值,其余元素均得不到确定的初值
- **答案:** D
- **解析:** 由于给出了2个初值,并且第二维的大小为4,这意味着数组的第一维大小为1(即1行)。所有未初始化的元素都将被默认初始化为0,而不是无法获得确定的初值。
**题目6**
- **题目:** 以下能对二维数组 `c` 进行正确的初始化的语句是【 】
- A. `int c[3][]={{3},{3},{4}};`
- B. `int c[][3]={{3},{3},{4}};`
- C. `int c[3][2]={{3},{3},{4},{5}};`
- D. `int c[][3]={{3},{},{3}};`
- **答案:** B
- **解析:** 选项A中的列大小被省略,这是不允许的。选项C中提供了比数组声明的行更多的初始化列表,这是错误的。选项D中省略了一个初始化列表,这也是不允许的。
**题目7**
- **题目:** 以下不能对二维数组 `a` 进行正确初始化的语句是【 】
- A. `int a[2][3]={0};`
- B. `int a[][3]={{1,2},{0}};`
- C. `int a[2][3]={{1,2},{3,4},{5,6}};`
- D. `int a[][3]={1,2,3,4,5,6};`
- **答案:** C
- **解析:** 选项C中提供了比数组声明的行更多的初始化列表,这是错误的。
**题目8**
- **题目:** 阅读下面程序,则程序段的功能是【 】
```cpp
#include<iostream>
using namespace std;
int main(){
int c[]={23,1,56,234,7,0,34},i,j,t;
for(i=1;i<7;i++){
t=c[i];
j=i-1;
while(j>=0 && t>c[j]){
c[j+1]=c[j];
j--;
}
c[j+1]=t;
}
for(i=0;i<7;i++)
cout<<c[i]<<"\t";
putchar('\n');
return 0;
}
```
- **答案:** B
- **解析:** 此代码段实现了插入排序算法的一个变种,该算法对数组元素进行降序排列。外层循环遍历数组的每个元素(除了第一个),内层循环将当前元素与已排序部分的元素比较并将其插入适当的位置。结果是数组按照降序排列。
以上是对习题集文档中提供的题目及其答案的详细解析。通过这些练习,读者可以更好地理解C++中数组的基本概念和用法,特别是关于数组初始化、引用和排序等方面的知识点。