当前位置:首页 >> 学科竞赛 >> 信息学校本教材——pascal语言与程序设计(2)

信息学校本教材——pascal语言与程序设计(2)


信息学校本教材

Pascal 语言与程序设计(2)
主讲: 谭 少 文 单位: 益阳市第一中学

Pascal的数据类型
标准类型

实数类型
整数类型 字符类型 布尔类型 子界类型 枚举类型

基本类型
数 据 类 型 用户自定义类型 数组类型 构造类型

集合类型 记录类型 文件类型 指针类型

顺 序 类 型

数据类型概念说明
一、对数据类型的进一步认识 PASCAL的发明者沃思的著名公式:程序=算法 + 数据结构; 不同数据类型的区别: 1、确定一个值域: INT:-32768到32767; REAL:-1038 到 -10-38 和10-38到1038到其他为溢出。 BOOLEAN:TRUE和FALSE; 2、确定数据的存储方式: INT:2个字节;REAL:4;BOOLEAN:1; 3、规定了相应的运算种类: INT:+ - * / MOD DIV PRED SUCC ORD < > ……….. REAL:+ - * / ROUND TRUNC………………… BOOLEAN:NOT AND OR PRED SUCC < > ……… 数值运算和非数值运算:字符类型; 注意:类型名(标准类型和用户自定义类型),变量名,变量定义

数据类型概念说明
二、字符类型 1、用‘’引起来的一个字符。注意区别变量A和字符’A’,乘号 * 和 ’ * ’ …… WRITE(‘A’+‘B’);WRITE(A+B); 2、PASCAL字符集: 26个英文字母(大写、小写),0~9十个数字,以及以下的 20个专用字符:+ - * / < > . , ‘ : ; ↑ ( ) [ ] { } □ 系统字符集: ASCII : American Standard Code for Information Interchange 即美国标准信息交换代码; 其中规定了每一个字符对应着一个代码; 字符:256个 序号 :0~255 ‘0’………..’9’: 48………..57 ‘A’………..’Z’: 65 …… ….90 ‘a’………..’z’: 97……….122 空格 □ 32 回车换行 10

数据类型概念说明
二、字符类型

3、有序类型:根据ASCII码值 比较大小:‘a’ > ’A’ 求序号函数:ORD(X):如ORD(‘B’)=66 求字符函数:CHR(X):如CHR(66)=‘B’ 求前驱函数:PRED(X):如PRED(‘D’)=‘C’ 求后继函数:SUCC(X):如SUCC(‘C’)=‘D’ 注意:可以作为循环变量的初始和终止值。
4、输入输出: 尽量都用READLN或READ,不要混合用,因为回车、换行、 空格等都是一个字符容易出错。

枚举类型
1、枚举类型的定义 枚举类型的定义:在CONST后VAR前,用TYPE 格式:TYPE 类 型 名 = (可能取的值/必须是标识符); 类型标识符 枚举元素/枚举常量,组成了值域 Eg: TYPE SEX = (MALE,FEMALE); TYPE COLORS=(red, yellow, blue, white, black, green); 注意: 1、在值域里不能出现引号如‘RED ’, 不能出现系统关键字 如FOR,不能出现数字如(1,3,5,7,9)。即必须是标识 符。 2、同一个枚举元素不能同时出现在两个或两个以上的枚举类 型定义中。

枚举类型
2、枚举类型变量的定义: Eg: VAR A:INTEGER; S:SEX; COLOR:COLORS; 说明: 1、枚举类型的定义和枚举变量的定义可以合并在一起: VAR S : (MALE,FEMALE); COLOR:(red, yellow, blue, white, black, green); 2、枚举类型是一种有序类型,从0,1,2,3…….;所以可以用ORD、 SUCC、PRED等函数;也可以用在FOR循环和IF语句中 如:FOR COLOR:= RED TO GREEN DO…….. IF S = MALE THEN ………. 3、枚举元素与常量、变量的区别: 不是常量也不是变量,所以不可以用在赋值号的左边,也不能直接用 在READ和WRITE语句中。

枚举类型
3、枚举类型变量的操作: ①赋值运算 COLOR:=RED ;注意类型一致不能出界; ②关系运算 可以用=、>、<、<>、>= 、<= 等进行关系运算。用于if 或 case语句和for 语句中。 ③输入 枚举变量的值只能用赋值语句获得,不要用READ语句; ④输出 不能直接用WRITE语句直接输出枚举元素,系统会认为它是 一个未定义的变量名;必须赋给一个枚举变量,然后输出给变量的 值; VAR I:INTEGER; COLOR:(RED,YELLOW,BLUE); BEGIN WRITELN(‘0—RED ,1—YELLOW , 2—BLUE ’); READLN(I); CASE I OF 0 :COLOR:=RED; 1 :COLOR:=YELLOW; 2 :COLOR:=BLUE END;

