资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七章第七章 数组数组1 1第七章第七章 数组数组第一节第一节 数组的基本概念数组的基本概念第二节第二节 一维数组一维数组第三节第三节 二维数组二维数组第四节第四节 应用实例应用实例 2 2第七章第七章 数组数组C C中定义了在基本数据类型基础中定义了在基本数据类型基础上的构造数据类型上的构造数据类型(数组,结(数组,结构体,共同体等)构体,共同体等)变量先定义,再使用,如果变量个数变量先定义,再使用,如果变量个数少少,且彼此独立时,可,且彼此独立时,可以以 int a,b,c ; a = 5; b=10;c=23; printf(“%d,%d,%d”,a,b,c);当变量个数比较多,并且有内在的关系时,例如当变量个数比较多,并且有内在的关系时,例如 :全班有:全班有3030个人,每人一个成绩个人,每人一个成绩 定义定义intint a1,a2, a1,a2,a30 ?a30 ? 一组有序数据的集合一组有序数据的集合,各个元素属于同一个各个元素属于同一个类型类型,用统一的名称标用统一的名称标识这一组数识这一组数,用下标唯用下标唯一地确定这组数中的一地确定这组数中的每一个值每一个值7 1 数组的基本概念数组的基本概念3 3第七章第七章 数组数组数组的三要素数组的三要素数组是有限个相同的数据类数组是有限个相同的数据类型的数据分量的有序集合型的数据分量的有序集合相同的数据类型(相同的数据类型(定义数组时规定定义数组时规定)有限的成员个数有限的成员个数 (定义数组时规定定义数组时规定)彼此有序的排列彼此有序的排列 (引用数组元素时的引用数组元素时的下标下标)int a5; a0=1;a1=2;.7 2 一维数组的定义和使用一维数组的定义和使用 4 4第七章第七章 数组数组一一 、一维数组的定义、一维数组的定义格式:格式:类型类型 标识符标识符 长度长度 所有元素为所有元素为同一类型同一类型变量名,变量名,即数组名即数组名数组中所含数组中所含元素的个数元素的个数int a10;由由10个个整数组成的数组,整数组成的数组,共同拥有数组名共同拥有数组名数组长度必须是整型量数组长度必须是整型量int a2*3说明:说明: 用方括号用方括号可以用常量表达式可以用常量表达式不能不定义长度,不能不定义长度,也不能做动态定义也不能做动态定义int an,n=10;7 2 一维数组的定义和使用一维数组的定义和使用 5 5第七章第七章 数组数组二二 、一维数组元素的引用、一维数组元素的引用原则原则数组必须先定义,再使用数组必须先定义,再使用 数组中的元素必须逐一引用数组中的元素必须逐一引用方法:方法:通过数组名及其元素的下标逐一引用通过数组名及其元素的下标逐一引用定义时定义时 类型类型 数组名数组名N int a10引用时引用时 数组名数组名下标下标下标范围从下标范围从 0 到到 N-1 a0,a1,a9为数组为数组a中的所有元素中的所有元素7 2 一维数组的定义和使用一维数组的定义和使用 6 6第七章第七章 数组数组下标表示了元素在数组中的位置下标表示了元素在数组中的位置下标可以用表达式下标可以用表达式 a2*3相当于相当于a6说明说明(数组中第?个元素)数组中第?个元素)三、三、 一维数组的初始化一维数组的初始化 变量在使用之前使其有值变量在使用之前使其有值如果没如果没有初值?有初值?数组初始化的方法数组初始化的方法int a4可以对可以对静态静态或或外部外部存贮类存贮类型的数组进行初始化。型的数组进行初始化。7 2 一维数组的定义和使用一维数组的定义和使用 7 7第七章第七章 数组数组 数据类型数据类型 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22 常量表达式常量表达式nn初始化数据;初始化数据;在数组说明的同时进行初始化的一般形式为:在数组说明的同时进行初始化的一般形式为:1.定义数组时,对全部元素赋值定义数组时,对全部元素赋值 int a5=1,2,3,4,5;用用 包括所有初值,包括所有初值,用逗号分隔各数值用逗号分隔各数值2 对部分元素赋值对部分元素赋值 按顺序给前按顺序给前2个元素赋值个元素赋值float x5 = 1.9, 2.0 ;float x5 = 1.9, 2.0 ;x0=1.9x0=1.9;x1=2.0x1=2.0;其余元素为其余元素为 若要对数组的全部元素初始化,则可省略数组说明中的大小。若要对数组的全部元素初始化,则可省略数组说明中的大小。 intint a = 1, 2, 3, 4; a = 1, 2, 3, 4;7 2 一维数组的定义和使用一维数组的定义和使用 8 8第七章第七章 数组数组要求要求* 初值的个数不能超过定义的数组长度初值的个数不能超过定义的数组长度C规定,只有静态数组(规定,只有静态数组(static)才能初始化才能初始化,(第第7章章内容),内容), Turbo C中,允许为数组(非静态)初始中,允许为数组(非静态)初始化化区别:区别:static int a5=1,2,3;后两个元素值为后两个元素值为0int a5=1,2,3;后两个元素为后两个元素为随机数随机数 int i, int a10=1,2,3,4,5,6,7,8,9,10; for(i=0;i10;i+)printf(“%d,”,ai);通过数组名和下通过数组名和下标引用数组中的标引用数组中的每一个数据每一个数据 运行结果:运行结果:1,2,3,4,5,6,7,8,9,107 2 一维数组的定义和使用一维数组的定义和使用 9 9第七章第七章 数组数组有一个数组有一个数组,内有内有10个数个数,求出最小的数和它的下求出最小的数和它的下标标,然后将它与数组中的第一个数对换然后将它与数组中的第一个数对换71332668153206512int a10a0a i a971331682653206512定义两个临时变量定义两个临时变量 min和和 k假定第一个元素就是最小的假定第一个元素就是最小的,min=a0,k=0思思路路用用min与数组中的每一个元素与数组中的每一个元素aI比较比较, 若若aI比比min小小, 将将aI赋给赋给min, 将下标将下标I赋给赋给k, 否则否则,继续比较继续比较7 2 一维数组的定义和使用一维数组的定义和使用 1010第七章第七章 数组数组2671332668153206512min=a0I=1I=2I=3I=4I=5I=6I=7I=8I=91326 min=a1 k=133 min和和k的值不变的值不变133203 min和和k的值不变的值不变11 min和和k的值不变的值不变1&min531 min和和k的值不变的值不变 121 min和和k的值不变的值不变651 min和和k的值不变的值不变min=1min=1k=5k=5aI=a0a0=min713316826532065127 2 一维数组的定义和使用一维数组的定义和使用 1111第七章第七章 数组数组main( ) int i,a10,min,k; for(i=0;i10;i+) scanf ( “%d”,&ai ); min=a0; for(i=1;iai ) min=ai ; k=I ; ai=a0; a0=min; for(i=0;i10;i+) printf(“4d”,aI); printf(“%d,%d”,k,min); 循环输入循环输入10个数个数循环找出最小的循环找出最小的交换数据交换数据输出数组输出数组输出最小值和原始下标输出最小值和原始下标1212第七章第七章 数组数组7-3 二维数组的定义和引用二维数组的定义和引用当一个一维数组中的每个元素本身又是一当一个一维数组中的每个元素本身又是一个一维数组时,该数组为一个二维数组个一维数组时,该数组为一个二维数组一、二维数组的定义一、二维数组的定义 1 格式:类型格式:类型 标识符标识符长度长度1长度长度22 二维数组元素需要两个下标表示二维数组元素需要两个下标表示例:例:int a34表示数组表示数组a中有中有3行行4列共列共12个数据个数据3 二维数组在存储空间中是按二维数组在存储空间中是按行行优先存储优先存储 int a34a00 a01 a02a23.a03第一行第一行最后一最后一个元素个元素1313第七章第七章 数组数组二二 、二维数组的引用、二维数组的引用原则:原则: 逐一引用逐一引用数组名数组名下标下标1下标下标2下标下标1 1从从0 0到长度到长度1-11-1下标下标2 2从从0 0到长度到长度2-12-1方法:方法:标识符标识符N1N2a00.a31共共8个数据个数据(对本例,决不可能有元素对本例,决不可能有元素a42)三、二维数组的初始化三、二维数组的初始化方法:方法:1 对全部元素赋初值对全部元素赋初值,分行,各用一个分行,各用一个 int a23=1,2,3,4,5,6;7-3 二维数组的定义和引用二维数组的定义和引用1414第七章第七章 数组数组2 整体赋值,系统自动分行整体赋值,系统自动分行int a23=1,2,3,4,5,6;1,2,33 对部分元素赋初值,注意区别:对部分元素赋初值,注意区别:(1)int a23=1,2,3; (2) int a23=1,2,3; (3) int a23=0,1,2,3;当为全部元素赋值时,当为全部元素赋值时,一维长度可省略一维长度可省略 int a 3=1,2,3,4,5,6;类似可以推广到三维或多维数组类似可以推广到三维或多维数组7-3 二维数组的定义和引用二维数组的定义和引用1515第七章第七章 数组数组88年年90年年王王张张李李王王张张李李4 5 4 3 5 3 4 3 5 4 3 3 3 5 4 3 3 5 3 5 3 5 5 3 教学教学 科研科研 文体文体 其他其他用数组定义用数组定义 int a ?a111=?7-3 二维数组的定义和引用二维数组的定义和引用1616第七章第七章 数组数组若定义若定义int a34,则对则对a的正确引用是:的正确引用是:A) a 2 4 B) a 1,3 C) a 1+1 0 D) a (2)(1)以下二维数组说明方式中正确的是:以下二维数组说明方式中正确的是:A) int a3 ; B) float a(3,4);C) double a14; D) float a(3)(4);引用引用假设二维数组假设二维数组a有有m列,则计算任一元素列,则计算任一元素aij在数中的位置的公式为:在数中的位置的公式为: i*m+j+1即即a00位于数组的第一个位置上位于数组的第一个位置上i*m+j+17-3 二维数组的定义和引用二维数组的定义和引用1717第七章第七章 数组数组7-3 二维数组的定义和引用二维数组的定义和引用例题:不用输入,自动生成下列矩阵例题:不用输入,自动生成下列矩阵1 2 3 4 51 1 6 7 81 1 1 9 101 1 1 1 111 1 1 1 1元素值为元素值为 1按按行行递递增增main ( )main ( ) int int i,j,a55;i,j,a55; k=2; k=2; for(i=0;i5;i+) for(i=0;i5;i+) /* /* 按行循环按行循环 */ */ for(j=0;j5;j+)for(j=0;j5;j+) /* /* 按按列循环列循环 */ */ if(j=i) aij=1; if(j=i) aij=1; /*/*下下三角三角 */ */ else aij=k+; else aij=k+; /*/*上上三角三角 */ */ for(i=0;i5;i+) for(i=0;i5;i+) for(j=0;j5;j+) for(j=0;j5;j+) printf printf( (“%4d%4d”,aij);,aij); printf printf( (“nn”);); /* /* 输输出一行后换行出一行后换行 */*/ 1818第七章第七章 数组数组7-4 应用实例应用实例int a10,已经赋值,已经赋值,如何进行排序?如何进行排序?1.选择排序选择排序2.冒泡排序冒泡排序3.插入排序插入排序找出数组中最小的,与第一个元找出数组中最小的,与第一个元素对换,再在其余素对换,再在其余9重复上述操作重复上述操作顺序比较相邻两元素的大小,若顺序比较相邻两元素的大小,若左边元素比右边的大,则交换,左边元素比右边的大,则交换,否则不交换,比较需进行多次否则不交换,比较需进行多次假定第一个元素是合适的,取出第假定第一个元素是合适的,取出第二个元素与之比较,若小,插到前二个元素与之比较,若小,插到前面否则,位置不变,再将第三个元面否则,位置不变,再将第三个元素与前面两个比较素与前面两个比较 ,放到有序序列,放到有序序列中合适的位置,依次类推中合适的位置,依次类推.1919第七章第七章 数组数组冒泡排序冒泡排序:数组数组: (9,7,18,3,4,10,8)(1) 9,7,18,3,4,10,8 交换交换7,9,18,3,4,10,8 不交换不交换7,9,18,3,4,10,8 交换交换7,9,3,18,4,10,8 交换交换7,9,3,4,18,10,8 交换交换7,9,3,4,10,18,8 交换交换7,9,3,4,10, 8,18 第一轮比较结束第一轮比较结束,较较小的数向前移动小的数向前移动,较较大的数向后移动大的数向后移动7-4 应用实例应用实例2020第七章第七章 数组数组(2) 7,9,3,4,10, 8,18 不交换不交换 7,9,3,4,10, 8,18 交换交换 7,3,9,4,10, 8,18 交换交换 7,3,4,9,10, 8,18 不交换不交换7,3,4,9,10, 8,18 交换交换7,3,4,9,8, 10,18 7,3,4,9,8, 10,18 不交换不交换第二轮比较结束第二轮比较结束7-4 应用实例应用实例2121第七章第七章 数组数组(3) 7,3,4,9,8, 10,18 交换交换 3,7,4,9,8, 10,18 交换交换 3,4,7,9,8, 10,18 不交换不交换 3,4,7,9,8, 10,18 交换交换不交换不交换 3,4,7,8,9, 10,18 3,4,7,8,9, 10,18 不交换不交换第三轮比较结束第三轮比较结束 3,4,7,8,9, 10,18 (4) 3,4,7,8,9, 10,18 7-4 应用实例应用实例2222第七章第七章 数组数组7-4 应用实例应用实例main( ) main( ) 假假定定N N个数排序个数排序 int int i,j,m,a10;i,j,m,a10; for(i=0;i=9;i+) for(i=0;i=9;i+) scanf scanf( (“%d%d”,&ai); ,&ai); /*/*输入输入N N个整数个整数 */ */ for(j=1;j=9;j+) for(j=1;j=9;j+) /* N-1/* N-1轮排序处理轮排序处理 */ */ for(i=0;i9-j;i+) for(i=0;i9-j;i+) /* N/* N-j-j次相邻数据比较次相邻数据比较*/*/ if(aiai+1) if(aiai+1) m=ai; m=ai; /* /* 交换交换数据数据 */ */ ai=ai+1; ai=ai+1; ai+1=m; ai+1=m; for(i=0;i=9;i+) for(i=0;i=9;i+) printf printf( (“%4d%4d”,ai);,ai); 2323
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号