C数组和字符串.ppt
- 文档编号:1368561
- 上传时间:2022-10-21
- 格式:PPT
- 页数:77
- 大小:2.10MB
C数组和字符串.ppt
《C数组和字符串.ppt》由会员分享,可在线阅读,更多相关《C数组和字符串.ppt(77页珍藏版)》请在冰豆网上搜索。
数组和字符串,第四章,【教学目的与要求】理解数组的定义和使用,掌握数组的常用操作和字符串的处理。
【教学重点与难点】数组的应用,字符串的处理方法。
【教学方法】讲授与上机相结合。
数组的概念;,数组的应用;,数组的定义;,字符串,本章授课内容,常见错误,4-1数组的概念,数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。
用一个统一的数组名和下标来唯一的确定数组中的元素。
在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了便于处理,引入了数组类型。
假设现在要求保存每个学生的成绩,那就不能只使用一个变量score了,而需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现,一、数组的引入,#includevoidmain()intj,sum,s80;floatave;sum=0;for(j=0;jsj;sum=sum+sj;ave=sum/80.0;cout“ave=”ave;,1.数组:
由具有相同类型的固定数量的元素组成的结构,2.数组元素:
每一个数组元素都是一个变量,为了与一般的变量相区别,我们称数组元素为下标变量,3.下标变量在数组中的位置序号称下标下标变量的数据类型称为下标类型(或元素类型),二、数组的概念,返回,4-2-1一维数组,一、一维数组的定义,二、一维数组的存储结构,三、数组元素的引用形式,四、一维数组的初始化,六、一维数组程序设计举例(算法),五、一维数组的输入和输出,下一节,数组:
是一组具有相同数据类型的变量的有序集合。
例如:
inta10;,数组名,常量表达式,类型说明,一、一维数组的定义,格式:
类型标识符数组名常量表达式;,inta10;,数组名:
用户定义的标识符数组名表示了一个存储区的首地址(即第一个数组元素的地址),intn;cinn;intan;.,常量表达式中不能有变量常量表达式的值不能是实数,下标从0开始,a0,a1a9,没有a10;,常量表达式的值为元素的个数,返回,二、一维数组的存储结构,a,一个数组的所有元素都是连续存储的,数组元素为:
a0,a1,a2.a9,inta10;,所占空间为:
类型长度*元素个数,返回,数组首地址,三、数组元素的引用形式,数组元素的引用:
数组名下标,a0=a2+a4*2,2,4,0,inta10;a0=2;,说明
(1)下标可以是整型常量或整型表达式如:
a1,a2*3,
(2)数组定义为inta5,数组长度为5而下标在0-4之内,即a0-a4,注意:
如果出现a5=72;编译时不会指出错误,系统会将a4后下一个存储单元赋值为72,但这样可能会破坏数组以外其他变量的值。
返回,四、一维数组的初始化,概念:
在定义一维数组时对各元素指定初始值称为数组的初始化,如:
inta5=1,3,5,7,9;,2.说明初值用括起来,数据之间用逗号分开.对数组的全体元素指定初值,可以不指明数组的长度,系统会根据内数据的个数确定数组的长度。
如:
inta=1,3,5,7,9;,(3)对数组中部分元素指定初值(这时不能省略数组长度)如:
inta5=1,3,5;,(4)使数组中的全部元素初始值都为0如:
inta5=0,0,0,0,0;,更简单的写法:
inta5=0;,例4.2.1:
输入n个成绩,求平均分,#includevoidmain()ints,n,i;floataver=0.0;cinn;for(i=0;is;aver+=s;aver/=n;coutaver;,ints80,n,i;,cinsi;aver+=si;aver/=n;for(i=0;iaver)coutsi);,返回,输出高于平均分的成绩,五、一维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),输入方法:
定义:
inta10,i;,输入第i个数组元素:
cinai;,输入整个数组元素:
for(i=0;iai;,输出方法:
输出第i个数组元素:
coutai;,输出整个数组元素:
for(i=0;i10;i+)coutai;,返回,例4.2.2:
用一维数组求Fibonacci数列,#includevoidmain()inti;intf20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutn;cout“t”fi;,六、一维数组程序设计举例,f0f1f2f3f4f5:
f19,i=2f2=f0+f1,i=3f3=f1+f2,i=4f4=f2+f3,2,3,5,8,6765,例4.2.3:
输入一个数据,在已知数组中查找是否有该数据,9,a0a1a2a3a4a5a6a7a8a9,#includevoidmain()inti,x;inta10=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“nofind!
”endl;,课堂练习:
有一个数列,它的第一项为0,第二项为1,以后每一项都是它的前两项之和,试生成此数列的前20项,并按逆序显示出来.,练习答案:
#includeVoidmain()intf20=0,1,j;for(j=2;j=0;j-)/逆序显示coutfj;coutendl;,返回,4-2-2二维数组,一、二维数组的定义,二、二维数组的存储结构,三、二维数组的初始化,四、二维数组元素的引用形式,五、二维数组的输入和输出,六、二维数组程序设计举例,返回,一、二维数组的定义,格式:
类型标识符数组名常量表达式常量表达式,intb23;,b为23(2行3列)的数组,b0b1,b,-b00b01b02,-b10b11b12,b0b1,b00,b01,b02,返回,二、二维数组的存储结构,intb23;,b10,b11,b12,b00,b01,b02,存放顺序:
按行存放,先顺序存放第一行的元素,再存放第二行的元素,b0、b1可以作为数组名,a10a11a12,a20a21a22,a00a01a02,a00a01a02a10a11a12a20a21a22,101010141018102210261030103410381042,数组的元素在内存中是连续存放的inta33;的存放形式如下:
a0a1a2,C+将二维数组看作一维数组,其每个数组元素又是一个一维数组,返回,三、二维数组的初始化,intb23=1,2,3,4,5,6;,intb23=1,2,3,4,5,6;,分行赋值,按数组排列的顺序赋值,注意:
此方法数据没有明显的界限,当数据较多时容易出错,将数据依次赋给元素b00,b01b12,返回,intb3=1,2,3,4,5,6;,intb;intb=1,2,3,4,5,6;intbnm;,错!
若全部都赋初值,第一维长度可省略,返回,四、二维数组元素的引用形式,数组名下标1下标2,b02=b10+b00-b02;,数组元素可以出现在表达式中,也可以被赋值,引用形式:
inta34;.a34=4;,错!
注意:
(1)每个下标都要用括起来如a21不能写成a2,1
(2)下标不要超过定义的范围,返回,五、二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操(字符数组例外),定义:
inta23,i,j;,返回,六、二维数组程序设计举例,例4.2.4:
有一个3*4的矩阵,编程求出其中的最大值及其所在的行号和列号。
max,row,col,12,1,2,#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;imax)max=aij;row=i;col=j;cout“max=”max;cout“max=a”rowcol;,输出:
max=12max=a12,例4.2.5:
将一个矩阵进行转置(即原来的行变为列),#includevoidmain()inta34,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+)coutbij;coutendl;,输入数组a,进行矩阵转置,输出数组b,a02,b20,a21,b12,返回,课堂练习:
1.数组元素ai是该数组中的第个元素.2.元素类型为int的数组a10共占用字节的存储空间,其中元素a5的字节地址为.3.元素类型为double的数组a46共占用字节的存储空间,其中元素a25的字节地址为.4.元素类型为char的数组a1030共占用字节的存储空间,其中元素a34的字节地址为.答案:
1.i+12.40a+203.192a+1364.300a+94,第一方面:
利用数组进行数值计算:
书中给出了三个例子,一个是计算个人所得税,二是进行矩阵求和,三是按月进行公司产值计算,都具有代表性P103
(2),4-3数组的应用,第二方面:
利用数组进行统计:
书中给出了两个例子,一是统计每个候选人的选票,二是统计每个用电区间的居民户数:
P105
(1),第三方面:
数据排序:
/数据结构书中介绍了两种方法:
选择排序和插入排序(见后),第四方面:
查找数据:
/数据结构书中介绍了两种方法:
顺序查找(不要求数组元素有序排列)和二分查找(要求数组元素有序排列)P109
(1),基本算法举例1.排序
(1)冒泡法排序,例4.3.1:
输入5个数,进行由小到大排序:
98542,算法:
两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两两比较,找到最大数,以此类推.最后,小数排在开始,相当于浮起,故称之为:
冒泡法,85429,5428,425,24,比较4次第一轮,比较3次第二轮,比较2次第三轮,比较1次第四轮,98542,89542,85942,85492,8542,5842,5482,542,42,452,对n个数,则要进行n-1趟扫描,在第i趟扫描中要进行n-i次比较。
可以推知:
/*排序*/for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;,#include#defineN10voidmain()inti,j,aN,t;for(i=0;iai;for(i=0;iN;i+)/输出coutai;,/*排序*/for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)/输出coutai;,源程序:
例4.3.1,
(2)选择法排序,特点:
比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后和()互换首先,比较的元素不同,以降序为例,是当前元素与上次比较後的最大元素进行比较,因此,在进行比较之前,要有一个初始化最大元素的过程其次,确定完毕的元素的互换是在每一轮完成后进行的,而不是在比较后进行的再次,互换元素的不同,为(i)和(iMax)举例原始数据:
3,5,7,9,4要求:
降序,第一轮比较,初始化设最大元素下标为k03579k=03579k=13579k=23579k=3k=3A(0)与A(k)交换的结果:
9573,#includeconstintN=10;voidmain()intaN,i,j,k,t;for(i=0;iai;for(i=0;iak)k=j;if(k!
=i)t=ai;ai=ak;ak=t;,源程序:
例4.3.2,for(i=0;iN;i+)coutai;,2.在有序数组中插入一个数后使原数组仍然有序。
例如:
3571
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 字符串