**
数组·学后有感
**
山东农业大学2018级数学类四班 李伟超 2018年12月24日
在之前,通过对顺序、分支、循环、嵌套以及基础知识点的学习,我们已经可以编写程序来解决各种相当复杂的问题了,但是当需要处理的数据比较多时,仅依靠这些我们还是有些捉襟见肘,即使简单的问题也可能需要比较复杂的程序来处理。数组的引入便能够很好的解决这个棘手的难题。
数组,是一组具有相同类型的变量的集合,它是一种构造数据类型,是用于储存多个相同类型数据的集合。
而在上周我们系统的学习了数组的相关知识体系,并通过相应的练习加深了对数组的理解和掌握程度。以下,是我对学习数组过程中的一些整理和心得:
首先,数组分为一维数组和二维数组;
概念:(i)当数组中每个元素只带有一个下标时,我们称这样的数组为 一维数组。
(ii)当一维数组元素的类型也是一维数组时,便构成了“数组 的数组”,即二维数组。
定义和初始化:
一维数组(定义):类型标识符 数组名[常量表达式] 如int days[12]
一维数组(初始化):类型标识符 数组名[常量表达式]={值1,值2,值3···}如int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
二维数组(定义):数据类型 数组名[常量表达式1][常量表达式2] 如int days[2][12]
二维数组(初始化):二维数组的初始化和一维数组类似。如int days[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
引用:通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用这个数组中的任何一个元素。
一维数组元素的引用格式:数组名[下标]
二维数组元素的引用格式:数组名[下标][下标]
接下来我们通过一个实例来加深对数组的认识和了解。
以“细菌的繁殖与扩散”为例:
描述
在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。
输入 输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。 输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。
放在以前我们尚未接触数组这个概念时,解决这种类似矩阵的问题对于我们来说会相当棘手。而现在,我们就可以通过定义和引用二维数组的方式对这类为题加以处理。下面是代码:
#include <iostream>
using namespace std;
int a[20][20],b[20][20]; //通过这个二维数组实现对矩阵的刻画
int main()
{
int m,n;
cin>>m>>n;
a[5][5]=m;
for(int k=1;k<=n;k++)
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
b[i][j]=a[i][j]*2+a[i-1][j-1]+a[i][j-1]+a[i-1][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]+a[i-1][j+1]+a[i+1][j-1];
}
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
a[i][j]=b[i][j];
b[i][j]=0;
}
}
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
在运用二维数组的基础之上,我们通过相应的循环和对问题规律的描述,就能够实现出满足题意的理想效果。
应用:
通过上述的例子我们会知道通过数组我们可以模拟矩阵,来将高等代数中对应的一系列变换(由于矩阵行列式的阶数过高,人为计算相应困难)通过编程代码的方式加以实现;同时运用数组也能够帮助我们有效的处理大批量的具有相同性质的数据。
学习感悟:
数组虽然概念理解上不存在困难之处,但是由于对应数组能够解决的问题要求复杂多样,使得我们在实际编程的过程中难以一下子描述清楚,例如本次OJ作业中的变幻的矩阵,反反复复,蛇形填充数组等题,这需要我们在充分掌握的基础之上认真审题,一点一点摸清规律,合理定义数组,合理运用循环,把题目所要求的清晰符合逻辑的表达出来。这个过程并不轻松,我就在这里栽了不少跟头,保持耐心,相信过程,运用数组是一个从生到熟的过程,这不可能一笔带过,反复的专研和思考会给你想要的答案。
That’s all , thank you!