枚举类型
3、枚举类型变量的操作: ①赋值运算 COLOR:=RED ;注意类型一致不能出界; ②关系运算 可以用=、>、<、<>、>= 、<= 等进行关系运算。用于if 或 case语句和for 语句中。 ③输入 枚举变量的值只能用赋值语句获得,不要用READ语句; ④输出 不能直接用WRITE语句直接输出枚举元素,系统会认为它是 一个未定义的变量名;必须赋给一个枚举变量,然后输出给变量的 值; CASE COLOR OF RED :WRITELN(‘RED’); YELLOW:WRITELN(‘YELLOW’); BLUE:WRITELN(‘BLUE’) END; END.

枚举类型
例25、1周中7天用Sun,Mon,Tue,Wed,Thu, Fri,Sat表示,要求用枚举类 型编程:当输入星期几的数字,能输出相应的英文简写; 输出它的前一天和后一天是星期几(也用英文简写表示)。
Program li25(input,output); Var day,before,after : ( Sun,Mon,Tue,Wed,Thu, Fri,Sat ); Num : integer; begin readln(num); while (num>=1) and (num<=7) do begin case num of 7 : writeln(‘ sun ’); 1 : writeln(‘ mon ’); 2 : writeln(‘ tue ’); 3 : writeln(‘ wed ’); 4 : writeln(‘ thu ’ ); 5 : writeln(‘ fri ’); 6 : writeln(‘ sat ’); end; write(‘lastday and nextday : ’); case num of 7 : writeln(‘ sat , mon ’); 1 : writeln(‘ sun , tue ’); 2 : writeln(‘ mon , wed ’); 3 : writeln(‘ tue , thu ’); 4 : writeln(‘ wed , fri ’ ); 5 : writeln(‘ thu , sat ’); 6 : writeln(‘ fri , sun’); end; end; END.

枚举类型
例26、一家水果店出售4种水果,每千克价格分别是:苹果1.15元,桔子1.20元, 香蕉0.95元,菠萝0.85元。编一程序使售货员主要从键盘上打入货品的代码 及重量,计算机将显示货品名、单价、重量及总价。货品代码为苹果1,桔 子2,香蕉3,菠萝4。
Program li26(input,output); CONST PA=1.15;PO=1.20;PB=0.95;PP=0.85; TYPE fruit =(APPLE,ORANGE,BANANA,PINEAPPLE); VAR total,weight,p:real; CODE:integer; sg:fruit; begin Readn(code,weight); While (code >=1) and (coad <=4) do Begin CASE code OF 1 : sg:=APPLE; 2 : sg:=ORANGE; 3 : sg:=BANANA; 4 : sg:=PINEAPPLE; end; CASE sg OF APPLE : begin write(‘APPLE’); p:=PA end; ORANGE :begin write(‘ORANGE’); P:=PO end; BANANA : begin write(‘BANANA’); P:=PB end; PINEAPPLE : begin write(‘PINEAPPLE’); P:=PP end ; end;

write( P:6:2, ‘ * ’, weight:6:2 , ‘ = ’); wright (p*WEIGHT:8:2); readln (CODE,WEIGHT); end; End.

枚举类型
例27、求从红、黄、蓝、白、黑五种颜色的球中,取三种颜色球的可能取法。
Program li27(input,output); TYPE COLOR = (RED,YELLOW,BLUE,WHITE,BLACK); VAR I,J,K,PRI :COLOR; LOOP,N:INTEGER;

BEGIN N:=0; FOR I:= RED TO BLACK DO FOR J:=RED TO BLACK DO IF I<>J THEN FOR K:= RED TO BLACK DO IF ( K<>I ) AND ( K<>J ) THEN BEGIN N:=N+1;WRITE(N:4); FOR LOOP:=1 TO 3 DO BEGIN CASE LOOP OF 1 : PRI:=I; 2 : PRI:=J; 3 : PRI:=K END;

CASE PRI OF RED : WRITE(‘RED’); YELLOW :WRITE(‘YELLOW’); BLUE: WRITE(‘BLUE’); WHITE:WRITE(‘WHITE’); BLACK:WRITE(‘BLACK’) END; END; WRITELN; END; WRITELN(‘ TOTAL NUM : ’ , N ); END.

60种

