第七章数组和字符串.ppt
《第七章数组和字符串.ppt》由会员分享,可在线阅读,更多相关《第七章数组和字符串.ppt(74页珍藏版)》请在三一文库上搜索。
1、第七章 数组和字符串,河师大附中信息技术教研组,第一节 数组 一、数组的定义 数组是程序中经常使用的结构数据类型,用来描述由固定数目的同一类型的元素组成的数据结构。数组的每个元素与下标相关联,根据下标指示数组的元素。数组的存贮方式为按行存贮,在编译阶段,计算机根据数组的类型说明,确定其存贮空间的大小。 数组的定义形式: array , of 其中n称为数组的维数,每维的下标类型必须是一个序数类型,通常为子界类型或枚举类型,其作用是指定数组下标的编制方式和下标取值范围。数组的元素类型是除文件类型和指针类型(下面将介绍)以外的一切类型。例如:,type color=(red,yellow,blue
2、); sample1=array 110 of integer; 类型sample1的元素是整数,有10个元素,维数为1,依次按110编下标 sample2=array 15,15 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 110 of integer; b:array 15,15 of integer; d:array red,yellow,blue of (red,yellow,blue);,二、数组的操作 当数组的元素类型为简单类型时,其下标变量与简单类型变量一样使用。例如: a5:=50; a20:=a5; 由于下标变量的下标可以作为表达式,使得数组有广泛的应用。例如,设有如下变量说明 var i,sum:integer; 下面的语句可求数组变量a的元素和,sum:=0;
4、 for i:=1 to 10 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 09 of
5、 char=(0,1,2,3,4,5,6, 7,8,9); 若是二维数组常量,则括号中的每一个常量元素可以看作是行的所有列元素,列元素间用逗号分隔。这些常量元素用括号括起来,彼此间也用逗号隔开。例如 move:array 14,14 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 : array1100 of byte; i,n,max,min,ave : integer; beg
6、in repeat write(N = ); readln(n); until 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。裴波拉契数列可以按如下
7、定义: a1 = 1 a2 = 1 an = an-1 + an-2 (n 2) Program example7_2; var a : array150 of 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 有一个养鸭专业户,赶了一大群鸭子出去卖。他每经过一个村庄,卖出所赶鸭子的一半再多一只,这样他经过
8、七个村庄后,还剩下两只鸭子,编程打印输出他每经过一个村庄后卖出多少只鸭子?剩下多少只鸭子? Program example7_3; var a : array07 of word; i, j : byte; begin a7 := 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 o
9、f 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); 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的倍数的灯作相反处理(该灯如为
10、打开的,则将它关闭;如关闭的,则将它打开)。以后的人都和3号一样,将凡是自己编号倍数的灯作相反处理。试计算第N个操作后,哪几盏灯是点亮的。(1表示灯打开,0表示灯关闭),program example7_5; var k,n,I,j : integer; a : array1100 of 01; N盏灯的状态 begin write(N = ); 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
11、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 : array1n of word; i,j,temp : word; begin randomize; for i := 1 to n do ai := random(65535); for i := 1 to n do write(ai:8); writeln;,for i
12、 := 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 : array1n of word; i,j,temp : word; f:boolean; begin randomize;
13、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 67 第一次jump=4后:44 18 6 42 94
14、 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 : array1n 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 do be
15、gin 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个月后大兔子变成老兔
16、子,小兔子变成大兔子,两对老兔子生出两对小兔子,此时共有5对兔子(老、小两对、大一对)请编程序,计算11个月后共有多少对兔子。,program tuzi7_7; const n=11; var a:array111of integer; i:integer; begin a1:=1; for i:=2 to n do ai:=2*ai-1; writeln(an); end.,例7-8 繁殖问题:有一家生化所,一月份引入一对新生的小白鼠,这种小白鼠生长两个月后,在第三、第四 、第五个月各繁殖一对小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖,问N个月后(N 50),活的小
17、白鼠有多少对?,program example7_8; var a : array150 of longint; n,i,j : shortint; sum : longint; Begin repeat write(Input n : ); readln(n); until n in 350; 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+a
18、i; writeln(sum); End.,例7-9 输入N名同学5门课的考试成绩,输出各人的各课成绩及总分。 program example7_9; const n = 3; var a : array1n,16 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 be
19、gin for j := 1 to 6 do write(ai,j:5); writeln; end; end.,例7-10 输入正整数N(N 12),打印杨辉三角形的前N行。杨辉三角形如下: N = 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 : array112,112 of byte; i,j,n : byte; begin repeat write(N = ); rea
20、dln(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,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 = 2 A A A A B A A A A N = 4 A A
21、 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 : array119,119 of char; 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 := ch
22、r(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 有四个人玩游戏,每局一个人输,三个人赢,输的人需根据赢的人手中的筹码等量付给,每个人都输一局,这样玩了四局后,每个人手中正巧都有16根筹码。打印输出开始时每人手中各有多少根筹码,每玩一局后每人手中各有多少根筹码。,program example7_12; var a : array14,15 o
23、f 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.: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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 数组 字符串
链接地址:https://www.31doc.com/p-2257256.html