c语言课件:第 6 章 利用数组处理批量数据

举报
资源描述
第 6 章 利用数组处理批量数据 引言:引言:数据结构与数组的概念数据结构与数组的概念 影响程序设计的因素除算法外还有数据结构。数据结构概念数据结构概念 编写一个程序除了重视算法的设计外,还需重视数据类型的选择,即选择合适的数据类型来存放要处理的数据。在程序设计中,数据类型就称为数据结构,选择合适的数据类型实际上就是进行数据结构的设计。在程序设计中有句格言:在程序设计中有句格言:数据结构数据结构+算法算法=程序程序 说说明明数数据据结结构构与与算算法法同同等等重重要要,算算法法依依赖赖于于数数据据结结构构,对对于于同同一一个个问问题题的的求求解解,可可以以采采用用不不同同的的数数据据结结构构和和不不同同的的算算法法,对对不不同同的的数数据据结结构构有有不不同同的的算算法法,其其复复杂杂程程度度也也会会不不同同,选选择择合合适适的的数数据据结结构构,可可以以降降低低算算法法的的复复杂杂程程度度。因因此此,在在程程序序设设计计中中应应重重视视数数据结构的设计。据结构的设计。问题问题问题问题:给一组数排序,这组给一组数排序,这组 数该数该 如何存放呢如何存放呢?这些数据如何存放才便于排序82945637617188888888881111111111111118 8 88888888这便是本章所要解决的问题l本章要点本章要点例:求任意例:求任意100100个数中的最大值。个数中的最大值。main()main()intint 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,&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);对对于于很很多多个个数数的的排排序序用用变变量量会会很很复复杂杂而而用用数数组组会会使算法很简单。使算法很简单。仍可用变量作为数据结构C语言为这些数据,提供了一种构造数据类型:数语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有组。所谓数组就是一组具有相同数据类型的数据的有序集合。序集合。一个班学生的学习成绩一个班学生的学习成绩一行文字一行文字一个矩阵一个矩阵这些数据的特点是:这些数据的特点是:1.1.具有相同的数据类型具有相同的数据类型2.2.使用过程中需要保留原始数据使用过程中需要保留原始数据 6.1 6.1 怎样定义和引用一维数组怎样定义和引用一维数组 inta10a0a1a2a3a4a5a6a7a8a9 一组具有同样类型的数据的集合一组具有同样类型的数据的集合 统一用一个名字代表统一用一个名字代表-数组名(数组名(代表一组数代表一组数)数组元素下标数组名 数数组组中中的的各各成成员员称称数数组组元元素素,由由数数组组名名加加下下标唯一地确定。标唯一地确定。将一组数用一个名字代表,便于管理。将一组数用一个名字代表,便于管理。只有一个下标的数组称为一维数组;只有一个下标的数组称为一维数组;可有二维数组、三维数组、可有二维数组、三维数组、七维数组。、七维数组。6.1.2 6.1.2 一维数组的定义和引用一维数组的定义和引用 定义定义 一般形式:一般形式:类型符类型符 数组名数组名 常量表达式常量表达式;inta10;floatb10;类型符 数组名 长度 作用:作用:分配一组连续的内存单元。分配一组连续的内存单元。一维数组在内存中的存放一维数组在内存中的存放每个数据元素占用的每个数据元素占用的字节数,就是基类型字节数,就是基类型的字节数的字节数一个元素占一个元素占4个字节个字节一维数组:一维数组:floatfloat mark100;mark100;mark0mark1mark2mark3.mark9986.592.077.552.0.94.0低地址低地址 高地址高地址物理意义:物理意义:数组一旦定义:就数组一旦定义:就在内存中开辟出一在内存中开辟出一块连续的空间:空块连续的空间:空间的首地址对应于间的首地址对应于第一个元素,依次第一个元素,依次排列。排列。如果超界将如果超界将出现什么问题出现什么问题?地址内 容下标首地址0首地址+113276754首地址+2287首地址+33-900首地址+44876首地址+55-7890首地址+6首地址+7首地址+8首地址+96789-365490081035说明:说明:数组必须先定义后使用。数组必须先定义后使用。数组名的命名规则与变量相同。数组名的命名规则与变量相同。常常量量表表达达式式表表示示元元素素的的个个数数(长长度度),下下标标 从从0 0开始。开始。常常量量表表达达式式不不能能包包含含变变量量,即即不不允允许许作作动动态态定义。定义。也就是说,也就是说,C语言不允许对数组的大小作动语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程态定义,即数组的大小不依赖于程序运行过程中变量的值。中变量的值。引用引用 逐个引用其元素,不能进行整体引用。逐个引用其元素,不能进行整体引用。引用的一般形式引用的一般形式:数组名数组名 下标下标 如:如:a0=50;a1=100;a0=50;a1=100;a2=a0+a1;a2=a0+a1;与与 a2=a0+a1a2=a0+a1有根本性的区别:下标可变。有根本性的区别:下标可变。注意:注意:定义数组时用到的定义数组时用到的“数组名常量表达式数组名常量表达式”和引用和引用数组元素时用到的数组元素时用到的“数组名下标数组名下标”是有区别的。是有区别的。例如例如 int a10;int a10;t=a6;t=a6;例:从键盘输入例:从键盘输入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);用数组:用数组:(灵活方便灵活方便)for(i=0;i10;i+)for(i=0;i10;i+)scanfscanf(“%d”,&(“%d”,&aiai););用循环控制输入个数和下标的变化。用循环控制输入个数和下标的变化。注意下标的变化范围。注意下标的变化范围。6.1.3 6.1.3 一维数组的初始化一维数组的初始化 在定义数组的同时给数组赋初值。在定义数组的同时给数组赋初值。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;6.1.4 6.1.4 一维数组应用举例一维数组应用举例(1 1)对对100100个个学学生生的的分分数数统统计计最最高高分分、最最低低分分和平均分。和平均分。两种方法:两种方法:用变量作为存放初始数据的数据结构用变量作为存放初始数据的数据结构 用数组作为存放初始数据的数据结构用数组作为存放初始数据的数据结构 main()main()intint 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=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()intint i,i,a100a100,max,min;,max,min;float aver=0;float aver=0;for(i=0;i100;i+)for(i=0;i100;i+)scanf scanf(“%d”,&ai);(“%d”,&ai);max=a0;min=a0;max=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()intint i,a,n;i,a,n;float aver=0;float aver=0;for(i=0;i100;i+)for(i=0;i100;i+)scanfscanf(“%d”,&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()intint i,i,a100a100,n;,n;float aver=0;float aver=0;for(i=0;i100;i+)for(i=0;i100;i+)scanf scanf(“%d”,&ai);(“%d”,&ai);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+)scanfscanf(“%d”,&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=100;i-)for(i=100;i=100;i-)printfprintf(“n%3d:%3d”,i,ni);(“n%3d:%3d”,i,ni);体会数组作体会数组作为存放结果为存放结果的数据结构的数据结构时的优越性时的优越性。按按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;fo
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号