C语言-《一维数组和冒泡算法》_第1页
C语言-《一维数组和冒泡算法》_第2页
C语言-《一维数组和冒泡算法》_第3页
C语言-《一维数组和冒泡算法》_第4页
C语言-《一维数组和冒泡算法》_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

一维数组和冒泡算法本次课程内容课程目标:了解数组的概念掌握一维数组的定义,初始化和取用掌握排序算法:”冒泡排序”(难点)1要解决的问题在现实生活中,我们需要描述的事物,往往数量很多的。如果每个事物都要用一个变量来表示,那么需要多少变量呢?例:学员管理系统之成绩管理的子功能1、成绩录入:需要输入100个学生的成绩2、求平均成绩和合格率3、求最高分、最低分C++成绩90456885789477…882一维数组的引入3分析:我们需要定义100个变量来分别保存100个人的成绩,每个变量都互相独立,没有联系,不便于对其进行有效的操作。intnScore1;intnScore2;intnScore3;:::intnScore100;nScore1=80;nScore2=75;nScore3=90;:::nScore100=76;printf(“%d”,nScore1);printf(“%d”,nScore2);printf(“%d”,nScore3);:::printf(“%d”,nScore100);变量定义变量赋值变量打印如果需要保存1000个学生的成绩怎么办?数组的概念(书P98页)4数组就是一组固定数量的相同类型的数的集合,并且数组中的元素在逻辑上是相关的。数组中数据的三要素:数量固定类型相同逻辑相关如:100个学生的成绩就可以构成一个数组1、数目固定为100个学生的成绩2、表示成绩的数据均为整型3、在逻辑上都是表达学员的成绩数组的定义形式(书P99页)5Type数组名[n]Type----数组元素类型

n----数组元素个数例:intStdScore[100];表示StdScore是一个有100个整型元素的数组,其可以保存100个学员的成绩。constintnNum=10;intnArr1[10];intnArr2[5+3];intnArr3[nNum];intnNum=10;intnArr1[nNum];intnArr2[10.5];正确定义错误定义元素个数必须是整型常量、数字常量或整形常量表达式一维数组元素的存取6C下通过给定相应下标来存取数组中的元素。下标既元素在数组的位置。注意:C中下标是从0开始计数的,因此对于数组intnArray[n]其最小下标为0,最大下标为n-1。nArray[0]取得第一个元素nArray[1]取得第二个元素nArray[2]取得第三个元素nArray[3]取得第四个元素……….nArray[n-1]取得第n个元素C中下标是从0开始计数注意解决问题例:学员管理系统之成绩管理的子功能1、成绩录入:需要输入100个学生的成绩7学员研讨(20min)例:学员管理系统之成绩管理的子功能1、成绩录入:需要输入100个学生的成绩2、求平均成绩和合格率3、求最高分、最低分4、查询全部成绩学员解决方案的评比演示教学示例student8数组的应用:学员研讨(20min)例:酒店管理系统之客房管理的子功能(有80间房)1、开房2、未入住房间查询3、已入住房间查询演示教学示例Hospital9一维数组的初始化(书P99页)

在定义数组时,可以对数组的每个元素进行初始化。如下定义一个10个整型元素的数组,并初始化每个元素的值为510intnArray[10]={5,5,5,5,5,5,5,5,5,5};

如果初始化的提供的数值小于数组元素个数,则未初始化部分自动初始化为0,如下:intnArray[10]={5,5,5};数组中的前三个元素值初始化为5,其余七个均初始化为0

如果定义数组时提供了初始化,则数组元素个数可以省略,数组元素个数就是初始化元素的个数。intnArray[]={5,5,5,5,5};nArray有五个整型元素,每个元素初始化值为5数组在内存中的存放形式(理论重点)11数组是一组类型相同数的集合。数组中的每个元素在内存中是连续存放的。如:intnArr[5]={0,10,100,20,30};的内存存放形式如图010100203012ff6012ff6412ff6812ff6c12ff70地址nArr[0]nArr[1]nArr[2]nArr[3]nArr[4]数组元素4字节4*5字节数组中每个元素的地址都是连续的。例:如果nArr[0]的地址是12ff60;