子界类型
1、子界类型的定义 子界类型的定义: TYPE 类型标识符 = <常量1>..<常量2> Eg: TYPE AGE = 1..150; UPLETTER = ‘A’ ..‘Z’; DAYS = 28 ..31; NUM = 20..60; 说明: 常量1:下界; 常量2:上界; 下界<上界;上下界必须为同一数据类型,这种类型称为子界类型的基 类型。且上下界必须为有序类型(整形、布尔型、字符型、枚举 型)。 不能为实型。

子界类型
2、子界类型变量的定义: Eg: TYPE LETTER = ‘A’ ..‘Z’; VAR CH1,CH2 :LETTER; 说明: 子界类型的定义和子界变量的定义可以合并在一起: VAR CH1,CH2 : ‘A’ ..‘Z’; 3、子界类型的运算: ①凡是使用基类型数据的地方均可使用子界类型数据; ②对基类型的运算规则同样实用于该类型的子界类型; ③基类型相同的不同子界类型数据可以进行混合运算;

子界类型
例28、编程完成以下功能:输入一个字符,让计算机判断并输出它是大

写字母、小写字母、数字,还是特殊符号。 Program li28(input,output); VAR C:CHAR; BEGIN READLN(C); CASE C OF ‘0’ ..‘9’ :WRITELN(‘DIGITS’); ‘A’ ..‘Z’:WRITELN(‘UPPERLETTERS’); ‘a’ . . ’z’ :WRITELN(‘LOWERLETTERS’); ELSE WRITELN(‘SPECIAL CHARACTORS’) END; END.

子界类型
例29、编写一程序,输出1900~1999年间任一年任一月天数。

分析: 1、每个月的天数不一样: 31天:1,3,5,7,8,10,12; 30天:4,6,9,11; 2月份多少天:28天(非闰年)或29天(闰年) 2、如何判断闰年? { 一年时间:365日5小时48分46秒 } ——4年1闰,百年不闰,400年又闰 即:若年号能被400除尽........则为闰年; 否则,若它能被4除尽且不能被100除尽......则也是闰年; 否则,都不是闰年。 3、变量:年:1900..1999; 12个月:用枚举类型; 每个月天数:28..31;;

子界类型
例29、编写一程序,输出1900~1999年间任一年任一月天数。

Program li29(input,output);
TYPE MOUTH = (JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP, OCT,NOV, DEC); YEAR = 1900..1999; LENMOUTH = 28..31; VAR Y:YEAR; M:MOUTH; L:LENMOUTH; BEGIN READLN(Y,M); CASE M OF JAN,MAR,MAY,JUL,AUG,DEC : L:=31; APR,JUN,SEP,NOV :L:=30; FEB : IF (Y MOD 4 =0)AND(Y MOD 100 <>0)OR(Y MOD 400 =0) THEN L:=29 ELSE L:=28 END; WRITELN(‘YEAR: ’,Y,‘MOUTH: ’,M,‘DAYS: ’,L); END.

子界类型
例30、编写一程序,将十六进制数转换成十进制数.要求输入四位十六进

制(如果不足四位,前面补0),然后转换成十进制数输出. Program li30(input,output);
Var ch:char; d, d1,d2,d3,d4 : 0..15; i:1..4;j:real;
BEGIN writeln(‘input hex number’); For i:=1 to 4 do Begin read(ch) ; ch:=uncaps(ch); case ch of ‘0’..’9’ :d:=ord(ch)-48; ‘A’..’F’: d:=ord(ch)-55; else exit; end; case i of 1: d1:=d; 2: d2:=d; 3: d3:=d; 4:d4:=d End; End; Writeln; J:=d1*exp(3*ln(16))+d2*spr(16)+d3*16+d4; Writeln(‘the dec’,j:8:0); readln End.

数组类型
1、一维数组的定义 A;一维数组类型的定义: TYPE 数组类型名 = array[下标类型] of 元素类型(基类型); Eg: type hao = array [1..100] of integer; var xh,kh:hao; 也可合并定义: xh,kh:array[1..100] of integer 说明: ①数组类型名和数组变量名:整体性,通过数组变量名在计算机内存中 开辟一片连续的存储空间;个体性:单独使用A [ I ]; ②基类型:每个元素的数据类型。 ③下标类型:一般为子界型,如1..100;-10..10;‘A’ ..‘Z’。 但不能直接写成INTEGER, 决定了数组元素的个数。 ④ 基类型和下标类型共同决定了数组所占的存储空间和结构;

