
第6章利用数组处理批量数据
6 利用数组处理批量数据 第 章

为什么需要循环控制用50个float型简单变量表示学生的成绩烦琐,如果有1000名学生怎么办呢?要向计算机输入全班50个学生一门课解决没有反映出这些数据间的内在联系,实际上这方法程的成绩些数据是同一个班级、同一门课程的成绩,它们具有相同的属性。数组名数组下标S(1)数组是一组有序数据的集合。数组中各数据的排列是有15s[15]一定规律的,下标代表数据在数组中的序号(2)用数组名和下标即可唯一地确定数组中的元素(3)数组中的每一个元素都属于同一个数据类型
为什么需要循环控制 (1) 数组是一组有序数据的集合。数组中各数据的排列是有 一定规律的,下标代表数据在数组中的序号。 (2) 用数组名和下标即可唯一地确定数组中的元素。 (3) 数组中的每一个元素都属于同一个数据类型。 数组 用50个float型简单变量表示学生的成绩 • 烦琐,如果有1000名学生怎么办呢? • 没有反映出这些数据间的内在联系,实际上这 些数据是同一个班级、同一门课程的成绩,它们具 有相同的属性。 • 要向计算机输入全班50个学生一门课 程的成绩 解决 方法 数组名 下标 s[15]

整型数组,即数组中的元素均为整型定义一维数组数组名为a类型说明符数组名[常量表达式int a[10];数组包含10个整型元素(1)数组名的命名规则和变量名相同,a[1]a[0]a[2]a[3]a[4]a[5]a[6]a|7]a[8]a[9]遵循标识符命名规则。相当于定义了10个简单的整型变量(2)在定义数组时,需要指定数组中元注意数组元素的下标从0开素的个数,方括号中的常量表达式用始,用Inta[10]”定来表示元素的个数,即数组长度。义数组,则最大下标值为9,不存在数组元素(3)常量表达式中可以包括常量和符号a[10]常量,不能包含变量
定义一维数组 类型说明符 数组名[常量表达式] (1) 数组名的命名规则和变量名相同, 遵循标识符命名规则。 (2) 在定义数组时,需要指定数组中元 素的个数,方括号中的常量表达式用 来表示元素的个数,即数组长度。 (3) 常量表达式中可以包括常量和符号 常量,不能包含变量。 int a[10]; 整型数组,即数组中的元素均为整型 数组名为a 数组包含10个整型元素 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 相当于定义了10个简单的整型变量 注意 • 数组元素的下标从0开 始,用“int a[10];”定 义数组,则最大下标值 为9,不存在数组元素 a[10]

引用一维数组元素数组名[下标]注意定义数组时用到的“数组名[常量表达式]”和引用数组元素时用的数组名[下标]”形式相同,但含义不同。int a[10];只能引用数组元素而不能一次整体调//前面有int,这是定义数组,指定数组包含10个元素用整个数组全部元素的值。t=a[6];数组元素与一个简单变量的地位和作//这里的a[6]表示引用a数组中序号为6的元素用相似。下标”可以是整型常量或整型表达式
引用一维数组元素 数组名[下标] 只能引用数组元素而不能一次整体调 用整个数组全部元素的值。 数组元素与一个简单变量的地位和作 用相似。 “下 标 ”可以是整型常量或整型表达 式。 注意 • 定义数组时用到的“数组名[常量表达式]” 和引用数组 元素时用的“数组名[下标]”形式相同,但含义不同。 int a[10]; //前面有int,这是定义数组,指定数组包含10个元素 t=a[6]; //这里的a[6]表示引用a数组中序号为6的元素

引用一维数组元素【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出CAWINDOWS)system32/cmd,exeC#include216int main()按任意键继续,1int i,a[10]:for(i=0;i=0:i--//输出a[9]~a[0]供10个数组元素printf("%d".a[i])printf(In"):第1个for循环使a[0]~a[9]的值为0~9。return 0;a[0]a[1]a[2][3]a[4]a[5]a[6]a[7]a[8]a[9]345工167819第2个for循环按a[9]~a[0]的顺序输出各元素的值
引用一维数组元素 【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。 #include int main() { int i,a[10]; for(i=0; i=0;i-) //输出a[9]~a[0]共10个数组元素 printf("%d ",a[i]); printf("\n"); return 0; } 第1个for循环使a[0]~a[9]的值为0~9。 第2个for循环按a[9]~a[0]的顺序输出各元素的值。 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 0 1 2 3 4 5 6 7 8 9

