pascal数组教程,新手们看看吧,应该很详细了
pascal吧
全部回复
仅看楼主
level 1
小阳光Ei 楼主
一楼给度娘,别插楼,
喜欢的懂了的请粉一下,顶一下[Love]
2011年08月27日 11点08分 1
level 1
小阳光Ei 楼主
为什么要使用数组
例题 输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。
【分析】 在解决这个问题时,虽然可以通过一个变量来累加读入的50个成绩求出学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数后才能求得平均分,并且要求打印出低于平均分的学生序号和成绩,故必须把50个学生的成绩都保留起来, 然后逐个和平均分比较,把低于平均分的成绩打印出来。如果,用简单变量a1,a2,…,a50存储这些数据,要用50个变量保存输入的数据,程序片断如下:
readln(a1,a2…,a10);

readln(a41,a42,…,a50)
注意,如果真正要像上面这样编写程序,则上面的所有省略号必须用完整的语句写出来。可以看出,这样的程序是多么繁琐。如果说处理的数据规模达到成千上万,上面的例子单单读入就会异常复杂,电脑的特点没有得到体现。
从以上的讨论可以看出,如果只使用简单变量处理大量数据,就必须使用大量只能单独处理的变量,即使是简单问题也需要编写冗长的程序。
同学们可能已经看出,我们需要把一大批具有相同性质的数据组合成一个新类型的变量,可以用简单的程序(比如循环50次)对这个新变量的各个分量进行相同的处理,每个分量仍然保留单个变量的所有性质(在上面的例子中,各分量是整型变量或实型变量的性质)。
如果能象数学中使用下标变量ai形式表示这50个数,则问题就容易实现。在Pascal语言中,具有下标性质的数据类型是数组。如果使用数组,上面的问题就变得十分简单、清晰。例如,读入50个学生的成绩,只需写如下语句即可:
for i := 1 to 50 do readln(a[i]);

2011年08月27日 11点08分 2
level 1
小阳光Ei 楼主
为什么要使用数组
例题 输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。
【分析】 在解决这个问题时,虽然可以通过一个变量来累加读入的50个成绩求出学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数后才能求得平均分,并且要求打印出低于平均分的学生序号和成绩,故必须把50个学生的成绩都保留起来, 然后逐个和平均分比较,把低于平均分的成绩打印出来。如果,用简单变量a1,a2,…,a50存储这些数据,要用50个变量保存输入的数据,程序片断如下:
readln(a1,a2…,a10);

readln(a41,a42,…,a50)
注意,如果真正要像上面这样编写程序,则上面的所有省略号必须用完整的语句写出来。可以看出,这样的程序是多么繁琐。如果说处理的数据规模达到成千上万,上面的例子单单读入就会异常复杂,电脑的特点没有得到体现。
从以上的讨论可以看出,如果只使用简单变量处理大量数据,就必须使用大量只能单独处理的变量,即使是简单问题也需要编写冗长的程序。
同学们可能已经看出,我们需要把一大批具有相同性质的数据组合成一个新类型的变量,可以用简单的程序(比如循环50次)对这个新变量的各个分量进行相同的处理,每个分量仍然保留单个变量的所有性质(在上面的例子中,各分量是整型变量或实型变量的性质)。
如果能象数学中使用下标变量ai形式表示这50个数,则问题就容易实现。在Pascal语言中,具有下标性质的数据类型是数组。如果使用数组,上面的问题就变得十分简单、清晰。例如,读入50个学生的成绩,只需写如下语句即可:
for i := 1 to 50 do readln(a[i]);

2011年08月27日 11点08分 3
level 1
小阳光Ei 楼主
在这里引用了带下标的变量(分量变量称为数组元素)a[i]来代替a1,a2…,a50,方括号中的i称为下标,当循环变量i=1时a[i]就是a[1];当i=2时a[i]就是a[2]……;当i=50时a[i]就是a[50]。输入的时候,让i从1变化到50,循环体内输入语句中的a[i]也就分别代表了a1,a2…,a50这50个带下标的变量。这样上述问题的程序可写为:
tot := 0; // tot存储50个学生的总分
for i := 1 to 50 do // 循环读入每一个学生的成绩,并把它累加到总分中
begin
read(a[i]);
tot := tot+a[i];
end;
ave := tot/50; //计算平均分
for i := 1 to 50 do
if a[i]<ave then writeln('No.',i,' ',a[i]);
//如果第i个同学成绩小于平均分,则将输出这个学生的序号和成绩。
要在程序中使用下标变量,必须先说明这些下标变量的整体―数组,即数组是若干个同名(如上面的下标变量的名字都为a)下标变量的**,这些变量的类型全部一致。