数组类型
1、一维数组的定义 A;一维数组类型的定义: TYPE 数组类型名 = array[下标类型] of 元素类型(基类型); Eg: type hao = array [1..10] of integer; var a ,xh,kh:hao; 也可合并定义: a, xh,kh:array[1..10] of integer 说明: ①数组类型名和数组变量名:整体性,通过数组变量名在计算机内存中 开辟一片连续的存储空间;个体性:单独使用A [ I ]; ②基类型:每个元素的数据类型。 ③下标类型:一般为子界型,如1..100;-10..10;‘A’ ..‘Z’。 但不能直接写成INTEGER, 决定了数组元素的个数。 ④ 基类型和下标类型共同决定了数组所占的存储空间和结构;

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]A[10]

数组类型
2、一维数组类型常数的定义 Const Hex:array[0..15]of char =(‘0’,’1’,’2’,’3’, ‘4’,’5’,’6’,’7’, ‘8’,’9’,’A’,’B’, ‘C’,’D’,’E’,’F’) 或: Const Hex:array[0..15]of char =(‘0123456789ABCDEF’) 3、一维数组变量的输入、输出与赋值 一般不能整个数组输入、输出,只能逐个元素进行,一般用for语句 来完成。 如: FOR I := 1 TO 10 DO READ( A1 [ I ] ); FOR I := 1 TO 7 DO WRITE( A1 [ I ] ); 也可以整组赋值,但必须是两个数组具有相同类型。 如:a2:=a1;

数组类型
例31、求20个人的数学平均分

Program li31(input,output); Const n=20; Type ary=Array[1..n] Of Integer; Var Score:ary; i:integer; avg:real;
BEGIN

Writeln(‘input the 20 score’);

Avg:=0; For i:=1 to n do Read (score[i]); For i:=1 to n do Avg=avg+score[i]; Avg=avg/n; Writeln(avg);
End.

数组类型
Program li31(input,output); Const n=20; Type ary=Array[1..n] Of Integer; Var a:ary; I,j,t:integer;
BEGIN

冒泡法排序

例31、输入20个人的信息奥赛分数,并按从大到小的顺序排列。

排序

Writeln(‘input the 20 score’);

For i:=1 to n do Read (a[i]); Readln; For i:=1 to n-1 do For j:=1 to n – i do if a[j] < a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end; Writeln(‘the new ‘); For i:=1 to n do write(a[i]:4);
End.

数组类型
Program li31(input,output); Const n=20; Type ary=Array[1..n] Of Integer; Var a:ary; p, I,j,t,p:integer;
BEGIN

选择法排序

例31、输入20个人的信息奥赛分数,并按从小到大的顺序排列。

排序

Writeln(‘input the 20 score’);

1. 基本思想: 每一趟从待排序的数据元 素中选出最小(或最大)的一 个元素,顺序放在已排好序的 数列的最后,直到全部待排序 的数据元素排完。 2. 排序过程: 【示例】: 初始关键字 [49 38 65 97 76 13 27 49] 第一趟排序后 13 [38 65 97 76 49 27 49] 第二趟排序后 13 27 [65 97 76 49 38 49] 第三趟排序后 13 27 38 [97 76 49 65 49] 第四趟排序后 13 27 38 49 [49 97 65 76] 第五趟排序后 13 27 38 49 49 [97 97 76] 第六趟排序后 13 27 38 49 49 76 [76 97] 第七趟排序后 13 27 38 49 49 76 76 [ 97] 最后排序结果 13 27 38 49 49 76 76 97

For i:=1 to n do Read (a[i]); Readln; For i:=1 to n-1 do Begin p:=i For j:=i+1 to n do if a[j] < a[p] then p:=j ; t:=a[i]; a[i]:=a[p]; a[p]:=t ; end; Writeln(‘the new ‘); For i:=1 to n do write(a[i]:4);
End.

数组类型
例32、将数组a的数据按颠倒的次序重放.

查找

Program li32(input,output); Const n=8; Type ary=Array[1..n] Of Integer; Var a:ary; p,i,j,t:integer;
BEGIN

Writeln(‘input ’,n:2,’data’); For i:=1 to n do Read (a[i]); Readln; For i:=1 to n do Begin t:=a[n]; for j:= n -1 downto i do a[j+1]:=a[j]; a[i]:=t; end; Writeln(‘the new ‘); For i:=1 to n do write(a[i]:4);
End.

数组类型
例32、将数组a的数据按颠倒的次序重放.

查找

A[1] A[2]

A[3]

A[4] A[5] A[6] A[7]

A[8]

4

7

3

5

8

9

6

2

2

6

9
A[3]

8

5

3

7

4
A[8]

A[1] A[2]

A[4] A[5] A[6] A[7]

数组类型
例32、将数组a的数据按颠倒的次序重放.

