C数组及其应用实用.pptx





《C数组及其应用实用.pptx》由会员分享,可在线阅读,更多相关《C数组及其应用实用.pptx(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数组的概念数组的应用数组的定义授课内容字符串常见错误第1页/共89页例例:某班有某班有5050名学生名学生,求该班成绩的平均分求该班成绩的平均分#includevoidmain()intj,sum,s;floatave;sum=0;for(j=1;js;sum=sum+s;ave=sum/50.0;cout“ave=”ave;假设现在不仅要求平均分,还要求高于平均分的假设现在不仅要求平均分,还要求高于平均分的人数人数,那就不能只使用一个变量那就不能只使用一个变量s s了了,而需要而需要5050个个变量变量,但这样一来输入、输出、计算都会变得繁但这样一来输入、输出、计算都会变得繁琐琐.在这种情
2、况下在这种情况下,我们可以使用数组类型我们可以使用数组类型,说明说明一个含有一个含有5050个元素的数组个元素的数组,每个数组元素存放一每个数组元素存放一个成绩个成绩,成绩的输入、输出、计算都可通过循环成绩的输入、输出、计算都可通过循环来实现来实现引入引入第2页/共89页#include void main()int i,overn=0,mark50;float ave=0;for(i=0;imark i;ave=ave+marki;ave=ave/50;for(i=0;i=ave)overn+;cout“平均分:”ave“高于平均分的人数有:”n;intan;._常量表达式中不能有变量常量表
3、达式的值不能是实数_下标从0开始,a0,a1a9,没有a10;_常量表达式的值为元素的个数错误错误第8页/共89页一维数组的存储结构a_ 一个数组的所有元素都是连续存储的_数组元素为数组元素为:a0,a1,a2.a9inta10;_所占空间为所占空间为:类型长度类型长度*元素个数元素个数 84 :66 80 95101010141018:1046a0a1a2:a9数组首地址第9页/共89页数组元素的引用形式_ 数组元素的引用:数组名下标a0=a2+a4*2240inta10;a0=2;下标下标说明(1)下标可以是整型常量或整型表达式如:a1,a2*3(2)数组定义为数组定义为inta5,数组长
4、度为数组长度为5而下标在而下标在0-4之内之内,即即a0-a4注意注意:如果出现如果出现a5=72;编译时不会指出错误编译时不会指出错误,系统会系统会将将a4后下一个存储单元后下一个存储单元赋值为赋值为72,但这样可能会破坏数但这样可能会破坏数组以外其他变量的值。组以外其他变量的值。第10页/共89页一维数组的初始化1.概念概念:在定义一维数组时对各元素指定初始在定义一维数组时对各元素指定初始值称为数组的初始化值称为数组的初始化如如:inta5=1,3,5,7,9;2.说明说明(1)初值用初值用括起来括起来,数据之间用逗号分开数据之间用逗号分开.(2)对数组的全体元素指定初值,可以不指明数组对
5、数组的全体元素指定初值,可以不指明数组的长度的长度,系统会根据系统会根据内数据的个数确定数组内数据的个数确定数组的长度。的长度。如如:inta=1,3,5,7,9;第11页/共89页(3)对数组中部分元素指定初值对数组中部分元素指定初值(这时不能这时不能省略数组长度省略数组长度)如如:inta5=1,3,5;(4)使数组中的全部元素初始值都为使数组中的全部元素初始值都为0如如:inta5=0,0,0,0,0;更简单的写法:更简单的写法:inta5=0;第12页/共89页例例:输入输入50个成绩个成绩,求平均分求平均分 输出高于平均分的个数#include void main()int i,ov
6、ern=0,mark50;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;第14页/共89页_例:用一维数组求Fibonacci 数列#includevoid main()int i;int f 20 =1,1;for(i=2;i20
7、;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第15页/共89页例例:输入一个数据,在已知数组中查找是否有该数据输入一个数据,在已知数组中查找是否有该数据 5 8 0 1 9 2 6 3 7 49a0a1a2a3a4a5a6a7a8a9#includevoidmain()inti,x;inta10=5,8,0,1,9,2,6,3,7,4;cinx;for(i=0;i10;i+
8、)if(x=ai)cout“find!”endl;break;if(i=10)cout“nofind!”endl;第16页/共89页#includeVoidmain()intf20=1,1,j;for(j=2;j=0;j-)/逆序显示coutfj;coutaij;输入整个数组的元素:输入整个数组的元素:for(i=0;i2;i+)for(j=0;jaij;输出方法:输出方法:输出第输出第i行第行第j列列元素:元素:coutaij;输出整个数组的元素:输出整个数组的元素:for(i=0;i2;i+)for(j=0;j3;j+)coutaij;第25页/共89页例例:有一个有一个3*4的矩阵的矩阵
9、,编程求编程求出其中的最大值及其所在的行出其中的最大值及其所在的行号和列号。号和列号。第26页/共89页52093712610418maxrowcol1212#includevoidmain()inti,j,row=0,col=0,max;inta34=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”rowcol;输出输出:max=12max=a12第27页/共89页例例:将一个矩阵进行转置将一个矩阵进行转置(即原来的行变为列即原来
10、的行变为列)5209371261041840#includevoidmain()inta34,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+)coutbij;coutendl;输入数组a进行矩阵转置输出数组ba02b20a21b12第28页/共89页练习:输出杨辉三角。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;a
11、ii=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 ;for(j=0;j=i;j+)coutsetw(4)aij ;coutendl;第29页/共89页课堂练习:1.数组元素ai是该数组中的第个元素.2.元素类型为int的数组a10共占用字节的存储空间,其中元素a5的字节地址为.3.元素类型为double的数组a46共占用字节的存储空间,其中元素a25的字节地址为.4.元素类型为char的数组a1030共占用字节的存储空间,其中元素a34的字节地址为.答案:1.i+1
12、2.40 a+20 3.192 a+136 4.300 a+94 第30页/共89页利用数组进行数值计算3数组的应用利用数组进行统计利用数组进行统计数据排序数据排序冒泡法冒泡法选择法选择法查找数据查找数据 顺序查找(不要求数组元素有序排列)顺序查找(不要求数组元素有序排列)二分查找(要求数组元素有序排列)二分查找(要求数组元素有序排列)第31页/共89页基本算法举例基本算法举例1.排序(1)冒泡法排序例:输入5个数,进行由小到大排序:98542算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两两比较,找到最大数,以此类推.总是小数往前放,大数往后放,相当于气泡上升,故称
13、之为:冒泡法冒泡法第32页/共89页85429542842524比较4次第一轮比较3次第二轮比较2次第三轮比较1次第四轮9854289542859428549285425842548254242452对n个数,则要进行n-1趟扫描,在第i趟扫描中要进行n-i次比较。可以推知:第33页/共89页/*排序*/for(i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;第34页/共89页#include#defineN10voidmain()inti,j,aN,t;for(i=0;iai;for(i=0;iN;i+)/输出输出coutai;/*排序*/for(
14、i=0;iN-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)/输出coutai;第35页/共89页(2)选择法排序选择法排序特点:比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后和()互换排序过程:(1)首先通过9次比较,从10个数中找出最小的,将它与第1个数交换第一趟选择排序,结果最小的数被安置在第1个元素位置上(2)再通过8次比较,从剩余的9个数中找出次小的数,将它与第2个数交换第二趟选择排序(3)重复上述过程,共经过9趟排序后,排序结束第36页/共89页49386597761327kj第1趟(i=0):134913386
15、59776492727381327659776493813273897764965132738497697651327384965977613273849657697kkkkjjjjjjjjjj第2趟(i=1):第3趟(i=2):第4趟(i=3):第5趟(i=4):第6趟(i=5):第37页/共89页输入10个数给a0到a9fori=0to8forj=i+1to9ajak真假k=j输出a0到a9k=iaiak交换i!=k真假第38页/共89页#includeconstintN=10;voidmain()intaN,i,j,k,t;for(i=0;iai;for(i=0;iN-1;i+)k=i;
16、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;A0A1A2An-1A0A1A2An-1A0Ai-1Ai.An-1A0A1.An-2An-1第39页/共89页例:在有序数组中插入一个数后使原数组例:在有序数组中插入一个数后使原数组仍然有序。仍然有序。例如:例如:3571218(m=5),),将将b=10插入插入步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)给给b让位置让位置(3)将将b放到该位置上放到该位置上(4)数组元素的个数数组元素的个数m加加1第40页/共89页b=10b
17、=103571218(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)第41页/共89页357101218(m=6),将将b=10删除删除步骤:步骤:(1)要找到要找到b在数组中的位置在数组中的位置(2)后面的数组元素依次前移后面的数组元素依次前移,覆盖该位置覆盖该位置上的数组元素即可实现删除上的数组元素即可实现删除(3)数组元素的个数数组元素的个数m减减1例:在有序数组中删除一个数,例如:第42页/共89页357101218(1)35710121
18、8(2)357121218for(i=0;im;i+)if(ai=b)break;101218for(j=i;jc0c1c2;for(i=0;ici;2.整个数组的输入输出,即按数组名输入输出整个数组的输入输出,即按数组名输入输出(仅用于字符数组仅用于字符数组),因数组名本身代表数组的,因数组名本身代表数组的首地址首地址字符数组的输入和输出字符数组的输入和输出第50页/共89页注意注意:(1)输入、输出字符串时不包括输入、输出字符串时不包括“”(2)cin输入时系统一直读取字符,直到遇到输入时系统一直读取字符,直到遇到“空白空白符符”为止。为止。例如:输入数据例如:输入数据helloworld
19、C数组中内容为数组中内容为hellocoutc;cinsetw(20)c;第51页/共89页补充get()函数(包含在“iostream.h”)如想输入含空格的字符串,如“hello worldhello world”只能使用get()get()函数,使用格式如下:cin.getcin.get(字符数组名,字符串长度,规定的结束符)其中,规定的结束符省略时,默认为回车键。如:char str20;char str20;cin.getcin.get(str,20)(str,20)第52页/共89页字符串处理函数字符串函数的原型保存在中v 字符串连接函数:strcat(s1,s2);char*st
20、rcat(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)函数值为整数(返回字符个数)(参数为字符数组名)(参数为字符数组名)第53页/共89页5 字符数组程序应用字符数组程序应用v字符串的长度字符串的长度v逆序v字符串函数第54页/共89页_例:求字符串长度例:求字符串长度扫描数组扫描数组,只要不是只要不是0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 及其 应用 实用

限制150内