数组课后练习题
判断题
第一、二、十八题(重要)
在对全部数组元素赋初值时,不可以不指定一维数组的长度。
知识点:
- 一位数组赋初值 【书 P121】
个人做错了这道题!
答案与分析
错误
也就是说可以不指定数组长度……
分析
如果提供了全部初始值数组,也可以不指定长度,编译提供会自动帮你指定。
如:
int a[] = {3,1,2,5,6,-2}; //编译系统会帮你指定为a[6]
在对全部二维数组元素赋初值时,可以不指定二维数组的行数。
知识点:
- 二位数组赋初值 【书 P125】
个人做错了这道题!
答案与分析
正确
分析
同一维数组, 如果提供了全部初始值数组,也可以不指定第一维长度,编译提供会自动帮你计算出长度并指定。
但注意!
不能省略第二维的长度。
正确例子:
int a[][3] = {1,2,3, 4,5,6, 7}; //编译系统会帮你指定为a[3][3]
错误例子:
int a[3][] = {1,2,3, 4,5,6, 7}; //编译系统无法确定长度
在给全部数组元素赋初值时,可以不指定二维数组中的常量表达式,例如int a[][] = {1,2,3,4,5,6}
。
作为之前二维数组的练习题。
个人做错了这道题!
答案
错误
第十题
定义一个一维字符数组有个元素,用该一维字符数组表示一个字符串数组最多允许有个字符
知识点:
- 字符数组的容量 【书 P128】
答案与分析
错误
分析
字符数组char []
,容量比定义的长度要少一个。
因为字符数组还要存一个末尾的/0
,
所以题上定义了个元素(char a[50]
),但实际上只能存个字符。
同理:如果一个字符串长度是,
则它占用的空间是个。
例子见考前总结中最后的第7点。
第十一、十三题
C++中各种数据类型的变量在定义后会被自动初始化为0。
知识点:
- 一维数组的初始值 【书 P121】
答案与分析
错误
分析
一般方式定义的数据类型,如int a
,double b[10]
,都是不会被赋初值的。
这也就是为什么我们不赋初值就使用它会报错的原因,因为里面有以前的脏数据
但如果加上static
这个修饰词,定义为静态变量,就会被赋初值为0了。
如:
static int a; //a = 0
static int b[5]; //b1~b5 = 0
静态(static
)数组被定义时,数组的所有元素自动获取初始值0。
知识点:
- 静态一维数组 【书 P121】
答案与分析
正确
分析
同十一题,静态数组,里面所有元素自动赋初值为0。
第十七题
在C++中数组是具有一定顺序关系的若干相同类型变量的集合体。
知识点:
- 数组的概念 【书 P120】
答案与分析
正确
分析
纯概念题,记住!
第二十题(重要)
程序段:
char s1[10];
s1 = "program";
是合法的使用。
个人做错了这道题!
为一道很容易错的操作题。
知识点:
- 一维字符数组的定义 【书 P127】
答案与分析
错误
分析
请仔细阅读书上P127中「1.一维字符数组的定义」!
里面有很多没有讲到的点,但很容易错。
由第二十题衍生的练习题
作为第二十题相关的练习题。
这些都是根据书上P127中「1.一维字符数组的定义」里面的内容所出题。
故没有写分析,请仔细阅读书上事例来自行分析。
程序段:
char s1[10] = {'p', 'r', 'o', 'g', 'r', 'a', 'm'};
cout << s1;
是合法的使用。
个人做错了这道题!
与二十二题很容易混淆!
答案
正确
程序段:
char sa[] = {'p', 'r', 'o', 'g', 'r', 'a', 'm'};
cout << sa;
是合法的使用。
个人做错了这道题!
与二十一题很容易混淆!
答案
错误
仔细看看与二十一题的区别在什么地方,
很小的区别就造成了答案的不一样。
有如下的字符串数组定义语句:
char str1[] = {'p', 'r', 'o', 'g', 'r', 'a', 'm'};
char str2[] = {'p', 'r', 'o', 'g', 'r', 'a', 'm', '\0'};
char str3[] = "program";
下列说法正确的是()。
A、str1
中的数据可以作为一个整体(字符串)参加运算。
B、str2
和str3
中的数据只能作为一个整体(字符串)参加运算。
C、str2
和str3
中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。
D、str1
、str2
和str3
中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。
所谓作为一个整体,即是如以下操作:
str1 = "abcd";
cout << str1;
而以元素参加运算,即是如以下操作:
str1[2] = "a";
cout << str1[3];
如果只能以元素操作,则不能cout << str1
这样作为整体操作。
个人做错了这道题!
知识点:
- 二维数组的使用方法 【书 P125】
答案
C、str2
和str3
中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。
选择题
第三十、三十一题
在下面的一维数组定义中,()有语法错误。
A. int a[] = {1,2,3};
B. int a[];
C. int a[] = {0};
D. int a[5];
知识点:
- 一维数组的初始化 【书 P121】
个人做错了这道题!
为一道很容易错的操作题。
答案与分析
B. int a[];
分析
- A、对于确定初始值的数组,可以不指定长度,是正确的。(见上面第一题)
- B、这种定义方式是不存在的,要么赋初值,要么指定长度。
- C、很容易错选的选项,这种方式其实就代表定义个长度为1的数组,然后
a[0]=0
。是正确的。 - D、基本的定义方式,是正确的。
注意还有一种定义类型int a[...] = {0}
,代表定义个...
长度的数组,其中全部赋初值为0。
在下面的二维数组定义中,()有语法错误。
A. int x[10][10];
B. int x[][10] = {{1,3} ,5 ,7};
C. int x[][];
D. int x[10][10] = {0};
知识点:
- 二维数组的初始化 【书 P125】
答案与分析
C. int x[][];
分析
-
A、基本的二维数组定义方式,没赋初值,是正确的。
-
B、这里有赋初值,所以可以不用指定行数,是正确的。
最终数组状态为:
x[0][0] = 1; x[0][1] = 3; x[1][0] = 5; x[2][0] = 7;
-
C、错因跟上一样。
-
D、这里就是第三十题说得,定义一个确定长度的二维数组,然后全部赋初值为0,是正确的。
第三十五题
定义一个一维数组,正确的语句是()。
A. int a(10);
B. int n = 10; int a[n]
C. int n; cin>>n; int a[n]
D. const int n = 10; int a[n]
知识点:
- 一维数组的定义 【书 P120】
答案与分析
D. const int n = 10; int a[n]
分析
首先A选项,不知道他在干嘛,直接排除。
对于B、C、D选项,涉及到一维数组的定义这个知识点。
B和C中的n
均是变量,故错误。
D中的n
为常量(const
),故正确。
书上原话
在定义数组时,数组的大小必须是常量,而不能是变量或者变量表达式。
第三十六题
以下哪种说法错误?()。
A. 数组中的元素在某些方面彼此相关。
B. 数组中的所有元素具有相同的下标。
C. 数组中的所有元素具有相同的数据类型。
D. 数组中的所有元素具有相同的名字。
答案与分析
B. 数组中的所有元素具有相同的下标。
分析
纯概念题,记住!
B是错的很容易看出来,
主要是A、C、D是对的要记住。
第五十二题
若有定义语句int a[3][6]
,
按在内存中的存放顺序,a
数组的第个元素是()。
我出成了填空题!……
请想出正确答案!……
知识点:
- 二维数组的使用方法 【书 P125】
答案与分析
a[1][3]
分析
二维数组的存放方式,也是按着顺序存放的。
并且先是按行顺序存放,一行存完了再换下一列。
也就是按照a[0][0]
,a[0][1]
,a[0][2]
…a[0][5]
,a[1][0]
,a[1][1]
,…,a[2][5]
的顺序存放,
所以第个,就是,也就是第行第列,为a[1][3]
。
第五十九题
以下关于二维数组的说法中,错误的是()。
A. 若在定义二维数组的同时给其赋初值,则二维数组的列数可以省略。
B. 二维数组的每一行相当于一个一维数组,因此二维数组可以看成是由一维数组构成的数组。
C. 给二位数组赋值时,可以将所有元素写在一个{}
内。
D. 引用二维数组时,必须包含数组名、行下标和列下标。
知识点:
- 二维数组的各种概念 【书 P125】
答案与分析
A. 若在定义二维数组的同时给其赋初值,则二维数组的列数可以省略。
分析
纯概念题,记住!
未写入的题
- 第十二题——数组
[]
里能放的东西,只有常量和常量表达式 - 第十四题——数组不是C++基本数据类型
- 第十六题——数组再内存中是连续存在的(包括二维数组)
- 第十九题 (个人做错) ——字符串处理函数(
strcpy
、strcmp
等)的头文件(<string.h
或cstring
或<iostream>
),是不含string
类的(头文件为<string>
)。 - 第三十四题:
字符数组(
char []
)只能用字符串函数来处理(strcpy
、strcmp
)
字符串(string
)只能用运算符号(+
、==
)来处理。
两者有各自对应的运算方式。