主页
Featured image of post 程序设计——数组习题……

程序设计——数组习题……

程序设计课程中数组课后习题选讲……

文章字数:3240
预计阅读时长: 分钟

数组课后练习题

判断题

第一、二、十八题(重要)

在对全部数组元素赋初值时,不可以不指定一维数组的长度。

知识点:

  • 一位数组赋初值 【书 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}

作为之前二维数组的练习题。

个人做错了这道题!

答案

错误


第十题

定义一个一维字符数组有$50$个元素,用该一维字符数组表示一个字符串数组最多允许有$50$个字符

知识点:

  • 字符数组的容量 【书 P128】

答案与分析

错误

分析

字符数组char [],容量比定义的长度要少一个

因为字符数组还要存一个末尾的/0
所以题上定义了$50$个元素(char a[50]),但实际上只能存$49$个字符。

同理:如果一个字符串长度是$n$,
则它占用的空间是$n+1$个。

例子见考前总结中最后的第7点


第十一、十三题

C++中各种数据类型的变量在定义后会被自动初始化为0。

知识点:

  • 一维数组的初始值 【书 P121】

答案与分析

错误

分析

一般方式定义的数据类型,如int adouble 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";

下列说法正确的是()。


Astr1中的数据可以作为一个整体(字符串)参加运算。
Bstr2str3中的数据只能作为一个整体(字符串)参加运算。
Cstr2str3中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。
Dstr1str2str3中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。

所谓作为一个整体,即是如以下操作:

str1 = "abcd";
cout << str1;

而以元素参加运算,即是如以下操作:

str1[2] = "a";
cout << str1[3];

如果只能以元素操作,则不能cout << str1这样作为整体操作。

个人做错了这道题!

知识点:

  • 二维数组的使用方法 【书 P125】

答案

Cstr2str3中的数据既可以以元素为单位参加运算,也可以作为一个整体(字符串)参加运算。

选择题

第三十、三十一题

在下面的一维数组定义中,()有语法错误。


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选项,不知道他在干嘛,直接排除。

对于BCD选项,涉及到一维数组的定义这个知识点。

BC中的n均是变量,故错误。
D中的n为常量(const),故正确。

书上原话

在定义数组时,数组的大小必须是常量,而不能是变量或者变量表达式。


第三十六题

以下哪种说法错误?()。


A. 数组中的元素在某些方面彼此相关。
B. 数组中的所有元素具有相同的下标。
C. 数组中的所有元素具有相同的数据类型。
D. 数组中的所有元素具有相同的名字。

答案与分析

B. 数组中的所有元素具有相同的下标。

分析

纯概念题,记住!

B是错的很容易看出来,
主要是ACD是对的要记住。


第五十二题

若有定义语句int a[3][6]
按在内存中的存放顺序,a数组的第$10$个元素是()。


我出成了填空题!……
请想出正确答案!……

知识点:

  • 二维数组的使用方法 【书 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]的顺序存放,

所以第$10$个,就是$10 = 2 * 3 + 4$,也就是第$2$行第$4$列,为a[1][3]


第五十九题

以下关于二维数组的说法中,错误的是()。


A. 若在定义二维数组的同时给其赋初值,则二维数组的列数可以省略
B. 二维数组的每一行相当于一个一维数组,因此二维数组可以看成是由一维数组构成的数组
C. 给二位数组赋值时,可以将所有元素写在一个{}
D. 引用二维数组时,必须包含数组名、行下标和列下标。

知识点:

  • 二维数组的各种概念 【书 P125】

答案与分析

A. 若在定义二维数组的同时给其赋初值,则二维数组的列数可以省略

分析

纯概念题,记住!

未写入的题

  • 第十二题——数组[]里能放的东西,只有常量和常量表达式
  • 第十四题——数组不是C++基本数据类型
  • 第十六题——数组再内存中是连续存在的(包括二维数组)
  • 第十九题 (个人做错) ——字符串处理函数(strcpystrcmp等)的头文件(<string.hcstring<iostream>),是不含string类的(头文件为<string>)。
  • 第三十四题:

    字符数组(char [])只能用字符串函数来处理(strcpystrcmp
    字符串(string)只能用运算符号(+==)来处理。
    两者有各自对应的运算方式。