第七章数组和字符串.ppt
《第七章数组和字符串.ppt》由会员分享,可在线阅读,更多相关《第七章数组和字符串.ppt(74页珍藏版)》请在三一办公上搜索。
1、第七章 数组和字符串,河师大附中信息技术教研组,第一节 数组一、数组的定义 数组是程序中经常使用的结构数据类型,用来描述由固定数目的同一类型的元素组成的数据结构。数组的每个元素与下标相关联,根据下标指示数组的元素。数组的存贮方式为按行存贮,在编译阶段,计算机根据数组的类型说明,确定其存贮空间的大小。数组的定义形式:array,of 其中n称为数组的维数,每维的下标类型必须是一个序数类型,通常为子界类型或枚举类型,其作用是指定数组下标的编制方式和下标取值范围。数组的元素类型是除文件类型和指针类型(下面将介绍)以外的一切类型。例如:,typecolor=(red,yellow,blue);samp
2、le1=array 1.10 of integer;类型sample1的元素是整数,有10个元素,维数为1,依次按1.10编下标sample2=array 1.5,1.5 of real;类型sample2的元素是实数,有25个元素,维数为2,依次按1,1,1,5,2,1,2,5,5,1,5,5编下标sample3=array color of color;类型sample3的元素属color类型,有3个元素,一维,依次按red,yellow,blue编下标var a:sample1;b,c:sample2;d,e:sample3;,注意,类型和变量是二个不同的概念,不能混淆。程序中使用的是数
3、组变量而不是数组类型,即a,b,c,d,e。但数组的类型定义和变量定义可以合并在一起。例如:var a:array 1.10 of integer;b:array 1.5,1.5 of integer;d:array red,yellow,blue of(red,yellow,blue);,二、数组的操作当数组的元素类型为简单类型时,其下标变量与简单类型变量一样使用。例如:a5:=50;a20:=a5;由于下标变量的下标可以作为表达式,使得数组有广泛的应用。例如,设有如下变量说明 var i,sum:integer;下面的语句可求数组变量a的元素和,sum:=0;for i:=1 to 10
4、do sum:=ai+sum;PASCAL允许用同一数组类型的变量相互赋值。如d:=e也是合理的,它把数组变量e 的所有元素依次赋给数组变量d,即等价于下面说明 begin dred:=ered;dyellow:=eyellow;dblue:=eblue;一个数组常量可以通过常量说明语句来定义。,若是一维数组常量,其定义形式如下:const数组常量名:array 下标变量 of 元素类型=(元素值1,元素值2,元素值n);等号右方用括号括起来的部分,是指定数组各元素的值,它们彼此间用逗号隔开。例如:const digits:array 0.9 of char=(0,1,2,3,4,5,6,7,
5、8,9);若是二维数组常量,则括号中的每一个常量元素可以看作是行的所有列元素,列元素间用逗号分隔。这些常量元素用括号括起来,彼此间也用逗号隔开。例如 move:array 1.4,1.4 of integer=(1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16);,例7-1 输入N个学生的成绩(都为0至100的整数),打印输出最高分,最低分,以及平均分。Program example7_1;var a:array1.100 of byte;i,n,max,min,ave:integer;begin repeat write(N=);readln(n);u
6、ntil n 100;ave:=0;,max:=0;min:=32767;for i:=1 to n do begin read(ai);if ai max then max:=ai;if ai min then min:=ai;ave:=ave+ai;end;writeln(Max:,max);writeln(Min:,min);writeln(Ave:,ave/n:0:2);end.,例7-2 求裴波拉契数列a1,a2,a3,a4,an。裴波拉契数列可以按如下定义:a1=1a2=1an=an-1+an-2(n 2)Program example7_2;var a:array1.50 of
7、longint;n,i:integer;begin write(N=);readln(n);a1:=1;write(a1:10);a2:=1;write(a2:10);for i:=3 to n do begin ai:=ai-2+ai-1;write(aI:10);end;end.,例7-3 有一个养鸭专业户,赶了一大群鸭子出去卖。他每经过一个村庄,卖出所赶鸭子的一半再多一只,这样他经过七个村庄后,还剩下两只鸭子,编程打印输出他每经过一个村庄后卖出多少只鸭子?剩下多少只鸭子?Program example7_3;var a:array0.7 of word;i,j:byte;begin a7
8、:=2;for i:=7 downto 1 do ai-1:=2*(ai+1);for i:=1 to 7 do writeln(No.,i,:,ai-1-ai:5,ai:5);end.,例7-4 输入一串字符,以!作为结束,不分大小写,统计其中每种英文字符出现的次数。Program example7_4;var ch:arrayA.Z of byte;c:char;i,j:byte;begin for c:=A to Z do chc:=0;read(c);while c!do begin c:=upcase(c);if(c=A)and(c=Z)then chc:=chc+1;read(c)
9、;end;writeln;for c:=A to Z do writeln(c,:,chc);end.,例7-5 有N个灯放在一排,从1到N依次顺序编号。有N个人也从1到N依次编号。1号将灯全部关闭,2将凡是2的倍数的灯打开;3号将凡是3的倍数的灯作相反处理(该灯如为打开的,则将它关闭;如关闭的,则将它打开)。以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。试计算第N个操作后,哪几盏灯是点亮的。(1表示灯打开,0表示灯关闭),program example7_5;var k,n,I,j:integer;a:array1.100 of 0.1;N盏灯的状态 begin write(N=)
10、;readln(n);for i:=1 to n do ai:=0;初始化 for i:=2 to n do begin 从第1号队员开始,依次操作 j:=i;从第i号队员操作后各灯的状态 while j=n do begin aj:=1-aj;j:=j+i;end;end;for i:=1 to n do write(ai);writeln;end.,例7-6 选择排序:随机地产生100个自然数,将它们从小到大地排序后,将它们打印输出。program example7_6;const n=100;var a:array1.n of word;i,j,temp:word;begin rando
11、mize;for i:=1 to n do ai:=random(65535);for i:=1 to n do write(ai:8);writeln;,for i:=1 to n-1 do for j:=i+1 to n do if ai aj then begin temp:=ai;ai:=aj;aj:=temp;end;readln;for i:=1 to n do write(ai:8);writeln;end.,例7-6 冒泡法排序:随机地产生100个自然数,将它们从小到大地排序后,将它们打印输出。,program example7_6;const n=100;var a:arra
12、y1.n of word;i,j,temp:word;f:boolean;begin randomize;for i:=1 to n do ai:=random(65535);for i:=1 to n do write(ai:8);writeln;,repeat f:=true;for i:=1 to n-1 do if ai ai+1 then begin temp:=ai;ai:=ai+1;ai+1:=temp;f:=false;end;until f;for i:=1 to n do write(ai:8);writeln;end.,希尔法排序,44 55 12 42 94 18 6
13、67第一次jump=4后:44 18 6 42 94 55 12 67第二次jump=2后:6 18 12 42 44 55 94 67第三次jump=1后:6 12 18 42 44 55 67 94,希尔法排序,program example7_6;const n=100;var a:array1.n of word;i,jump,temp:word;f:boolean;begin randomize;for i:=1 to n do ai:=random(65535);for i:=1 to n do write(ai:8);writeln;,jump:=n;While jump=1 d
14、o begin jump:=jump div 2;repeat f:=true;for i:=1 to n-jump do if ai aj+jump then begin temp:=ai;ai:=ai+jump;ai+jump:=temp;f:=false;end;until f;end;for i:=1 to n do write(ai:8);writeln;end.,有对小兔子,出生一个月后变成大兔子,两个月后生出第一对小兔子,自己变成一对老兔子,上个月生的小兔子变成大兔子。此时,共有3对兔子(一对老兔子,一对大兔子,一对小兔子)。4个月后大兔子变成老兔子,小兔子变成大兔子,两对老兔子
15、生出两对小兔子,此时共有5对兔子(老、小两对、大一对)请编程序,计算11个月后共有多少对兔子。,program tuzi7_7;const n=11;var a:array1.11of integer;i:integer;begin a1:=1;for i:=2 to n do ai:=2*ai-1;writeln(an);end.,例7-8 繁殖问题:有一家生化所,一月份引入一对新生的小白鼠,这种小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖,问N个月后(N 50),活的小白鼠有多少对?,program example
16、7_8;var a:array1.50 of longint;n,i,j:shortint;sum:longint;Begin repeat write(Input n:);readln(n);until n in 3.50;for i:=2 to n do ai:=0;a1:=1;a3:=1;a4:=1;for i:=5 to n do ai:=ai-4+ai-3+ai-2;sum:=0;for i:=n-5 to n do if i 0 then sum:=sum+ai;writeln(sum);End.,例7-9 输入N名同学5门课的考试成绩,输出各人的各课成绩及总分。program e
17、xample7_9;const n=3;var a:array1.n,1.6 of byte;i,j:byte;begin writeln(Input score:);for i:=1 to n do begin ai,6:=0;,write(No.,i,:);for j:=1 to 5 do begin read(ai,j);ai,6:=ai,6+ai,j;end;end;for i:=1 to n do begin for j:=1 to 6 do write(ai,j:5);writeln;end;end.,例7-10 输入正整数N(N 12),打印杨辉三角形的前N行。杨辉三角形如下:N
18、=6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 其特点是二个腰上的数都为1,其它位置上的数是它的上一行相邻二个数之和。用二维数组很容易记下三角矩阵,然后再打印输出。,program example7_10;var a:array1.12,1.12 of byte;i,j,n:byte;begin repeat write(N=);readln(n);until n 13;for i:=1 to n do begin ai,1:=1;ai,i:=1;end;for i:=3 to n do for j:=2 to i-1 do ai,j:=ai-1,
19、j+ai-1,j-1;for i:=1 to n do begin write(ai,1:30-2*i);for j:=2 to i do write(ai,j:4);writeln;end;end.,例7-11 输入正整数N(N 10),输出如下的对应字符图形:N=2A A AA B AA A A N=4 A A A A A A A A B B B B B A A B C C C B A A B C D C B A A B C C C B A A B B B B B A A A A A A A A,program example7_11;var a:array1.19,1.19 of cha
20、r;i,j,n,t:byte;begin repeat write(N=);readln(n);until n 11;t:=2*n-1;for i:=1 to n do for j:=i to t+1-i do begin ai,j:=chr(64+i);aj,i:=chr(64+i);at+1-i,t+1-j:=chr(64+i);at+1-j,t+1-i:=chr(64+i);end;for i:=1 to t do begin for j:=1 to t do write(ai,j:2);writeln;end;end.,例7-12 有四个人玩游戏,每局一个人输,三个人赢,输的人需根据赢
21、的人手中的筹码等量付给,每个人都输一局,这样玩了四局后,每个人手中正巧都有16根筹码。打印输出开始时每人手中各有多少根筹码,每玩一局后每人手中各有多少根筹码。,program example7_12;var a:array1.4,1.5 of byte;i,j,s:byte;begin for i:=1 to 4 do ai,5:=16;for j:=4 downto 1 do begin s:=0;for i:=1 to 4 do if i j then begin ai,j:=ai,j+1 div 2;s:=s+ai,j;end;aj,j:=aj,j+1+s;end;,writeln(No
22、.:10,1:10,2:10,3:10,4:10);for j:=1 to 5 do begin write(j-1:10);for i:=1 to 4 do write(ai,j:10);writeln;end;end.,例7-13奇数阶魔阵:魔阵是用自然数1、2、3、n2填n阶方阵的各个元素位置,使方阵的每行的元素之和、每列元素之和及主对角线元素之和均相等;奇数阶魔阵的一个算法是将自然数数列从方阵的中间一行最后一个位置排起,每次总是向右下角排(即Ai,j的下一个是Ai+1,j+1),但若遇以下四种情形,则应修正排数法。(1)、列排完(即j=n+1时),则转排第一列(2)、行排完(即i=n+
23、1时),则转排第一行(3)、对An,n的下一个总是An,n-1(4)、若Ai,j已排进一个自然数,则排Ai1,j2,var a:array1.99,1.99of integer;i,j,k,n:integer;begin fillchar(a,sizeof(a),0);write(n=);readln(n);i:=n div 2+1;j:=n;ai,j:=1;for k:=2 to n*n do begin if(i=n)and(j=n)then j:=j-1 else begin i:=i mod n+1;j:=j mod n+1;end;,if ai,j0 then begin i:=i-
24、1;j:=j-2;end;ai,j:=k;end;for i:=1 to n do begin for j:=1 to n do write(ai,j:5);writeln;end;end.,7-14.找出一个二维数组的鞍点,即该位置上的元素在该行上最大、该列上最小,也可能没有鞍点。数组的值从键盘输入,如:1923211361 25 34 4567 32 39 2939 98 27 56如果没有鞍点则显示NO!,有则显示每个鞍点的位置和值,一个占一行,program t7_14;var a:array0.100,0.100of integer;i,j,n,l,h,hh,k:integer;f:
25、boolean;begin readln(n);f:=true;for i:=1 to n do for j:=1 to n do read(ai,j);for i:=1 to n do ai,0:=0;for i:=1 to n do a0,i:=32767;for i:=1 to n do begin l:=0;,for j:=1 to n do if ai,lak,l then hh:=k;if(h=hh)and(h0)then begin writeln(,i,h,),ah,l);f:=false;end;end;if f then writeln(no);end.,7-15.打印一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 数组 字符串
链接地址:https://www.31ppt.com/p-5642014.html