C语言教学课件之数组.ppt
《C语言教学课件之数组.ppt》由会员分享,可在线阅读,更多相关《C语言教学课件之数组.ppt(95页珍藏版)》请在三一办公上搜索。
1、,C 程 序 设 计,问 题,如果需要处理1名学生的10门课程的成绩,用什么来存储这些数据?方法一:定义10个变量,每个变量中存放1门成绩。方法二:定义一个可以存储10门成绩一维数组。,变量:杯子,一个变量只能存放一个数据,数组:带多个杯子的托盘,一个数组可以存放多个数据,数轴上的一维向量x=1,2,-2,1,0,3;就相当于一维数组,直角坐标系中的矩阵就相当于二维数组,4.1 一维数组 4.2 二维数组 4.3 字符数组,一维数组定义格式:类型说明符 数组名 整型常量表达式;例如:int a10;就定义了一个包含10个整型元素的数组a,它的内存大小可以存放10个整型数据。,4.1.1 一 维
2、数组的定义,类型说明符 数组名 整型常量表达式;,int,char等都可以,说明此数组中每个 元素都属于此类型,命名规则与变量一致不能和其他变量重名,指定元素的个数,最小为0,不能是变量,#define N 3int aN;,int a3+5;,int a1.5;,int n;scanf(“%d”,&n);int an;,int a;int a3;,int a,b3;,int n=3;int an;,【例 4.1】判断以下数组定义是否合法,并说明原因。,(1)int a2.5;(2)int a-3;(3)int i=3;(4)int i;int ai;scanf(“%d”,一维数组元素的引用,
3、一维数组引用格式:数组名下标,a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,注意:1.数组必须先定义,再使用。2.只能逐个引用数组元素,不能一次引用整个数组。例如:int a10;可以使用a0、a1.a9。若有 a=1;或者a10=1;出错。a10不代表整个数组,它是下标为10的元素,越界!,1,3.下标可以是常量或变量,它表示元素的序号。例如:int i=3,a10;ai=1;表示给下标为3的元素赋值为1。4.一维数组在内存中连续存放,先存放下标为0的元素,再存放下标为1的元素,依次直至存放完所有元素。,【例 4.2】定义一个包含3个整型元素的数组a,输出其元素值。,只定义数组
4、,不给数组元素赋值,数组元素中存放的是随机值。一般要先给数组元素赋值,再使用。,数组名a中存放的是数组起始元素的地址,【例 4.3】定义一个包含3个整型元素的数组a,从键盘给数组元素输入值,然后输出。,【例 4.4】定义一个包含10个整型元素的数组a,从键盘给数组元素输入值,然后输出。,一维数组的初始化,定义一维数组的同时给数组元素赋初值称为一维数组的初始化。其一般格式为:类型说明符 数组名N=初值1,初值2,初值N;其中,N是表示数组元素个数的常量。,一维数组的初始化方式有以下几种:(1)全部元素初始化:char a3=1,2,n;int b5=2,11,3,14,5;int b=2,11,
5、3,14,5;int b4=2,11,3,14,5;,在对数组的所有元素赋初值时,可以不指定数组长度。系统自动定义其长度为5,初值个数不能超过数组长度。否则,会出现语法错误。,(2)全部元素初始化:int a10=0,1,2;char a10=1,2;(3)全部元素初始化为0:int a10=0;,将a0a2依次初始化为0、1、2。未赋值的元素a3a9值全部被初始化为int中表示假的值0。,将元素a0a9 全部初始化为0,将a0a1依次初始化为0、1。未赋值的元素a2a9值全部被初始化为char中表示假的值0。,若想全部初始化为1int a10=1;错误,【例 4.5】定义一个含有10个元素的
6、整型一维数组并全部初始化,将数组中所有元素逆序输出。,【例4.6】:用冒泡法对5个数排序。解:冒泡排序过程如后面图所示,其中,红圈以内为已排好序的记录。,规则:令相邻位置的数依次比较,若上面的数大,则交换。,4,1,4,1,3,5,2,41 交换,43 交换,3,45 不交换,5,2,52 交换,1,13 不交换,3,4,34 不交换,2,42 交换,5,1,3,2,4,5,13 不交换,32 交换,1,2,3,4,5,12不交换,结果 1,2,3,4,5,R,第0趟,第1趟,第2趟,第3趟,第0次,第1次,第2次,第3次,for(i=0;iRj+1 的值)则交换 j增1 for(j=0;j4
7、i;j+)/内循环 如果(Rj的值Rj+1的值)则不交换 j增1,冒泡算法逻辑过程,i,j,i=0,j=1;比较Rj 和 Rj+1的大小 int temp;/定义新的存储单元 如果(R1的值R2的值)temp R1;R1 R2;R2 temp;j增加1,比较Rj 和 Rj+1的大小 如果(Rj的值Rj+1的值)j增加1,比较Rj 和 Rj+1 的大小,实现交换,R1,R2,4,3,temp,2.交 换 过 程 与 核 心 程 序,4,3,4,int i;,int j;,for(i=0;i=3;i+),for(j=0;j=3i;j+),int temp;,if(Rj的大小Rj+1的大小),tem
8、p Rj;Rj Rj+1;Rj+1 temp;,3.循 环 与 核 心 程 序 的 组 合,int i,j;,类型一样,合并在一起,外循环,将处理5个数推广到处理n个数,for(i=0;i=n-2;i+),内循环,for(j=0;j=ni2;j+),定义新的存储空间,置前,防止重复定义,int temp;,比较大小判断是否满足交换条件,if(RjRj+1),满足交换条件,则交换;在程序中将赋值箭头转换为赋值等号,temp=Rj;Rj=Rj+1;Rj+1=temp;,标出交换的起始位置,标出内循环的起始位置,标出外循环的起始位置,4.冒 泡 算法整理,int i,j;/定义int 类型的变量i,
9、j int temp;/定义新的存储单元 tempfor(i=0;iRj+1)/比较数组R 中相邻元素值的大小/开始交换 temp=Rj;/先将Rj中的值赋给 temp Rj=Rj+1;/再将Rj+1中的值赋给Rj Rj+1=temp;/最后又把temp中的值赋给Rj+1/结束交换/内循环for2结束/外循环for1结束/经过n1=4 次循环,完成排序功能,5.冒泡算法真实程序,6.优化推广程序,改进的冒泡排序算法,例如:待排序的数组元素为:3,1,2,5,4,3,1,3,1,2,4,5,31 交换,32 交换,2,24 不交换,4,5,1,13 不交换,2,3,34 不交换,4,5,45 不
10、交换,12不交换,结果 1,2,3,4,5,R,i=0,i=1,j=0,j=1,j=2,j=3,设置一个标识量,若某趟中一次交换也没有进行,设置标识量的值,代表数据已完全排好,不需要进行后面的排序。,【例 4.7】改进冒泡排序算法。,【例 4.8】从键盘输入10个学生成绩,计算出 平均成绩,并输出高于平均分的学生成绩。,【例】求fibonacci数列的前20项,并输出。,fibonacci:1,1,2,3,5,8,13,21,4.1 一维数组4.2 二维数组 4.3 字符数组,问 题,如果需要处理3名学生的期末成绩,每名学生有4门课程的成绩,用什么来存储这些数据?方法一:定义12个变量,每个变
11、量存储1个学生的1门课程成绩。方法二:为3名学生各定义3个数组,每个数组可以存放4门成绩。方法三:用一个3行4列的二维数组来存储。,4.2.1 二维数组的定义,1.格式:类型说明符 数组名常量表达式M常量表达式N;例:float a34;,012,0 1 2 3,M和N只能是正整数,例:float a34,2.二维数组可以看成是由一维数组组成的,3.二维数组在内存中连续存放,先顺序存放第一行的元素,再存放第二行的元素,依次直至存放完所有元素。,4.2.2 二维数组的引用,引用格式:数组名行下标列下标;例:int a23;a00、a01、a02 a10、a11、a12,常出现的错误:下标越界!a
12、23=3;/*应为a12=3;*/,4.2.3 二维数组的初始化,1、分行赋初值:例:int a34=1,2,3,4,5,6,7,8,9,10,11,12;1 2 3 4 5 6 7 8 9 10 11 12,2、全部数据写在一个花括号内,按数组排列的顺序对各元素赋初值:例:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,赋初值时,数组的行下标可以省略,例如:int a 4=.。,3、对部分元素赋初值:(1)int a34=0,1,2;0 1 2 0 0 0 0 0 0 0 0 0 功能:仅对a00、a01、a02赋值,其余为0,(2)int a34=1,5,6,9;1
13、 0 0 0 5 6 0 0 9 0 0 0 功能:仅对a00、a10、a11、a20赋值,其余为0,【例4.9】求一个3*4矩阵的最大值及其所在 行列下标。,【例4.10】3名学生各有4门课程的成绩,计算每个学生的平均成绩。,【例4.11】打印输出杨辉三角形(输出前10行),多维数组定义格式:类型 数组名常量表达式1常量表达式2;例:int a333;注意:多维数组的元素在内存中的排列顺序是按行存放。引用格式:数组名下标下标例:a000=100;a012=20;a222=50;一个n维数组可以看成由多个n-1维数组构成。,4.1 一维数组 4.2 二维数组4.3 字符数组,在程序中如果要存储
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 教学 课件 数组
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5426317.html