C程序设计快速进阶大学教程:第9章 数组_第1页
C程序设计快速进阶大学教程:第9章 数组_第2页
C程序设计快速进阶大学教程:第9章 数组_第3页
C程序设计快速进阶大学教程:第9章 数组_第4页
C程序设计快速进阶大学教程:第9章 数组_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第9章章 数组数组C程序设计快速进阶大学教程程序设计快速进阶大学教程C程序设计快速进阶大学教程2022-2-212本章要点本章要点 一维数组一维数组数组的定义数组的定义, ,初始化和引用初始化和引用 二维数组二维数组 数组的定义数组的定义, ,初始化和引用初始化和引用 应用数组应用数组C程序设计快速进阶大学教程2022-2-2139.1 理解数组理解数组数组数组(array) 由相同类型的相关数据项组成的数据集合,由相同类型的相关数据项组成的数据集合, 在循环结构和函数中使用能提高效率和可读性。在循环结构和函数中使用能提高效率和可读性。数组是有序数据的集合数组是有序数据的集合 由一定数目的由

2、一定数目的同类元素同类元素顺序排列而成的结构类型。顺序排列而成的结构类型。 数组元素类型相同,存放在数组元素类型相同,存放在连续内存区域连续内存区域。 int a7 ;a0a1a2a3a4a5a6C程序设计快速进阶大学教程2022-2-2149.2.1 一维数组定义一维数组定义一维数组定义一维数组定义 类型类型 标识符标识符 常量表达式常量表达式 ; 数组元素类型数组元素类型数组名,数组名,遵循标识符定名规则遵循标识符定名规则表示数组的存储地址表示数组的存储地址数组元素数组元素个数个数数组三要素数组三要素: 类型、类型、 数组名、数组名、 元素个数元素个数C程序设计快速进阶大学教程2022-2

3、-215 ; #define M 40 ; ; ;b0 b1 b2 : :b11b12b13 : :b39数组数组b说明:说明:同一个数组,其所有元素的数据类型都是相同的同一个数组,其所有元素的数据类型都是相同的 数组名是第一个元素的地址,为不能更改的常量数组名是第一个元素的地址,为不能更改的常量a0a1a2a8a9数组数组a9.2.1 一维数组定义一维数组定义C程序设计快速进阶大学教程2022-2-2169.2.1 一维数组定义一维数组定义说明:说明: 方括号中常量表达式表示数组元素的个数,方括号中常量表达式表示数组元素的个数,数组大小为整型常量表达式数组大小为整型常量表达式, , 不能为变

4、量不能为变量! ! 数组数组的的空间在编译阶段分配空间在编译阶段分配 数组占用空间大小的计算数组占用空间大小的计算-sizeof-sizeof运算符运算符 数组总字节数数组总字节数=sizeof(类型类型)*数组长度数组长度 int i =6 ; scanf(“%d”, &i ) ;int a i ;int a5;sizeof(a)=sizeof(int)*5;C程序设计快速进阶大学教程2022-2-217访问格式:访问格式:数组名数组名 表达式表达式 下标方式访问数组下标方式访问数组 数组的地址数组的地址a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 .aa6

5、9.2.2一维数组引用一维数组引用整型表达式整型表达式地址偏移值地址偏移值下标引用数组元素和数组定义的区别下标引用数组元素和数组定义的区别? int a10; a10 = a0; C程序设计快速进阶大学教程2022-2-218例:例:int ary 10 , i = 3, j = 5 ; ary 0 ary 1 ary 2 ary 3 ary 4 ary 5 ary 6 ary 7 ary 8 ary 9 ary 0 = 1010ary i = 22ary j = ary i ary 2+j = 3131210方括号中的位置号通常称为下标方括号中的位置号通常称为下标/索引,索引,为整数或整型表

6、达式为整数或整型表达式 ,表示该元素与首地址的偏移值表示该元素与首地址的偏移值9.2.2一维数组引用一维数组引用C程序设计快速进阶大学教程2022-2-2199.2.2一维数组引用一维数组引用 引用数组元素要点:引用数组元素要点:int aN 下标从下标从0到到N-1,即,即a0、aN-1 ; 引用数组下标越界时,运行时并不报错引用数组下标越界时,运行时并不报错 数组越界访问可能造成严重错误数组越界访问可能造成严重错误! ! 不能一次引用整个数组不能一次引用整个数组, , 只能单个使用每个数组元素,只能单个使用每个数组元素, 使用循环语句使用循环语句遍历遍历数组各个元素数组各个元素; ; a

