c语言程序设计课件:第七章数组.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《c语言程序设计课件:第七章数组.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 第七 数组
- 资源描述:
-
1、第七章 数 组 7 71 1 数据结构与数组的概念数据结构与数组的概念 影响程序设计的因素除算法外还有数据结构。影响程序设计的因素除算法外还有数据结构。 数据结构概念数据结构概念 编写一个程序除了重视算法的设计外,还需编写一个程序除了重视算法的设计外,还需重视数据类型的选择,即选择合适的数据类型来重视数据类型的选择,即选择合适的数据类型来存放要处理的数据。在程序设计中,数据类型就存放要处理的数据。在程序设计中,数据类型就称为称为数据结构数据结构,选择合适的数据类型实际上就是,选择合适的数据类型实际上就是进行进行数据结构的设计数据结构的设计。在程序设计中有格言:在程序设计中有格言: 数据结构数据
2、结构+ +算法算法= =程序程序 说明数据结构与算法同等重要,算法依赖说明数据结构与算法同等重要,算法依赖于数据结构,对于同一个问题的求解,可以于数据结构,对于同一个问题的求解,可以采用不同的数据结构和不同的算法,对不同采用不同的数据结构和不同的算法,对不同的数据结构有不同的算法,其复杂程度也会的数据结构有不同的算法,其复杂程度也会不同,选择合适的数据结构,可以降低算法不同,选择合适的数据结构,可以降低算法的复杂程度。因此,在程序设计中应重视数的复杂程度。因此,在程序设计中应重视数据结构的设计。据结构的设计。例:求任意例:求任意100100个数中的最大值。个数中的最大值。 main()main
3、() int int i, i,a a,max;,max; max=-32768 max=-32768 for(i=1;i=100;i+) for(i=1;imax) max=a;max) max=a; printf printf(“n max=%d”,max);(“n max=%d”,max); 用一个简单变量作为用一个简单变量作为数据结构,合理,算数据结构,合理,算法简单法简单 对于三个数的排序:对于三个数的排序:main()main() int int a,b,ca,b,c,t; ,t; scanf scanf(“%d,%d,%d”,&a,&b,&c);(“%d,%d,%d”,&a,&b
4、,&c); if(ab) t=a; a=b; b=t;if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; if(bc) t=b; b=c; c=t; printf printf(“n %d,%d,%d”,a,b,c);(“n %d,%d,%d”,a,b,c); 对于很多个数的排序用变量会很复杂而用数组会对于很多个数的排序用变量会很复杂而用数组会使算法很简单。使算法很简单。仍可用变量作为数据结构 数组的概念数组的概念int a10a0 a1 a2 a3 a4 a5 a6 a
5、7 a8 a9 一组具有同样类型的数据的集合一组具有同样类型的数据的集合 统一用一个名字代表统一用一个名字代表-数组名(数组名(代表一组数代表一组数)数组元素下标数组名 数组中的各成员称数组元素,由数组名加数组中的各成员称数组元素,由数组名加下标唯一地确定。下标唯一地确定。 将一组数用一个名字代表,便于管理。将一组数用一个名字代表,便于管理。 只有一个下标的数组称为一维数组;只有一个下标的数组称为一维数组; 可有二维数组、三维数组、可有二维数组、三维数组、七维数组。、七维数组。 7 72 2 一维数组的定义和引用一维数组的定义和引用 定义定义 一般形式:一般形式: 类型符类型符 数组名数组名
6、常量表达式常量表达式 ; int a10; float b10; 类型符 数组名 长度 作用:作用:分配一组连续的内存单元分配一组连续的内存单元说明:说明: 数组必须先定义后使用。数组必须先定义后使用。 数组名的命名规则与变量相同。数组名的命名规则与变量相同。 常量表达式表示元素的个数(长度),下标常量表达式表示元素的个数(长度),下标 从从0 0开始。开始。 常量表达式不能包含变量,即不允许作动态常量表达式不能包含变量,即不允许作动态定义。定义。 引用引用 逐个引用其元素,不能进行整体引用。逐个引用其元素,不能进行整体引用。 引用的一般形式引用的一般形式: 数组名数组名 下标下标 如:如:a
7、0=50; a1=100;a0=50; a1=100; a2=a0+a1; a2=a0+a1; 与与 a2=a0+a1a2=a0+a1有根本性的区别:下标可变。有根本性的区别:下标可变。例:从键盘输入例:从键盘输入1010个数。个数。用变量:用变量:( (不方便不方便) )scanfscanf(“%d%d%d%d%d%d%d%d%d%d”(“%d%d%d%d%d%d%d%d%d%d”, &a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);用数组:用数组: ( (灵活方便灵活方便) )
8、 for(i=0;i10;i+) scanf for(i=0;i10;i+) scanf(“%d”,&(“%d”,&aiai);); 用循环控制输入个数和下标的变化。用循环控制输入个数和下标的变化。 注意下标的变化范围。注意下标的变化范围。 初始化初始化 在定义数组的同时给数组赋初值。在定义数组的同时给数组赋初值。 intainta10=0,1,2,3,4,5,6,7,8,9;10=0,1,2,3,4,5,6,7,8,9; int int a10=0,1,2,3,4;a10=0,1,2,3,4; int int a=0,1,2,3,4;a=0,1,2,3,4; 应用举例应用举例(1 1)对)对
9、100100个学生的分数统计最高分、最低分个学生的分数统计最高分、最低分和平均分。和平均分。 两种方法:两种方法: 用变量作为存放初始数据的数据结构用变量作为存放初始数据的数据结构 用数组作为存放初始数据的数据结构用数组作为存放初始数据的数据结构 main() main() int int i, i,a a,max,min;,max,min; float aver=0; float aver=0; max=0; min=100; max=0; min=100; for(i=0;i100;i+) for(i=0;imax) max=a; if(amax) max=a; if(amin) min=
10、a; if(amin) min=a; aver+=a; aver+=a; aver/=100; aver/=100; printf printf(“n %d,%d,%f”,max,min,aver);(“n %d,%d,%f”,max,min,aver); 用变量 main()main() int int i, i,a100a100,max,min;,max,min; float aver=0; float aver=0; for(i=0;i100;i+) scanf for(i=0;i100;i+) scanf(“%d”,&ai);(“%d”,&ai); max=a0; min=a0; ma
11、x=a0; min=a0; for(i=0;i100;i+) for(i=0;imax) max=ai; if(aimax) max=ai; if(aimin) min=ai; if(aiamax) max=i;if(aiamax) max=i;if(aiamin) min=i;if(aiamin) min=i; (2 2)统计高于平均分的人数。)统计高于平均分的人数。main()main() int int i,a,n; i,a,n; float aver=0; float aver=0; for(i=0;i100;i+) for(i=0;i100;i+) scanf scanf(“%d”,
12、&a);(“%d”,&a); aver+=a; aver+=a; aver/=100; aver/=100; n=0;n=0; for(i=0;i100;i+) for(i=0;iaver)n+; if(aaver)n+; printf printf(“n %d”,n);(“n %d”,n); 用变量数据结构不合理数据结构不合理main()main() int int i, i,a100a100,n;,n; float aver=0; float aver=0; for(i=0;i100;i+) scanf for(i=0;i100;i+) scanf(“%d”,&ai);(“%d”,&ai)
13、; for(i=0;i100;i+) aver+=ai; for(i=0;i100;i+) aver+=ai; aver/=100; aver/=100; n=0; n=0; for(i=0;iaver)n+; for(i=0;iaver)n+; printf printf(“n %d”,n);(“n %d”,n); 用数组1(3)对100个学生的分数统计出每分一档人数。 0 ? 1 ? 2 ? 3 ? 4 ? 99 ? 100 ?main()main() int int i,a;i,a; for(i=1;i=100;i+) for(i=1;i=100;i+) scanf scanf(“%d”
14、,&a);(“%d”,&a); 输出输出 int int i,a,i,a,n101;n101;for(i=0;i101;i+) ni=0;for(i=0;i101;i+) ni=0;na+;na+;完整程序:完整程序:main()main() int int i,a,n101;i,a,n101; for(i=0;i101;i+)ni=0; for(i=0;i101;i+)ni=0; for(i=1;i=100;i+) for(i=1;i=0;i-) for(i=100;i=0;i-) printf printf(“n %3d:%3d”,i,ni);(“n %3d:%3d”,i,ni); 体会数
15、组作体会数组作为存放结果为存放结果的数据结构的数据结构时的优越性时的优越性。按按1010分一档统计?分一档统计?main()main() int int i,a,n101;i,a,n101; for(i=0;i101;i+)ni=0; for(i=0;i101;i+)ni=0; for(i=1;i=100;i+) for(i=1;i=100;i+) scanf scanf(“%d”,&a);(“%d”,&a); na+; na+; int int i,a,ni,a,n1111;for(i=0;ifor(i=0;i1111;i+)ni=0;i+)ni=0;nna/10a/10+;+;(4 4)对
16、)对1010个学生的分数按从小到大的顺序排序个学生的分数按从小到大的顺序排序后输出。后输出。 两种典型的排序算法:两种典型的排序算法:选择法选择法和和起泡法起泡法。选择法基本思想:选择法基本思想: 首先选择最小的数放在首先选择最小的数放在0 0位置,再在剩下的数位置,再在剩下的数中选择最小的数放在下一位置,中选择最小的数放在下一位置,依次类,依次类推,共进行推,共进行9 9次选择。次选择。 5 8 7 4 3 9 0 1 2 6 每次选择都要与其后的所有数进行比较换位。每次选择都要与其后的所有数进行比较换位。 5 8 7 4 3 9 0 1 2 6 ijmain()main() int int
17、 a10,i,j,t; a10,i,j,t; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i9;i+) for(i=0;i9;i+) for(j= for(j=i+1i+1 ;j10 ;j+) ;jaj) if(aiaj) t=ai; ai=aj; aj=t; t=ai; ai=aj; aj=t; f o r ( j = 0 ; j 1 0 ; j + + ) f o r ( j = 0 ; j 1 0 ; j + + ) printfprintf(“%3d”,ai);(“%3d”,ai); 5
18、 8 7 4 3 9 0 1 2 6 5 8 7 4 3 9 0 1 2 6 ij 先找最小值所在的位置,最后再换位:main()main() inta inta10,i,j,t,k; 10,i,j,t,k; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i9;i+) for(i=0;i9;i+) k=i; k=i; for(j=i+1;j10;j+) if(ajak)k=j; for(j=i+1;j10;j+) if(ajak)k=j; t=ai; ai=ak; ak=t; t=ai; ai=a
19、k; ak=t; for(j=0;j10;j+) printf for(j=0;j10;j+) printf(“%3d”,ai);(“%3d”,ai); 起泡法基本思想起泡法基本思想: 首先将所有数中的最大值首先将所有数中的最大值“冒泡冒泡”到最后位到最后位置,再将剩下的数中的最大值置,再将剩下的数中的最大值“冒泡冒泡”到上一位到上一位置,置,依次类推,共进行,依次类推,共进行9 9次次“冒泡冒泡”。 每次每次“冒泡冒泡”都是一种翻滚过程,即相邻两个都是一种翻滚过程,即相邻两个数进行比较换位。数进行比较换位。 5 8 7 4 3 9 0 1 2 6main()main() int int a1
20、0,i,j,t; a10,i,j,t; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(j=1;j=9;j+) for(j=1;j=9;j+) for(i=0;i10-j; i+) for(i=0;iai+1) if(aiai+1) t= ai; ai= ai+1; ai+1=t; t= ai; ai= ai+1; ai+1=t; for(j=0;j10;j+) printf for(j=0;j10;j+) printf(“%3d”,ai);(“%3d”,ai); 要特别注意两个循环的范围。 ( (5) (
21、5) 循环移位循环移位 对一数列中的每个数向后移对一数列中的每个数向后移3 3个位置,最后个位置,最后3 3个个数移到最前面。数移到最前面。 5 8 7 4 3 9 0 1 2 6 1 2 6 5 8 7 4 3 9 0用循环移位实现用循环移位实现: 5 8 7 4 3 9 0 1 2 6main()main() int int i,j,k,a10;i,j,k,a10; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i10;i+)printf for(i=0;i10;i+)printf(“%3d”
22、,ai);(“%3d”,ai); for(i=1;i10;i+)ai=ai-1;for(i=1;i0;i-)ai=ai-1;for(i=9;i0;i-)ai=ai-1;k=a9;k=a9;a0=k;a0=k;for(j=1;j=3;j+)for(j=1;j=3;j+) k=a9;k=a9; (6)(6)狐狸找兔子问题狐狸找兔子问题绕 围绕着山顶有围绕着山顶有1010个洞,一只兔子和一只狐狸个洞,一只兔子和一只狐狸分别住在洞里,狐狸总想吃掉兔子;一天,兔子分别住在洞里,狐狸总想吃掉兔子;一天,兔子对狐狸说:你想吃掉我有一个条件,先把洞顺序对狐狸说:你想吃掉我有一个条件,先把洞顺序编号,你从最后一
展开阅读全文