资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
复习Pascal数组1JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal想一想:下列数组这定义对不对,如不对,为什么?Var a:array1.n of char; b:array10.1 of integer; c:arrayinteger of boolean; d:array1.0.3.0 of real; e:array1.50000 of real;说明:说明:a数组中数组中n为变量;为变量; b数组中,下标的上下界应从小到大;数组中,下标的上下界应从小到大; c、e数组元素个数太多,空间分配不够;数组元素个数太多,空间分配不够; d数组下标为实型,不是有序类型。数组下标为实型,不是有序类型。JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalJSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal冒泡法程序:冒泡法程序:冒泡法程序:冒泡法程序:Program mppx(input,output); const n=10; var a:array1.n of integer; I,temp:integer; t:boolean; begin randomize; for I:=1 to n do begin ai:=trunc(random(100);write(ai:4); end; repeat t:=true; for i:=1 to n-1 do if aiai+1 then begin temp:=ai; ai:=ai+1;ai+1:=temp; t:=false; end until t ; writeln; for I:=1 to n do write(aI:4);End.随机产生随机产生随机产生随机产生1010个个个个0-1000-100的整数并输出的整数并输出的整数并输出的整数并输出冒冒冒冒泡泡泡泡排排排排序序序序做标记,若没做标记,若没做标记,若没做标记,若没有交换值则有交换值则有交换值则有交换值则t t为为为为true,true,出现交换出现交换出现交换出现交换后后后后t t改为改为改为改为falsefalse将排好的序输出。将排好的序输出。将排好的序输出。将排好的序输出。JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal应应 用用 :例例例例6-5 6-5 将一个十进制整数转化为二进制数。将一个十进制整数转化为二进制数。将一个十进制整数转化为二进制数。将一个十进制整数转化为二进制数。 分析:在标准类型中,分析:在标准类型中,长整型范围是长整型范围是-2147483648-21474483647,而二进而二进制数制数 10000000000的的十进制数为十进制数为1024,因,因此如果直接来转换会此如果直接来转换会出现数据溢出。为了出现数据溢出。为了能更好存储二进制的能更好存储二进制的各个位数,可以采用各个位数,可以采用数组。假定输入的数数组。假定输入的数据是长整型,则存储据是长整型,则存储二进制数的数组长度二进制数的数组长度为为32。十十二的方法是除以二的方法是除以2反向取余法。反向取余法。 Program ex6-5(input,output); var bin:array0.50 of 0.1; x:longint; k,I:integer; Begin read(x); for I:=0 to 50 do binI:=0; 将数组清将数组清0 k:=0; while x0 do begin bink:=x mod 2; x:=x div 2; k:=k+1; end; write(二进制为二进制为:) for I:=k-1 downto 0 do write(binI:1); end. 思考:如果要求将十进制的实数转化为二进制数,如何处理?提示:思考:如果要求将十进制的实数转化为二进制数,如何处理?提示:思考:如果要求将十进制的实数转化为二进制数,如何处理?提示:思考:如果要求将十进制的实数转化为二进制数,如何处理?提示:小数采用乘小数采用乘小数采用乘小数采用乘2 2取整的方法。取整的方法。取整的方法。取整的方法。JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal例例6-66-6 圆盘找数,如图所示:找出圆盘找数,如图所示:找出4 4个相邻的数,使其个相邻的数,使其相加之各最大和最小的是哪相加之各最大和最小的是哪4 4个数?并给出它们的起个数?并给出它们的起始位置。始位置。1252011841661015219118137143179本题实际上就是先求出相邻的四个数的和,然本题实际上就是先求出相邻的四个数的和,然本题实际上就是先求出相邻的四个数的和,然本题实际上就是先求出相邻的四个数的和,然后找出最大数和最小数。如何求相邻的四个数后找出最大数和最小数。如何求相邻的四个数后找出最大数和最小数。如何求相邻的四个数后找出最大数和最小数。如何求相邻的四个数的和呢?的和呢?的和呢?的和呢?设和存放在设和存放在S S中,我们不妨先确定一个序,即确定第一个中,我们不妨先确定一个序,即确定第一个数的位置和最后一个数的位置。假设圆盘上的数的位置和最后一个数的位置。假设圆盘上的2020个数中个数中5 5为第一个数,为第一个数,1212为最后一个数。则可将这为最后一个数。则可将这2020个数放在个数放在a a数数组中。数组的下标取组中。数组的下标取0-190-19。0Imax then begin max:=s;smax:=I;end; if smin then begin min:=s; smin:=I; end; end; write(max:,asmax:2);for I:=1 to 3 do write(+,asmax+I mod 20:2); write(=,max); writeln(start from,smax+1); write(min:,asmin:2);for I:=1 to 3 do write(+,asmin+I mod 20:2); write(=,min);writeln(start from ,smin+1); end. JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal例例6-76-7投票问题:竞选时,要求选民在投票问题:竞选时,要求选民在A A、B B、C C、D D四个候四个候选人中选择(人数不限),如果选择了选人中选择(人数不限),如果选择了ABCDABCD以外的人员则以外的人员则为废票。统计时输入为废票。统计时输入“#”“#”结束,请按候选人得票数从大结束,请按候选人得票数从大到小顺序输出候选人及其得票情况。到小顺序输出候选人及其得票情况。 分析:设两个数组分析:设两个数组分析:设两个数组分析:设两个数组namename数组存放候选人姓名,数组存放候选人姓名,数组存放候选人姓名,数组存放候选人姓名,name1name1放得放得放得放得票最多的人名,票最多的人名,票最多的人名,票最多的人名,name4name4存放得票最少的人名。存放得票最少的人名。存放得票最少的人名。存放得票最少的人名。scorescore存放各存放各存放各存放各人的得票数。人的得票数。人的得票数。人的得票数。假设开始时,假设开始时,假设开始时,假设开始时,namename数组中各元素的值依次为数组中各元素的值依次为数组中各元素的值依次为数组中各元素的值依次为A A、B B、C C、D D,则问题就转化为重组则问题就转化为重组则问题就转化为重组则问题就转化为重组namename数组,而数组,而数组,而数组,而scorescore数组只起存储作用。数组只起存储作用。数组只起存储作用。数组只起存储作用。JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P PascalascalascalascalProgram ex6-7(input,output); var score:arrayA.D of integer; name:array1.4 of char; I,j:integer; select,ch:char; begin read(select); for ch:=A to D do scorech:=0; 将将score数组清数组清0 for I:=1 to 4 do nameI:=chr(ord(A)+I-1); name数组初始化为数组初始化为A、B、C、D while select# do begin if select in A,B,C,D then 有效票有效票 scoreselect:=scoreselect+1; 对应候选人得票数加对应候选人得票数加1 read(select); end; for I:=1 to 3 do for j:=I+1 to 4 do if scorenameIscorenamej then根据票数确定名次根据票数确定名次 begin ch:=nameI; nameI:=namej;namej:=ch; end; writeln(rusult:); for I:=1 to 4 do writeln(nameI,:,scorenameI); end.间接寻址思想间接寻址思想间接寻址思想间接寻址思想JSOI2009JSOI2009年大丰冬令营(年大丰冬令营(年大丰冬令营(年大丰冬令营(B B层)层)层)层)程序设计程序设计程序设计程序设计P Pascalascalascalascal小结:小结:1、数组的定义2、数组的基本操作:(1)赋值、输入、输出(2)移动 (3)查找、插入、删除(4)排序3、数组的应用:十进制二进制 圆盘找数 投票问题结束语结束语谢谢大家聆听!谢谢大家聆听!16
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号