第5章数组和字符串.ppt
《第5章数组和字符串.ppt》由会员分享,可在线阅读,更多相关《第5章数组和字符串.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.下标变量在数组中的位置 序号称下标 下标变量的数据类型称为 下标类型(或元素类型),二、数组的概念,返
3、 回,5.2 一维数组,一、一维数组的定义,二、一维数组的存储结构,三、数组元素的引用形式,四、一维数组的初始化,六、一维数组程序设计举例(算法),五、一维数组的输入和输出,数组 由一组具有同一数据类型 的变量有序 集合。,例如: int a10;,数组名,常量表达式,类型说明,一、一维数组的定义,格式 :常量表达式 =;,int a10;,数组名命名规则同标识符 数组名表示了一个存储区的首地址 (即第一个数组元素的地址),int n; cinn; int an; ,常量表达式中不能有变量 常量表达式的值不能是实数,下标从0开始, a0 , a1 a9,没有a10;,常量表达式的值为元素的个数
4、,返 回,二、一维数组的存储结构,a,一个数组的所有元素都是连续存储的,数组元素为: a0,a1,a2a9,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后下一个存储单元 赋值
5、为72, 但这样可能会破坏数组以外其他变量的值。,返 回,四、一维数组的初始化,1. 概念 : 在定义一维数组时对各元素指定初始值称为 数组的初始化。,如: int a5 = 1 , 3 , 5 , 7 , 9 ;,2. 说明 对数组的全体元素指定初值, 初值用 括起来, 数据 之间用逗号分开. 在这种情况下, 可以不指明数组的 长度, 系统会根据 内数据的个数确定数组的长度 。 如 : int a = 1 , 3 , 5 , 7 , 9 ;,(2) 对数组中部分元素指定初值 ( 这时不能省略数组长度 ) 如 : int a5 = 1 , 3 , 5 ; 注:后面的两个元素自动 初始化为0。,
6、(3) 使数组中的全部元素初始值都为 0 如: int a5 = 0 , 0 , 0 , 0 , 0 ;,更简单的写法: int a5= 0 ;,注:double a 为错误,例5.2.1: 输入n个成绩,求平均分;输出高于平均分的成绩,#include void 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 ;,返 回,
7、五、一维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,cinai;,输入整个数组元素:,for (i=0;iai;,输出方法:,输出第i个数组元素:,coutai;,输出整个数组元素:,for (i=0;i10;i+) coutai;,返 回,例5.2.2:用一维数组求Fibonacci 数列(斐波纳契数列),#include void 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 =
8、 0) cout“n“ ; cout“t“ fi; cout“n“; ,六、一维数组程序设计举例,f0 f1 f2 f3 f4 f5 : f19,i=2 f2=f0+f1,i=3 f3=f1+f2,i=4 f4=f2+f3,2,3,5,8,6765,例5.2.3: 输入一个数据,在已知数组中查找是否有该数据,9,a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,#include 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 )
9、cout“find!“ endl; break; if ( i=10 ) cout “no find!“ endl; ,返 回,注:if(x=aibreak;是for循环体语句,后面的语句不是for循环体语句。,5.3 二维数组,一、二维数组的定义,二、二维数组的存储结构,三、二维数组的初始化,四、二维数组元素的引用形式,五、二维数组的输入和输出,六、二维数组程序设计举例,返 回,一、二维数组的定义,格式: =,;,int b23;,b为23(2行3列)的数组,b0 b1,b,-b00 b01 b02,-b10 b11 b12,b0 b1,b00,b01,b02,返回,b10,b11,b12,
10、二、二维数组的存储结构,int b23;,b10,b11,b12,b00,b01,b02,存放顺序:按行存放,先顺序存放第 一行 的元素,再存放第二行的元素。,a10a11a12,a20a21a22,a00a01a02,a00 a01 a02 a10 a11 a12 a20 a21 a22,1010 1014 1018 1022 1026 1030 1034 1038 1042,数组的元素在内存中是连续存放的 int a33 ; 的存放形式如下 :,a0 a1 a2,返回,三、二维数组的初始化,int b23 = 1,2,3,4,5,6;,int b23 = 1,2,3,4,5,6;,int
11、b3 = 1,2,3,4,5,6;,int b5 int 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 2,1 (2) 下标不要超过定义的范围
12、,返回,五、二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),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 ; cout“max=“maxendl; cout“max=a“rowc
13、olendl; ,输出: max=12 max=a12,例5.3.5: 将一个矩阵进行转置(即原来的行变为列),#include void 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
14、 N;,int s234;,int x234= 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语句定义数组类
15、型,1. 一维数组类型的定义语句 (2) typedef char strings80; 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初始化
16、(0为空字符) (3)typedef double DataTypeM+1N+1; DataType dd=0.0;,5.4 使用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
17、),三是按月进行公司产值计算,都具有代表性 P128(2),5.5 数组的应用,5.5.2 统计 书中给出了两个例子,一是统计每个候选人的选票(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所示,编一程序,根据一个人的工资月收入计算出应缴纳的
18、税额和税后所得的金额。,表5-1 个人月收入所得税表,例5-1-1 计算个人所得税,分析:每一级的级距上界(10级上界用1e9来表示,设一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 计算个人所得税,#include co
19、nst int N=11; void main() double aN=0,1600,2100,3600,6600,21600,41600,61600,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; ,例
20、5-1-2(P128(2) 求两矩阵和,已知两个矩阵A和B如下,编一程序计算出它们的和。,例5-1-2(P128(2) 求两矩阵和,#include const int N=3; void 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+) /输出矩阵C for(j=0;jN;j+) coutsetw(5)cij;
21、 coutendl; ,例5-1-3(P128(2)按月进行公司产值计算,例5-1-3 有一家公司,生产五种型号的产品,上半年各月份的产量如表5-2所示,每种型号产品的单价如表5-3所示,编一程序计算出该公司上半年的总产值。,表5-2 产量统计表,表5-3 单价表,例5-1-3(P128(2)按月进行公司产值计算,#include void 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,
22、578,615; int c5=1500,2550,3640,5200,7360; double d6=0; double sum=0;,例5-1-3(P128(2)按月进行公司产值计算,int i,j; cout.precision(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; /输出上半年总 产值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 字符串
链接地址:https://www.31doc.com/p-2499603.html