第8章数组v1.ppt

上传人:sccc 文档编号:4826666 上传时间:2023-05-17 格式:PPT 页数:33 大小:249.02KB
返回 下载 相关 举报
第8章数组v1.ppt_第1页
第1页 / 共33页
第8章数组v1.ppt_第2页
第2页 / 共33页
第8章数组v1.ppt_第3页
第3页 / 共33页
第8章数组v1.ppt_第4页
第4页 / 共33页
第8章数组v1.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第8章数组v1.ppt》由会员分享,可在线阅读,更多相关《第8章数组v1.ppt(33页珍藏版)》请在三一办公上搜索。

1、1,1,第八章数 组,2,8.1 概述,数组的概念数组是由若干 类型相同 的相关数据按 一定顺序存储 在一起形成的 一组数据 集合。数组的用途保存大量同类型的相关数据 例如:学生成绩数组的特点快速地随机访问一旦定义,不能改变大小数组可分为一维、二维、多维数组,3,8.2 一维数组的定义,定义语法:数据类型 数组名数组长度例如:int score100;/*数组*/,数组的数据类型,数组名,数组长度,score,4,一维数组的初始化,数组的初始化是指在定义数组时给数组赋初值。1.在定义数组时赋全部初值;int a10=0,1,2,3,4,5,6,7,8,9;2.部分赋值,未明确写出的均初始化为0

2、;int a10=0,1,2,3,4;3.赋值时不指定数组长度,赋初值元素的个数为数组长度。int a=0,1,2,3,4;/*数组只有5个元素*/,5,一维数组元素的引用数组名下标 下标值的范围是0到数组长度减1;float f10;f0 f1 f2 f3 f8 f9 f0=20;f1=39;f2=40;f3=60;f9=100;一个数组元素就如同一个简单变量。a0=a5+a7-a2*3;元素下标可以是常量和表达式ai=0;元素下标也可以是变量,一维数组的引用,千万不要越界!,6,注意1)对数组定义时所声明的类型实际上是指数组元素的取值类型;对于同一个数组,其所有元素的数据类型必须是相同的。

3、2)数组名的命名应符合标识符的定义规则。3)数组名不能与其它变量名相同。4)数组定义时,方括号中的常量表达式说明了数组元素的个数,如a5表示数组a有5个元素。但是其下标是从0开始编号的。,7,注意5)在定义时,不能在方括号中用变量来表示元素的个数,但是可以是常量或常量表达式。6)允许在同一个类型说明中,同时说明多个数组和多个变量。例如:int a,b,c,d,k110,k220;7)可以越界访问数组的元素,但这样做会导致不可预料的结果,甚至于造成系统的崩溃(执行写操作)。,8,一维数组的定义、赋值和引用。【exp8-1】#include void main()int i,a10;for(i=0

4、;i=0;i-)printf(%d,ai);/依次倒序输出各个元素程序运行结果:9 8 7 6 5 4 3 2 1 0,9,例8-2,找出一维数组中的最大元素。,10,8.3 二维数组的定义,类型说明符 数组名常量表达式常量表达式 例如:int score450;,数组的数据类型,数组名:数组首址,行,引用数组元素:score00、score01、score049 score10、score11、score149 score20、score21、score249 score30、score31、score349 系统在内存中分配连续4*50 个int数据类型的空间给数组。存放顺序:按行存放,先

5、顺序存放第一行的元素,再存放第二行的元素,列,11,数组定义后,其元素值是随机数。在定义数组的同时,为其元素赋值,称为赋初值。int a22=1,2,3,4;int a22=1,2,3,4;int Arr23=1,1,2;int matrix4=1,2,3,4,1,二维数组的初始化,对多维数组,可以且只可以省略最高维长度说明。切记切记!,12,int matrix=1,2,3,4,5,6,7,8,9,10,11,12;int matrix4=1,2,3,4,1;int matrix4=1,2,3,4,5,6,7,8,9;int matrix4=1,2,3,4,5,6,7,8,9,10;,编译通

