编程总结3

          编程总结3
基础知识
8.1一维数组的定义和初始化
1.数组是一组具有相同类型的变量的集合。将数据存储在内存的一个连续区域中,使用一个统一的名字来标识这组相同类型的数据,这个名字称为数组名。构成数组的每个数据项称为数组元素,C程序通过数组的下标实现对数组元素的访问。例如储存五个学生成绩时用:
   int score[5];
其中,int表示该数组的基类型,即该数组元素的类型。下标的个数表明数组的维数,此数组为一维数组。
2.注意C语言中数组的下标都是从0开始的。在上个例子中,第一个元素为score[0]。
3.在定义数组时,不能使用变量定义数组的大小,即使在此之前变量已经被赋值,也不可以。只能用整数常量来定义数组的大小。
4.定义但未进行初始化的数组元素的值仍然是随机数。对一维数组进行初始化时,可以将元素初值放在=后面用一对花括号括起来的初始化列表中。即:
int score[5]={90,80,70,100,95};在不显示给初值的情况下,程序将自动初始化为0.
5.注意下标不可以越界。

.二维数组的定义
一般形式为 类型说明符 数组名[常量表达式][常量表达式];
如:int a[3][4];  注意不要写成int a[3],[4];
2.在C语言中可以把二维数组看成一个特殊的一维数组。如:
int a[3][4];可看成
a[0]——a[0][0]a[0][1]a[0][2]a[0][3]
a[1]——a[1][0]a[1][1] a[1][2] a[1][3]
a[2]——a[2][0]a[2][1] a[2][2] a[2][3]
虽然像个矩阵,但是在内存中是顺序存放的,先存放第一行在存放第二行。
3.二维数组的引用
在二维数组中元素的表现形式为
数组名 [下标] [下标];
4.二维数组的初始化
(1)分行给二维数组赋值
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有的数据写在一个花括号内,按照数组元素在内存中的排列顺序对各个元素赋值,如:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
效果和上面的那种方法相同。但是尽量少用这种方法 ,这样看着乱。
(3)同样也可以对部分数组元素赋值,如:
int a[3][4] = {{1},{2},{3}}
这样赋值后各个元素如下:
1000
2000
3000
也可以对某个元素赋值,如:
int a[3][4] = {{1},{0,2},{9,10,11}};
赋值后各个元素情况如下:
1000
0200
910110
(4)如果对所有的元素都赋初值,则定义数组时可以不对第一维的数组赋值长度,但是第二维不可以不指定长度。如:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};等价于
int a[ ][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
5.注意第二维的长度永远不能省略。
解决问题
1. a[n],对一个确切的数值n,在使用时经常要比它大一点,在使用数组时。通常要结合循环,将数据存储输入或输出。
2.输入n个数时,先定义除数组意外的变量。然后n然后定义数组,接着通过for循环输入a[i].
3.对于数组逆序重放问题只需输入输出时将for循环倒置一下便可。
4.对于校门外的树这道题,可将数组定义为bool类型,因为在路边树只有存在和不存在两种情况,此外,一定要紧扣题目,按题中所叙述的顺序输入输出。
5.在有趣的跳跃这道题中,我用到了一种新学的排序方法,将数组b[i]进行从1到n排序,可用sort(b+1,b+n);但头文件必须有#include<algorithm>。
6.用for循环输出a[i]并要求有空格时应表示为: cout<<a[i]<<" ";下一行为 cout<<endl;
7.倒置排序中输出的是原来的数,但排序时是按照倒置后的数进行的。所以将倒置后的数排序后,要注意交换原数的位置。
8.对于矩阵类问题,一般都要用到二维数组。a[i][j]中i表示行,j表示列。对此二维数组进行定义时,可在主函数之前。
9.扫雷计数题中,要分别把一个格及周围八个格分别表示出来并讨论。
感悟:我觉得数组的题更加难了,有些题都开始读不懂了,完全蒙了,我觉得自己下的功夫不够多,我应该多看一下老师让看的关于算法的题,来锻炼一下自己思考问题的能力。把把自己写过的代码在重新看一下,再捋一捋思路。快要考试了,希望自己能够不会后悔吧。

猜你喜欢

转载自blog.csdn.net/weixin_43641974/article/details/85235245