- 算法训练营:海量图解+竞赛刷题(入门篇)
- 陈小玉
- 836字
- 2021-07-23 18:16:31
1.9 巧用数组——好玩贪吃蛇
在程序设计中,数组可以存储一组具有相同数据类型的数据。
1. 一维数组
1)静态定义
一维数组的静态定义如下图所示。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-1.jpg?sign=1739123367-uBr0qcl3Q67HlcpWl6e686pBItK4NUrd-0-859a34d138bde0413e442730cb41ad66)
常量表达式必须是整型常量,不能是变量,这个数值必须是已知的数值。
• 可以在定义时,对数组初始化。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-2.jpg?sign=1739123367-tv4HwjCaEC20UPxtsTka51viszu8Qg9d-0-5a6d23845cab0869e0d7d3c330f1b483)
• 定义并初始化时可以不指定长度。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-3.jpg?sign=1739123367-Ze9t39aVlFcT5fzoFCjayXKm768Vnvmk-0-f0d0843e1de4959e9b3cd2d0fbd3aafe)
• 在非定义时不可以整体赋值。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-4.jpg?sign=1739123367-RQBIoothFt4Hx1E2masy1KyzyvaT6EO8-0-2ea960ddf78bbc0e7771e9381778b9a4)
• 不可以在数组变量之间赋值。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-5.jpg?sign=1739123367-RXojPYym6czN0pZ4IaYlZmLDqzIP0ltX-0-71402063e89b2c8ef05929127e8938e5)
• 系统不会检查下标是否有效。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/041-6.jpg?sign=1739123367-Wg3GskmRMAwLJEWsmi8t7kbcR95QmuWl-0-d219b4f76c433faf80fabbbad4ddb4ca)
• 应该将特别大的数组定义在main()函数外,如果将其定义在main()函数内,就会异常退出。
训练1-36:定义一些一维数组,并赋值、运算、输出。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/042-1.jpg?sign=1739123367-2qNERNQC80EE29zu6wKxyh4xCDsCxh2U-0-e44057584619edea136faf069d94971d)
训练1-37:输入一些整数,并将其逆序输出。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/042-2.jpg?sign=1739123367-y1duzzKzp5wZ0DiHW3CDOaByOdevTao8-0-d9c5a32c4fc03d15af037789f4688cf2)
训练1-38:现在有n盏灯,编号为1~n,开始时所有的灯都是关的,编号为1的人走过来,把编号是1的倍数的灯开关按下(开的关上,关的打开),编号为2的人把编号是2的倍数的灯开关按下,编号为3的人又把编号是3的倍数的灯开关按下……直到第k个人为止。
给定n和k(0<n,k≤1000),输出哪几盏灯是开着的。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/042-3.jpg?sign=1739123367-i5fhbBXitLHWLHb8oUL8esuxM56df2k5-0-7efb7daa44f6982daa2d78213c1d4eab)
训练1-39:输入n个学生的成绩(整数)并将其存入数组中,求其总成绩和平均成绩(浮点数)。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/043-2.jpg?sign=1739123367-yBLq5oQwX3zRmLgnSWC0TDFFT3dtn2l3-0-3f5e42cdf7f0d45f2afcb8bd085de82a)
训练1-40:输入n个学生的成绩并将其存入数组中,求其最低分和最高分。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/044-2.jpg?sign=1739123367-BHEwfKsSJFi1gvI200WfBAF2QYXzigqY-0-d4b47645b39dbda0294eaf93ca963f04)
2)动态定义
在程序运行过程中动态分配空间定义数组。一维数组的动态定义如下图所示。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/044-3.jpg?sign=1739123367-2fGSr19y0Ec9HGLtIbx3NWZjM94Z54ah-0-8712a98359d3e7ef9e1bc4a37a5eca51)
使用new分配的数组,在使用完毕后需要使用delete释放内存空间。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/044-4.jpg?sign=1739123367-OV268Be0mc2Ea7puxtOULeyg1iIZMWcW-0-ea385214d790a1b0dc58d6280468570f)
注意:
• 不要使用delete释放不是new分配的内存;
• 不要使用delete释放同一个内存块两次;
• 使用new为一个实体分配内存,需要使用delete释放内存空间;
• 使用new为一个数组分配内存,需要使用delete[]释放内存空间;
• 对空指针使用delete是安全的。
训练1-41:输入n个学生的成绩并将其存入动态数组a[]中,统计不及格的人数。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/045-1.jpg?sign=1739123367-72YMYJBVh7NbYGXzNKjWUMFqOYI41nLj-0-b6c003d940a98e6ac89bfe370abd7243)
2. 二维数组
1)静态定义
二维数组的静态定义如下图所示。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/045-2.jpg?sign=1739123367-Nik4dDt2RD32qx4TR9ntnviZNjGzNVaA-0-6b61468c4ac0b5d42f5a70093fdd5e60)
常量表达式必须是整型常量,不能是变量,该数值必须是已知的数值。
• 可以在定义时,对数组初始化。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-1.jpg?sign=1739123367-LMn5kpeiCZgKmR3uQ2SK3SW3hKliqtB0-0-3f310d9efb128aa7e1aa071e2a962c14)
• 将二维数组作为参数时,可以省略第1维的长度,但必须指定第2维的长度。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-2.jpg?sign=1739123367-Ifas6WlThQNG2FMS3VI6s1TWx7YdmlKi-0-e9172869e708995c060e1492738804b9)
2)动态定义
一个m行n列的二维数组相当于m个长度为n的一维数组。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-3.jpg?sign=1739123367-7pjy2FmtboFIyHAtgcWpzQUPFmqg4IjI-0-7351b948dafcff43e28d684523abf64d)
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-4.jpg?sign=1739123367-Ux0j8uJdXujEJDHnaEacAfriqC3t9Q0i-0-352d363ca28c9fbbed8b856de1e83ffc)
训练1-42:蛇形填数,输入一个整数n,按照蛇形填写n×n的矩阵。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-5.jpg?sign=1739123367-BQHbYdvt9liSWg1pvtNH8c4laPCFmwKQ-0-d3274bfb275c7f3d3ebae807b728cf1f)
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/046-6.jpg?sign=1739123367-aPN11iZEmC45lXPeGZtDkMiQByCp4aym-0-803fbc6f6d14f7e427e0eb6e41a52d23)
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/047-1.jpg?sign=1739123367-5jkVyJMy1KhBZdEKeTlceTM3U0324XjK-0-7ee603aee3c73f3ec770af67d8867a01)