19一维数组冒泡排序

上传人:m**** 文档编号:567676407 上传时间:2024-07-22 格式:PPT 页数:36 大小:508.52KB
返回 下载 相关 举报
19一维数组冒泡排序_第1页
第1页 / 共36页
19一维数组冒泡排序_第2页
第2页 / 共36页
19一维数组冒泡排序_第3页
第3页 / 共36页
19一维数组冒泡排序_第4页
第4页 / 共36页
19一维数组冒泡排序_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《19一维数组冒泡排序》由会员分享,可在线阅读,更多相关《19一维数组冒泡排序(36页珍藏版)》请在金锄头文库上搜索。

1、项目项目3 3:学生总评成绩的统计与排序:学生总评成绩的统计与排序 涉及到的知识点如下:涉及到的知识点如下:单元一:单元一:whilewhile语句的流程以及应用语句的流程以及应用单元二:单元二:do-whiledo-while语句的流程以及应用语句的流程以及应用单元三:单元三:forfor语句的流程以及应用语句的流程以及应用单元四:单元四:breakbreak、continuecontinue语句的应用语句的应用单元五:循环结构的嵌套练习单元五:循环结构的嵌套练习单元六:分支、循环结构的综合应用单元六:分支、循环结构的综合应用单元七:一维数组的定义及应用单元七:一维数组的定义及应用单元八:二

2、维数组的定义及应用单元八:二维数组的定义及应用单元九:学生总评成绩统计与排序的实现单元九:学生总评成绩统计与排序的实现单元七:一维数组的定义及应用单元七:一维数组的定义及应用 第一个问题是:输入第一个问题是:输入100个学生的个学生的“C程序设计程序设计”课程的成绩,将这课程的成绩,将这100个分数从个分数从小到大输出。小到大输出。 第二个问题是输入第二个问题是输入100个学生的个学生的“C程程序设计序设计”课程的期中和期末成绩,算出总评课程的期中和期末成绩,算出总评成绩,总评成绩为成绩,总评成绩为“30%期中成绩期中成绩+70%期末成绩期末成绩”,计算总评成绩的分数,计算总评成绩的分数段情况

3、。段情况。 整型整型基本类型:基本类型: 实型实型 字符型字符型 、 枚举类型枚举类型 数组类型数组类型 构造类型:构造类型: 结构体类型结构体类型 公用体类型公用体类型指针类型指针类型空类型空类型C语言的数据类型什么构造类型?什么构造类型? 所谓构造类型是指由基本类型数据按所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定一定的规则组成的,是用户自己按规则定义的,数组是构造类型之一。义的,数组是构造类型之一。什么是数组?什么是数组? 在数学中我们学过数列、矩阵的概念,在数学中我们学过数列、矩阵的概念,数列通常表示为:数列通常表示为:a a1 1 、a a2 2 、a a3

4、3、. .、a an n 矩阵通常表示为:矩阵通常表示为:a11a12a13a14a21a22a23a2424在在C C语言中表示数列和矩阵的方法是:语言中表示数列和矩阵的方法是:数组:数组:a0a0、a1a1、a2a2、a3a3、a4a4、a5a5 b0 b0、b1 b1 、 b2、b3、b4 c00 、c01 、c10 、c11 d111 、f2234其中其中 a,b,c,d,fa,b,c,d,f :称为数组名。称为数组名。 方括号中的数方括号中的数:称为下标:称为下标下标是一个数时,也就是数列,称为一下标是一个数时,也就是数列,称为一维数组。维数组。下标是两个数时,也就是矩阵,称为二下标

5、是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。维数组。还有三维数组、四维数组等。 例如:有五名学生的一组学号:例如:有五名学生的一组学号:1212、1313、1414、1515、1616 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 7.1 一维数组的定义一维数组的定义 数组是具有相同数据类型的变量集,并拥数组是具有相同数据类型的变量集,并拥有共同的名