6、不过,34,34,34,二维数组的初始化,13,二维数组的引用,程序中引用的是数组中一个元素,必须用下标来指定。float a44 a00 a01 a02 a03a10 a11 a12 a13 a20 a21 a22 a23a30 a31 a32 a33对二维数组的每个元素可以当作普通变量来使用:赋值、各种运算。,14,二维数组的引用,在程序中为数组赋值的方法1.用scanf语句由用户依次输入:for(i=1;i=3;i+)for(j=1;j=4;j+)scanf(“%d”,2.由循环变量用循环赋值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,for(i=0;

7、i4;i+)(for j=0;j4;j+)aij=4*i+j+1;,15,二维数组程序举例将一个二维数组行和列元素互换,存到另一个数组中 1 4a=1 2 3 b=2 5 4 5 6 3 6for(i=0;i2;i+)for(j=0;j3;j+)bji=aij,for(i=0;i3;i+)for(j=0;j2;j+)bij=aji,16,课堂练习,1.以下对一维数组a的正确说明是:A)char a(10);B)int a10;C)int k=5,ak;D)char a=a,b,c;2.以下对二维数组a的正确说明是:A)char a105;B)int a23;C)int k=5,akk-2;D)

8、char a43=“abc”,“bcd”,“cde”;E)int a34=1,5,9;,17,将数组中的元素颠倒顺序排放#include void main()int a10=0,1,2,3,4,5,6,7,8,9;int i,t;for(i=0;i=4;i+)t=ai;ai=a9-i;a9-i=t;,8.4 应用举例,18,求Fibnacci数列1,1,2,3,5,8,13,21,.【exp8_3】初值 f0=1,f1=1 fi=fi-2+fi-1 完整程序:,void main()int i,f20=1,1;for(i=2,i=19;i+)fi=fi-2+fi-1;for(i=2,i=19

9、;i+)printf(%12d,fi);,19,选择法排序,#include void main()int i,j,min,t,data10=3,6,2,5,8,1,0,4,7,9;for(i=0;i=8;i+)min=i;for(j=i+1;j=9;j+)if(datajdatamin)min=j;if(min!=i)t=datai;datai=datamin;datamin=t;,20,在无序数组中查找给定值首次出现的位置 如:10 1 20 39 9 4 12 43 33 4 19(找4的位置)从第0个元素到最后一个元素依次与被找元素比较,相等则停止查找。,21,void main()i

10、nt a10,i,num;for(i=0;i10;i+)scanf(“%d”,22,考虑另外一种种情况,在有序数组中插入一个数。首先需要确定该元素的位置。,第一步:从第0个元素开始比较,直到6小于或等于某个数时停止,该数的位置即为所求。i=0;while(i=num)break;else i+;k=i;,23,8.4 应用举例,第二步:数组右移一位从最后一个元素右移 for(i=6;i=k;i-)ai+1=ai;,第三步:存放ak=num;,24,如果需要将给定的某个数插入到有序的数组中,可以使用如下的五个步骤:建立数组排序找出被插入值所在的位置从该位置起到最后的所有元素右移一位将待插入数值放

11、入上一步空出的位置参考【exp8_6】,8.4 应用举例,25,8.4 应用举例,#include stdio.hmain()int a21;int i,j,k,num;printf(输入20个整数n);for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;/*排序*/for(i=0;i20;i+)printf(%3d,ai);/*输出排序结果*/printf(输入要被插入的数n);scanf(%d,26,i=0;while(i=num)break;else i+;/*查找*/k=i;for(i=19;i=k;i-)/*右移一位*/ai+1=ai;ak=num;/*插入*/for

12、(i=0;i21;i+)printf(“%3d”,ai);/*输出结果*/,27,本章总结,一维数组和二维数组的定义、初始化和引用常用的算法:在数组中查找、插入元素、排序等,28,课后作业,1、编程实现从键盘输入20个整数,统计其中正数的个数,并计算输出所有正数之和。2、8.9,8.10,29,输入100个050的整数,统计每个数出现的次数【exp8_2】分析:1)需要50个变量用于统计 int count51。2)读一个字符,在相应的变量上加1,0,n0,n1,n50,.,.,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

13、1,1,1,1,1,1,1,1,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,30,3)如果用if 语句,需要判断多少次?if(n=0)count0+;if(n=1)count1+;4)用switch(n)case 0:count0+;case 1:count1+;.5)采用数组:读入的数字就是累加变量的下标索引 countk+;6)需要循环多少次?100次?,31,程序:#include stdio.hmain()int count51;int i

14、,n;for(i=0;i50;i+)counti=0;for(i=0;i100;i+)scanf(%d,32,8.4 应用举例,例:求出3*4矩阵中的最大值及其所在的行列号。1.设一个变量存放最大值max;2 设两个变量存放最大值在数组中的行列.3.遍历数组中的每一个 元素,33,8.4 应用举例,程序【exp8_7】:#include“stdio.h”void main()int i,j,row,column,max,a34;max=a00;for(i=0;imax)max=aij;row=i+1;column=j+1;printf(“最大元素是%d,位于第%d行,第%d列n”,max,row,column);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号