版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上一页上一页下一页下一页chap5 数组的概念;数组的概念;数组的应用;数组的应用;数组的定义;数组的定义; 字符串字符串本章授课内容本章授课内容 常见错误常见错误上一页上一页下一页下一页chap55-1 数组数组的概念的概念 数组是一组有序数据的集合;数组中数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确用一个统一的数组名和下标来唯一的确定数组中的元素。定数组中的元素。 在科学计算和数据处理中,要用到成批数据,这些在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了数据
2、类型相同,且彼此间存在一定的顺序关系,为了便于处理一批类型相同的数据便于处理一批类型相同的数据,引入了数组类。引入了数组类。一维数组一维数组a0a1a2a3a4a5数列数列583296上一页上一页下一页下一页chap5例例5.1.1:5.1.1:某班有某班有4040名学生名学生, ,求该班成绩的平均分求该班成绩的平均分 #include void main( ) int j , sum , s ; float ave ; sum=0; for(j=1; js; sum=sum+s; ave=sum/40; cout “ave=”ave;假设现在要求保存每个学生的成绩假设现在要求保存每个学生的成
3、绩, ,那就不能只使用一个变量那就不能只使用一个变量scorescore了了, ,而需要而需要4040个变量个变量, ,但这样一来输入、但这样一来输入、输出、计算都会变得繁琐输出、计算都会变得繁琐. . 在这种在这种情况下情况下, ,我们可以使用数组类型我们可以使用数组类型, ,说说明一个含有明一个含有4040个元素的数组个元素的数组, ,每个每个数组元素存放一个成绩数组元素存放一个成绩, ,对数组中对数组中元素的访问可通过数组名加下标的元素的访问可通过数组名加下标的形式实现。这样,成绩的输入、输形式实现。这样,成绩的输入、输出、计算都可通过循环来实现出、计算都可通过循环来实现一、数组的引入一
4、、数组的引入上一页上一页下一页下一页chap5#include void main( ) int j , sum , s40 ; float ave ; sum=0; for(j=0; jsj; sum=sum+sj; ave=sum/40; cout “ave=”n;int an;._ 常量表达式中不能有变量常量表达式中不能有变量常量表达式的值不能是实数常量表达式的值不能是实数_ 下标从下标从0开始开始, a0 , a1 a9,没有,没有a10;_ 常量表达式的值为元素的个数常量表达式的值为元素的个数错误错误上一页上一页下一页下一页chap5二、一维数组的存储结构二、一维数组的存储结构a_
5、一个数组的所有元素都是连续存储的一个数组的所有元素都是连续存储的_ 数组元素为数组元素为: a0,a1,a2.a9int a10;_ 所占空间为所占空间为: 类型空间类型空间*元素个数元素个数 84 : 66 80 95101010141018 :1036a0a1a2 :a9上一页上一页下一页下一页chap5三、数组元素的引用形式三、数组元素的引用形式_ 数组元素的引用(访问)数组元素的引用(访问): 数组名数组名下标下标a0 = a2+a4*2240int a10;a0=2;int a10,b10;下标下标 说明说明(1) 下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式 如如:
6、 a1 , a2*3(2) 数组定义为数组定义为 int a5 , 数组长度为数组长度为5 而下标在而下标在0 - 4之内之内, 即即a0 - a4注意注意: 如果出现如果出现 a5 = 72 ; 编译时不会指出错误编译时不会指出错误, 系统会系统会将将a4后下一个存储单元后下一个存储单元 赋值为赋值为72, 但这样可能会破坏数但这样可能会破坏数组以外其他变量的值组以外其他变量的值上一页上一页下一页下一页chap5四、一维数组的初始化四、一维数组的初始化1. 概念概念 : 在定义一维数组时对各元素指定初始值称为在定义一维数组时对各元素指定初始值称为 数组的初始化数组的初始化如如: int a5
7、 = 1 , 3 , 5 , 7 , 9 ;2. 说明说明 对数组的全体元素指定初值对数组的全体元素指定初值, 初值用初值用 括起来括起来, 数据数据 之间用逗号分开之间用逗号分开. 在这种情况下在这种情况下, 可以不指明数组的可以不指明数组的 长度长度, 系统会根据系统会根据 内数据的个数确定数组的长度内数据的个数确定数组的长度 (1) 如如 : int a = 1 , 3 , 5 , 7 , 9 ;(2) 对数组中部分元素指定初值对数组中部分元素指定初值 ( 这时不能省略数组长度这时不能省略数组长度 ) 如如 : int a5 = 1 , 3 , 5 ; (3) 使数组中的全部元素初始值都
8、为使数组中的全部元素初始值都为 0 如如: int a5 = 0 , 0 , 0 , 0 , 0 ;更简单的写法更简单的写法: int a5= 0 ;上一页上一页下一页下一页chap5例例5.2.1: 输入输入n个成绩个成绩,求平均分求平均分,输出高于平均分的成绩输出高于平均分的成绩#includevoid main()int sc,n,i;float aver=0.0;cinn;for(i=0;isc; aver+=sc;aver/=n;coutsci;aver+=sci;aver/=n;for(i=0 ; iaver)coutn;if (n50) cout“重新输入重新输入”;else b
9、reak;问题:问题:nai;输入整个数组元素输入整个数组元素:for (i=0;iai;输出方法:输出方法:输出第i个数组元素:coutai;输出整个数组元素:输出整个数组元素:for (i=0;i10;i+)coutai;上一页上一页下一页下一页chap5_例例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) cout“n”;cout“t”fi; 六、一维数组程序设计举例六、一维数组程序设计
10、举例f0f1f2f3f4f5 :f19i=2f2=f0+f1i=3f3=f1+f2i=4f4=f2+f3235867651,1,2,3,5,8,.上一页上一页下一页下一页chap5例例5.2.3: 输入一个数据,在已知数组中查找是否有该数据输入一个数据,在已知数组中查找是否有该数据9a0a1a2a3a4a5a6a7a8a9#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 ) cout“find!”endl; break; i
11、f ( i=10 ) cout “no find!” aij;输入整个数组元素:输入整个数组元素:for (i=0;i2;i+)for(j=0;jaij;输出方法:输出方法:输出第输出第i行第行第j列列元素:元素:coutaij;输出整个数组元素:输出整个数组元素:for (i=0;i2;i+)for(j=0;j3;j+)coutaij;上一页上一页下一页下一页chap5六、二维数组程序设计举例六、二维数组程序设计举例例例5.2.4: 有一个有一个3*4的矩阵的矩阵, 编编程求出其中的最大值及其所在程求出其中的最大值及其所在的行号和列号。的行号和列号。上一页上一页下一页下一页chap5maxr
12、owcol1212#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 ; i3 ; i+ ) for ( j=0 ; jmax ) max=aij ; row=i ; col=j ; cout“max=” max; cout “max=a”row col;输出输出:max=12max=a12上一页上一页下一页下一页chap5例例5.2.5: 将一个矩阵进行转置将一个矩阵进行转置(即原来的行变为列即原来的行变为列)#includevo
13、id main( ) int a34, b43 , i , j ; for ( i=0 ; i3 ; i+ ) for ( j=0 ; jaij ; for ( i=0 ; i3 ; i+ ) for (j=0 ; j4 ; j+) bji=aij; for ( i=0 ; i4 ; i+ ) for ( j=0 ; j3 ; j+ ) cout bij ; cout endl; 输入数组输入数组a进行矩阵转置进行矩阵转置输出数组输出数组ba02b20a21b12上一页上一页下一页下一页chap5 第一方面:利用数组进行数值计算第一方面:利用数组进行数值计算: : 书中给出了三个例子,一个是计
14、算个人所得税,二是进行矩阵求和,三是按月进行公司产值计算,都具有代表性 P1265-5 数组的应用数组的应用 第二方面:利用数组进行统计第二方面:利用数组进行统计: : 书中给出了两个例子,一是统计每个候选人的选票,二是统计职工工资状况:P130 第三方面:数据排序:第三方面:数据排序: 书中介绍了两种方法:选择排序和插入排序(见后) 第四方面:查找数据:第四方面:查找数据: 书中介绍了两种方法:顺序查找(不要求数组元素有序排列)和二分查找(要求数组元素有序排列)P134上一页上一页下一页下一页chap5_基本算法举例基本算法举例1.排序排序(1)冒泡法排序冒泡法排序例例5.5.1:输入:输入
15、5个数个数,进行由小到大排序进行由小到大排序: 9 8 5 4 2算法:两两比较算法:两两比较,大数向后移大数向后移,找到最大数放找到最大数放在最后在最后,再在剩余的的再在剩余的的4个数中进行两两比较个数中进行两两比较,找到最大数找到最大数,以次类推以次类推.最后最后,小数排在开始小数排在开始,相当于浮起相当于浮起,故称之为故称之为:冒泡法冒泡法上一页上一页下一页下一页chap585429542842524比较4次第一轮比较3次第二轮比较2次第三轮比较1次第四轮9854289542859428549285425842548254242452对 个数,则要进行趟扫描,在第 趟扫描中要进行 次比较
16、。可以推知:上一页上一页下一页下一页chap5/*排序排序*/for (i=0; iN-1; i+)for ( j=0;jaj+1) t =aj; aj=aj+1; aj+1=t;输入数组输出数组for i=0 to n-1for j =0 to n-i-1aj aj+1真假aj aj+1上一页上一页下一页下一页chap5#include#define N 10void main()int i,j,aN,t;for(i=0;iai;for(i=0;iN;i+)/*输出输出*/coutai;/*排序排序*/for (i=0;iN-1;i+)for(j=0;jaj+1) t=aj; aj=aj+1
17、; aj+1=t;for(i=0;iN;i+) /*输出输出*/coutai;源程序源程序: 例例5.5.1 上一页上一页下一页下一页chap5(2)选择法排序选择法排序特点:比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后和()互换首先,比较的元素不同,以降序为例,是当前元素与上次比较後的最大元素进行比较,因此,在进行比较之前,要有一个初始化最大元素的过程其次,确定完毕的元素的互换是在每一轮完成后进行的,而不是在比较後进行的再次,互换元素的不同,为(i)和(iMax):举例原始数据: 3,5,7,9,4 要求:降序上一页上一页下一页下一页chap5第一轮比较,初始化设最大元素下标为第
18、一轮比较,初始化设最大元素下标为 k03579k=0 3579 k=13579 k=23579k=3k=3S(i) 与与 S(k)交换交换的结果的结果:9573上一页上一页下一页下一页chap5/*设置变量设置变量k用以存储当前最大数的下标用以存储当前最大数的下标*/#include void main( ) int a6 , i , j , k , t; for ( i=0 ; iai; for ( i=0 ; i5 ; i+) k=i ; for ( j=i+1 ; j6 ; j+) if ( akaj ) k=j ; if ( k!=i ) t=ai ; ai=ak ; ak=t ; f
19、or ( i=0 ; i6 ; i+) coutai;源程序源程序:例例5.5.2上一页上一页下一页下一页chap52.在有序数组中插入一个数后使原数组在有序数组中插入一个数后使原数组仍然有序仍然有序例如:例如:3 5 7 12 18, 将将b=10插入插入步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)给给b让位置让位置(3)将将b放到该位置上放到该位置上上一页上一页下一页下一页chap53571218(2)357121218(3)for(i=0;ib)break;for(j=4;j=i;j-) aj+1=aj;ai=b;121810(1)3571218a0a1a2a3a4
20、a5程序见例4.3.3上一页上一页下一页下一页chap53 5 7 10 12 18, 将将b=10删除删除步骤:步骤:(1) 要找到要找到b在数组中的位置在数组中的位置(2) 后面的数组元素依次前移后面的数组元素依次前移,覆盖该位置覆盖该位置上的数组元素即可实现删除上的数组元素即可实现删除3.在有序数组中删除一个数在有序数组中删除一个数,例如例如:上一页上一页下一页下一页chap5357101218(1)357101218(2)357121218for(i=0;i6;i+)if(ai=b)break;101218for(j=i;jc0c1c2 ; for ( i=0 ; i ci ;2. 整
21、个数组的输入输出整个数组的输入输出,即按数组名输入即按数组名输入输出输出 (仅用于字符数组仅用于字符数组),因数组名本身,因数组名本身代表数组的首地址代表数组的首地址注意注意 : (1) 输入、输出字符串时不包括输入、输出字符串时不包括“ ” (2) cin输入时系统一直读取字符输入时系统一直读取字符,直到遇直到遇“空格空格”和和“回车符回车符(n)”为止。例如:输入数据为止。例如:输入数据 hello world C数组中内容为数组中内容为hellochar c20;cinc; coutc;三、字符数组的输入和输出三、字符数组的输入和输出上一页上一页下一页下一页chap5v 字符串连接函数字
22、符串连接函数: strcat(s1,s2); 连接连接s1和和s2两个字符串赋给两个字符串赋给s1, 并为函数的返回值并为函数的返回值v 字符串拷贝函数字符串拷贝函数: strcpy(s1,s2); 将将s2中的字符串赋给中的字符串赋给s1v 字符串比较函数字符串比较函数: strcmp(s1,s2)v 求字符串长度函数:求字符串长度函数:strlen(s) 函数值为整数函数值为整数(返回字符个数,不包括结束字符返回字符个数,不包括结束字符)注:参数为字符数组名注:参数为字符数组名上一页上一页下一页下一页chap5#include #include void main()char st130,
23、st240,st370;int l1,l2,l3,a,b,c;cinst1st2; /*INPUT*/l1=strlen(st1); /*strlen*/l2=strlen(st2);cout“l1=“l1“t”“l2=“l2“n”;a=strcmp(st1,st2);/*strcmp*/couta0)coutst1”st2“n”;else if (a=0) coutst1“=“st2;else coutst1“st2“n”;strcat(st1,st2); /*strcat*/coutst1;cout(strcat(st1,st2);strcpy(st3,st2); /*strcpy*/co
24、utst3;例例5.6.1:字符串函数的使用:字符串函数的使用上一页上一页下一页下一页chap5五、字符数组程序应用五、字符数组程序应用v 字符串的长度字符串的长度v 逆序逆序v 字符串函数字符串函数上一页上一页下一页下一页chap5例例5.6.2:求字符串长度:求字符串长度扫描数组扫描数组,只要不是只要不是0,计数器就加计数器就加1源程序源程序:#includevoid main()int i;char s50;cins;for (i=0;i50& si!= 0; i+) ;cout“Lengh of “s“is”i endl;ac d0bifor (i=0; i50& si
25、+ != 0 ;) ;ii=0#includecoutstrlen(s)endl;上一页上一页下一页下一页chap5#include#includevoid main() int i, j=0; char c10,t; cinc; int l=strlen(c); for(i=0, j=l-1;ij;i+, j-)t=ci;ci=cj;cj=t; couts;for( i=0 ; i10&si!=0 ; i+) ;cout“strlen=“i;for ( j=0 ; ji/2; j+) t=sj ; sj=si-1-j ; si-1-j=t; couts;源程序源程序2:输入输入: a
26、bcd输出输出: dcba上一页上一页下一页下一页chap5/*例例5.6.4: STRCAT函数函数*/#includevoid main() int i , j; char s140,s250; cins1s2; for( i=0; i40&s1i!=0;i+) ; for( j=0;j50&s2j!=0;j+)s1i+=s2 j; s1i=0;/*s1i=s2j;*/couts1;s1s2acd0beg0facdebfg0s1上一页上一页下一页下一页chap5/*例例5.6.5: STRCPY*/#include void main() char p180,p280; i
27、nt i; cinp2; for (i=0;p2i!=0;i+) p1i=p2i; p1i=0; cout“p1=“p1“np2=“p2“n”;上一页上一页下一页下一页chap5#include void main()char p180,p280;int i;cinp1p2;for( i=0;p2i!=0& p1i!=0;i+)if (p1i!=p2i) break;if (p1ip2i)coutp1”p2“n;else if (p1ip2i)coutp1“p2“n”;elsecoutp1“=“p2“n”;/*例例5.6.6:STRCMP*/上一页上一页下一页下一页chap5例例5.6
28、.7:输入:输入10个同学的姓名,按升序排序个同学的姓名,按升序排序 (二维字符数组的应用二维字符数组的应用)#include#include#include #include void main()void main() char s1016,t16;char s1016,t16;int i,j,n=10;int i,j,n=10;for(i=0;in;i+)for(i=0;isi;cinsi;for(i=0;in;i+)for(i=0;in;i+)coutsi;coutsi;coutn;coutn;for (i=0;in-1;i+)for (i=0;in-1;i+) for (j=0;jn
29、-i-1;j+) for (j=0;j0)if (strcmp(sj,sj+1)0)strcpy(t,sj);strcpy(t,sj); strcpy(sj,sj+1); strcpy(sj,sj+1); strcpy(sj+1,t); strcpy(sj+1,t); for (i=0;in;i+)for (i=0;in;i+) coutsi; coutsi; 上一页上一页下一页下一页chap5 例例 5.6.8(综合举例)(综合举例) 某班有50个学生,期终考试8门课程。求每个学生总成绩、平均成绩,并按总成绩高分到低分输出。 char st5112;/ 采用外部数组实现数据传递 float
30、cj519; float tacj513; #includevoid main( )void input( );/调用函数申明void count( ); void sort( ); void output( ); input( ); /调用输入函数count( );/调用计算函数sort( );/调用排序函数output( );/调用输出函数 上一页上一页下一页下一页chap5void input( ); /*输入函数输入函数*/int i, j; for(i=1; i=50; i+)cout请输入第请输入第isti; for(j=1; jcjij; void count( ); /*计算函
31、数计算函数*/int i, j; for(i=1; i=50; i+) 上一页上一页下一页下一页chap5tacji1=0; for(j=1; j=8; j+) tacji1+=cjij; tacji2=tacji1/8; void sort( )/*排序函数排序函数*/int i , flag; char ts12; float tc; doflag=0; for(i=1; itacji1) strcpy(ts, sti);); strcpy(stI, sti+1);); 上一页上一页下一页下一页chap5 strcpy(sti+1, st);); /*交换姓名交换姓名*/ for(j=1; j=8; j+)/*交换交换8门课程成绩门课程成绩*/ t=cjij; cjij=cji+1j; cji+1 j=t; t=tacji1; tacji1=tacji+11; tacj i+11=t; /*交换总成绩交换总成绩*/ t=tacji2; tacji2=tacji+12; tacj i+12=t; /*交换平均成绩交换平均成绩*/ flag=1; while(flag=1);); 上一页上一页下一页下一页chap5void output( )/*输出函数输出函数*/int i; cout50个学生成绩处理结果如下:个学生成绩处理结果如下: n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通设施养护维修制度
- 2026湖北省定向西北工业大学选调生招录参考题库附答案
- 2026湖南财政经济学院招聘劳务派遣性质工作人员参考题库附答案
- 2026福建泉州市面向北京科技大学选优生选拔引进参考题库附答案
- 2026福建省面向华中师范大学选调生选拔工作考试备考题库附答案
- 2026福建福州第十九中学招聘编外行政人员(劳务派遣)1人考试备考题库附答案
- 2026西藏林芝市察隅县农村公益电影放映人员招聘1人备考题库附答案
- 2026辽宁大连产业园社招招聘备考题库附答案
- 2026陕西省面向南开大学招录选调生备考题库附答案
- 2026鲁南技师学院第一批招聘教师8人参考题库附答案
- ktv客遗物管理制度
- 制造业公司奖惩管理制度
- 养老院公司年会策划方案
- 司机入职心理测试题及答案
- 退休支部换届工作报告
- T/CMES 37002-2022景区玻璃类游乐和观景设施建造单位能力条件要求
- T/CATCM 029-2024中药材产地加工(趁鲜切制)生产技术规范
- 2025至2030中国氯虫苯甲酰胺行业应用状况及未来前景展望报告
- 网络游戏代练团队服务合作协议
- 活牛转让协议书
- 高血压病人的手术中护理
评论
0/150
提交评论