6、字。有共同的名字。 从概念上来说,数组是一组变量,这组变量从概念上来说,数组是一组变量,这组变量应该满足下列条件:应该满足下列条件:(1) 具有有相同的名字具有有相同的名字(2) 具有相同的数据类型具有相同的数据类型(3) 在存储器中连续存放在存储器中连续存放 每个数组在使用之前都需要定义。每个数组在使用之前都需要定义。定义数组的语法是:定义数组的语法是: 数据类型说明符数据类型说明符 数组名数组名 数组长度数组长度; 注意:数组长度只能是常量。注意:数组长度只能是常量。 定义数组中元定义数组中元素的取值类型素的取值类型定义数组定义数组中元素的中元素的个数个数 数数组组中中的的每每个个成成员员

7、称称为为数数组组的的一一个个“数数组组单单元元”,保保存存在在其其中中的的数数据据值值称称为为“数数组组元元素素”,数数组组对对象象的的整整体体有有一一个个名称,这个名称表示整个数组。名称,这个名称表示整个数组。例如:例如:int data5; 说明整型数组说明整型数组datadata,有有5 5个元素。个元素。float b10,c20; 说明单精度浮点型数组说明单精度浮点型数组b b,有有1010个元素;单个元素;单精度浮点型数组精度浮点型数组c c,有有2020个元素。个元素。char string20; 说明字符型数组说明字符型数组stringstring,有有2020个元素。个元素。

8、一维数组在内存的存储形式:一维数组在内存的存储形式:一组变量200202204206208num 1213141516num0num1num2num3num4int num5;num0= 12; num1= 13;num2= 14;num3= 15; num4= 16; 注意:注意:(1 1) 数数组组的的数数据据类类型型定定义义的的是是每每个个数数组组元元素素的的取取值值类类型型。对对于于一一个个数数组组来来说说,所所有有数数组组元元素素的数据类型应该都是相同的。的数据类型应该都是相同的。(2 2) 数数组组名名要要符符合合用用户户定定义义字字的的书书写写规规则则,也也就是与普通变量一样。就

9、是与普通变量一样。(3 3) 在在C C语语言言的的一一个个函函数数中中,数数组组名名不不能能与与本本函函数的其它变量名同名。数的其它变量名同名。(4 4)数组长度不能是变量,也不能是或包含变)数组长度不能是变量,也不能是或包含变量的表达式,可以是常量或常量表达式。并且量的表达式,可以是常量或常量表达式。并且常量表达式应是整型数,不能是小数常量表达式应是整型数,不能是小数 。程序段一:程序段一:#define Size 5main() int aSize,bSize+10; /*正确正确 */ 程序段二:程序段二:main() int n=5; int datan; /*错误错误 */7.2

10、7.2 一维数组的引用一维数组的引用 引用数组单元的一般形式为:引用数组单元的一般形式为: 数组名数组名 下标下标 数数组组下下标标从从0 0开开始始,可可以以是是整整型型变变量量或或整整型型表表达达式式,但但不不能能是是浮浮点点型型的的变变量量或或浮浮点点型型表表达达式式;并并且且下下标标不不能能大大于于 数数组组长长度度-1-1,因因为为超超过部分没有被定义过,是不能正确使用的。过部分没有被定义过,是不能正确使用的。 例例如如:data4、datai+j、datai+都都是是合合法的引用方式。法的引用方式。 v数组必须先定义,后使用数组必须先定义,后使用v只能逐个引用数组元素只能逐个引用数

11、组元素,不能一次引用整个数组不能一次引用整个数组其中:下标可以是常量、变量或表达式,但最终值必须其中:下标可以是常量、变量或表达式,但最终值必须是整型数。是整型数。例例 int a10; scanf(“%d”,a) ; ( ) 必须必须 int a10; for(j=0;j10;j+) scanf(“%d”, &aj);数组的定义与引用中下标用法的区别数组的定义与引用中下标用法的区别l在数组的定义中:在数组的定义中:数组长度必须是整型常量,例如数组长度必须是整型常量,例如 int a100; 也就是说在定义数组的个数的时候必须给定元素的也就是说在定义数组的个数的时候必须给定元素的个数。下面的定

12、义不正确:个数。下面的定义不正确: 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.37.3 一维数组元素值的输入与输出一维数组元素值的输入与输出例如例如

13、: main() int i , a10; for(i=0 ; i10 ; i+) scanf(“%d” , & ai ) ; for(i=0 ; i10 ; i+) printf (“%d ”, ai ) ; 一维数组元素的输入输入一维数组元素的输出输出例例 : :用数组方式读入用数组方式读入5 5个整数,并求和。个整数,并求和。#include stdio.h main() int i,data5,sum=0; printf(nPlease enter 5 integer:); for (i=0;i5;i+) scanf(%d,&datai); for (i=0;i5;i+) sum=su

