数组专项总结
数组学习心得
学习数组的目的是让解决复杂问题更加简单和方便,比如一些数字矩阵问题。在做题时,往往需要找出数字之间的关系或者说是解析式。我觉得数组专项的难点就在与题目中各种关系和逻辑的寻找,我几乎每次都会摸不到头脑,也放弃过好几次。再看两遍课本例题会有些思路,比如多定义个数组来表示方向,让数字在矩阵中按程序设计的走。从而解决蛇形,螺旋这样数字拐弯的问题。这时就会有很多需要注意的易错点,比如数组的整体输出和逐个输出的区别,需要换行的地方和需要换方向的地方,多个数组的赋值混乱,写的程序太冗杂等等问题,都是我在写程序的时候经常犯的问题,有几次写完了程序运行不出来差点崩溃,经过这段时间的学习我提升了自己的耐心,但还有许多需要继续改进的地方,我认为课后的复习非常重要,不复习的话自己刚学会的一点东西到用的时候就不会了。总之,我已经感受到了c++的恐怖,也更能感受到写成功后的喜悦。
数组知识点
数组就是一个集合,里面存放了相同类型的数据元素
特点:数组中给个元素都是相容的数据类型,在内存中连续存放
一维数组
一维数组的的三种定义方式:
- 数据类型 数组名[数组长度]
- 数据类型 数组名[数组长度] = {值1, 值2, 值3}
- 数组类型 数组名[] = {值1, 值2, 值3…}
2.一维数组名的用处
可以统计整个数组在内存中的长度,可以获取数组在内存中的首地址。
3.一维数组的定义和初始化
数组下标都是从0开始的
注意 下标越界是大忌
4.一维数组的输入和输出
1)键盘逐个读入数组元素值
2)给每个数组元素直接赋值
5.一维数组的插入删除
例如:排队问题
for(i=1;i<=n;i++)scanf("%d",&q[i]);
scanf("%d",&x);
for(i=n;i>=x;i--)q[i+1]=q[i];
q[x]=q[n+1];
for(i=1;i<=n;i++)printf("%d",q[i]);
printf("%d\n",q[n]);
6.一维数组的查找统计
7.一维数组的元素排序
选择排序,冒泡排序,插入排序
8.c++sort函数
二维数组
1.二维数组的定义和初始化
2.二维数组的存储个元素引用
3.二维数组的输入输出
4.让人头疼的数字方阵
数字方阵的解决办法:解析法找出通项公式,模拟法动态填数。
例如:蛇形方阵
int i = 0,j = 0;
int flag = 1;
m[0][0] = 1;
for (int c = 2; c <= n*n; c++)
{
if (flag == 1)
{
if (i - 1 >= 0 && j + 1 < n)
{
i--;
j++;
m[i][j] = c;
}
else if (j + 1 < n)
{
j++;
m[i][j] = c;
flag = -flag;
}
else if (i + 1 < n)
{
i++;
m[i][j] = c;
flag = -flag;
}
}
字符数组
字符数组的赋值
字符数组的输入输出
快速读入数字字符串函数