
1.9 巧用数组——好玩贪吃蛇
在程序设计中,数组可以存储一组具有相同数据类型的数据。
1. 一维数组
1)静态定义
一维数组的静态定义如下图所示。

常量表达式必须是整型常量,不能是变量,这个数值必须是已知的数值。
• 可以在定义时,对数组初始化。

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

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

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

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

• 应该将特别大的数组定义在main()函数外,如果将其定义在main()函数内,就会异常退出。
训练1-36:定义一些一维数组,并赋值、运算、输出。

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

训练1-38:现在有n盏灯,编号为1~n,开始时所有的灯都是关的,编号为1的人走过来,把编号是1的倍数的灯开关按下(开的关上,关的打开),编号为2的人把编号是2的倍数的灯开关按下,编号为3的人又把编号是3的倍数的灯开关按下……直到第k个人为止。
给定n和k(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)动态定义
一个m行n列的二维数组相当于m个长度为n的一维数组。


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