查找

Program li32(input,output); Const n=8; Type ary=Array[1..n] Of Integer; Var a:ary; p,i,j,t:integer;
BEGIN

Writeln(‘input ’,n:2,’data’); For i:=1 to n do Read (a[i]); Readln; P:= n div 2; For i:=1 to p do Begin j:= n – i +1; t:=a[i]; a[i]:=a[j]; a[j]:= t; end; Writeln(‘the new ‘); For i:=1 to n do write(a[i]:4);
End.

数组类型
例33、将数组a的数据从M个元素起一直到最后的元素平移到数组的开

头,把a[1]到a[m-1]中的元素向后顺移. A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

4

7

3

5

8

9

6

2

9

6

2
A[3]

4

7

3

5

8
A[8]

A[1] A[2]

A[4] A[5] A[6] A[7]

数组类型
例33、将数组a的数据从M个元素起一直到最后的元素平移到数组的开

查找

头,把a[1]到a[m-1]中的元素向后顺移.
Program li33(input,output); Const n=8; Type ary=Array[1..n] Of Integer; Var a:ary; m,i,j,t:integer;
BEGIN

Writeln(‘input ’,n:2,’data’); For i:=1 to n do Read (a[i]); Readln; Readln(m); If m <= n then begin For i:=1 to n-m+1 do Begin t:=a[n]; for j:=n-1 downto 1 do a[j+1]:=a[j]; a[1]:=t; end; Writeln(‘the new ‘); For i:=1 to n do write(a[i]:4);
End.

数组类型
例34、将一个数插入到有序的数组中,要求插入后数组仍有序.如:插入11

A[1] A[2]

A[3]

A[4] A[5] A[6] A[7]

A[8]

2 2

3 3

5 5

8 8

9 9

15
p

22 15

31 22 31

15
p

2

3

5
A[3]

8

9

11

15

22
A[8]

31

A[1] A[2]

A[4] A[5] A[6] A[7]

数组类型
例34、将一个数插入到有序的数组中,要求插入后数组仍有序.如:插入11 Program li34(input,output); Type ary=Array[1..20] Of Integer; Var a:ary; m,i,p,x:integer;
BEGIN

查找

m:=8; Writeln(‘input ’,m:2,’data’); For i:=1 to m do Read (a[i]); Readln; Readln(x); P:=1; While((x>=a[p]) and (p<=m)) do p:=p+1; For i:= m downto p do a[i+1]:=a[i]; a[p]:=x; M:=m+1; Writeln(‘the new ‘); For i:=1 to m do write(a[i]:4);
End.

数组类型
例35、折半查找
12 15 17 24 28 32 45

查找
67 89 145 167 178 211 235 269

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]A[11] A[12]A[13]A[14] A[15]

67 24 15 12 17 28 178

32 45 89

145 167 211

235 269

数组类型
例35、折半查找
12 15 17 24 28 32 45 67 89 145 167 178 211 235 269

查找

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10]A[11] A[12]A[13]A[14] A[15] Program li35(input,output); Const n=15; Type ary=Array[1..n] Of Integer; Var a:ary; i,x,mid,top,bot,p:integer; find:boolean; BEGIN Writeln(‘input 15 data: ’); For i:=1 to n do Read (a[i]); Readln; Writeln(‘input x : ’); Readln(x); Top:=1; bot:=n; find:=false; p:=0; Repeat mid:=(top+bot) div 2; If (x=a[mid]) then Begin p:=mid ; find:=true end; Else if (x< a[mid]) then bot:=mid-1 else if (x>a[mid]) then top:=mid+1 Untile ( (bot < top) or find); Writeln ; If find then writeln(‘find’,x:4,’the position’,p) else writeln(x,‘ not find’) End.

数组类型
例36、旅馆有100个房间,从1到100编了号,第一个服务员把所有房间都打开, 第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把 所有编号是3的倍数的房间“相反处理”。。。以后每个服务员都是如此。 问:第100个服务员来过后,那几扇门是打开的。
Program li36(input,output); Const n=100; Type ary=Array[1..n] Of boolean; Var a:ary; i,j,k:integer; BEGIN

查找

For i:=1 to n do a[i]:=true; For i:=2 to n do for j:= I to n do if j mod I = 0 then a[j]:= not(a[j]); For i:=1 to n do if a[i]= true then write(i:5); readln
End.

数组类型
4 1 2
8 4 8 7 7 6 6 7 5 4 5 7

查找

