Pascal数组复习.ppt_第1页
Pascal数组复习.ppt_第2页
Pascal数组复习.ppt_第3页
Pascal数组复习.ppt_第4页
Pascal数组复习.ppt_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组(一),1、一维数组,Type类型标识符号=array下标类型of元素类型;Var数组名:类型标识符;,or,Var数组名:array下标类型of元素类型;,定义:,例6-1定义如下数组:,(1)表示20种商品的价格;(2)表示30件邮件的安全邮递情况;(3)统计50个学生在一次考试(满分为100,最低分为0分)中各分数的分布情况;(4)统计一篇文章中各字母的出现频率(所有字母均小写)。,Varprice:array1.20ofreal;mail:array1.30ofboolean;score:array0.100ofinteger;number:arraya.zofinteger;,共有20个实型数,price1-price20,共有50个布尔型数,mail1-mail30,共有101个整型数,score0-score100,共有26个整型数,numbera-numberz,想一想:下列数组这定义对不对,如不对,为什么?,Vara:array1.nofchar;b:array10.1ofinteger;c:arrayintegerofboolean;d:array1.0.3.0ofreal;e:array1.50000ofreal;,说明:a数组中n为变量;,b数组中,下标的上下界应从小到大;,c、e数组元素个数太多,空间分配不够;,d数组下标为实型,不是有序类型。,一维数组的基本操作:,1、数组的赋值、输入、输出,例6-1按顺序读入10个数,再以逆序的方式输出。,分析:可以定义一个10个元素的数组,用循环读入、输出。,Programex10-1(input,output);varx:array1.10ofinteger;I:integer;beginforI:=1to10doread(xI);writeln(fanxushuchu:);forI:=10downto1dowrite(xI:3);end.,本例将数组下标作为循环变量,便于数组的输入、输出,运行结果:,10310-277890914821,21841990782703110,fanxushuchu:,数组元素的赋值可以用赋值语句。,2、数组元素的移动,例6-2将a数组中第一个元素移动到最后数组末尾,其余数据依次往前平移一个位置。P85,分析:(1)先将第一个元素取出放在临时单元中;,(2)将a2a1、a3a2anan-1,(3)再将临时单元tempan,思考:如果将最后一个元素移到第一个位置,其余数据依次向后平移一个位置,如何修改?如果将数组实现逆序交换,又该如何修改程序?,例6-3对于数组a,输入一个测试数据x,如果x存于数组a,则把x元素删除;否则将x插在相应的位置,要求数组仍然有序(假设数组递增),分析:本题是一个查找问题。查找的最常用方法是顺序查找和二分查找。我们先采用顺序查找,二分查找以后再讲。,顺序查找的过程是:从头开始,根据给定的值,依次与数组中的数进行比较,相同即为找到,若查遍整个数组仍然没有,则表示该元素不存在。,由题意知:本题查询的条件是数组的元素小于x,若发现有数据与x相等,则将删除该数,否则,若数组中的数大于x,则此处就是插入x的位置。,注意:如果是删除,则将x后的数向前平移一个;如果是插入,则先将x插入点的元素依次向后平移。,3、数组元素的查找、插入、删除,Programex6-3(input,output);constn=100;vara:array1.n+1ofinteger;如果x插入,数组x将增加一个数据x:integer;I,j:integer;beginforI:=1tondoread(aI);read(x);an+1:=x;将an+1设为x,可以作为后面比较的结束标志I:=1;whileaIai,则将a1与aI交换。等一轮比较下来,最小数就存放在a1中。(2)依(1)类推,a2中放第二小,a3中放第三小数,一直到an-1,这样序就形成了。,程序如下:,Programmaopao_sort(input,output);constn=10;vara:array1.10ofinteger;I,j,temp:integer;beginforI:=1tondoread(aI);forI:=1ton-1doforj:=n-1downtoidoifaj+1ai+1thenbegintemp:=ai;ai:=ai+1;ai+1:=temp;t:=false;enduntilt;writeln;forI:=1tondowrite(aI:4);End.,随机产生10个0-100的整数并输出,冒泡排序,做标记,若没有交换值则t为true,出现交换后t改为false,将排好的序输出。,应用:,例6-5将一个十进制整数转化为二进制数。,分析:在标准类型中,长整型范围是-2147483648-21474483647,而二进制数10000000000的十进制数为1024,因此如果直接来转换会出现数据溢出。为了能更好存储二进制的各个位数,可以采用数组。假定输入的数据是长整型,则存储二进制数的数组长度为32。,十二的方法是除以2反向取余法。,Programex6-5(input,output);varbin:array0.50of0.1;x:longint;k,I:integer;Beginread(x);forI:=0to50dobinI:=0;将数组清0k:=0;whilex0dobeginbink:=xmod2;x:=xdiv2;k:=k+1;end;write(二进制为:)forI:=k-1downto0dowrite(binI:1);end.,思考:如果要求将十进制的实数转化为二进制数,如何处理?提示:小数采用乘2取整的方法。,例6-6圆盘找数,如图所示:找出4个相邻的数,使其相加之各最大和最小的是哪4个数?并给出它们的起始位置。,本题实际上就是先求出相邻的四个数的和,然后找出最大数和最小数。如何求相邻的四个数的和呢?,设和存放在S中,我们不妨先确定一个序,即确定第一个数的位置和最后一个数的位置。假设圆盘上的20个数中5为第一个数,12为最后一个数。则可将这20个数放在a数组中。数组的下标取0-19。,0Imaxthenbeginmax:=s;smax:=I;end;ifsminthenbeginmin:=s;smin:=I;end;end;write(max:,asmax:2);forI:=1to3dowrite(+,asmax+Imod20:2);write(=,max);writeln(startfrom,smax+1);write(min:,asmin:2);forI:=1to3dowrite(+,asmin+Imod20:2);write(=,min);writeln(startfrom,smin+1);end.,例6-7投票问题:竞选时,要求选民在A、B、C、D四个候选人中选择(人数不限),如果选择了ABCD以外的人员则为废票。统计时输入“#”结束,请按候选人得票数从大到小顺序输出候选人及其得票情况。,分析:设两个数组name数组存放候选人姓名,name1放得票最多的人名,name4存放得票最少的人名。score存放各人的得票数。,假设开始时,name数组中各元素的值依次为A、B、C、D,则问题就转化为重组name数组,而score数组只起存储作用。,Programex6-7(input,output);varscore:arrayA.Dofinteger;name:array1.4ofchar;I,j:integer;select,ch:char;beginread(select);forch:=AtoDdoscorech:=0;将score数组清0forI:=1to4donameI:=chr(ord(A)+I-1);name数组初始化为A、B、C、Dwhileselect#dobeginifselectinA,B,C,Dthen有效票scoreselect:=scoreselect+1;对应候选人得票数加1read(select);end;forI:=1to3doforj:=I+1to4doifscorenameIscorenamejthen根据票数确定名次beginch:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论