数组的基本概念一维数组二维数组第
- 格式:pdf
- 大小:8.83 MB
- 文档页数:48
数组的分类
1. 一维数组:由一组具有相同数据类型的数据按照一定顺序排列而成的线性表。
2. 二维数组:由若干个一维数组组成的表格状数据结构,可以看作是一个行列都固定的矩阵。
3. 稀疏数组:指当一个数组中大部分元素为0或同一值时,可以采用压缩存储方式,只记录不同值的元素和其位置,以节省存储空间和提高运算效率。
4. 动态数组:在插入或删除元素时可以自动改变大小的一维数组,具有灵活性和高效性。
5. 布尔数组:由若干个布尔值组成的数组,可以用来表示某些问题的真值表或状态表。
第六章一、数组的概念数组是共享一个名字的一组具有相同类型的连续存放的变量的集合数组是一组有序数据的集合数组中各数据的排列是有一定规律的,下标代表数据在数组中的符号所有的数组元素具有统一的数据类型数组名是数组的首地址,每个元素是连续存放的数组元素是由数组名和下标唯一确定二、一维数组①怎样定义一维数组一维数组的定义方式为类型标识符数组名[常量表达式]其中类型标识符:任一种基本数据类型或者是构造数据类型数组名:自己定义的数组标识符,遵从标识符命名规则常量表达式表示数组的长度,也是元素的个数注意:(1)数组名不能和变量名相同(2)定义的时候要指定数组中的元素个数常量表达式可以包括常量和符号常量比如int[3+5]是合法的但是不可以包括变量int a[n]是不合法的C不允许对于数组的大小进行动态定义不过如果在被调用的函数中(不包括main)中定义数组其长度可以是变量或者非常量的表达式比如Void func(int n){ int a[2*n] //合法的n的值从实参中传来调用func函数时形参n从实参中得到值这种情况叫做“可变长数组”,允许在每次调用func时有不同的n不过每次使用的时候数组的长度是固定的(3)数组的大小不可以是浮点常量(4)定义数组的时候不能没有数组长度int a[] 非法②一维数组元素的引用数组元素是组成数组的基本单元 数组元素也是一种变量 引用的格式数组名[数组下标]其中数组下标只可以是整型常量或者整型表达式 如果是小数的话c 编译的时候会自动取整数组在定义之后数组名代表数组的首地址其中的元素按照下标依次存放而且下标从0开始!数组定义之后系统将给其分配一定的内存单元其所占内存单元的大小和数组元素的类型和数组的长度有关数组所占内存单元字节数=数组大小*sizeof (数组元素类型)其中Int 2字节(TC 中)编译器不同可能不同 Char 1 Short 1 Long 4 Float 4 Double 8比如要引用a[2] 就会先计算2000+2*2=2004 然后再从2004中取出内容占用的字节数为: 10 * sizeof(int) = 10 * 2 = 20内存地址2000 200220042018a……第1个元素 ……第2个元素 第3个元素第10个元素注意事项(1)只可以逐个引用数组的元素,不能一次性引用整个数组(所以常用循环)(2)数组引用要注意越界问题C语言对于数组不作越界检查,但是下标超范围会死机或者程序错误(3)一般对于数组长度会采用宏定义define③一维数组的初始化如果对于一维数组不赋初值,则为随机数对于数组元素的赋值,叫做数组的初始化不赋值不叫初始化数据类型符数组变量名[常量表达式]={表达式1…表达式n}(1)在定义数组时对全部数组元素赋予初值Inta[5]={1,2,3,4,5};数组的元素要放在花括号里边,元素之间用逗号隔开花括号里边的数据叫做“初始化列表”(2)也可以只给数组中的一部分元素赋值Inta[5]={1,2,3};则只给前三个赋值,后边两个自动为0(3)如果想让一个数组中的元素全部都为0,可以写Int a[5]={0,0,0,0,0}; 或者Int a[5]={0};//未赋值的部分自动为0(4)在对全部数组元素赋初值的时候由于元素的个数确定可以不用指定数组的长度Int a[]={1,2,3,4,5};虽然是没有指定长度不过系统会自动默认是5不过不可以int a[];所以如果要定义的长度比赋值的长度长,就要写下标注意:表达式的个数不能超过数组变量的大小如果定义数值型数组的时候未被初始化列表指定初始化的都是0如果定义字符型数组的时候未被初始化列表指定初始化的都是’\0’如果定义指针型数组的时候未被初始化列表指定初始化的都是NULL空指针C语言除了在定义数组变量时可以对数组整体赋值之外无法再全体赋值所以Char a[3]A=,‘1’,’2’,’3’-A*+=,‘1’’2’3’-;A*3+=,‘1’’2’’3’-; 都是错的所以数组定义后只能用赋值语句一一赋值Char str[80];Str*0+=’b’ str*1+=’y’ str*2+=’e’ str*3+=’\0’ //数组str赋值为一字符串bye一般一维数组的赋值使用循环语句④一维数组程序举例冒泡法折半查找法斐波那契数列请见第二章书上出现的算法三、二维数组①怎样定义二维数组类型符数组名[常量表达式][常量表达式];二维数组可以看作特殊的一维数组 它的元素又是一维数组a[0] a[0][0] a[0][1] a[0][2] a[1] a[1][0] a[1][1] a[1][2] a[2] a[2][0] a[2][1] a[2][2]数组元素的存放顺序已行序优先最右下标变化最快 二维数组的a[0]a[1] 不可以当成数组元素变量使用 对于a[0]是数组名 是a[0][0] a[0][1] a[0][2]的地址 二维数组的存贮空间 是先按照行序再列的比如float a[3][4] 一共有12个元素由于是float 类型每个元素占四个字节所以一共是48个字节 存储顺序a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23②怎样引用二维数组数组名[下标][下标]对于int a[4][5]以及a[4][5]有什么差别前者定义了4行五列的二维数组最多引用到a34而a45 说明引用到了第五行和第六列则至少应该为int a[5][6]③二维数组的初始化数据类型数组变量名[行常量表达式][列常量表达式]= {{第0行初值表},{第1行初值表},…{最后1行初值表}}(1) 分行给二维数组赋初值Int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};(2) 可以把所有数据都放在一个花括号内,按照数组元素排列顺序依次赋值Int a[3][4]={1,2,3,4,5,6,7,8,9,0,1,2};014523(3)可以对于部分元素赋初值Int a[3][4]={{3},{4},{5}};也可以只对某几行赋值(4)定义的时候第一维长度可以省略第二维不能省略Int a[][4]={{0,0,3},{},{1,2}}④二维数组程序举例对二维数组的每个元素进行操作要用二重循环外层循环控制行下标的变化,内层循环控制列下标变化输出二维数组两条对角线元素值的和Sum1+=a[i][i] //主对角线Sun2+=a[i][2-i] //副对角线矩阵左下半三角元素中的值置为0For(i=0;i<n;i++)For(j=0;j<=I;j++)A[i][j]=0;对二维数组元素的操作,实际上就是先找出对应元素的行下标与列下标,然后进行操作。