C++数组及其应用.ppt
《C++数组及其应用.ppt》由会员分享,可在线阅读,更多相关《C++数组及其应用.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数组的概念数组的概念数组的应用数组的应用数组的定义数组的定义授课内容授课内容字符串字符串常见错误常见错误例例: :某班有某班有5050名学生名学生, ,求该班成绩的平均分求该班成绩的平均分 #include void main( ) int j , sum , s ; float ave ; sum=0; for ( j=1; js; sum=sum+s; ave=sum/50.0; cout “ave=”ave;假设现在不仅要求平均分,还要求高于平均分假设现在不仅要求平均分,还要求高于平均分的人数的人数, ,那就不能只使用一个变量那就不能只使用一个变量s s了了, ,而需要而需要5050个
2、变量个变量, ,但这样一来输入、输出、计算都会变得但这样一来输入、输出、计算都会变得繁琐繁琐. . 在这种情况下在这种情况下, ,我们可以使用数组类型我们可以使用数组类型, ,说明一个含有说明一个含有5050个元素的数组个元素的数组, ,每个数组元素存每个数组元素存放一个成绩放一个成绩, ,成绩的输入、输出、计算都可通过成绩的输入、输出、计算都可通过循环来实现循环来实现引入引入#include void main( ) int i , overn=0 , mark50 ; float ave=0; for ( i=0; imark i; ave=ave+marki; ave=ave/50; f
3、or(i=0;i=ave) overn+; cout “平均分:平均分:”ave“ 高于平均高于平均分的人数有:分的人数有:”n;int an;._ 常量表达式中不能有变量常量表达式中不能有变量 常量表达式的值不能是实数常量表达式的值不能是实数_ 下标从下标从0开始开始, a0 , a1 a9,没有,没有a10;_ 常量表达式的值为元素的个数常量表达式的值为元素的个数错误错误一维数组的存储结构一维数组的存储结构a_ 一个数组的所有元素都是连续存储的一个数组的所有元素都是连续存储的_ 数组元素为数组元素为: a0,a1,a2.a9int a10;_ 所占空间为所占空间为: 类型长度类型长度*元素
4、个数元素个数 84 : 66 80 95101010141018 :1046a0a1a2 :a9数组元素的引用形式数组元素的引用形式_ 数组元素的引用数组元素的引用: 数组名数组名下标下标a0 = a2+a4*2240int a10;a0=2;下标下标 说明说明(1) 下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式 如如: a1 , a2*3(2) 数组定义为数组定义为 int a5 , 数组长度为数组长度为5 而下标在而下标在0 - 4之内之内, 即即a0 - a4注意注意: 如果出现如果出现 a5 = 72 ; 编译时不会指出错误编译时不会指出错误, 系统会系统会将将a4后下
5、一个存储单元后下一个存储单元 赋值为赋值为72, 但这样可能会破坏数但这样可能会破坏数组以外其他变量的值。组以外其他变量的值。一维数组的初始化一维数组的初始化概念概念 : 在定义一维数组时对各元素指定初始在定义一维数组时对各元素指定初始 值称为数组的初始化值称为数组的初始化如如: int a5 = 1 , 3 , 5 , 7 , 9 ;2. 说明说明 初值用初值用 括起来括起来, 数据之间用逗号分开数据之间用逗号分开. 对数组的全体元素指定初值,可以不指明数组对数组的全体元素指定初值,可以不指明数组的长度的长度, 系统会根据系统会根据 内数据的个数确定数组内数据的个数确定数组的长度。的长度。
6、如如 : int a = 1 , 3 , 5 , 7 , 9 ;(3) 对数组中部分元素指定初值对数组中部分元素指定初值 ( 这时不能这时不能 省略数组长度省略数组长度 ) 如如 : int a5 = 1 , 3 , 5 ; (4) 使数组中的全部元素初始值都为使数组中的全部元素初始值都为 0 如如: int a5 = 0 , 0 , 0 , 0 , 0 ;更简单的写法:更简单的写法: int a5= 0 ;例例: 输入输入50个成绩个成绩,求平均分求平均分输出高于平均分的个数输出高于平均分的个数#include void main( ) int i , overn=0 , mark50 ;
7、float ave=0; for ( i=0; imark i; ave=ave+marki; ave=ave/50; for(i=0;i=ave) overn+; cout “平均分:平均分:”ave“ 高高于平均分的人数有:于平均分的人数有:”ai;输入整个数组元素输入整个数组元素:for (i=0;iai;输出方法:输出方法:输出第输出第i个数组元素:个数组元素:coutai;输出整个数组元素:输出整个数组元素:for (i=0;i10;i+) coutai;_例例:用一维数组求用一维数组求Fibonacci 数列数列#includevoid main() int i; int f 20
8、 = 1,1; for ( i=2; i20; i+ ) f i = f i-2 +f i-1; for ( i=0; i20; i+) if ( i%5 = 0) coutn; cout“t”f i ; 1 1 0 0 0 0 : 0f0f1f2f3f4f5 :f19i=2f2=f0+f1i=3f3=f1+f2i=4f4=f2+f323586765例例: 输入一个数据,在已知数组中查找是否有该数据输入一个数据,在已知数组中查找是否有该数据 5 8 0 1 9 2 6 3 7 49a0a1a2a3a4a5a6a7a8a9#include void main() int i , x ; int
9、a10= 5, 8, 0, 1, 9, 2, 6, 3, 7, 4 ; cinx; for ( i=0 ; i10 ; i+) if ( x=ai ) cout“find!”endl; break; if ( i=10 ) cout “no find!” endl; #include Void main( ) int f20=1,1, j; for(j=2;j=0; j- -) / 逆序显示逆序显示 coutfj; coutaij;输入整个数组的元素:输入整个数组的元素:for ( i=0; i2; i+ ) for ( j=0; jaij;输出方法:输出方法:输出第输出第i行第行第j列列元素
10、:元素:coutaij;输出整个数组的元素:输出整个数组的元素:for ( i=0; i2; i+) for ( j=0; j3; j+) coutaij;例例: 有一个有一个3*4的矩阵的矩阵, 编程求编程求出其中的最大值及其所在的行出其中的最大值及其所在的行号和列号。号和列号。52093712610418maxrowcol1212#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+ )
11、for ( j=0 ; jmax ) max=aij ; row=i ; col=j ; cout“max=” max; cout“max=a”row col;输出输出:max=12max=a12例例: 将一个矩阵进行转置将一个矩阵进行转置(即原来的行变为列即原来的行变为列)5209371261041840#includevoid 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
12、; i4 ; i+ ) for ( j=0 ; j3 ; j+ ) cout bij ; cout endl; 输入数组输入数组a进行矩阵转置进行矩阵转置输出数组输出数组ba02b20a21b12练习:输出杨辉三角。11 11 2 11 3 3 11 4 6 4 1#include#includevoid main()int i,j,a1010=0; for (i=0;i10;i+) ai0=1; aii=1;for (i=2;i10;i+)for (j=1;ji;j+)aij=ai-1j+ai-1j-1;for (i=0;i10;i+) for (j=0;j10-i;j+) cout ; f
13、or (j=0;j=i;j+) coutsetw(4)aij ; coutendl;课堂练习:课堂练习:1. 数组元素数组元素ai是该数组中的第是该数组中的第个元素个元素.2 . 元素类型为元素类型为int的数组的数组a10共占用共占用字节的存储空字节的存储空间,其中元素间,其中元素a5的字节地址为的字节地址为.3 .元素类型为元素类型为double的数组的数组a46共占用共占用字节的字节的存储空间,其中元素存储空间,其中元素a25的字节地址为的字节地址为.4.元素类型为元素类型为char的数组的数组a1030共占用共占用字节的字节的存储空间,其中元素存储空间,其中元素a34的字节地址为的字节
14、地址为.答案答案: 1. i+1 2. 40 a+20 3. 192 a+136 4. 300 a+94 利用数组进行数值计算利用数组进行数值计算3 数组的应用数组的应用利用数组进行统计利用数组进行统计 数据排序数据排序冒泡法冒泡法选择法选择法查找数据查找数据 顺序查找(不要求数组元素有序排列)顺序查找(不要求数组元素有序排列)二分查找(要求数组元素有序排列)二分查找(要求数组元素有序排列)基本算法举例基本算法举例1.排序排序(1)冒泡法排序冒泡法排序 例:输入例:输入5个数个数,进行由小到大排序进行由小到大排序: 9 8 5 4 2算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的
15、4个数中进行两两比较,找到最大数,以此类推.总是小数往前放,大数往后放,相当于气泡上升,故称之为:冒泡法冒泡法85429542842524比较4次第一轮比较3次第二轮比较2次第三轮比较1次第四轮9854289542859428549285425842548254242452对 个数,则要进行趟扫描,在第 趟扫描中要进行 次比较。可以推知:/*排序排序*/ for (i=0; iN-1; i+) for ( j=0;jaj+1) t =aj; aj=aj+1; aj+1=t;#include#define N 10void main() int i, j, aN, t; for(i=0;iai;
16、 for(i=0;iN;i+)/输出输出 coutai ;/*排序排序*/for (i=0;iN-1;i+) for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t;for(i=0;iN;i+) /输出输出 coutai ;(2)选择法排序选择法排序特点:比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后和()互换排序过程:(1)首先通过9次比较,从10个数中找出最小的, 将它与第1个数交换第一趟选择排序,结果最小的数被安置在第1个元素位置上(2)再通过8次比较,从剩余的9个数中找出次小的数,将它与第2个数交换第二趟选择排序(3)重复上述过程,共经过9趟排序后,排序结束
17、 49 38 65 97 76 13 27 kj第1趟 (i = 0):1349 13 38 65 97 76 49 27 2738 13 27 65 97 76 49 38 13 27 38 97 76 49 65 13 27 38 49 76 97 65 13 27 38 49 65 97 76 13 27 38 49 65 76 97 kkkkjjjjjjjjjj第2趟 (i =1 ):第3趟 (i =2 ):第4趟 (i =3 ):第5趟 (i =4 ):第6趟 (i =5 ):输入10个数给a0 到 a9for i=0 to 8for j =i+1 to 9ajak真假k=j输出a0
18、 到 a9k = iai ak交换i != k真假#include const int N=10;void main( ) int aN , i , j , k , t; for ( i=0 ; iai; for ( i=0 ; iN-1 ; i+) k=i ; for ( j=i+1 ; jN ; j+) if ( ajak ) k=j ; if ( k!=i ) t=ai ; ai=ak ; ak=t ; for ( i=0 ; iN ; i+) coutai;A0 A1 A2 A n-1 A0 A1 A2 A n-1 A0 A i-1 A i . . A n-1 A0 A1 . . A
19、n-2 A n-1 例:在有序数组中插入一个数后使原数组例:在有序数组中插入一个数后使原数组仍然有序。仍然有序。例如:例如: 3 5 7 12 18(m=5),), 将将b=10插入插入步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)给给b让位置让位置(3)将将b放到该位置上放到该位置上(4)数组元素的个数数组元素的个数 m 加加 13571218(2)357121218(3)for(i=0;ib)break;for(j=m-1;j=i;j-) aj+1=aj;ai=b;121810(1)3571218a0a1a2a3a4a5m=m+1;(4)3 5 7 10 12 18 (
20、m=6), 将将b=10删除删除步骤:步骤:(1) 要找到要找到b在数组中的位置在数组中的位置(2) 后面的数组元素依次前移后面的数组元素依次前移,覆盖该位置覆盖该位置 上的数组元素即可实现删除上的数组元素即可实现删除(3) 数组元素的个数数组元素的个数 m 减减 1例:在有序数组中删除一个数例:在有序数组中删除一个数,例如例如:357101218(1)357101218(2)357121218for(i=0;im;i+) if (ai=b)break;101218for(j=i;jc0c1c2 ; for ( i=0 ; i ci ;2. 整个数组的输入输出,即按数组名输入输出整个数组的输入
21、输出,即按数组名输入输出 (仅用于字符数组仅用于字符数组),因数组名本身代表数组的,因数组名本身代表数组的 首地址首地址字符数组的输入和输出字符数组的输入和输出注意注意 : (1) 输入、输出字符串时不包括输入、输出字符串时不包括“ ”(2) cin输入时系统一直读取字符,直到遇到输入时系统一直读取字符,直到遇到“空白空白 符符”为止。为止。例如:输入数据例如:输入数据 hello world C数组中内容为数组中内容为hellocoutc;cinsetw(20)c;补充补充get( )函数函数(包含在包含在“iostream.h”) 如想输入含空格的字符串,如如想输入含空格的字符串,如“he
22、llo worldhello world” 只能使用只能使用get( )get( )函数函数,使用格式如下:,使用格式如下: cin.getcin.get( (字符数组名,字符串长度,规定的结束符字符数组名,字符串长度,规定的结束符) ) 其中,规定的结束符省略时,默认为回车键。其中,规定的结束符省略时,默认为回车键。 如:如: char str20;char str20; cin.getcin.get(str,20)(str,20)字符串处理函数字符串处理函数字符串函数的原型保存在字符串函数的原型保存在中中v 字符串连接函数字符串连接函数: strcat(s1,s2); char *strc
23、at ( char *s1, const char *s2 ); 连接连接s1和和s2两个字符串赋给两个字符串赋给s1,返回,返回s1的值的值v 字符串拷贝函数字符串拷贝函数: strcpy(s1,s2); char *strcpy ( char *s1, const char *s2 ); 将将s2中的字符串赋给中的字符串赋给s1,返回,返回s1的值的值v 字符串比较函数字符串比较函数: strcmp(s1,s2)v 求字符串长度函数:求字符串长度函数:strlen(s) 函数值为整数函数值为整数(返回字符个数返回字符个数)(参数为字符数组名)(参数为字符数组名)5 字符数组程序应用字符数组
24、程序应用v 字符串的长度字符串的长度v 逆序逆序v 字符串函数字符串函数_例:求字符串长度例:求字符串长度扫描数组扫描数组,只要不是只要不是0,计数器就加计数器就加1源程序源程序:#includevoid main() int i; char s50; cins; for (i=0;i50 & si!= 0; i+) ; cout“Lengh of “s“is”i ;ac d0bifor (i=0; i50& si+ != 0 ;) ;ii=0字符串连接函数字符串连接函数/*例:例: STRCAT*/#includevoid main() int i , j; char s140, s220;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 数组 及其 应用
限制150内