7、0 a 1 .a N-1 ary N a N int a5;scanf(%d,a); printf(%d,a); for(i=0; i5; i+) printf(%d,ai);C程序设计快速进阶大学教程2022-2-2110 数组元素和同类型变量操作数组元素和同类型变量操作 不能直接把整个数组赋值到另一个数组不能直接把整个数组赋值到另一个数组 不能用一个语句给整个数组赋值不能用一个语句给整个数组赋值 int a5;a=1,2,3,4,5;a j = 10;num = a i ;char name110, name210 = L,i,n;name1 = name2;9.2.2一维数组引用一维数组

8、引用C程序设计快速进阶大学教程11 int a10, b10, i ; for ( i=0; i=0; i-) printf(%d ,bi); 程序阅读练习程序阅读练习1 1代码的功能代码的功能?逻辑问题逻辑问题?数组元素定义后,数组元素定义后,若不赋值,则值为若不赋值,则值为由编译器指定的无由编译器指定的无意义的值。意义的值。 C程序设计快速进阶大学教程2022-2-21129.2.3 一维数组初始化一维数组初始化 一维数组初始化一维数组初始化 在数组定义的同时,用初始化列表对数组元在数组定义的同时,用初始化列表对数组元素赋初值素赋初值, 一般形式为:一般形式为:类型说明符类型说明符 数组名

9、数组名常量表达式常量表达式=值值1,值值2,值值n;int a 5 = 1, 3, 5, 7, 9 ; int b1 5 = 0 ;int b2 5 = 1, 2, 3 ;有初始化列表可省略数组的大小有初始化列表可省略数组的大小 int c = 1, 2, 3, 4, 5, 6 ;/ 全部元素初始化为全部元素初始化为 0/ b23、b24系统系统自动自动赋赋0/ 自动定义数组长度为自动定义数组长度为6 C程序设计快速进阶大学教程2022-2-2113例:常见错误例:常见错误 int d 5 = 1, 2, 3, 4, 5, 6, 7 ; int a 5 = 1, 3, , 7, 9 ;int

10、b 5 = ;/错,初始化值不能跳省错,初始化值不能跳省/ 错,初始化值不能全省错,初始化值不能全省/ 错,初始化数据过多错,初始化数据过多9.2.3 一维数组初始化一维数组初始化 初始化时如果省略了数组的大小,初始化时如果省略了数组的大小,sizeof操作符可以得到数组大小信息。操作符可以得到数组大小信息。 int a =2,4,6,8,10 ,i ; for( i=0; in ;i+) printf(“%d ”, ai ) ;n sizeof(a) / sizeof(a0) C程序设计快速进阶大学教程14程序阅读练习程序阅读练习2 2 int Fibonacci 10=0,1; for(

11、int i=2; ilength; i+) Fibonacci i= Fibonacci i-1+ Fibonacci i-2; for( int i=0; ilength; +i) printf(“%d t”, Fibanaccii ); if(i%5=0) printf(“n”); C程序设计快速进阶大学教程2022-2-21159.2.4 一维数组案例分析一维数组案例分析例例9.1 数组插入操作数组插入操作把一个整数插入到已经按照从小到大顺序排好序把一个整数插入到已经按照从小到大顺序排好序的整型数组中,使得整型数组依然有序。的整型数组中,使得整型数组依然有序。13589int iA101

12、35789int iValue 7C程序设计快速进阶大学教程2022-2-21169.2.4 一维数组案例分析一维数组案例分析例例9.1 数组插入操作数组插入操作问题分析问题分析: 把一个整数插入到升序整型数组中把一个整数插入到升序整型数组中 需要找到插入位置需要找到插入位置 把该位置到最后的数据后移把该位置到最后的数据后移 插入数据插入数据 int iA10135int iValue 77 89C程序设计快速进阶大学教程2022-2-21179.2.4 一维数组案例分析一维数组案例分析例例9.1 数组插入操作数组插入操作算法描述:算法描述: 插入位置插入位置 数据后移数据后移 插入数据插入数