14、m+datai; printf(Sum is %dn,sum); 在语言中只能逐个地使用每个数组单元在语言中只能逐个地使用每个数组单元进行操作,而不能一次引用整个数组。进行操作,而不能一次引用整个数组。 例如,不能用例如,不能用printf(“%d”,data);来代替下来代替下面的语句:面的语句: for(i=0; i=4; i+) printf(%d,datai); 因为,因为,C语言规定数组名本身代表数组的首语言规定数组名本身代表数组的首地址。地址。printf(“%u”,data);语句输出的是数组的语句输出的是数组的首地址,而不是数组单元的内容。首地址,而不是数组单元的内容。 7.4

15、 7.4 一维数组的初始化一维数组的初始化 初始化是指在数组定义时给数组元素赋予初始化是指在数组定义时给数组元素赋予初值。初值。 一维数组初始化的一般形式是:一维数组初始化的一般形式是:数据类型说明符数据类型说明符 数组名数组名 数组长度数组长度=数值,数数值,数值,值,. . 数值数值 ; int data5=1,2,3,4,5; 注意:注意:(1 1) 允许初始化一部分元素,而不是全部。允许初始化一部分元素,而不是全部。 int data5=1,2;(2 2) 初始化数组时,允许省略数组的长度。初始化数组时,允许省略数组的长度。 int data=1,2,3,4,5; 与与int data

16、5=1,2,3,4,5;是完全等价的。是完全等价的。(3) 初始化数组时,不能对整个数组初始化。初始化数组时,不能对整个数组初始化。 例如,例如,int data5=1; 数组的初始化和赋值的区别l数组的初始化:数组的初始化:是指在定义数组的时候进行是指在定义数组的时候进行的,例如:的,例如:l int a 3=1,2,3; /* 初始化初始化 */l数组元素的赋值:数组元素的赋值: int a3; /* 定义整型数组定义整型数组 */ . a1=1; a2=2; /* 数组元素赋值数组元素赋值 */ a3=3例例【1】学校举行知识竞赛,有学校举行知识竞赛,有10个学生参个学生参赛,请协助老师

17、编写一个程序把成绩打印出赛,请协助老师编写一个程序把成绩打印出来。来。 解题步骤:解题步骤:1、定义一个一维数组存放成绩、定义一个一维数组存放成绩2、输出成绩。、输出成绩。7.4程序举例l代码实现#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);l例例【2】将例将例【1】中的中的10个学生的竞赛成绩从键盘输个学生的竞赛成绩从键盘输入,计算出平均分,将平均分输出到屏幕上。入,计算出平均分,将平均分输出到屏幕上。l#inclu

18、de”stdio.h” #define SIZE 10 main() int i,studentSIZE,sum=0,AVG;for(i=0;iSIZE;i+) scanf(“%d”,&studenti);for(i=0;iSIZE;i+)sum= sum+studenti;AVG=sum/ SIZE;printf(“the average is:%d”, AVG);例例 3读读10个整数存入数组,找出其中最大值和最小值个整数存入数组,找出其中最大值和最小值步骤步骤:1. 输入输入:for循环输入循环输入10个整数个整数2. 处理处理:(a) 先令先令max=min=x0(b) 依次用依次用x

19、i和和max,min比较比较(循环循环) 若若maxxi,令令min=xi3. 输出输出:max和和min #include #define SIZE 10main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;iSIZE;i+) printf(%d:,i+1);scanf(%d,&xi); max=min=x0; for(i=1;iSIZE;i+) if(maxxi) min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min);例

20、例4 4用数组方式解决用数组方式解决FibonacciFibonacci数列问题,求出数列问题,求出FibonacciFibonacci数列的前数列的前2020项存储在数组中,并将数项存储在数组中,并将数组内容输出。组内容输出。分析:定义一个含有分析:定义一个含有20个元素的数组个元素的数组f ,即即 int f20 ; 其中其中 f0=1,f1=1, fn=fn-1+fn-2 (n2) 用一个循环结构:让循环变量用一个循环结构:让循环变量n从从 2到到 20 ,循环体为,循环体为 fn=fn-1+fn-2 #include stdio.hvoid main() int i,fib20=1,1

