《数组和字符串》PPT课件.ppt
《《数组和字符串》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数组和字符串》PPT课件.ppt(127页珍藏版)》请在三一办公上搜索。
1、数组和字符串,第五章,数组的概念;,数组的应用;,数组的定义;,字符串,本章授课内容,常见错误,5.1 数组的概念,数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。,在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了便于处理一批类型相同的数据,引入了数组。,假设现在要求保存每个学生的成绩,那就不能只使用一个变量score了,而需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出
2、、计算都可通过循环来实现。,一、数组的引入,#include void main()int j,sum,score 40;float ave;sum=0;for(j=0;jscore j;sum=sum+score j;ave=sum/40;cout“ave=”ave;,1.数组:由具有相同类型的 固定数量的元素组成的结构。,2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组 元素为下标变量。注:直接前驱和直接后继的概念,3.下标变量在数组中的位置 序号称下标 下标变量的数据类型称为 下标类型(或元素类型),二、数组的概念,返 回,5.2 一维数组,一、一维数组的
3、定义,二、一维数组的存储结构,三、数组元素的引用形式,四、一维数组的初始化,六、一维数组程序设计举例(算法),五、一维数组的输入和输出,数组 由一组具有同一数据类型 的变量有序 集合。,例如:int a10;,数组名,常量表达式,类型说明,一、一维数组的定义,格式:常量表达式=;,int a10;,数组名命名规则同标识符数组名表示了一个存储区的首地址(即第一个数组元素的地址),int n;cinn;int an;.,常量表达式中不能有变量常量表达式的值不能是实数,下标从0开始,a0,a1 a9,没有a10;,常量表达式的值为元素的个数,返 回,二、一维数组的存储结构,a,一个数组的所有元素都是
4、连续存储的,数组元素为:a0,a1,a2.a9,int a10;,所占空间为:类型空间*元素个数,返 回,三、数组元素的引用形式,数组元素的引用:数组名下标 其中,为下标运算符,a0=a2+a4*2,2,4,0,int a10;a0=2;,int a10,b10;,说明(1)下标可以是整型常量或整型表达式 如:a1,a2*3,(2)数组定义为 int a5,数组长度为5 而下标在0-4之内,即a0-a4,注意:如果出现 a5=72;编译时不会指出错误,系统会将a4后下一个存储单元 赋值为72,但这样可能会破坏数组以外其他变量的值。,返 回,四、一维数组的初始化,1.概念:在定义一维数组时对各元
5、素指定初始值称为 数组的初始化。,如:int a5=1,3,5,7,9;,2.说明 对数组的全体元素指定初值,初值用 括起来,数据 之间用逗号分开.在这种情况下,可以不指明数组的 长度,系统会根据 内数据的个数确定数组的长度。如:int a=1,3,5,7,9;,(2)对数组中部分元素指定初值(这时不能省略数组长度)如:int a5=1,3,5;注:后面的两个元素自动初始化为0。,(3)使数组中的全部元素初始值都为 0 如:int a5=0,0,0,0,0;,更简单的写法:int a5=0;,注:double a为错误,例5.2.1:输入n个成绩,求平均分;输出高于平均分的成绩,#includ
6、evoid main()int sc,n,i;float aver=0.0;cinn;for(i=0;isc;aver+=sc;aver/=n;coutaverendl;,int sc50,n,i;,cinsci;aver+=sci;aver/=n;for(i=0;iaver)coutsciendl;,返 回,五、一维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,cinai;,输入整个数组元素:,for(i=0;iai;,输出方法:,输出第i个数组元素:,coutai;,输出整个数组元素:,for(i=0;
7、i10;i+)coutai;,返 回,例5.2.2:用一维数组求Fibonacci 数列(斐波纳契数列),#includevoid main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutn;coutt fi;coutn;,六、一维数组程序设计举例,f0f1f2f3f4f5:f19,i=2f2=f0+f1,i=3f3=f1+f2,i=4f4=f2+f3,2,3,5,8,6765,例5.2.3:输入一个数据,在已知数组中查找是否有该数据,9,a0a1a2a3a4a5a6a7a8a9,#incl
8、ude void main()int i,x;int a10=5,8,0,1,9,2,6,3,7,4;cinx;for(i=0;i10;i+)if(x=ai)coutfind!endl;break;if(i=10)cout no find!endl;,返 回,注:if(x=aibreak;是for循环体语句,后面的语句不是for循环体语句。,5.3 二维数组,一、二维数组的定义,二、二维数组的存储结构,三、二维数组的初始化,四、二维数组元素的引用形式,五、二维数组的输入和输出,六、二维数组程序设计举例,返 回,一、二维数组的定义,格式:=,;,int b23;,b为23(2行3列)的数组,b0
9、b1,b,-b00 b01 b02,-b10 b11 b12,b0b1,b00,b01,b02,返回,b10,b11,b12,二、二维数组的存储结构,int b23;,b10,b11,b12,b00,b01,b02,存放顺序:按行存放,先顺序存放第 一行 的元素,再存放第二行的元素。,a10a11a12,a20a21a22,a00a01a02,a00a01a02a10a11a12a20a21a22,101010141018102210261030103410381042,数组的元素在内存中是连续存放的 int a33;的存放形式如下:,a0a1a2,返回,三、二维数组的初始化,int b23=
10、1,2,3,4,5,6;,int b23=1,2,3,4,5,6;,int b3=1,2,3,4,5,6;,int b5int b;int b=1,2,3,4,5,6;int bnm;,错!,分行赋值,按数组排列的顺序赋值,若全部都赋初值,第一维长度可省略,注意:此方法数据没有明显的界限,当数据较多时容易出错,将数据依次赋给元素 b00,b01 b12,返回,四、二维数组元素的引用形式,数组名下标1下标2,b02=b10+b00-b02;,数组元素可以出现在表达式中,也可以被赋值,引用形式:,int a34;.a34=4;,错!,注意:(1)每个下标都要用 括起来 如 a 2 1 不能写成 a
11、 2,1(2)下标不要超过定义的范围,返回,五、二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),int b23,i,j;,返回,六、二维数组程序设计举例,例5.3.4:有一个3*4的矩阵,编程求出其中的最大值及其所在的行号和列号。,max,row,col,12,1,2,#include void main()int i,j,row=0,col=0,max;int a34=5,2,0,9,3,7,12,6,10,4,1,8;max=a00;for(i=0;imax)max=aij;row=i;col=j;coutmax=maxendl;coutmax=arowc
12、olendl;,输出:max=12max=a12,例5.3.5:将一个矩阵进行转置(即原来的行变为列),#includevoid main()int a34,b43,i,j;for(i=0;iaij;for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;for(i=0;i4;i+)for(j=0;j3;j+)coutbijsetw(3);coutendl;,输入数组a,进行矩阵转置,输出数组b,a02,b20,a21,b12,返回,5.3*三维数组的定义和使用,C+语言可以定义和使用三维及更高维的数组。格式:=,例如:int sP M N;,int s234;,int x23
13、4=1,2,3,4,5,6,7,8,1,3,5,7,0,0,0,0,0,0,0,0,0,0,0,0;,s100=5;,s111=s100*5;,举例:,5.4 使用typedef语句定义数组类型,可以利用typedef语句先定义出数据类型,再据此定义出相应的数组变量。1.一维数组类型的定义语句格式:typedef;举例:(1)typedef int vector10;/定义一个一维数 据类型vector vector v1,v2;/定义vector类型的两个对象 v1,v2,5.4 使用typedef语句定义数组类型,1.一维数组类型的定义语句(2)typedef char strings80
14、;strings s1,s2=define type;(3)typedef short int arrayN;array a=25,36,19,48,44,50;/假定N为 大于等于6的某个常数,5.4 使用typedef语句定义数组类型,2.二维数组类型的定义语句格式:typedef;举例:(1)typedef int matrix55;matrix mx=0;(2)typedef char nameTable10NN;nameTable nt=“”;/或使用等同的0初始化(0为空字符)(3)typedef double DataTypeM+1N+1;DataType dd=0.0;,5.4
15、 使用typedef语句定义数组类型,注:可以是C+语言中预定义的任何一种数据类型或用户已定义的任何一种数据类型。如:typedef vector vectorSet20;/数组共20行10列 vectorSet vs;,5.4 使用typedef语句定义数组类型,3.对已有类型定义别名 举例:typedef int inData;inData x,y;,5.5.1 数值计算 书中给出了三个例子,一个是计算个人所得税(P126(1)),二是进行矩阵求和(P128(2),三是按月进行公司产值计算,都具有代表性 P128(2),5.5 数组的应用,5.5.2 统计 书中给出了两个例子,一是统计每个
16、候选人的选票(P130(1),二是统计每个用电区间的居民户数:P130(1),5.5.3 排序 书中介绍了两种方法:选择排序和插入排序(P132 P133见后),5.5.4 查找 书中介绍了两种方法:顺序查找(不要求数组元素有序排列)P134(1)和二分查找(要求数组元素有序排列)P135(1),5.5.1 数值计算,例5-1-1(P126(1))计算个人所得税 我国目前对个人工资月收入征收所得税的办法如表5-1所示,编一程序,根据一个人的工资月收入计算出应缴纳的税额和税后所得的金额。,表5-1 个人月收入所得税表,例5-1-1 计算个人所得税,分析:每一级的级距上界(10级上界用1e9来表示
17、,设一0级,上界设为0)构成一个数列a;每一级税率组成一个数列b。a=(0,1600,2100,3600,6600,21600,41600,61600,81600,101600,1e9)b=(0,0,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45)假设用x表示一个人的工资月收入,用i表示x所对应的级数,用y表示工资月收入为x应缴纳的税额,则y的计算公式为:,其中,例5-1-1 计算个人所得税,#includeconst int N=11;void main()double aN=0,1600,2100,3600,6600,21600,41600,616
18、00,81600,101600,1e9;double bN=0,0,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45;double x,y;cout输入一个人的工资月收入(单位元):;,例5-1-1 计算个人所得税,cinx;int i,j;for(i=1;i=1;j-)y+=(aj-aj-1)*bj;cout月工资所得税:yendl;cout税后实发金额:x-yendl;,例5-1-2(P128(2)求两矩阵和,已知两个矩阵A和B如下,编一程序计算出它们的和。,例5-1-2(P128(2)求两矩阵和,#includeconst int N=3;void
19、 main()int aNN=7,-5,3,2,8,-6,1,-4,-2;int bNN=3,6,-9,2,-8,3,5,-2,-7;int i,j,cNN;for(i=0;iN;i+)/计算矩阵C for(j=0;jN;j+)cij=aij+bij;,例5-1-2(P128(2)求两矩阵和,for(i=0;iN;i+)/输出矩阵Cfor(j=0;jN;j+)coutsetw(5)cij;coutendl;,例5-1-3(P128(2)按月进行公司产值计算,例5-1-3 有一家公司,生产五种型号的产品,上半年各月份的产量如表5-2所示,每种型号产品的单价如表5-3所示,编一程序计算出该公司上半
20、年的总产值。,表5-2 产量统计表,表5-3 单价表,例5-1-3(P128(2)按月进行公司产值计算,#includevoid main()int b65=438,269,738,624,513,340,420,572,726,612,455,286,615,530,728,385,324,713,594,544,402,382,550,633,654,424,400,625,578,615;int c5=1500,2550,3640,5200,7360;double d6=0;double sum=0;,例5-1-3(P128(2)按月进行公司产值计算,int i,j;cout.preci
21、sion(10);/使输出最多保留10位数字精度,默认为6 位for(i=0;i6;i+)for(j=0;j5;j+)/计算出第i+1月份的产值di+=bij*cj;couti+1月份:di元n;/输出第i+1月份的产值sum+=di;/把第i+1月份的产值累加到sum中coutendl“总产值:”sum“元”endl;/输出上半年总 产值,5.5.2 统计,例5-2-1(P130)假定有一个协会在换届选举中由全体会员无记名投票直选主席,共有5名侯选人,每个人的代号分别用1、2、3、4、5表示,每名会员填写一张选票,若同意某名候选人则在其姓名及代号后打上对号即可,当然每张选票只能有一个对号,否
22、则无效。编一程序根据所有选票统计出每位候选人所得票数,其中每张选票上所写候选人的代号由键盘输入,当输入完所有选票后用-1作为终止数据输入的标志。分析:设一个一维数组a6代表候选人,下标为0不用,下标1,2,3,4,5分别代表候选人15。,例5-2-1(P130),#includevoid main()int i,a6=0;/作为统计而使用的数组,每个元素初始值为0couti;while(i!=-1)if(i=1,例5-2-2(P131),某研究机构对我国职工工资状况进行调查,把工资划分为11个区段,每隔1000为一个区段,即1999为第1区段,10001999为第2区段,10 000及以上为第
23、11区段。编一程序,首先把调查得到的一批职工的工资数据输入到一个数组中,然后分别统计出每个区段内的职工人数及占总职工数的百分比。,例5-2-2(P131),分析:用c11表示11个区段,用aN保存N个职工的工资,N为一个符号常量。先定义aN并输入各元素值,工资小于等于0则结束输入;接着c11初始元素值都为0,依次读取aN中各元素值,对1000整除确定出相应的统计区段,使c数组中相应的元素值增1;最后计算出百分比并输出。,例5-2-2(P131),#includeconst int N=100;/假定N的值为100void main()double aN;int i=0;double x;cou
24、tx;if(x=N)cout数据输入完毕!n;break;ai+=x;,附录(通过程序查看i+及while循环结束后的i),例5-2-2(P131),int c11=0;/初始化c数组中的每个元素值为0int k=i-1;/k的值为a数组中保存的最后一个工资的下标值for(i=0;i=k;i+)if(ai10000)cint(ai)/1000+;else c10+;for(i=0;i10;i+)couti*1000i*1000+999:;coutci,int(ci*1.0/(k+1)*100)%n;cout10000及以上:;coutci,int(c10*1.0/(k+1)*100)%n;,5
25、.5.3 排序,例:输入5个数,进行由小到大排序:9、8、5、4、2。,算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两两比较,找到最大数,以次类推.最后,小数排在开始,相当于浮起,故称之为:冒泡法,1.已知一组数据,按一定的顺序排序(1)冒泡法排序,85429,5428,425,24,比较4次第一轮,比较3次第二轮,比较2次第三轮,比较1次第四轮,98542,89542,85942,85492,8542,5842,5482,542,42,452,对 n 个数,则要进行n-1趟扫描,在第 i(i从1开始)趟扫描中要进行 n-i 次比较。,可以推知:,/*排序*/for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组和字符串 数组 字符串 PPT 课件
链接地址:https://www.31ppt.com/p-5520186.html