那么nArr[2]的地址=12ff60+2*4=12ff68;12数组可以存储多个数据,但必须在使用前指定容量大小,也就是说如果数据太多,超过容量就会溢出。这个问题可以解决吗?怎样解决?如果数据的数量是变化的怎么办?课后思考算法13冒泡法

选择法请将下列一组数据按其值由大到小排列并输出插入法希尔法比较交换7580785666499486冒泡排序算法(书P102页)14

44冒泡排序算法是通过循环比较下标为i+1和i两个元素,并交换位置.如果是升序排序则一次循环完成后,数组中的最大数就冒到了数组顶部,然后对数组剩下的部分重复上面的步骤,直到所有元素都排序完成.335522113344552211334455221133442255113344221155第一趟比较

3344221155334422115533224411553322114455第二趟比较

332211445522331144552211334455第三趟比较

22113344551122334455第四趟比较冒泡排序算法流程15冒泡排序法需要两重循环,内部循环用于对数组未排序部分进行循环比较;外部循环用于控制内部循环次数。外部循环次数为数组个数减1.现假设数组元素个数为N。nI<N-1成立不成立定义nI,用于控制外部循环次数结束流程图nJ<N-nI-1成立不成立交换两元素定义nJ,用于控制内部循环次数arr[nJ]>arr[nJ+1]流程图不成立成立未排序元素个数对未排序元素进行比较结束冒泡排序算法代码实现16voidPpSort(intar[],intnSize){for(intnI=0;nI<nSize–1;nI++) //外部循环

{for(intnJ=0;nJ<nSize–nI–1;nJ++) //内部循环

{inttemp; if(ar[nJ]<ar[nJ+1]) //相邻元素比较

{ temp=ar[nJ]; //值交换

ar[nJ]=ar[nJ+1]; ar[nJ+1]=temp; }}}

}内部循环程序代码数组作为参数传递时,可省略元素个数学员研讨(20min)例:学员管理系统之成绩管理的子功能1、成绩录入:需要输入100个学生的成绩2、求平均成绩和合格率3、求最高分、最低分4、查询全部成绩

5、成绩排序:要求从高到低排序学员解决方案的评比17本讲小结通过数组可以保存一组个数固定、类型相同、逻辑上相关的数据通过下标取数组元素时,注意下标从0开始。在定义数组时可以对每个元素进行初始化冒泡算法的使用18预习参数传递方式:按地址传递排序算法:“选择排序”二维数组1920

请将下列一组数据读入到S数组中

30,56,88,45,100,20main(){ints[6],i;for(i=0;i<6;i++)scanf(“%d,”,&s[i]);for(i=0;i<6;i++)printf(“%4d”,s[i]);}

数组的建立与输出1数组的应用----对数组的建立、数

组元素的引用以及对数组元素的输出

请将下列一组数据读入到S数组中,并从中找出最小的值并输出。

30,56,88,45,100,20main(){ints[6]={30,56,88,45,100,20,i,min=s[0];for(i=1;i<6;i++)if(s[i]<min)min=s[i];printf(“%d”,min);}

对数组元素的引用2数组的应用----对数组的建立、数

组元素的引用以及对数组元素的输出数组的应用----访问数组每个元素并求元素值之和

通过下标我们可以通过一个循环非常方便得取得数组的每个元素。22#include<stdio.h>voidmain(void){intnArray[10]={0,1,2,3,4,5,6,7,8,9};

//定义数组

intnSum=0; //用于保存数组的和

for(intnIndex=0;nIndex<10;nIndex++)

温馨提示

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

评论

0/150

提交评论