《数据结构域算法设计-第6章利用数组处理批量数据 课件》由会员分享,可在线阅读,更多相关《数据结构域算法设计-第6章利用数组处理批量数据 课件(97页珍藏版)》请在金锄头文库上搜索。
1、6.1 为什么要用数组 6.2 定义和引用一维数组 6.3 二维数组的定义和引用 6.4 字符数组 6.5 提高部分,第6章 利用数组处理批量数据,P139,6.1 为什么要用数组,P139,前几章使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。 对于有些数据,只用简单的数据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。,6.1 为什么要用数组,P139,30名学生成绩,需要用30个变量 100名学生成绩,需要用多少个变量? 用s1,s2,s3,s30表示成绩,能体现内在联系 C语言用方括号中的数字表示下标,如用s15表示,数组名,一组具有同一属性的
2、数据,6.1 为什么要用数组,P139,数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号 用一个数组名和下标唯一确定数组中的元素 数组中的每一个元素都属于同一个数据类型,6.2 定义和引用一维数组,6.2.1 定义一维数组 6.2.2 引用一维数组的元素 6.2.3 一维数组的初始化 6.2.4 一维数组程序举例,P139,6.2.1 定义一维数组,一维数组是最简单的数组 数组元素只有1个下标一维数组 数组元素2个下标二维数组,P140,6.2.1 定义一维数组,定义数组的方法与定义变量的方法类似 所不同的是一次定义一批有关联的变量 在定义数组时需要指定这
3、批变量的类型、数组名称,数组中包含变量的个数。,P140,6.2.1 定义一维数组,如 int a10;,数组名,P140,6.2.1 定义一维数组,如 int a10;,数组长度,P140,6.2.1 定义一维数组,定义一维数组的方式为:类型符 数组名常量表达式; 数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a10;a0,a1,a2,a9,P140,6.2.1 定义一维数组,定义一维数组的方式为:类型符 数组名常量表达式; 数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a10;a0,a1,a2,a9,int n; sc
4、anf(%d,不合法,P140,6.2.2 引用一维数组的元素,必须先定义数组,才能引用数组中的元素 只能逐个引用数组元素而不能一次引用整个数组中的全部元素,P140,6.2.2 引用一维数组的元素,P140,引用数组元素的表示形式为:数组名下标 a0=a5+a2+1-a2*3 合法int n=5,a10; an=20;,合法,6.2.2 引用一维数组的元素,P140,例6.1 引用数组元素。利用循环给数组元素a0a9赋值为09,然后按逆序输出各元素的值。 解题思路: 先用循环给数组元素a0 a9赋值09,这样,每个数组元素都有固定的值了,然后按a9到a0的顺序输出各元素的值。,6.2.2 引
5、用一维数组的元素,P140,#include void main() int i,a10; for(i=0;i=0; i-)printf(“%d “,ai); printf(“n“); ,使a0a9的值为09,a0a1a2a3a4a5a6a7a8a9,6.2.2 引用一维数组的元素,P140,#include void main() int i,a10; for(i=0;i=0; i-)printf(“%d “,ai); printf(“n“); ,先输出a9,最后输出a0,6.2.3 一维数组的初始化,对数组元素的赋值既可以通过赋值语句来实现,也可以在定义数组时同时给予初值,这就称为数组的初
6、始化,P141,(1) 定义数组时对全部数组元素赋初值int a10=0,1,2,3,4,5,6,7,8,9; (2) 可以只给一部分元素赋值int a10=0,1,2,3,4; 相当于int a10=0,1,2,3,4,0,0,0,0,0; (3)int a5=1,2,3,4,5; 可写为int a =1,2,3,4,5;,6.2.4 一维数组程序举例,例6.2 用数组来处理求Fibonacci数列问题。Fibonacci数列问题的含义见例5.8。,P142,解题思路: 建立一个数组,将数列中第1个数放在数组第1个元素中,数列第2个数放在数组第2个元素中, 数组序号为i的元素的值是其前两个元
7、素值之和。即:fi= fi-2+fi-1 用循环来求出数组各元素之和,#include void main() int i;int f20=1,1;for(i=2;i20;i+) fi=fi-2+fi-1;for(i=0;i20;i+) if(i%5=0) printf(“n”); printf(“%12d“,fi); printf(“n“); ,f0和f1的值1,1,求f2和f19的值,每行输出5个,1 1 2 3 5 8 13 21 34 5589 144 233 377 610987 1597 2584 4181 6765,例5.8程序在顺序求出并输出各个数后,不能保存这些数据,如果要单
8、独输出第10个数,是比较困难的 本例用数组处理时,把每个数据都保存在各数组元素中,如果要单独输出第10个数,是很容易的,直接输出f9即可,例6.3 假如有n个人,各人年龄不同,希望按年龄将他们从小到大排列。 解题思路: 排序的规律有两种:一种是“升序”,从小到大;另一种是“降序”,从大到小 把题目抽象为:“对n个数按升序排序” 采用起泡法排序,9 8 5 4 2 0,8 9 5 4 2 0,8 5 9 4 2 0,8 5 4 9 2 0,8 5 4 2 9 0,8 5 4 2 0 9,大数沉淀,小数起泡,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1
9、;ai+1=t; ,8 5 4 2 0 9,5 8 4 2 0 9,5 4 8 2 0 9,5 4 2 8 0 9,5 4 2 0 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,5 4 2 0 8 9,4 5 2 0 8 9,4 2 5 0 8 9,4 2 0 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,4 2 0 5 8 9,2 4 0 5 8 9,2 0 4 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=a
10、i;ai=ai+1;ai+1=t; ,2 0 4 5 8 9,0 2 4 5 8 9,a0 a1 a2 a3 a4 a5,for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; ,for(i=0;iai+1) ,for(i=0;iai+1) ,for(i=0;iai+1) ,for(i=0;iai+1) ,for(j=0;j5;j+),int a10; int i,j,t; printf(“input 10 numbers :n“); for (i=0;iai+1) t=ai;ai=ai+1;ai+1=t; printf(“the sorted numbers :n“); fo
11、r(i=0;i10;i+) printf(“%d “,ai); printf(“n“);,input 10 numbers: 13 20 64 78 21 8 14 30 45 23 the sorted numbers: 8 13 14 20 21 23 30 45 64 78,6.3 二维数组的定义和引用,P145,6.3.1 定义二维数组 6.3.2 引用二维数组的元素 6.3.3 二维数组的初始化 6.3.4 二维数组程序举例,6.3.1 定义二维数组,float a34,b510;定义a为34(3行4列)的数组b为510(5行10列)的数组 二维数组定义的一般形式为类型符 数组名常量
12、表达式常量表达式;,P145,6.3.1 定义二维数组,P145,逻辑存储,内存中的存储顺序,6.3.2 引用二维数组的元素,P146,二维数组元素的表示形式为:数组名下标下标b12=a23/2 合法int a34; a34=3; 不合法,6.3.3 二维数组的初始化,P147,int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,5,9;等价于 int a34=1,0,0,0,5,0,0,0,9,0,0,0; int a34=1,5,6;相当于 int a34=1,5,6,0;,6.
13、3.3 二维数组的初始化,P147,int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于: int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=0,0,3, ,0,10;合法,6.3.4 二维数组程序举例,P148,例6.4 将一个二维数组a的行和列的元素互换,存到另一个二维数组b中。,6.3.4 二维数组程序举例,P148,编程思路: 将a数组中第i行j列元素赋给b数组中j行i列元素例如 a00 赋给 b00a01 赋给 b10a02 赋给 b20, 可以用双层循环来处理,用外循环控制行的变化,内循环控制列的变化,#include void main() int a23=1,2,3,4,5,6;int b32,i,j;printf(“array a:n“);for (i=0;i2;i+) for (j=0;j3;j+) printf(“%5d“,aij); bji=aij; printf(“n“);,i控制行数的变化,j控制列数的变化,输出a的各元素,a元素值赋给b相应元素,printf(“array b:n“); for (i=0;i3;i+) for(j=0;j2;j+)printf(“%5d“,bij);printf(“n“); ,