13、据 C程序设计快速进阶大学教程18#includeint main() int iA10=1,3,5,8,9; /*最初有序数组最初有序数组*/ int iNumber=6; /*最初有序数组数据个数最初有序数组数据个数*/ int i1, iIndex; /*插入位置插入位置*/ int iValue=7; /*插入值插入值*/ /*查找插入位置查找插入位置*/ for(i1=0;i1iValue) break; iIndex=i1;例例9.1 数组插入操作数组插入操作C程序设计快速进阶大学教程19/*移动数据移动数据*/ for(i1=iNumber-1;i1=iIndex;i1-)iAi

14、1+1=iAi1; /*插入数据插入数据*/ iAiIndex=iValue; /*输出插入后数组数据输出插入后数组数据*/ for(i1=0;i1iNumber+1;i1+)printf(%dt,iAi1); return 0;例例9.1 数组插入操作数组插入操作C程序设计快速进阶大学教程2022-2-21209.2.4 一维数组案例分析一维数组案例分析例例9.2 统计一个字符数组中英文字母出现的次数统计一个字符数组中英文字母出现的次数 Lelel e 247001.32 int iNumber26 iNumber0- A| a的计数器,的计数器, iNumber1-B|b的的计数器计数器,

15、 , iNumber25记录记录Z|z的的计数器计数器。 char cAN; C程序设计快速进阶大学教程2022-2-21219.2.4 一维数组案例分析一维数组案例分析例例9.2 统计一个字符数组中英文字母出现的次数统计一个字符数组中英文字母出现的次数算法描述算法描述:1. 定义字符型数组定义字符型数组cA存储字符,存储字符, 定义大小定义大小 数组数组iNumber26分别存储每个英文字分别存储每个英文字 符(不区分大小写)出现次数。符(不区分大小写)出现次数。2. 输入字符到字符数组。输入字符到字符数组。3. 计算每个字符出现次数,存储到计算每个字符出现次数,存储到iNumber数组。数

16、组。 注意注意 分别处理大小写字母。分别处理大小写字母。4. 输出每个字母出现的次数。输出每个字母出现的次数。 C程序设计快速进阶大学教程22#include #define N 30 int main() char cAN; /*字符数组字符数组*/ int iNumber26=0; /*计数数组计数数组*/ int i1; /*输入字符到字符数组输入字符到字符数组*/ for(i1=0;i1N;i1+)scanf(%c,&cAi1); 例例9.2 统计一个字符数组中英文字母出现的次数统计一个字符数组中英文字母出现的次数C程序设计快速进阶大学教程23for(i1=0;i1=A & cAi1=

17、a & cAi1=z)iNumbercAi1-a+; /*输入每个字母出现次数输入每个字母出现次数*/ for(i1=0;i1 b 1 第一轮第一轮9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-2131 采用相邻元素比较的方法采用相邻元素比较的方法示例:示例:对数组元素进行升序排列对数组元素进行升序排列4938659776132752b0b1b2b3 b4b5b6b73849b 0 b 1 b 0 b 1 9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21323849659776132752b0b1b2b3 b4b5b

18、6b7示例:示例:对数组元素进行升序排列对数组元素进行升序排列b 1 b 2 49659.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21333849659776132752b0b1b2b3 b4b5b6b7示例:示例:对数组元素进行升序排列对数组元素进行升序排列6597b 2 b 4 76979.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21353849657697132752b0b1b2b3 b4b5b6b7示例:示例:对数组元素进行升序排列对数组元素进行升序排列1397b 4 b 5 b 4 b 5 13979.2

19、.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21363849657613972752b0b1b2b3 b4b5b6b79727b 5 b 6 b 5 b 6 示例:示例:对数组元素进行升序排列对数组元素进行升序排列97279.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21373849657613279752b0b1b2b3 b4b5b6b79752b 6 b 7 b 6 b 7 示例:示例:对数组元素进行升序排列对数组元素进行升序排列9752第一轮第一轮9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程

20、2022-2-2138 采用相邻元素比较的方法采用相邻元素比较的方法示例:示例:对数组元素进行升序排列对数组元素进行升序排列4938659776132752b0b1b2b3 b4b5b6b7第一轮开始第一轮开始3849657613275297b0b1b2b3 b4b5b6b7第一轮结束第一轮结束for( int j=0; jbj+1) bj bj+19.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21393849657613275297b0b1b2b3 b4b5b6b738496576132752973849b 0 b 1 示例:示例:对数组元素进行升序排列

21、对数组元素进行升序排列第二轮第二轮第一轮第一轮9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21403849657613275297b0b1b2b3 b4b5b6b738496576132752974965b 1 b 2 示例:示例:对数组元素进行升序排列对数组元素进行升序排列第二轮第二轮第一轮第一轮9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21413849657613275297b0b1b2b3 b4b5b6b738496576132752976576b 2 b 4 b 3 b 4 示例:示例:对数组元素进行升序

22、排列对数组元素进行升序排列第二轮第二轮第一轮第一轮769.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21433849657613275297b0b1b2b3 b4b5b6b73849651376275297b 4 b 5 b 4 b 5 示例:示例:对数组元素进行升序排列对数组元素进行升序排列第二轮第二轮第一轮第一轮27769.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21443849657613275297b0b1b2b3 b4b5b6b738496513277652977652b 5 b 6 b 5 b 6 示例:

23、示例:对数组元素进行升序排列对数组元素进行升序排列第二轮第二轮第一轮第一轮52769.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-21453849657613275297b0b1b2b3 b4b5b6b73849651327527697示例:示例:对数组元素进行升序排列对数组元素进行升序排列for( int j=0; jbj+1) bj bj+1)第二轮结束第二轮结束第一轮第一轮9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-2146 采用相邻元素比较的方法采用相邻元素比较的方法示例:示例:对数组元素进行升序排列对数组元素

