经典C语言谭浩强版第七章数组.ppt
《经典C语言谭浩强版第七章数组.ppt》由会员分享,可在线阅读,更多相关《经典C语言谭浩强版第七章数组.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 数组数组引言引言7.1 一维数组的定义和引用一维数组的定义和引用7.2 二维数组的定义和引用二维数组的定义和引用7.3 字符数组字符数组 引言引言一、数组的引入一、数组的引入为了便于处理一批类型相同的数据为了便于处理一批类型相同的数据,引入了数组类型引入了数组类型假设现在要求保存每个学生的假设现在要求保存每个学生的成绩成绩,那就不能只使用一个变量那就不能只使用一个变量s s了了,而需要而需要4040个变量个变量,但这样一但这样一来输入、输出、计算都会变得来输入、输出、计算都会变得繁琐繁琐.在这种情况下在这种情况下,我们可以我们可以使用数组类型使用数组类型,说明一个含有说明一个含有
2、4040个元素的数组个元素的数组,每个数组元素存每个数组元素存放一个成绩放一个成绩,成绩的输入、输出、成绩的输入、输出、计算都可通过循环来实现计算都可通过循环来实现例例:某班有某班有4040名学生名学生,求该班成绩的平均分求该班成绩的平均分#include main()int j,sum,s;float ave;sum=0;for(j=1;j=40;j+)scanf(“%d”,&s);sum=sum+s;ave=sum/40;printf(“ave=%f”,ave);二、数组的概念二、数组的概念1.1.数组数组:由具有相同类型的由具有相同类型的 固定数量的元素组成的结构固定数量的元素组成的结构
3、2.2.数组元素数组元素:每一个数组元素每一个数组元素 都是一个变量都是一个变量,为了与一般为了与一般 的变量相区别的变量相区别,我们称数组我们称数组 元素为元素为下标变量下标变量3.3.下标变量在数组中的位置下标变量在数组中的位置 序号称序号称下标下标#include main()int j,sum,s40;float ave;sum=0;for(j=0;j=39;j+)scanf(“%d”,&sj);sum=sum+sj;ave=sum/40;printf(“ave=%f”,ave);7.1 一维数组的定义和引用一维数组的定义和引用 一、一、一维数组的定义一维数组的定义 1.格式格式:类型
4、标识符类型标识符 数组名数组名 常量表达式常量表达式;例例:int a10;2.说明说明(1)数组名是用户定义的标识符数组名是用户定义的标识符,数组名表示了一个存储区的首地址数组名表示了一个存储区的首地址 (即第一个数组元素的地址即第一个数组元素的地址)(2)数组长度数组长度:指数组中元素的个数指数组中元素的个数(3)数组元素的下标由零开始数组元素的下标由零开始 数组数组a 有有10个元素个元素:a0,a1 a9(4)常量表达式中不能包含变量常量表达式中不能包含变量,常量表达式的值不能是实数常量表达式的值不能是实数 84 :66 80 95101010121014 :1028a0a1a2 :a
5、9二、二、数组元素的引用数组元素的引用 1.引用形式引用形式:数组名数组名 下标下标 注意注意:如果出现如果出现 a5=72;编译时不会编译时不会 指出错误指出错误,系统会将系统会将a4后下一个后下一个 存储单元存储单元 赋值为赋值为72,但这样可能但这样可能 会破坏数组以外其他变量的值会破坏数组以外其他变量的值 84 75 66 80 9510101012101410161018a0a1a2a3a472a51020假设这个存储空间是假设这个存储空间是变量变量x的的,实际上实际上a5是是不存在的不存在的,如果执行了如果执行了a5=72,会将会将x原有的原有的正确数据覆盖掉正确数据覆盖掉2.说明
6、说明(1)下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式 如如:a1 ,a2*3(2)数组定义为数组定义为 int a5,数组长度为数组长度为5 而下标在而下标在0-4之内之内,即即a0-a4三、三、一维数组的初始化一维数组的初始化1.概念概念:在定义一维数组时对各元素指定初始值称为在定义一维数组时对各元素指定初始值称为 数组的初始化数组的初始化 如如:int a5=1,3,5,7,9 ;2.说明说明(1)对数组的全体元素指定初值对数组的全体元素指定初值,初值用初值用 括起来括起来,数据数据 之间用逗号分开之间用逗号分开.在这种情况下在这种情况下,可以不指明数组的可以不指明数组的
7、 长度长度,系统会根据系统会根据 内数据的个数确定数组的长度内数据的个数确定数组的长度 如如:int a =1,3,5,7,9 ;(2)对数组中部分元素指定初值对数组中部分元素指定初值(这时不能省略数组长度这时不能省略数组长度)如如:int a5=1,3,5;(3)使数组中的全部元素初始值都为使数组中的全部元素初始值都为 0 如如:int a5=0,0,0,0,0 ;更简单的写法更简单的写法:int a5=0 ;例例1:输入一个数据,在已知数组中查找是否有该数据输入一个数据,在已知数组中查找是否有该数据 5 8 0 1 9 2 6 3 7 4x 9a0a1a2a3a4a5a6a7a8a9 ma
8、in()int i,x;int a10=5,8,0,1,9,2,6,3,7,4;scanf(“%d”,&x);for(i=0;i10;i+)if(x=ai)printf(“find!n”);break;if(i=10)printf(“no find!n”);例例2:用数组求用数组求fibonacci(斐波纳契斐波纳契)数列的前数列的前20个数个数main()int i,f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%4=0)printf(“n”);printf(“%6d”,fi);1 1 0 0 0 0 :0f0f1f2f3f4f
9、5 :f1923586765i=2f2=f0+f1i=3f3=f1+f2i=4f4=f2+f3例例3:用冒泡排序法对用冒泡排序法对6个数进行排序个数进行排序(从小到大从小到大)9 7 2 5 4 1a0a1a2a3a4a5 7 2 5 4 1 9277547 1 2 5 4 1 7 945 15 2 4 1 5 7 9 2 1 4 5 7 91412冒泡排序方法冒泡排序方法:依次比较相邻的两个数依次比较相邻的两个数,将小数放前面将小数放前面,大数放后面大数放后面.n.n个数排序需要进行个数排序需要进行n-1n-1轮比较轮比较,从第从第1 1轮到轮到第第n-1n-1轮轮,各轮的比较次数依次为各轮
10、的比较次数依次为:n-1:n-1次、次、n-2n-2次次 1 1次次 9 7 2 5 4 1 9999972541初始状态初始状态第第1轮轮第第2轮轮第第3轮轮第第4轮轮第第5轮轮7#include main()int a6,i,j,t;for(i=0;i6;i+)scanf(“%d”,&ai);for(i=0;i5;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i6;i+)printf(“%3d”,ai);输入输入6个数据个数据用嵌套的用嵌套的for循环实现排序循环实现排序外层循环控制进行几轮比较外层循环控制进行几轮比较内层循环控制每一轮的比较次数
11、内层循环控制每一轮的比较次数如果前面的数大于后如果前面的数大于后面的数面的数,则进行交换则进行交换输出排序后的输出排序后的6个数据个数据 9 7 1 2 4 5a0a1a2a3a4a5 7 1 2 4 5 9 1 2 4 5 7 9 1 2 4 5 7 9 1 2 4 5 7 9第第1轮轮第第2轮轮第第3轮轮第第4轮轮第第5轮轮 1 2 4 5 7 9从这道例题中我们发现从这道例题中我们发现,在进行完第二轮比较后在进行完第二轮比较后,实际上实际上排序已经完成了排序已经完成了,从第三轮开始从第三轮开始,后面的比较都是多余的后面的比较都是多余的,在这种情况下我们希望可以终止比较在这种情况下我们希望
12、可以终止比较.初始状态初始状态为了解决问题为了解决问题,我们在程序中我们在程序中设置一个变量设置一个变量flag,flag,用它记录用它记录在一轮比较中是否进行了交换在一轮比较中是否进行了交换在每轮比较开始前在每轮比较开始前flag=0,flag=0,如如果在此轮比较中进行了交换果在此轮比较中进行了交换,则则flag=1,flag=1,在一轮比较结束后在一轮比较结束后,判断判断flagflag的值是否为的值是否为1,1,如果值如果值为为0,0,说明在此轮比较中没有进说明在此轮比较中没有进行交换行交换(即已经完成排序了即已经完成排序了),),此时可以终止循环此时可以终止循环(即结束排即结束排序序
13、)如果如果flagflag的值为的值为1,1,则要继则要继续进行排序续进行排序#include main()int a6,i,j,t,flag;for(i=0;i6;i+)scanf(“%d”,&ai);i=0;do flag=0;for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;flag=1;i+;while(flag);for(i=0;i6;i+)printf(“%3d”,ai);7.2 二维数组的定义和使用二维数组的定义和使用 一、一、二维数组的定义二维数组的定义 1.概念概念:一个一维数组一个一维数组,它的每一个元素都是类型相同它的每一个元素都是类型相同 的一维数组的
14、一维数组,就形成一个二维数组就形成一个二维数组 2.定义形式定义形式:类型标识符类型标识符 数组名数组名 常量表达式常量表达式1 常量表达式常量表达式2 如如:int a34;a0a1a2a00a01a02 a03 3.存储形式存储形式:数组的元素在内存中是连续存放的数组的元素在内存中是连续存放的 int a33;的存放形式如下的存放形式如下:a10a11a12a20a21a22a00a01a02a00a01a02a10a11a12a20a21a22101010121014101610181020102210241026 二、二、二维数组的引用二维数组的引用 数组元素的表示形式数组元素的表示形
15、式:数组名数组名 下标下标 下标下标 注意注意:(1)每个下标都要用每个下标都要用 括起来括起来 如如 a 2 1 不能写成不能写成 a 2,1 (2)下标不要超过定义的范围下标不要超过定义的范围 三、三、二维数组的初始化二维数组的初始化 1.分行初始化分行初始化 int a34=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 将数
16、据依次赋给元素将数据依次赋给元素 a00,a01 a23 12345678910 11 12注意注意:此方法数据没有明显的界限此方法数据没有明显的界限,当数据较多时容易出错当数据较多时容易出错3.对数组的部分元素赋初值对数组的部分元素赋初值 int a34=1,2,3,0,4;int a34=1,2,3,4,5,6;120030000400123456000000 4.对数组的全部元素赋初值时可以省略第一维的长度对数组的全部元素赋初值时可以省略第一维的长度 系统会根据数据的个数和第二维的长度自动求出系统会根据数据的个数和第二维的长度自动求出 第一维的长度第一维的长度 int a 4=1,2,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 语言 谭浩强版 第七 数组
限制150内