例37 36、M只猴子要选大王,办法如下:所有猴子按1…M编号围坐一圈,从第1 号开 始按序报数1..N,凡报到N号的退出圈外,如此循环报数,直到圈内只有一只猴 子时,这只猴子就是大王,M和N由键盘输入,打印最后的猴子号.

8

2 1 2 3

3 4

7

4

3 6 1 5 2 8 4

数组类型

查找

例37 36、M只猴子要选大王,办法如下:所有猴子按1…M编号围坐一圈,从第1 号开 始按序报数1..N,凡报到N号的退出圈外,如此循环报数,直到圈内只有一只猴 子时,这只猴子就是大王,M和N由键盘输入,打印最后的猴子号.

4 1 2
8 4 8 7 7 7 6

8

2 1 2 3

3 4

Program li35(input,output); Const n=50; Type ary=Array[1..n] Of Integer; Var a:ary; i,p,q,t,m,n:integer; BEGIN Writeln(‘input the n,m data: ’); readln(m,n); For i:=1 to m do a[i]:=i+1; a[m]:=1; q:=m; p:=m;t:=0; Repeat p:=a[p]; t:=t+1; if (t mod n <>0 ) then q:=p else a[q]:=a[p]; Untile (p=a[p]); Writeln(‘the king is ‘,a[p]) ; End.

4

6 7

5

4 7 5

3 6 1 5 2 8 4

数组类型

查找

例37 36、M只猴子要选大王,办法如下:所有猴子按1…M编号围坐一圈,从第1 号开 始按序报数1..N,凡报到N号的退出圈外,如此循环报数,直到圈内只有一只猴 子时,这只猴子就是大王,M和N由键盘输入,打印最后的猴子号.

4 1 2
8 4 8 7 7 7 6

8

2 1 2 3

Program li35(input,output); Type ary=Array[1..100] Of 0..1; Var a:ary t,m,n,f ,s:integer;

3 4

4

6 7

5

4 7 5

3 6 1 5 2 8 4

BEGIN Writeln(‘input the n,m data: ’); readln(m,n); For i:=1 to m do a[i]:=0; F:=0;t:=0;s:=0; Writeln(‘the jieguo is :’); Repeat t:=t+1; if t=m+1 then t:=1; If a[t]=0 then s:=s+1; If s=n then begin s:=0; write(t,’ ‘ ); a[t]:=1; f:=f+1 end Untile f=m readln End.

数组类型
2、二维数组的定义 A;二维数组类型的定义: TYPE 数组类型名 = array[下标类型1,下标类型2] of 元素类型 Eg: type hao = array [1..100,1..100] of integer; var xh,kh:hao; 也可合并定义: xh,kh:array[1..100,1..100] of integer 说明: ①数组类型名和数组变量名:整体性,通过数组变量名在计算机内存中 开辟一片连续的存储空间;个体性:单独使用A [ I,j ]; ②基类型:每个元素的数据类型。 ③下标类型:一般为子界型,如1..100;-10..10;‘A’ ..‘Z’。 但不能直接写成INTEGER, 决定了数组元素的个数。 ④ 基类型和下标类型共同决定了数组所占的存储空间和结构;

数组类型
2、二维数组的定义 A;二维数组类型的定义: TYPE 数组类型名 = array[下标类型1,下标类型2] of 元素类型 Eg: type hao = array [1..100,1..100] of integer; var xh,kh:hao; 也可合并定义: xh,kh:array[1..100,1..100] of integer

A[1,1]A[1,2] A[1,3] A[1,4] A[2,1] A[2,2] A[2,3]A[2,4]

A[i,j]

数组类型
使用二维数组要注意:
1、数组元素的指称:数组名[行号,列号]。如第三行第四个 元素:a[3,4]。 对某一行进行处理。如累加第4行的数据。则固定行号为4。 如:for i:=1 to 5 do s:=s+a[4,i]; 对某一列进行处理。如累加第4列的数据。则固定列号为4。 如:for i:=1 to 10 do s:=s+a[i,4]; 2、二维数组的输入输出要用双重循环来控制: for i:=1 to 10 do{控制行数} begin for j:=1 to 5 do read(a[i,j]){第一行读入5个元素} readln;{读入一个换行符} end;

数组类型
例38:输入6个人的3门课成绩,输出各人的成绩、总分及各科的平均分。
CONST M=6;N=3; VAR SCORE: ARRAY [ 1..M,1..N ] OF INTEGER ; SUM:ARRAY [1..M ] OF INTEGER; AVER:ARRAY [1..N +1 ] OF REAL ; I ,J:INTEGER;
BEGIN WRITELN(‘ INPUT CHINESE ENGLISH MATH : ’); FOR I := 1 TO M DO BEGIN WRITE(‘NO.’,I:6); FOR J:= 1 TO N DO READ( SCORE [ I ,J ] ); READLN; END; FOR I:= 1 TO M DO BEGIN SUM[ I ] := 0 ; FOR J:= 1 TO N DO SUM [ I ] :=SUM [ I ] + SCORE [ I ,J ] END;