21、; /*初始化初始化 */ 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 5用冒泡法对用冒泡法对 8 8 个数从小到大排序个数从小到大排序排序过程:首先把排序过程:首先把8 8个数放到数组个数放到数组a8 a8 中。中。a0 =38a0 =38;a1=49a1=49;a2=65a2=65;a3=76a3=76;a4=13a4=13;a5=27a5=27;a6=30a6=

22、30;a7=97 a7=97 ;排序过程:首先把排序过程:首先把8 8个数放到数组个数放到数组a8 a8 中。中。a8=38,49,65,76,13,27,30,97a8=38,49,65,76,13,27,30,9713 27 30 38 49 65 76 9738 13 27 30 49 65 76 9738 49 13 27 30 65 76 9738 49 65 13 27 30 76 9738 49 65 76 13 27 30 9749 38 65 97 76 13 27 3038497697139727973097137676762730136527653065131349493

23、049273827383038n=1n=2n=3n=4n=5n=6 13 27 30 38 49 65 76 97n=73027下标到下标到N-1下标到下标到N-2下标到下标到N-3下标到下标到N-4下标到下标到N-5下标到下标到N-6下标到下标到N-7冒泡排序法规律总结1 1、假如有、假如有N N个数,则需要进行个数,则需要进行N-1N-1趟趟排序,决定最外层排序,决定最外层的循环的循环 for(i=1;i aj) 则交换则交换aj-1与与aj的值的值3、每一趟的到底比较多少次呢?、每一趟的到底比较多少次呢? 每一趟比较每一趟比较 j都是从都是从1循环到循环到N-i,因此比较的次数,因此比较

24、的次数 如下:如下: for(j=1;j aj) 则交换则交换aj-1与与aj的值的值 4 4、总的程序如下:、总的程序如下: for(i=1;i=N-1;i+) for(j=1;j 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

25、语语言言”成成绩绩课课程程的的考考试试成成绩绩存存储储在在数数组组中中,再再从从键键盘盘输输入入一一个个分分数数,查查找找该该分分数数是是否否在在数数组组中,如果是,则输出它在数组中的下标。中,如果是,则输出它在数组中的下标。4、输输入入一一个个学学生生的的成成绩绩,将将该该学学生生的的成成绩绩插插入入到已经排好序的有到已经排好序的有9个学生的数组个学生的数组a10中。中。 a10=12, 25,34,47,56,59,60,80,99练习练习1225344756596080990a0a1a2a3a4a5a6a7a8a9数据数据成员成员比如要插入数据比如要插入数据 36,首先要找到插入的位,首

26、先要找到插入的位置,找到第一个比置,找到第一个比36大的数为大的数为47,所以应,所以应该插入到该插入到34与与47 之间。然后将之间。然后将47到到99所有所有的数据向后移动一个位置。看下图。的数据向后移动一个位置。看下图。122534a0 a1a2a3a4 a5 a6a7a8a9数据数据成员成员475659608099998060595647365 5、输输入入1010个个学学生生的的“C C程程序序设设计计”课课程程的的期期中中和和期期末末成成绩绩,算算出出总总评评成成绩绩,总总评评成成绩绩为为“30%30%期期中中成成绩绩+70%+70%期期末末成成绩绩”,计计算算总总成成绩绩的的分分数段情况。数段情况。 本本题题要要使使用用三三个个平平行行的的数数组组才才能能解解决决问问题题。这三个数组的第这三个数组的第i i个元素记录了一个学生的期中个元素记录了一个学生的期中成绩、期末成绩和总评成绩。成绩、期末成绩和总评成绩。6 6、假假定定某某数数组组已已经经存存放放互互不不相相同同的的正正整整数数,现现在在从从键键盘盘输输入入一一个个整整数数,要要求求从从数数组组中中删删除除与与该该值值相相等等的的元元素素,并并将将其其后后的的元元素素逐逐个个向向前前递递补补,输输出出删删除除后后的的数数组组,如如原原数组中无此数,则输出数组中无此数,则输出“无此数无此数”。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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