2011年08月27日 11点08分 4
level 1
小阳光Ei 楼主
ok 开始讲课 [Yeah]
2011年08月27日 11点08分 5
level 1
小阳光Ei 楼主
一、引入数组的必要性
两个例子:
1.输入100个数,要求按输入时相反的顺序打印出这100个数。
2.输入100名学生的成绩,要求把高于平均分的那些成绩打印出来。
结论:对于程序中涉及到的数据,当数据类型相同且需要重复利用,对数据进行的操作也大致相似,在这种情况下,一般使用数组。
二、数组与构造类型
1.数组:数组是一种常用的数据类型,它是由固定数目的相同类型的元素按一定的顺序排列而成。在pascal语言中,数组的元素个数必须事先确定,数组元素的数据类型也必须是固定的、唯一的。
2.构造类型:构造类型是指从各种简单类型构造出来的新类型,构造类型的变量称为构造变量,它具有一个以上的分量,每一个分量可以继续构造变量,一直到最低一级分量,最低级分量必须是不能再分的简单类型。
3.数组类型就是一种构造类型。

2011年08月27日 11点08分 6
level 1
小阳光Ei 楼主
一维数组
一维数组的定义
1.在说明部分type区中定义数组类型,然后再在var区中说明数组。形式如下:
type
数组类型名=array[下标类型] of 数组元素类型;
例如:
type
rowtype=array[1..100] of real;
var
a,b:rowtype;
2.直接在var区中定义数组。形式如下:
var
数组名:array[下标类型] of 数组元素类型;
对于上例有:
a,b:array[1..100] of real;

2011年08月27日 11点08分 7
level 1
小阳光Ei 楼主
说明:
数组类型名按标识符的规则起名。
array,of是保留字。
[]中的下标类型可以是任何顺序类型。
of后面说明的是数组元素的类型,同一数组中要求元素类型相同。
2011年08月27日 11点08分 8
level 1
小阳光Ei 楼主
二:数组的存储结构
定义数组后,pascal编译程序在内存中为数组开辟了一串连续的存储单元。例如:
type
color=(red,yellow,blue,white,black);
rowtype=array[1..10] of real;
inttype=array[‘A’..’E’] of integer;
colortype=array[color] of char;
var
a:rowtype;
b:inttype;
c:colortype;

2011年08月27日 11点08分 9
level 1
小阳光Ei 楼主
说明:
1.一般用某一个基类型的子界来定义下标类型。
2.下标类型和数组元素类型是两个不同的概念。
3.c数组的5个元素的顺序是由枚举类型的定义决定的
2011年08月27日 11点08分 10
level 1
小阳光Ei 楼主
五一维数组的基本操作
1.数组元素的赋值、输入、输出
【例1】:输入100个数,要求输入时相反的顺序打印出这100个数。
program ex6_1;
type
atype=array[1..100] of integer;
var
a:atype;
i:integer;
begin
writeln(‘input 100 datas:’);
for i:=1 to 100 do read(a[i]);
writeln(‘revers:’);
for i:=100 downto 1 do write(a[i]:5);
end.

2011年08月27日 11点08分 13
level 1
小阳光Ei 楼主
2.数组元素的移动
【例2】:将数组中的元素依次向前平移一个位置。
program ex_3;
const n=10;
var
a:array[1..n] of integer;
i,temp:integer;
begin
writeln(‘read’,n,‘datas’);
for i:=1 to n do read(a[i]);
temp:=a[1];
for i:=1 to n-1 do a[i]:=a[i+1];
a[n]:=temp;
writeln(‘result:’);
for i:=1 to n do write(i:6);
end.

2011年08月27日 11点08分 14
level 1
小阳光Ei 楼主
3.数组元素的查找、插入、删除
【例4】:对于数组a,输入一个测试数据x,如果x存在于数组中,则把x元素删除;否则将x插在相应的位置,要求数组仍然有序(假设数组递增)
program ex_4;
const n=10;
var a:array[1..n+1] of integer;
x:integer;
i,j:integer;
begin
writeln(‘read array a:’);
for i:=1 to n do read(a[i]);
write(‘x=’);
read(x);
i:=1;

2011年08月27日 11点08分 15
level 1
小阳光Ei 楼主
while (a[i]<x) and (i<=n) do i:=i+1;
if i=n+1 then
begin
a[i]:=x;writeln(‘not found and insert last’);
for j:=1 to n+1 do write(a[j]:6);
end else
if a[i]=x then
begin
writeln(‘found and deleted.’);
for j:=i to n-1 do a[j]:=a[j+1];
for j:=1 to n-1 do write(a[j]:6);
end else
begin
writeln(‘not found and insert in place’);
for j:=n+1 downto i+1 do a[j]:=a[j-1];
a[i]:=x;
for j:=1 to n+1 do write(a[j]:3);
end;
end.

2011年08月27日 11点08分 16
level 1
小阳光Ei 楼主
[啊!]我搞了好久了 有木有人?
难道你们都会?
都是OIER 别跑堂好不好?
2011年08月27日 11点08分 17
level 1
小阳光Ei 楼主
奥 忘了说 教程到16搂结束
2011年08月27日 11点08分 18
level 1
请问这是书上的么?我觉得蛮好的,但是好像在哪里看过......
2011年09月09日 13点09分 20
level 7
好贴 一定要顶 虽然我学过了!~~
2011年10月15日 00点10分 21
level 1
我是新手,希望能多看到这样的文章。
2011年11月04日 01点11分 22
1 2 尾页