24、进行升序排列3849657613275297b0b1b2b3 b4b5b6b73849651327527697384913275265769738132749526576971327384952657697132738495265769713273849526576974938659776132752for( int i =0; i7; i+) for( int j=0; jbj+1) bj bj+1 第第1轮轮第第2轮轮第第3轮轮第第5轮轮原始原始第第4轮轮j i;9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-2147 采用相邻元素比较的方法采用相邻元素

25、比较的方法示例:示例:对对N个个数组元素进行升序排列数组元素进行升序排列3849657613275297b0b1b2b3 b4b5b6b73849651327527697384913275265769738132749526576971327384952657697132738495265769713273849526576974938659776132752for( int i =0; iN-1; i+) for( int j=0;j aj+1) aj aj+1 9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-2148例例9.3 冒泡排序冒泡排序程序流程图

26、程序流程图9.2.4 一维数组案例分析一维数组案例分析C程序设计快速进阶大学教程2022-2-2149 采用相邻元素比较的方法采用相邻元素比较的方法示例:示例:对数组元素进行升序排列对数组元素进行升序排列 算法的优化算法的优化3849657613275297b0b1b2b3 b4b5b6b738496513275276973849132752657697381327495265769713273849526576971327384952657697132738495265769749386597761327529.2.4 一维数组案例分析一维数组案例分析第第1轮轮第第2轮轮第第3轮轮第第5轮轮

27、原始原始第第4轮轮C程序设计快速进阶大学教程50例例9.3 冒泡排序冒泡排序 int arrayN=8,4,3,9,6,2; int i,j; int temp; /* 交换数据的临时空间交换数据的临时空间 */ for(i=0;iN-1;i+) /* i从从0到到N-2,共,共N-1趟趟 */ for(j=0;jarrayj+1) temp=arrayj; arrayj=arrayj+1;arrayj+1=temp; C程序设计快速进阶大学教程2022-2-2151课堂练习课堂练习1.选择排序:首先找到数据集中的最小的数据,然后选择排序:首先找到数据集中的最小的数据,然后将这个数据同第一个数

28、据交换位置(约定从小到大将这个数据同第一个数据交换位置(约定从小到大排序);接下来在剩下的数据(不包含前面最小的排序);接下来在剩下的数据(不包含前面最小的)中找最小的数据,再将其同第二个数据交换位置)中找最小的数据,再将其同第二个数据交换位置;以此类推,每次在剩下的数据中找最小的数据,;以此类推,每次在剩下的数据中找最小的数据,然后和剩下的数据中最前面的数据交换。若共然后和剩下的数据中最前面的数据交换。若共n个数个数据,共需要做据,共需要做n-1趟,最后一个为最大的数据。趟,最后一个为最大的数据。C程序设计快速进阶大学教程2022-2-2152课堂练习课堂练习1.选择排序:选择排序:对以下数