-维数组的初始化一为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化。(1)在定义数组时对全部数组元素赋予初值。inta[10]=0,1,2,3.4,5,6,7.8,9]将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为、初始化列表"(2)int a[10]={0,1,2,3,4];定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0。3或int a[10]=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];int a[10]={0];/未赋值的部分元素自动设定为0卡度。(4)居的全数日或int a[5]=[1,2,3.4,5];int a[]={1,2,3,4,5];但是,如果数组长度与提供初值的则方括号中的数组长度不能省略。教不相
一维数组的初始化 (1) 在定义数组时对全部数组元素赋予初值。 将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为 “初始化列 表”。 (2) 可以只给数组中的一部分元素赋值。 定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元 素赋初值为0。 (3) 给数组中全部元素赋初值为0。 (4) 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。 但是,如果数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。 为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化。 int a[10]={0,1,2,3,4,5,6,7,8,9}; int a[10]={0,1,2,3,4}; int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 或 int a[10]={0}; //未赋值的部分元素自动设定为0 int a[5]={1,2,3,4,5}; 或 int a[ ]={1,2,3,4,5};

维数组程序举例【例6.2】用数组来处理求Fibonacci数列问题#includeint main()1int i;int f[20]={1.1]1/对最前面两个元素[0]和f[1]赋初值1for(i=2;i<20;i++)1/先后求出f[2]-f[19]的值f[]=f[i-2]+f[{i- 1]for(i=0;i<20;i++)if(i%5==0)printf(\n")://控制每输出5个数后换行1/输出一个数printf("%12d".f[]);1OC:IWINDOWSlsystem32/cmd.exeXprintf("\n"):352return 0;21551334144233610893772584987676515974181请按任意键继续
一维数组程序举例 【例6.2】用数组来处理求Fibonacci数列问题。 #include int main() { int i; int f[20]={1,1}; //对最前面两个元素f[0]和f[1]赋初值1 for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; //先后求出f[2]~f[19]的值 for(i=0;i<20;i++) { if(i%5==0) printf("\n"); //控制每输出5个数后换行 printf("%12d",f[i]); //输出一个数 } printf("\n"); return 0; }

算法?起泡排序法维数组程序举例【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。985420第一趟
一维数组程序举例 【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。 9 8 5 4 2 0 8 5 4 2 0 9 5 4 2 0 8 9 4 2 0 5 8 9 2 0 4 5 8 9 第一趟 第二趟 第三趟 第四趟 第五趟

维数组程序举例【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列#include输入10个数给a[0]~a[9]int main()j由0变到8共执行9次循环int a[10]:进行9-次比较int ij.t;真a>a[+1]假printf("input 10 numbers :In"):for (i=0;ia[i+1])//相邻两个数比较口C:WINDOWSsystem32/cmd.exeX[t=a[]:a[]=a[+1]:a[+1]=t:]input10mumberprintf("the sorted numbers :/n"):3467904312487659913226for(i=0;i<10;i++)sortednuumbersprintf("%d ",a[0]):634436567879099124132按任意键继续printf("\n"):return 0;
一维数组程序举例 【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。 #include int main() { int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;ia[i+1]) //相邻两个数比较 {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers :\n"); for(i=0;ia[i+1]

定义和引用二维数组小例子队员1队员2队员3队员4队员5队员6有3个小分队,每队有6名队员,第1分队245618471243160023462757要把这些队员的工资用数组保第2分队304520181725202024581436存起来以备查。第3分队142711751046197614772018如果建立一个数组pay,它应当是二维的,第一维用来表示第几分队,第二维用来表示第几个队员。例如用pay23表示2分队第3名队员的工资,它的值是1725。二维数组常称为矩阵(matrix)。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构
定义和引用二维数组 有3个小分队,每队有6名队员, 要把这些队员的工资用数组保 存起来以备查。 小例子 队员1 队员2 队员3 队员4 队员5 队员6 第1分队 2456 1847 1243 1600 2346 2757 第2分队 3045 2018 1725 2020 2458 1436 第3分队 1427 1175 1046 1976 1477 2018 如果建立一个数组pay,它应当是二维的,第一维用来表示第几分队,第二维用来表示第几个 队员。例如用pay2,3表示2分队第3名队员的工资,它的值是1725。 二维数组常称为矩阵(matrix)。把二维数组写成行(row)和列(column)的排列形式,可以有助于形 象化地理解二维数组的逻辑结构