算法训练营:海量图解+竞赛刷题(入门篇)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 巧用数组——好玩贪吃蛇

在程序设计中,数组可以存储一组具有相同数据类型的数据。

1. 一维数组

1)静态定义

一维数组的静态定义如下图所示。

常量表达式必须是整型常量,不能是变量,这个数值必须是已知的数值。

• 可以在定义时,对数组初始化。

• 定义并初始化时可以不指定长度。

• 在非定义时不可以整体赋值。

• 不可以在数组变量之间赋值。

• 系统不会检查下标是否有效。

• 应该将特别大的数组定义在main()函数外,如果将其定义在main()函数内,就会异常退出。

训练1-36:定义一些一维数组,并赋值、运算、输出。

训练1-37:输入一些整数,并将其逆序输出。

训练1-38:现在有n盏灯,编号为1~n,开始时所有的灯都是关的,编号为1的人走过来,把编号是1的倍数的灯开关按下(开的关上,关的打开),编号为2的人把编号是2的倍数的灯开关按下,编号为3的人又把编号是3的倍数的灯开关按下……直到第k个人为止。

给定nk(0<n,k≤1000),输出哪几盏灯是开着的。

训练1-39:输入n个学生的成绩(整数)并将其存入数组中,求其总成绩和平均成绩(浮点数)。

训练1-40:输入n个学生的成绩并将其存入数组中,求其最低分和最高分。

2)动态定义

在程序运行过程中动态分配空间定义数组。一维数组的动态定义如下图所示。

使用new分配的数组,在使用完毕后需要使用delete释放内存空间。

注意:

• 不要使用delete释放不是new分配的内存;

• 不要使用delete释放同一个内存块两次;

• 使用new为一个实体分配内存,需要使用delete释放内存空间;

• 使用new为一个数组分配内存,需要使用delete[]释放内存空间;

• 对空指针使用delete是安全的。

训练1-41:输入n个学生的成绩并将其存入动态数组a[]中,统计不及格的人数。

2. 二维数组

1)静态定义

二维数组的静态定义如下图所示。

常量表达式必须是整型常量,不能是变量,该数值必须是已知的数值。

• 可以在定义时,对数组初始化。

• 将二维数组作为参数时,可以省略第1维的长度,但必须指定第2维的长度。

2)动态定义

一个mn列的二维数组相当于m个长度为n的一维数组。

训练1-42:蛇形填数,输入一个整数n,按照蛇形填写n×n的矩阵。