1 数组的形式 数据类型 数组名[整数];
2 分为定义行:中括号中整数代表数组长度(可以为变量,但必须有值),非定义行:中括号之中为下标。
3 数组主要和循环搭配,在数组循环中要从0开始。
4 数组是不能进行整体操作的,包括:不能整体输入输出,不能整体赋值,不能整体比较。
5 数组的初始化 eg: int a[3]={1,2,3} 局部初始化 eg:int a[3]={1,2}剩下的值都为0
6 数组的长度是变量时,不能进行初始化。
7 用十六进制来储存,a代表10 ...........f代表15。0x代表十六进制 %x代表十六进制的输出占位符。
8 数组中的元素的地址都是连续的。
9 数组的名字为数组首元素的地址。设数组 int c[3] c代表首元素地址,c+1为下一个元素的地址,1代表一个单位(该单位由数据类型决定,int为4个字节。)
10 数组地址的应用scanf(“%d”,&a[3]) 等于scanf("%d",a+3)
11 数组用于函数的形式
{ int www(int n,int a[]) ///定义函数
...................................................................
int a[n]; 定义数组
www(n,a); ///调用函数
注:函数中,要先输入n再输入数组名称。
注:数组中形参和实参在空间是是重叠的,也就是说对形参的改变就是对实参的改变。因为传递的是地址,并非数据
12 插入元素时,要扩充空间,从后向前循环,删除元素时,只能把后面的元素前移造成假象删除,从后前向后删除。
//二维数组//
13对于二维数组 数据类型 数组名 [行长度][列长度]
二维数组与嵌套循环搭配。
14在运用多重数组时,最好要把中括号中的长度写明,不要省略,以免出错。
15 上三角,下三角,一般先处理对角线的位置。
16 交换数据 时要处理一半数据二维中
eg:for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
17对数据进行排列,有冒泡法,和选择法,但是运算效率太低,建议使用快速排序函数。
qsortt(a,n,sizeof(a[0]),cmp); ///在stdlib中。
int cmp(int*a,int*b)
{
return a[0]-b[0];///代表升序 return b[0]-a[0];/代表降序
}
第一个参数代表排序数据的地址,第二个参数表示排序数据的个数,第三个参数代表每个排序数据占用空间的大小,最后一个参数指向比较函数。
18//
数组方法
【1】整数循环拆分 存入数组,倒序输出
【2】取最大值,1设最大值一个一个比较 2快速排序法
【3】交换变量 n/2只交换到一半
【4】图形转换
1找规律 b[m-1-i][i]=a[i][j] 2 伪输出
【5】统计数组法 ,对重复的数字统计,eg: b[a[i]]++
要注意范围,要进行初始化
【6】二分法 数组较大,把数组的前后分开,先考虑中间元素,再考虑两侧的元素,相当于把数组分为两个较小的部分,在嵌套循环中注意变量初始化
【7】冒泡法排序 多次交换
【8】选择排序法 记录下标,只交换一次变量
【9】0/1法 两个极端,要么有要么没有
【10】打表法 将个个数据排成一个表,通过下标读取数据
【11】较大的数组要定义为全局变量。 因为局部变量分配的空间较小无法储存大的数组