29、据对以下数据array6,minFlag(最小元素下标):(最小元素下标):8 4 3 9 6 20 1 2 3 4 5 下标下标(模板(模板4)提示:分析内外层循环提示:分析内外层循环C程序设计快速进阶大学教程2022-2-2153课堂练习课堂练习1.选择排序:选择排序:C程序设计快速进阶大学教程2022-2-21549.3 二维数组二维数组 用双下标表示某个元素的数组称为两维数组,用双下标表示某个元素的数组称为两维数组,通常用来存储按行和列格式存放信息的数值表。通常用来存储按行和列格式存放信息的数值表。二维数组可以理解为每一个元素是类型相同、二维数组可以理解为每一个元素是类型相同、长度相等

30、的一维数组。长度相等的一维数组。 二维数组在内存中按先行后列的顺序存储二维数组在内存中按先行后列的顺序存储.a 0 a 1 a 2 17 19 20 18 23 16 22 19 25 23 16 31 a a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 int a34 :C程序设计快速进阶大学教程2022-2-21559.3.1 二维数组定义二维数组定义二维数组定义形式:二维数组定义形式: 类型说明符类型说明符 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;数组元素类型数组元素类型数组名,数组名,遵循标识符定名规则遵循标识符定名规则

31、表示数组的存储地址表示数组的存储地址第一维第一维(行行)下标长度下标长度 第二维第二维(列列)下标长度下标长度 C程序设计快速进阶大学教程2022-2-2156a 3 4 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 二维数组的存储结构线性存储二维数组的存储结构线性存储9.3.1 二维数组定义二维数组定义123456789101112 0 1 2 3 0 1 2 int a34 :列指标列指标行指标行指标C程序设计快速进阶大学教程2022-2-2157数组名数组名 行下标行下标 列下标列下标 9.

32、3.2 二维数组引用二维数组引用 int iAMN; iA12 表示表示iA数组一行二列的元素。数组一行二列的元素。行列下标取值范围分别为行列下标取值范围分别为0M-1、0N-1。 整型常量或整型常量或整型表达式整型表达式 C程序设计快速进阶大学教程2022-2-21589.3.2 二维数组引用二维数组引用常通过常通过 双重循环双重循环 对二维数组元素进行操作;对二维数组元素进行操作; int array23,i , j ; for ( i = 0 ; i 2 ; i + ) for ( j = 0 ; j 3 ; j + ) scanf( %d, &array i j ) ; for ( i

33、 = 0 ; i 2 ; i + ) for ( j = 0 ; j 3 ; j + )printf(“%5d”, array i j ) ; printf(n) ; C程序设计快速进阶大学教程2022-2-21599.3.3二维数组初始化二维数组初始化按行分段赋初值按行分段赋初值 :int i 2 3 = 1, 2, 3 , 4, 5, 6 ; 按行连续赋初值按行连续赋初值 int j 2 3 = 1, 2, 3, 4, 5, 6 ; /一维数组初始化方式一维数组初始化方式缺省第一维长度:缺省第一维长度:int k 3 = 1, 2, 3, 4, 5, 6, 7, 8, 9 ; int n

34、4 = 1 , 1 , 1 ; / 仅对第仅对第 0 列元素赋初值列元素赋初值int m 3 = 1, 2, 3, 4, 5, 6 / 错,不能省略第二维长度错,不能省略第二维长度C程序设计快速进阶大学教程2022-2-21609.3.4 二维数组案例分析二维数组案例分析例例9.4 计算每门课程的平均成绩。计算每门课程的平均成绩。一个学习小组有一个学习小组有5个人,每个人有个人,每个人有3门课的考试成绩。门课的考试成绩。 赵赵钱钱 孙孙李李张张Math8061598576C 7565638777English 9271709085C程序设计快速进阶大学教程2022-2-21619.3.4 二维

35、数组案例分析二维数组案例分析例例9.4 计算每门课程的平均成绩。计算每门课程的平均成绩。问题分析:问题分析: 定义定义 int score35存储五个人存储五个人3门课的成绩。门课的成绩。 定义定义float courseAverage3存储各门课平均成绩。存储各门课平均成绩。算法描述:算法描述:1. 依次输入每门课程的成绩(每门课一行)。依次输入每门课程的成绩(每门课一行)。2. 计算每门课程平均成绩,即对每行计算平均成绩。计算每门课程平均成绩,即对每行计算平均成绩。3. 输出每门课程平均成绩。输出每门课程平均成绩。C程序设计快速进阶大学教程62 #include int main() int i,j; float

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论