当前位置:首页 > 挺好的pascal教程
type 类型标识符=array[常量1…常量2] of 元素类型
在type部分定义了数组类型后,就可以在var部分定义该类型的数组了。 var
数组名:数组类型名 例如:
type
xsmd=array[1..10] of integer var
x:xsmd;
在type部分,定义了一个名为xsmd的数组类型,这个数组包含10个元素,元素的下标范围是1到10,每个元素的数据类型都是整形。
在var部分,我们定义了一个名为x的数组,它具有xsmd所定义的所有特征。因此数组x包含10个元素,分别是x[1]、x[2]、x[3]、…、x[10],每个元素的数据类型都是整形。
第二种:
不定义数组类型标识符,直接定义数组变量,
var
变量名:array[下标下界..下标上界] of 元素类型
例如:
var x:array[1..10] of integer
这段程序直接定义了一个名为x的数组,它包含10个元素,元素的下标范围是1到10,每个元素的数据类型都是整型。
需要注意的是:
数组的下标可以是任何一种有序类型,例如整型、字符型、布尔型、枚举型等,并且可以从这个类型中的任意一个值开始编排,而不一定从1开始;数组的基类型可以是pascal语言中的任何数据类型,包括自定义类型。
错误的是:下界大于上界、不是有序类型、上下界是变量 例子:中学版p109 演示:中学版p109
二、一维数组
一维数组是指只有一个下标的数组,元素只按一个方向排列,适用于处理一行数据。例如上面我们所举得例子。
一维数组举例: 1、 type
wyj=array[1..10] of real var
a,b:wyj;
定义wyj为一个数组类型,这个数组由10个元素组成,它的下标为1到10。每个元素类型为real。
a、b都是wyj类型的数组变量, a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 1.25 3.17 4.89 2.31 -0.57 5.24 7.81 -3.52 1.93 8.45 下标可以是表达式。例如当i=3时,a[i]的值为4.89,a[2*i-1]的值是-0.57 2、 type
day=(sun,mon,tue,wed,thu,fri,sat); a1=array[day] of integer; a2=array['a',..'z'] of boolean; a3=array['a'..'z'] of integer; var c:a1; d:a2;
e:a3;
数组c由7个整型元素组成,下标是枚举类型day,其值可以用来表示在一星期内每天出席的人数。例如 c[sun] c[mon] c[tue] c[wed] c[thu] c[fri] c[sat] 35 28 30 32 34 29 30 数组d由26个布尔型元素组成,数组的元素可以用来表示相应的字母是否出现,若出现了,值就为true,未出现值就为false。例如 d['a'] d['b'] d['c'] d['d'] d['e'] ... d['z'] true false true true false ... false 数组e由26个整型元素组成,数组元素的值可以用来表示相应字母出现的次数,例如: d['a'] d['b'] d['c'] d['d'] d['e'] ... d['z'] 8 0 5 4 0 ... 0 例2、对下列问题定义数组 1、100名学生的数学成绩
2、表示50名学生的及格或者不及格情况。 解1、var sxcj:array[1..100] of real; 解2、var dj:array[1..50] of boolean;
例3、输入10个数,同时输出这些数。 program li_3; var
n:array[1..10] of integer; i:integer; begin
for i:=1 to 10 do begin
read(n[i]); write(n[i]); end; readln; end.
例4、输入10个数,要求程序按输入时的逆序把这10个数打印出来。 program li_4; var
n:array[1..10] of integer; i:integer; begin
for i:=1 to 10 do read(n[i]); readln;
for i:=10 downto 1 do write(n[i]); writeln; end.
例5、借助一维数组,生成斐波那契数列的前20项。 program li_5; var
n:array[1..20] of integer; i:integer; begin
n[1]:=1; n[2]:=1;
for i:=3 to 20 do n[i]:=n[i-1]+n[i-2]; for i:=1 to 20 do write(n[i],' '); readln; end.
例6、输入5个学生某门课程的成绩,打印出低于平均分的学生序号和成绩 program li_6;
var
a:array[1..5] of integer; i,tot:integer; ave:real; begin tot:=0;
for i:=1 to 5 do begin
read(a[i]); tot:=tot+a[i]; end; ave:=tot/5; for i:=1 to 5 do
if a[i] 例7,从键盘输入5个整数,按升序(从小到大)进行排序,并输出结果。 方法1:纯粹的冒泡法 program li_7; var n:array[1..5] of integer; i,j,t:integer; begin for i:=1 to 5 do read(n[i]); for i:=1 to 4 do for j:=i+1 to 5 do if n[i]>n[j] then begin t:=n[i]; n[i]:=n[j]; n[j]:=t; end; for i:=1 to 5 do write(n[i],' '); end. 我们会发现这种方法两两比大小进行比较的次数是5+4+3+2=14次。(注意是比较,不是交换,交换次数要根据具体数据来)。其实以后我们学算法的时候,还有发现,其实排序有很多种方法呢。 例8. 将a数组中的第一个元素移到最后数组末尾,其余数据依次往前平移一个位置。 program li_8; const n=10; var a:array[1..n] of integer; i:integer; begin for i:=1 to n do read(a[i]); for i:=2 to n do write(a[i],' '); write(a[1]); readln; end. 这样做对吗? program li_8; const n=10; var a:array[1..n] of longint; i,t:integer; begin for i:=1 to n do read(a[i]); t:=a[1]; for i:=1 to n-1 do a[i]:=a[i+1]; a[n]:=t; for i:=1 to n do write(a[i],' '); end. 爸爸的话:编程要多做练习;算法不是唯一的,有很多种。 简单的一维数组练习: 1、求5个数的和是多少? 2、求n个数的和是多少?(n<100) 3、借助一维数组,生成斐波那契数列的前20项 4、输入n个数,求最大的数 program lian_4; var a:array[1..1000] of longint; i,n,b:longint; begin read(n); for i:=1 to n do read(a[i]); b:=a[1]; for i:=1 to n do if b 5、输入n个数,求最大的数位于n个数的第几个 program lian_5; var a:array[1..1000] of longint; i,n,b,t:longint; begin read(n); for i:=1 to n do read(a[i]); b:=a[1]; for i:=1 to n do if b t:=i; {把序号赋值给变量,不赋值给变量,找不到序号} end; writeln('xuhao',t,' ',b); readln; end. 6、输入n个数,求第二大的数。 不同的数据量,决定了可以采用不能的方法,数据量大,适合少用循环,比如n是1个亿,如果用循环排序的方法,显然电脑计算次数多,导致效率低下。 如果数据量大,而且不是求第二大的数,而是求第m大的数,则需要用排序的方法。 下面介绍2中算法: 方法1,使用循环2次的方法求第二大。 program lian_6; var a:array[1..1000] of longint; i,b,c,n:longint; begin readln(n); for i:=1 to n do read(a[i]); {读数组a中的每一个元素的值} b:=a[1]; c:=0; for i:=2 to n do if bc) then c:=a[i]; {小于最大的,再比一下即可找出第
共分享92篇相关文档