《维数组冒泡排序》PPT课件.ppt_第1页
《维数组冒泡排序》PPT课件.ppt_第2页
《维数组冒泡排序》PPT课件.ppt_第3页
《维数组冒泡排序》PPT课件.ppt_第4页
《维数组冒泡排序》PPT课件.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目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所有的数据向后移动一个位置。看下图。,数据,成员,4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论