《维数组冒泡排序》PPT课件.ppt

上传人:za****8 文档编号:14469349 上传时间:2020-07-21 格式:PPT 页数:36 大小:508.50KB
返回 下载 相关 举报
《维数组冒泡排序》PPT课件.ppt_第1页
第1页 / 共36页
《维数组冒泡排序》PPT课件.ppt_第2页
第2页 / 共36页
《维数组冒泡排序》PPT课件.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
项目3:学生总评成绩的统计与排序 涉及到的知识点如下:,单元一:while语句的流程以及应用 单元二:do-while语句的流程以及应用 单元三:for语句的流程以及应用 单元四:break、continue语句的应用 单元五:循环结构的嵌套练习 单元六:分支、循环结构的综合应用 单元七:一维数组的定义及应用 单元八:二维数组的定义及应用 单元九:学生总评成绩统计与排序的实现,单元七:一维数组的定义及应用,第一个问题是:输入100个学生的“C 程序设计”课程的成绩,将这100个分数从 小到大输出。 第二个问题是输入100个学生的“C程 序设计”课程的期中和期末成绩,算出总评 成绩,总评成绩为“30%期中成绩 +70%期末成绩”,计算总评成绩的分数 段情况。,什么构造类型? 所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的,数组是构造类型之一。 什么是数组? 在数学中我们学过数列、矩阵的概念, 数列通常表示为:a1 、a2 、a3、.、an 矩阵通常表示为:,在C语言中表示数列和矩阵的方法是: 数组:a0、a1、a2、a3、a4、a5 b0、b1 、 b2、b3、b4 c00 、c01 、c10 、c11 d111 、f2234 其中 a,b,c,d,f :称为数组名。 方括号中的数:称为下标 下标是一个数时,也就是数列,称为一维数组。 下标是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。,例如:有五名学生的一组学号: 12、13、14、15、16,int num5; num0= 12; num1= 13;num2= 14; num3= 15; num4= 16;,int a,b,c,d,e; a= 12; b= 13;c= 14; d= 15; e= 16;,单元七:一维数组的定义及应用,7.1 一维数组的定义 数组是具有相同数据类型的变量集,并拥 有共同的名字。 从概念上来说,数组是一组变量,这组变量 应该满足下列条件: (1) 具有有相同的名字 (2) 具有相同的数据类型 (3) 在存储器中连续存放,每个数组在使用之前都需要定义。 定义数组的语法是: 数据类型说明符 数组名数组长度; 注意:数组长度只能是常量。,定义数组中元素的取值类型,定义数组中元素的个数,数组中的每个成员称为数组的一个“数组单元”,保存在其中的数据值称为“数组元素”,数组对象的整体有一个名称,这个名称表示整个数组。,例如: int data5; 说明整型数组data,有5个元素。 float b10,c20; 说明单精度浮点型数组b,有10个元素;单 精度浮点型数组c,有20个元素。 char string20; 说明字符型数组string,有20个元素。,一维数组在内存的存储形式:,一组变量,int num5; num0= 12; num1= 13;num2= 14; num3= 15; num4= 16;,注意: (1) 数组的数据类型定义的是每个数组元素的取值类型。对于一个数组来说,所有数组元素的数据类型应该都是相同的。 (2) 数组名要符合用户定义字的书写规则,也就是与普通变量一样。 (3) 在C语言的一个函数中,数组名不能与本函数的其它变量名同名。 (4)数组长度不能是变量,也不能是或包含变 量的表达式,可以是常量或常量表达式。并且 常量表达式应是整型数,不能是小数 。,程序段一: #define Size 5 main() int aSize,bSize+10; /*正确 */ 程序段二: main() int n=5; int datan; /*错误 */ ,7.2 一维数组的引用 引用数组单元的一般形式为: 数组名下标 数组下标从0开始,可以是整型变量或整型表达式,但不能是浮点型的变量或浮点型表达式;并且下标不能大于数组长度-1,因为超过部分没有被定义过,是不能正确使用的。 例如:data4、datai+j、datai+都是合法的引用方式。,数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 其中:下标可以是常量、变量或表达式,但最终值必须是整型数。,例 int a10; scanf(“%d”,a) ; (),必须 int a10; for(j=0;j10;j+) scanf(“%d”, ,数组的定义与引用中下标用法的区别,在数组的定义中:数组长度必须是整型常量,例如 int a100; 也就是说在定义数组的个数的时候必须给定元素的个数。下面的定义不正确: int n=5; int an; () n不是常量,是变量。 下面的写法也是正确的: #define size 5 main( ) int asize,bsize+5; (),在数组的引用中: 下标可以是常量,可以是变量,对于上面的例子,有: a0a99都可以用,还可以像如下这种方式用:i=2; ai=34; ai+; ai-; a+i; a-i;,7.3 一维数组元素值的输入与输出 例如 : main() int i , a10; for(i=0 ; i10 ; i+) scanf(“%d” , ,例 :用数组方式读入5个整数,并求和。 #include stdio.h main() int i,data5,sum=0; printf(nPlease enter 5 integer:); for (i=0;i5;i+) scanf(%d, ,在语言中只能逐个地使用每个数组单元 进行操作,而不能一次引用整个数组。 例如,不能用printf(“%d”,data);来代替下 面的语句: for(i=0; i=4; i+) printf(%d,datai); 因为,C语言规定数组名本身代表数组的首 地址。printf(“%u”,data);语句输出的是数组的 首地址,而不是数组单元的内容。,7.4 一维数组的初始化 初始化是指在数组定义时给数组元素赋予 初值。 一维数组初始化的一般形式是: 数据类型说明符 数组名数组长度=数值,数 值,. 数值;,int data5=1,2,3,4,5; 注意: (1) 允许初始化一部分元素,而不是全部。 int data5=1,2; (2) 初始化数组时,允许省略数组的长度。 int data=1,2,3,4,5; 与int data5=1,2,3,4,5;是完全等价的。 (3) 初始化数组时,不能对整个数组初始化。 例如,int data5=1;,数组的初始化和赋值的区别,数组的初始化:是指在定义数组的时候进行的,例如: int a 3=1,2,3; /* 初始化 */ 数组元素的赋值: int a3; /* 定义整型数组 */ . a1=1; a2=2; /* 数组元素赋值 */ a3=3,例【1】学校举行知识竞赛,有10个学生参 赛,请协助老师编写一个程序把成绩打印出 来。 解题步骤: 1、定义一个一维数组存放成绩 2、输出成绩。,7.4程序举例,代码实现 #include”stdio.h” main() int i; int student10=90,78,67,98,34,56,75,80,50,92; for(i=0;i10;i+) printf(“%d”, studenti); ,例【2】将例【1】中的10个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。 #include”stdio.h” #define SIZE 10 main() int i,studentSIZE,sum=0,AVG; for(i=0;iSIZE;i+) scanf(“%d”, ,例 3读10个整数存入数组,找出其中最大值和最小值,步骤: 1. 输入:for循环输入10个整数 2. 处理: (a) 先令max=min=x0 (b) 依次用xi和max,min比较(循环) 若maxxi,令min=xi 3. 输出:max和min,#include #define SIZE 10 main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;ixi) min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min); ,例4用数组方式解决Fibonacci数列问题,求出 Fibonacci数列的前20项存储在数组中,并将数 组内容输出。,分析:定义一个含有20个元素的数组f ,即 int f20 ; 其中 f0=1,f1=1, fn=fn-1+fn-2 (n2) 用一个循环结构:让循环变量n从 2到 20 ,循环体为 fn=fn-1+fn-2,#include stdio.h void main() int i,fib20=1,1; /*初始化 */ printf(n); for (i=2;i20;i+) fibi=fibi-1+fibi-2; for (i=1;i=20;i+) printf(%10d,fibi-1); if (i%5=0) printf(n); /*换行,每行输出5个 */ ,例 5用冒泡法对 8 个数从小到大排序,排序过程:首先把8个数放到数组a8 中。 a0 =38;a1=49;a2=65;a3=76;a4=13;a5=27;a6=30;a7=97 ;,排序过程:首先把8个数放到数组a8 中。 a8=38,49,65,76,13,27,30,97,13 27 30 38 49 65 76 97,38 13 27 30 49 65 76 97,38 49 13 27 30 65 76 97,38 49 65 13 27 30 76 97,38 49 65 76 13 27 30 97,49 38 65 97 76 13 27 30,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,n=1,n=2,n=3,n=4,n=5,n=6,13 27 30 38 49 65 76 97,n=7,30,27,下标到N-1,下标到N-2,下标到N-3,下标到N-4,下标到N-5,下标到N-6,下标到N-7,冒泡排序法规律总结,1、假如有N个数,则需要进行N-1趟排序,决定最外层的循环 for(i=1;i aj) 则交换aj-1与aj的值 3、每一趟的到底比较多少次呢? 每一趟比较 j都是从1循环到N-i,因此比较的次数 如下: for(j=1;j aj) 则交换aj-1与aj的值 ,4、总的程序如下: for(i=1;i aj) 则交换aj-1与aj的值 for(i=0;i=N-1;i+) /*输出排好序的数组*/ printf(“%d”,ai);,1、 从大到小排序 7,4,10,1,20,5,3,9; 2、 输入10个整数,求出最小的数以及最小的数在数组中的下标。 3、用初始化方法,把某学习小组10名学生的“C语言”成绩课程的考试成绩存储在数组中,再从键盘输入一个分数,查找该分数是否在数组中,如果是,则输出它在数组中的下标。 4、输入一个学生的成绩,将该学生的成绩插入到已经排好序的有9个学生的数组a10中。 a10=12, 25,34,47,56,59,60,80,99,练习,数据,成员,比如要插入数据 36,首先要找到插入的位置,找到第一个比36大的数为47,所以应该插入到34与47 之间。然后将47到99所有的数据向后移动一个位置。看下图。,数据,成员,47,56,59,60,80,99,99,80,60,59,56,47,36,5、输入10个学生的“C程序设计”课程的期中和期末成绩,算出总评成绩,总评成绩为“30%期中成绩+70%期末成绩”,计算总成绩的分数段情况。 本题要使用三个平行的数组才能解决问题。这三个数组的第i个元素记录了一个学生的期中 成绩、期末成绩和总评成绩。 6、假定某数组已经存放互不相同的正整数,现在从键盘输入一个整数,要求从数组中删除与该值相等的元素,并将其后的元素逐个向前递补,输出删除后的数组,如原数组中无此数,则输出“无此数”。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!