数组类型
例38:输入6个人的3门课成绩,输出各人的成绩、总分及各科的平均分。
CONST M=6;N=3; VAR SCORE: ARRAY [ 1..M,1..N ] OF INTEGER ; SUM:ARRAY [1..M ] OF INTEGER; AVER:ARRAY [1..N +1 ] OF REAL ;I ,J:INTEGER; FOR I:= 1 TO N DO BEGIN AVER[ I ] := 0 ; FOR J:= 1 TO M DO AVER [ I ] :=AVER [ I ] + SCORE [ J , I ]; AVER[ I ] := AVER [ I ] / M END; AVER[ N+1 ] := 0 ; FOR I:= 1 TO M DO AVER [ N+1 ] :=AVER [ N+1 ] +SUM [ I ] ; AVER [ N+1 ] := AVER [ N+1 ] / M ; WRITELN(‘ OUTPUT CHINESE ENGLISH MATH SUM : ’); FOR I := 1 TO M DO BEGIN WRITE(‘NO.’,I:6); FOR J:= 1 TO N DO WRITE( SCORE [ I ,J ] ); WRITELN(SUM [ I ]); END; WRITE(‘AVERAGE : ’); FOR I := 1 TO N+1 DO WRITE(AVER [ I ]:8:1);

字符数组

Type Letter=Array[1..26] OF char; Var a,b:letter;



Var a,b:Array[1..26] Of char;

紧缩字符数组
Type Letter=packed Array [1..26] OF char;

Var
或 Var char;

a,b:letter;
a,b: packed Array [1..26] Of

字符数组
例41:判断从键盘输入的字符串是否为回文(从左到右和从右到左读一 串字符的值)是一样的,如ABCDCBA,1234321,11,1),串长< 100 , 且以点号‘. ’结束。2000年竞赛题:判断一个数是否为回文数。
VAR LETTER:ARRAY [ 1..100 ] OF CHAR ; I,J:0..100 ; CH:CHAR ; BEGIN WRITELN(‘INPUT A STRING : ’); I:= O ;READ(CH); WHILE CH < > ‘. ’ DO BEGIN I:=I+1 ; LETTER[ I ] := CH ; READ(CH); END; J:=1 ;{ I 指向数组的尾部,J指向数组的头部 ,逐个比较 } WHILE (J < I) AND (LETTER[ J ]= LETTER[ I ]) DO BEGIN I:= I – 1 ; J:=J + 1 END; IF J > = I THEN WRITELN(‘YES’) ELSE WRITELN(‘NO ’); END.

字符串类型
Type Letter2=string[n];

其值表示一个具有可变长度的字符序列。其中正整 数n(1<=n<=255)表示构成字符串的字符最多个数,即通 常所说的字符串最大长度。而字符串的实际长度决定程 序运行时的实际字符个数,可以由函数length返回。若 字符串说明中没有指定长度,缺省值为255。 字符串常量可以通过常量说明语句: const 字符串常量名:string[n]=‘字符串’; 规定其常量的串长n,并赋初值。 例如:const head:string[7]='zhoufei';

字符串运算
1、字符串类型定义字符串连接操作‘+’,是将两个 字符串连接成新字符串。连接操作允许字符串类型和字符串 类型混合运用。 如:’turbo’ + ‘pascal’ = ‘turbopascal’ 2、关系运算符< ,<=, >,>=,<>可用于字符串数据间的比 较。但关系运算符的优先级低于连接运算符。 如:’aca’=‘aca’ ; ‘aca’<‘acab’; ‘pascal’<‘Pascal’

Turbo Pascal还提供了不少预定义函数和过程:
过程

1.Delete (st,pos,num) 如:st=‘Turbo Pascal 6.0’

delete(st,7,6) 2.insert (obj,target,pos)
如:st=‘Turbo Pascal 6.0’
Insert(‘is good language’,st ,17)

3.str (value,st) 如:i:=1234; str(i,st) 则 st=‘1234’ 4.val (st,var,code) 如:val(st,I,result)

st=‘1234’

Turbo Pascal还提供了不少预定义函数和过程:
函数

