您好,欢迎访问三七文档
数组是相同类型数据的集合。它们都拥有同一个名称。在大数量处理处理和字符串操作时,广泛使用数组。数组对C语言来说起着相当至关重要的作用。本章将重点讲数组的各种操作。在程序设计的过程中,经常会处理一些数据类型相同的变量,为了方便,C语言中提供了数组这一结构。数组把同一类型的数据有序进行排列,进行统一存储,是同种类型数据的集合。含义数组分类按照数据类型不同分类整型数组、字符型数组、指针数组等按照数据多少一维数组、二维数组、多维数组前面章节中讲解的C语言的基本数据类型只能处理一些简单的数据类型,如果遇到复杂的具有相同类型的多个数据那么就很难解决。幸好,C语言提供了数组来解决了这一个问题。#includestdio.hintmian(){float张三score;float李四score;float王五score;float孙六score;.........省去一万字...…return0;}基本数据类型实现代码一维数组实现代码#includestdio.hintmian(){score[400];return0;}使用数组后一维数组是长度固定的数组,其存储空间是一片连续的区域。本节将讲解一维数组的概念及其应用。声明数组是告诉编译器,数组名所使用的标识符。数组的定义是令系统为该数组分配内存空间。在C语言中,数组的声明和定义是同时进行的。数据类型数组名[长度];长度是指一维数组的存储变量的个数inta[100];数组的类型为整型,表明这个数组中的元素都是整型数组名为a,长度为100数组的初始化是用来实现对数组的每个元素赋初值的。虽然有的编译器会自动对数组赋初值,但为了安全起见,建议用户自己对数组赋初值。数据类型数组名[长度]={数值1,数值2,...数值n};花括号开始花括号结束为数组中的每个元素赋值,每个元素数值要用“,”隔开inta[10]={1,2,3,4,5,6,7,8,9,10};inta[10];inta[0]=1;inta[2]=2;...inta[9]=10;一维数组的下标是从0开始的先声明并定义了一个长度为10的整型数组a[10]再对数组中每个元素初始化注意点示例代码若对数组中的所有元素都赋予了初始值,可以不用指定数组的大小,系统将自动根据赋值的个数来确定数组的大小intx[]={1,2,3,4,5};若只对数组中的部分元素赋予初始值,则系统会自动为其他元素赋初始值0intx[10]={1,2,3,4,5};若只声明数组,而不为数组赋值,则数组中的元素值是不确定的intx[10];C语言数组的大小只能是常量,而不能使用变量下面的代码是不合法的:inti=100;inta[i];在C语言中,一维数组的引用其实就是对一维数组元素的使用。一维数组的引用形式以及相关举例如图5.8所示。inta[i]数组名[下标]inta[i]例如一维数组引用的形式数组名为a,长度为n。数组的下标的下界是0,上界是n-1,0=in二维数组指有两个下标的数组。C语言中,对于常用的数组除了有一维数组还有二维数组。本节来学习二维数组。二维数组有两个下标。二维数组中的元素和一维数组中的元素一样,具有同样的数据类型。数据类型数组名[长度1][长度2];二维数组由长度为长度1的一维数组组成二维数组由长度为长度1个的一维数组组成,每个一维数组的长度为长度2inta[3][4];inta0[4];inta1[4];inta2[4];等价于3个长度都为4的一维数组二维数组由多个一维数组组成a[0][3]a[0][2]a[0][1]a[0][0]a[1][3]a[1][2]a[1][1]a[1][0]a[2][3]a[2][2]a[2][1]a[2][0]a[0]a[1]a[2]对于二维数组的初始化有好多种方法,如表5-3所示。二维数组初始化方法示例代码分行给二维数组赋初值inta[2][3]={{0,1,2},{4,5,6}}可以将所有数据写在一个花括号内,按照数组排列的顺序对各元素赋初值inta[2][3]={0,1,2,4,5,6}可以对部分元素赋初值,而在每行的其他元素的值为0或者为’\0’inta[2][3]={{1},{4}}等价于inta[2][3]={{1,0,0},{4,0,0}}如果对数组的全部元素赋初值,则定义二维数组时可以不指明下标1,但是必须明确指明下标2的长度inta[2][3]={0,1,2,4,5,6}等价于inta[][3]={0,1,2,4,5,6}二维数组的引用形式如图5.13所示。数组名[下标1][下标2]inta[2][3]={{0,1,2},{4,5,6}}{0,1,2}a[0]123{4,5,6}a[1]456#includestdio.hintmain(){inta[3][4];...a[3][4]=3;a[2][3]=7;...return0;}对二维数组进行引用时下标超出了数组定义时的上界,引用不合法这是合法的引用字符数组就是用来存放字符的。在计算机中经常会处理字符,C语言对字符的处理主要是通过字符数组实现的。在本节中将会讲述字符数组的概念及其应用。字符数组的含义如图5.17所示。字符数组字符数组是用来存放字符类型的数据。字符数组的每个元素存放的都是一个字符。含义概念在C语言中,由若干字符组成的序列称为字符串结束标志字符串一般以’\0’作为结束标志存储形式字符串不能用一个变量存放,必须用字符数组来存放\0‘o’‘l’‘l’‘e’'h'字符串的开端字符串的结束char字符数组名[长度];char字符数组名[下标1][下标2];一维字符数组的初始化方式一般有两种,如表5-4所示。初始化方式示例代码说明逐个为字符数组赋值charc[6]={'H','e','l','l','o'};每个字符会依次赋值给数组中的每个元素用字符串直接给字符数组赋值charc[6]={Hello};直接将字符串赋给字符数组来初始化。系统会依次读取字符串中的每个字符,赋值给数组每个元素,并在字符串的的结尾处加一个字符即结束符\0作为一个数组元素。charc[6]={Hello};等价于charc[6]=Hello;等价于charc[]={Hello};charc[2][6]={Hello,World};注意说明采用字符串给二维数组赋值的时候,二维数组的最后一个字符是\0结束字符,每一个元素的长度是字符串的长度加1前面已经讲解过了一维数组与二维数组的引用,所以字符数组的引用大家应该已经有一个概念了。C语言中,可以引用字符数组中的一个元素,得到一个字符。这一小节通过两个简单的示例讲解一维字符数组和二维字符数组的引用。字符数组的输入输出有两种方法,如图5.23所示。字符数组的输入输出逐个字符的输入和输出,用格式符“%c”输入输出一个字符将整个字符串一次输入输出,用格式符“%s”格式输入输出字符串两种方式注意点注意事项说明1输出字符不包括结束字符’\0’如图5.2的输出结果可以看出2用“%s”格式输出时,printf()函数的输出项是字符数组名,而不是字符元素printf(“%s”,c);//其中数组名为c3如果数组长度大于字符串的实际长度,也只是输出遇到结束字符结束输出charc[10]={“China”}//字符串的长度为5printf(“%s”,c);//也只输出字符串“China”,而不是输出10个字符4如果一个字符数组由多个’\0’,则遇到第一个’\0’就结束输出因为字符’\0’是字符串的结束标志5可以用scanf函数输入一个字符串scanf(“%s”,c);通过输出杨辉三角图来进一步讲解数组的应用。杨辉三角的图形界面如图5.25所示。1111211331146411510105...其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。具体对于杨辉三角程序分析思路如图5.26所示。杨辉三角的输出结果1111211331146411510105...杨辉三角的行列分析转换000100110121a[0]a[1]a[2]01331a[2]......0001a[i-1]a[1]a[0]...a[j-1]i*j矩阵图形属于一个二维平面,所以采用二维数组实现通过分析杨辉三角行和列的值分析如下:通过分析杨辉三角行和列的值分析如下:第一列的值都为1a[i][0]=1对角线的值为1当i=j时,a[i][j]=1对角线右侧的值当ij时,a[i][j]=0对角线左侧的值当ij时,a[i][j]=a[i-1][j-1]+a[i-1][j]for(i=0;in;i++)a[i][0]=1;实现代码分析for(i=0;in;i++)for(j=0;jn;j++){if(i==j)a[i][j]=1;}实现代码分析最终杨辉三角也是只输出非0值,所以这一块可以直接省略,不用考虑实现代码分析1111211331146411510105...1111211331146411510105...05第一列的值都为1对角线为1对角线右侧的值为0对角线左侧的值a[i][j]=a[i-1][j-1]+a[i-1][j]
本文标题:C语言中的数组
链接地址:https://www.777doc.com/doc-4804099 .html