1.copy (st,pos,num) st:=‘disk operating system’ St2:= copy(st,6,9) 2.concat (st1,st2,?,stn) St3:=‘is good’ st4:=concat(st,st3) 3.length (st) a:=lengthe(st3) 4.pos (obj,target) 如:st:=‘see you later’ b:=pos(‘see’,st) (1) c:pos(‘seek’,st) (0)

字符数组
例40:统计一个英文句子中有多少英文单词。假设句子中字符数小于80个,单词间用至少 一个空格隔开(可以有多个空格),句子头部也可以有多个空格,句子以‘*’作为结束 标志。 CONST N=80 ; VAR st:string; ch1,sh2:char; i,l,num:integer; VAR STR:STRING[ N ]; PREC:CHAR; BEGIN NUM,IINTEGER; WRITELN(‘INPUT

STRING : ’); Readln(st) L:=length(st); i:=l,num:=0; While i<=L do begin while st[i]=‘ ‘ do i:=i+1; if i<=L then num:=num+1; while(st[i]<>’ ‘)and (i<=L) do i:=i+1; end; Writeln( ‘the total is:’,num); End.

BEGIN READLN(STR); PREC:=BLANK; NUM:=0; FOR I:=1 TO N DO BEGIN IF (STR[ I ] < > BLANK)AND (PREC=BLANK) then num:=num+1; PREC:=STR[ I ] END; WRITELN(‘NUM OF WORDS IS: ’,NUM:3 ); END.

字符串类型
例41:从健盘上输入两个位数不超过200位,输出它们的和?
Var st :string; x,y :=array[0,201]of intger; I,j,l1,l2:integer;
BEGIN END;

数组类型
2

查找

例36、M只猴子要选大王,办法如下:所有猴子按1…M编号围坐一圈,从第1 号开 始按序报数1..N,凡报到N号的退出圈外,如此循环报数,直到圈内只有一只猴 子时,这只猴子就是大王,M和N由键盘输入,打印最后的猴子号.

8

1 8 7 6 5 6

2 1
2 3 4 5

1
3 8

2 4 8 4 8

2
4

7

4 7 5

7

5

7

4 8 7 7

7

7


更多相关文档:

信息学pascal语言程序设计教案2

信息学pascal语言程序设计教案2_学科竞赛_高中教育_教育专区。信息学 奥赛授课时间 授课方式 授课题目 目的与 要求 重点与 难点 第 2 次课,第 10 周星期 4 理...

信息学pascal语言校本教材

信息学pascal语言校本教材_英语学习_外语学习_教育专区。什么是 Turbo Pascal 1968...(控制码) C 程序(转义) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

信息学pascal语言程序设计教案1

信息学pascal语言程序设计教案1_学科竞赛_高中教育_教育专区。信息学奥赛教程授课...程序例 2.1 第一行称为程序首部,其中用大括号括起来的内容 是注释。 Free ...

信息技术活动课《PASCAL语言程序设计》教学计划

PASCAL语言程序设计》教学计划_其它课程_高中教育_...2、激发学生的创造欲。 3、培养学生对信息技术的...“学”字(为学生服务);教学过程突出一个 “难”...

PASCAL语言程序设计

Pascal 语言信息学奥赛中普遍使用的程序设计语言。 1 / 53 第一节 程序的...如图 1-2 所示: 图 1-2 简单类型是指该类型不能再分解为其它类型,而结构...

信息技术活动课《PASCAL语言程序设计》教学计划

信息技术活动课《PASCAL语言程序设计》教学计划_其它课程_小学教育_教育专区。信息...1/2 相关文档推荐 信息技术活动课教学计划 2页 免费 信息学奥赛--Pascal语言....

Pascal语言和程序设计基础 一

Pascal语言和程序设计基础 32页 2财富值 小学信息学竞赛试题_PASCA... 6页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进...

Pascal程序设计(二级)——基础篇01介绍课程

Pascal程序设计(二级)——基础篇01介绍课程_IT认证_资格考试/认证_教育专区。...至少在 2 个学年内,作为辅助学科学习。。。好,也就是说,我们要综合前辈们的...

Pascal语言教案

信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考...学校PASCAL 作为程序设计课程中的一种主要的语言...2、程序首部是程序的开头部分,它包括: ⑴程序标志...

Pascal语言基础教程

Pascal 语言 信息学奥林匹克竞赛是一项益智性的竞赛...由于以上特点,许多学校选 PASCAL 作为程序设计课程中...Pascal 语言基础教程 第 2 页共 124 页 ⒌在程序...
更多相关标签:
pascal语言教材 | pascal语言程序设计 | c语言程序设计教材 | 高级语言程序设计教材 | pascal语言 | pascal语言教程 | pascal语言视频教程 | pascal和c语言 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com