admin 管理员组文章数量: 1086019
2024年3月20日发(作者:压力容器包括哪些)
解: 如下图所示。
(a)编译时 (b)执行New语句 (c)执行P^:=4 (d)执行i:=P^
分配存储
单元
内存单元示意图
(四)对指针变量的操作
前已述及,对指针所指向的变量(如P^)可以进行指针的基类型所允许的 全部
操作。
对指针变量本身,除可用New、Dispose过程外,尚允许下列操作:
⒈具有同一基类型的指针变量之间相互赋值
例2 设有下列说明与程序段:
var p1,p2,p3:^integer;
begin
New(P1) ; New(P2); New(P3);
P1:=P2; P2:=P3;
end;
2、可以给指针变量赋nil值
nil是PASCAL的关键字,它表示指针的值为"空"。例如,执行:
p1:=ni1后,p1的值是有定义的,但p1不指向任何存储单元。
3、可以对指针变量进行相等或不相等的比较运算
在实际应用中,通常可以在指针变量之间,或指针变量与nil之间进行相等(=)或
不相等(<>=的比较,比较的结果为布尔量。
例3 输入两个整数,按从小到大打印出来。
分析:不用指针类型可以很方便地编程,但为了示例指针的用法,我们利用指针类
型。定义一个过程swap用以交换两个指针的值。
源程序如下:
Type pointer=^integer;
var p1,p2:pointer;
procedure swap(var q1,q2:pointer);
var q:pointer;
begin
q:=q1;
q1:=q2;
q2:=q;
end;
begin
new(p1);new(p2);
write('Input 2 data:');readln(pq^,p2^);
if p1^>p2^ then swap(p1,p2);
writeln('Output 2 data:',p1^:4,p2^:4);
end.
二、链表结构
设有一批整数(12,56,45,86,77,……,),如何存放呢? 当然我们可以选择以
前学过的数组类型。但是,在使用数组前必须确定数组元素的个数。如果把数组定义得
大了,就会有大量空闲存储单元,定义得小了,又会在运行中发生下标越界的错误,这
是静态存储分配的局限性。
利用本章介绍的指针类型可以构造一个简单而实用的动态存储分配结构――链表
结构。
下图是一个简单链表结构示意图:
其中:①每个框表示链表的一个元素,称为结点。
②框的顶部表示了该存储单元的地址(当然,这里的地址是假想的)。
③每个结点包含两个域:一个域存放整数,称为数据域,另一个域存放下一个结点
(称为该结点的后继结点,相应地,该结点为后继结点的前趋结点)的地址。
④链表的第一个结点称为表头,最后一个结点表尾,称为指针域;
⑤指向表头的指针head称为头指针(当head为nil时,称为空链表),在这个指针
变量中 存放了表头的地址。
⑥在表尾结点中,由指针域不指向任何结点,一般放入nil。
(一)链表的基本结构
由上图可以看出:
①链表中的每个结点至少应该包含两个域;一是数据域,一是指针域。因此,每个
结点都是一个记录类型,指针的基类型也正是这个记录类型。因此,head可以这样定义:
type pointer=^ rec;
rec=record
data:integer;
next:pointer;
end;
var head:pointer;
②相邻结点的地址不一定是连续的。整个链表是通过指针来顺序访问的,一旦失去
了一个指针值,后面的元素将全部丢失。
③与数组结构相比,使用链表结构时;可根据需要采用适当的操作步骤使链表加长
或缩 短,而使存储分配具有一定的灵活性。这是链表结构的优点。
④与数组结构相比,数组元素的引用比较简单,直接用"数组名[下标]"即可,因为
数组元素占用连续的存储单元,而引用链表元素的操作却比较复杂。
(二)单向链表的基本操作
上图所示的链表称为单向链表。下面我们通过一些例题来说明对单向链表的基本操
作,并假设类型说明如前所述。
例6 编写一个过程,将读入的一串整数存入链表, 并统计整数的个数。
分析:过程的输入为一串整数,这在执行部分用读语句完成。过程的输出有两个:
一是链表的头指针,一是整数的个数,这两个输出可以用变量形参来实现。
由于不知道整数的个数,我们用一个特殊的9999作为结束标记。
过程如下:
procedure creat(var h:pointer;var n:integer);
var p,q:pointer;x:integer;
begin
n:=0;h:=nil; read(x);
while x<>9999 do
begin
New(p);
n:=n+1;p^.data:=x;
if n=1 then h:=p
else q^.next:=p;
q:=p;read(x)
end;
if h<>nil then q^.next:=nil;
Dispose(p);
end;
例7 编一过程打印链表head中的所有整数,5个一行。
分析:设置一个工作指针P,从头结点顺次移到尾结点,每移一次打印一个数据。
过程如下:
procedure print(head:pointer);
var p:pointer; n:integer;
begin
n:=0;p:=head;
while p<>nil do
begin
write(p^.data:8);n:=n+1;
if n mod 5=0 then writeln;
p:=p^.next;
end;
writeln;
end;
(三)链表结点的插入与删除
链表由于使用指针来连接,因而提供了更多了灵活性,可以插入删除任何一个成分。
设有如下定义:
type pointer=^rec;
rec=record
data:integer;
next:pointer
end;
var head:pointer;
⒈结点的插入
如下图所示,要在P结点和Q结点之间插入一个结点m,其操作如下:
只要作如下操作即可:
New(m);
read(m^.data);
m^.next:=q;
p^.next:=m;
例8 设链表head中的数据是按从小到大顺序存放的,在链表中插入一个数,使链
表仍有序。
分析:显然,应分两步:查找、插入。设po指向要插入的结点,若仅知道po应
插在p之前(作为p的前趋结点)是无法插入的,应同时知道p的前趋结点地址q。
当然,如果插在链表原头结点这前或原链表为空表或插在原尾结点之后,则插入时
又必须作特殊处理。
过程如下:
procedure inserting(var head:pointer;x:integer);
var po,p,q:pointer;
begin
new(po);po^.data:=x;
p:=head;
if head=nil{原表为空表}
then begin
head:=po;po^.next:=nil;
end
else begin
while (p^.data
begin
q:=p;p:=p^.next
end;
if p^.data>=x{不是插在原尾结点之后}
then begin
if head=p then head:=po
else q^.next:=po;
po^.next:=p
end
else begin
po^.next:=po;
po^.next:=nil
end;
end;
end;
⒉结点的删除
如下图所示,要在删除结点P的操作如下:
要删除结点P,则只要将其前趋结点的指针域指向P 的后继结点即可。
q^.next:=p^.next;
dispose(p);
例9 将链表head中值为X的第一个结点删除
分析: 有三种情况存在:头结点的值为X; 除头结点外的某个结点值为X;无值为X
的结点。为将前两种情况统一起来, 我们在头结点之前添加一个值不为X的哨兵结点。
算法分两步:查找、删除。
过程如下:
procedure deleteing(var head:pointer;x:integer);
var p,q:pointer;
begin
New(p);p^.data:=x-1;p^.next:=head;
head:=p;{以上为添加哨兵结点}
while(x<>p^.data)and(p^.next<>nil)do
begin
q:=p;
p:=p^.next
end;
if x=p^.data{存在值为X的结点}
then q^.next:=p^.next
else writeln('NOt found!');
head:=head^.next{删除哨兵}
end;
(四)环形链表结构
在单向链表中,表尾结点的指针为空。如果让表尾结点的指针域指向表头结点,则
称为单向环形链表,简称单链环。如图所示。
单链环示意图
(五)双向链表结构
单链表中,每个结点只有一个指向其后继结点的指针域。如果每个结点不仅有一个
指向其后继结点的指针域,还有一个指向其前趋的指针域,则这种链表称为双向链表。
如图所示。
双向链表示意图
可用如下定义一个数据域为整型的双向链表:
type pointer=^node;
node=record
prev:pointer;
data:integer;
next:pointer;
end;
对双向链表的插入、删除特别方便。与单向链环相似,我们还可定义双向链环。
三、综合例析
例10 读入一串以"#"为结束标志的字符,统计每个字符出现的次数。
分析:设置一个链表存放,每读入一个字符,就从链表的头结点向后扫描链表,如
果在链表中此字符已存在,则其频率加1, 否则将该字符的结点作为链表的新头结点,
相应频率为1。
源程序如下:
program ex11_10;
type ref=^letters;
letters=record
key:char;
count:integer;
next:ref;
end;
var k:char;
sentinel,head:ref;
procedure search(x:char);
var w:ref;
begin
w:=head;
sentinel^.key:=x;
while w^.key<>x do w:=w^.next;
if w<>sentinel
then w^.count:=w^.count+1
else begin
w:=head;new(head);
with head^ do
begin
key:=x;count:=1;next:=w;
end
end;
end;{of search}
procedure printlist(w:ref);
begin
while w<>sentinel do
begin
writeln(w^.key:2,w^.count:10);
w:=w^.next;
end;
end;{of printlist}
begin{main program}
new(sentine);
with sentinel^ do
begin
key:='#';count:=0;next:=nil;
end;
head:=sentinel;
read(k);
while k<>'#' do
begin
search(k);read(k);
end;
printlist(head);
end.
例11 用链表重写筛法求2~100之间所有素数程序。
源程序如下:
program ex11_12;
uses crt;
type link=^code;
code=record
key:integer;
next:link;
end;
var head:link;
procedure printlist(h:link);{打印链表h}
var p:link;
begin
p:=h;
while p<>nil do
begin
write(p^.key,'-->');
p:=p^.next;
end;
end;
procedure buildlink;{建立链表}
var p,q:link;
i:integer;
begin
new(head);
head^.key:=2;
p:=head;
for i:=3 to 100 do
begin
new(q);
q^.key:=i;
q^.next:=nil;
p^.next:=q;
p:=q;
end;
end;
procedure prime;{筛法将找到的素数的倍数从链表中删除}
var h,p,q:link;
begin
h:=head;
while h<>nil do
begin
p:=h;q:=p^.next;
while q<>nil do
if (q^.key mod h^.key=0) then
begin
p^.next:=q^.next;
dispose(q);
q:=p^.next;
end
else begin
p:=q;
q:=q^.next;
end;
h:=h^.next;
end;
end;
begin{main program}
clrscr;
buildlink;
printlist(head);
writeln;
prime;
printlist(head);
end.
练习
1、围绕着山顶有10个洞,一只兔子和一只狐狸各住一个洞,狐狸总想吃掉兔子。
一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10。你从第10号洞出发,
先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数
不限。若能找到我,你就可以饱餐一顿,在没找到我之前不能停止。狐狸一想只有10
个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件。结果就是没找着。
利用单链环编程,假定狐狸找了1000次,兔子躲在哪个洞里才安全。
2、某医院病房的订位管理中, 将病人的记录按姓名的字母顺序排成一个链表。试
编写程序,从键盘上输入下列字母,就可对病员记录进行管理:
(1)i───新病人入院(插入一个病员记录)。
(2)d───病人出院(删除一个病员记录,并显示该记录)。
(3)s───查询某病员记录(显示该记录或"未找到")。
(4)q───在屏幕上列出所有的病员记录并结束程序。
3、编写一个简单的大学生新生入校登记表处理程序。
文件类型
在DOS操作中,我们所谈及的文件称之为外部文件。外部文件是存储在外部设备上, 如:
外存储器上,可由计算机操作系统进行管理,如用dir、type等命令直接对文件进行操
作。
Pascal所谈及的文件,称之为内部文件。内部文件的特点是文件的实体(实际文件)
也是存储在外存储器上,成为外部文件的一分子,但在使用时必须在程序内部以一定的
语句与实际文件联系起来,建立一一对应的关系,用内部文件的逻辑名对实际文件进行
操作。内部文件的逻辑名必须符合PASCAL语言标识符的取名规则。
Pascal中的文件主要用于存放大量的数据。如:成绩管理,原始数据很多,使用文
件先将其存入磁盘,通过程序读出文件中的数据再进行处理,比不使用文件要来得方便、
有效。
Pascal中的一个文件定义为同一类型的元素组成的线性序列。文件中的各个元素按
一定顺序排列,可以从头至尾访问每一个元素,从定义上看,文件与数组相似,但它们
之间有着明显不同的特征,主要表现在:
(1)文件的每一个元素顺序存贮于外部文件设备上(如磁盘上)。因此文件可以
在程序进行前由Pascal程序或用文字编辑软件,如edit、ws、Turbo Pascal的edit
命令等产生,或在运行过程中由程序产生,且运行完后,依然存贮在外部设备上。
(2)在系统内部,通过文件指针来管理对文件的访问。文件指针是一个保存程序
在文件中位置踪迹的计算器,在一固定时刻,程序仅能对文件中的一个元素进行读或写
的操作,在向文件写入一个元素或从文件读取一个元素后,相应的文件指针就前进到下
一元素位置。而数组是按下标访问。
(3)在文件类型定义中无需规定文件的长度即元素的个数,就是说元素的数据可
动态改变,一个文件可以非常之大,包含许许多多元素,也可以没有任何元素,即为一
个空文件。而数组的元素个数则是确定的。
使用文件大致有以下几个步骤;
(1)说明文件类型,定义文件标识符;
(2)建立内部文件与外部文件的联系;
(3)打开文件;
(4)对文件进行操作;
(5)关闭文件。
Turbo Pascal将文件分为三类:文本文件(顺序)、有类型文件(顺序或随机)和
无类型文件(顺序或随机)。下面将介绍这些文件及其操作。
一、文本文件
文本文件又称为正文文件或行文文件,可供人们直接阅读,是人机通信的基本数据
形式之一。文本文件可用文字编辑程序(如DOS的edit或Turbo Pascal的编辑命令edit)
直接建立、阅读和修改, 也可以由PASCAL程序在运行过程中建立。
1、文本文件的定义:
文本文件的类型为TEXT,它是由ASCII字符组成的,是Pascal提供的标准文件之
一。标准文件 TEXT已由Pascal说明如下:
TYPE TEXT=FILE OF CHAR;
因此,TEXT同标准类型INTEGER、READ等一样可以直接用于变量说明之中,无需再
由用户说明。 例如:
VAR F1,F2:TEXT;
这里定义了两个文本文件变量F1和F2。
2、文本文件的建立
文本文件的建立有两种方法:
(1)直接用Turbo Pascal的Edit建立原始数据文件。
例1 将下表中的数据存入名为的文件中。
3 4
29 30 50 60
80 90 70 75
60 50 70 45
操作步骤:
①进入Turbo Pascal的编辑状态;
②输入数据;
③存盘,文件名取。
此时,已将数据存入文本文件中。文本文件也可用DOS中的Edit等软件建
立。
(2)用程序的方式建立中间数据或结果数据文件。
用程序的方式建立文件操作步骤为:
①定义文本文件变量;
②把一外部文件名赋于文本文件变量,使该文本文件与一相应外部文件相关联;
命令格式:ASSIGN(f,name)
f为定义的文本文件变量
name为实际文件文件名
如:ASSIGN(F1,``)
或:ASSIGN(F1,``)
这样在程序中对文本文件变量F1的操作,也就是对外部实际文件``或
``的操作。上例中文件``是存贮在当前目录中,而文件
``则是存贮在PAS子目录中。
③打开文本文件,准备写;
命令格式1:REWRITE(f)
功能:创建并打开新文件准备写,若已有同名文件则删除再创建
命令格式2:APPEND(f)
功能:打开已存在的文件并追加
④对文件进行写操作;
命令格式:WRITE(f,<项目名>)
或:WRITELN(f,<项目名>)
功能:将项目内容写入文件f中
⑤文件操作完毕后,关闭文件。
命令格式:CLOSE(f)
例2 从键盘上读入表12.1的数据,用程序写入名为的文件中。
3、读取文本文件
文本文件内容读出操作步骤:
①定义文本文件变量;
②用ASSIGN(f,name)命令,将内部文件f与实际文件name联系起来;
③打开文本文件,准备读;
命令格式:READ(f,<变量名表>) READLN(f,<变量名表>)
功能:读文件f中指针指向的数据于变量中
文本文件提供了另外两个命令,在文本的操作中很有用处,它们是:
EOLN(f):回送行结束符
EOF(f):回送文件结束符
⑤文件操作完毕,用CLOSE(f)命令关闭文件。
例3 读出例12.1建立的文本文件,并输出。
由于文本文件是以ASCII码的方式存储,故查看文本文件的内容是极为方便,在DOS
状态可使用 DOS中TYPE等命令进行查看,在Turbo Pascal中可以象取程序一样取出文
件进行查看。
4、文本文件的特点
(1)行结构
文本文件由若干行组成,行与行之间用行结束标记隔开,文件末尾有一个文件结束
标记。由于各行长度可能不同,所以无法计算出给定行在文本文件中的确定位置,从而
只能顺序地处理文本文件,而且不能对一文本文件同时进行输入和输出。
(2)自动转换功能
文本文件的每一个元素均为字符型,但在将文件元素读入到一个变量(整型,实型
或字符串型)中时,Pascal会自动将其转换为与变量相同的数据类型。与此相反在将一
个变量写入文本文件时,也会自动转移为字符型。
例4 某学习小组有10人,参加某次测验,考核6门功课, 统计每人的总分及各
门的平均分,将原始数据及结果数据放入文本文件中。
分析
(1)利用Turbo Pascal的EDIT建立原始数据文件存贮在磁盘中,
其内容如下:
10 6
1 78 89 67 90 98 67
2 90 93 86 84 86 93
3 93 85 78 89 78 98
4 67 89 76 67 98 74
5 83 75 92 78 89 74
6 76 57 89 84 73 71
7 81 93 74 76 78 86
8 68 83 91 83 78 89
9 63 71 83 94 78 95
10 78 99 90 80 86 70
(2)程序读入原始数据文件,求每人的总分及各门的平均分;
(3)建立结果数据文件,文件名为.
程序:
例5 读入一个行长不定的文本文件。排版,建立一个行长固定为60个字符的文
件, 排版要求:(1)当行末不是一个完整单词时,行最后一个字符位用'-'代替, 表
示与下一行行头组成完整的单词;(2)第一行行头为两个空格,其余各行行头均不含有
空格。
分析
(1)建立原始数据文件。
(2)程序边读入原始数据文件内容,边排版。
(3)每排完一行行长为60字符,并符合题中排版条件,写入目标文件中。
设原始数据文件内容如下:
Pavel was arrested.
That dat Mother did not light the stove.
Evening came and a cold wind was blowing.
There was a knock at the window.
Then another.
Mother was used to such knocks,but this time she gave a little start of joy.
Throwing a shawl over her shoulders,she opened the door.
程序:
对文本文件运行程序得到排版结果文件内容如下:
Pavel was dat Mother did not light the stov-
evening came and a cold wind was was a knock
at the was used to such knocks,b-
ut this time she gave a little start of ng a shawl
over her shoulders,she opened the door.
二、有类型文件
文本文件的元素均为字型符。若要在文件中存贮混合型数据,必须使用有类型文件。
1、有类型文件的定义
有类型文件中的元素可以是混合型的,并以二进制格式存贮,因此有类型文件(除
了字符类型文件,因为它实质上是文本文件)不象文本文件那样可以用编辑软件等进行
阅读和处理。
有类型文件的类型说明的格式为:
类型标识符=File of 基类型;
其中基类型可以是除了文件类型外的任何类型。例如:
FILE1=FILE OF INTEGER;
FILE2=FILE OF ARRAY[1--10] OF STRING;
FILE3=FILE OF SET OF CHAR;
FILE4=FILE OF REAL;
FILE5=FILE OF RECORD;
NAME:STRING;
COURSE:ARRAY[1--10] OF READ;
SUN:READ;
END;
等等,其中FILE2,FILE3,FILE5中的数组、集合、记录等类型可以先说明再来定义
文件变量。
例如:
VAR
F1:FILE;
F2,F3:FILE3;
F4:FILE5;
与前面所有类型说明和变量定义一样,文件类型说明和变量定义也可以合并在一
起,例如:
VAR
F1:FILE OF INTEGER;
F2,F3:FILE OF SET OF CHAR;
F4:FILE OF RECORD
NAME:STRING;
COURSE:ARRAY[1--10] OF REAL;
SUM:READ;
END;
Turbo Pascal对有类型文件的访问既可以顺序方式也可以用随机方式。
为了能随机访问有类型文件,Turbo Pascal提供如下几个命令:
命令格式1:seek(f,n)
功能:移动当前指针到指定f文件的第n个分量,f为非文本文件,n为长整型
命令格式2:filepos(f)
功能:回送当前文件指针,当前文件指针在文件头时,返回,函数值为长整型
命令格式3:filesize(f)
功能:回送文件长度,如文件空,则返回零,函数值为长整型
2、有类型文件的建立
有类型文件的建立只能通过程序的方式进行,其操作步骤与文本文件程序方式建立
的步骤相仿,不同之处:(1)有类型文件的定义与文本文件的定义不同;(2)有类
型文件可以利用SEEK命令指定指针随机写入。
3、有类型文件的访问
有类型文件访问的操作步骤与文本文件的程序访问操作步骤相仿,区别之处:(1)
有类型文件的定义与文本文件的定义不同;(2)有类型文件可以利用SEEK命令访问
文件记录中的任一记录与记录中的任一元素。
例6 建立几个学生的姓名序、座号、六门课程成绩总分的有类型文件。
分析:为简单起见,这里假设已有一文本文件,其内容如下:
10
li hong
1 89 67 56 98 76 45
wang ming
2 99 87 98 96 95 84
zhang yi hong
3 78 69 68 69 91 81
chang hong
4 81 93 82 93 75 76
lin xing
5 78 65 90 79 89 90
luo ze
6 96 85 76 68 69 91
lin jin jin
7 86 81 72 74 95 96
wang zheng
8 92 84 78 89 75 97
mao ling
9 84 86 92 86 69 89
cheng yi
10 86 94 81 94 86 87
第一个数10表示有10个学生,紧接着是第一个学生的姓名、座号、6科成绩,
然后是第二个学生,等等。
从文本文件中读出数据,求出各人的总分,建立有类型文件,设文件名为
,文件的类型为记录studreco,见下例程序。
程序:
例7 产生数1-16的平方、立方、四次方表存入有类型文件中, 并用顺序的
方式访问一遍,用随机方式访问文件中的11和15两数及相应的平方、立方、四次方
值。
分析:建立有类型文件文件名为,文件的类型为实数型。
(1)产生数1-16及其平方、立方、四次方值,写入,并顺序读出输
出;
(2)用SEEK指针分别指向11和15数所在文件的位置,其位置数分别为10
×4和14×4(注意文件的第一个位置是0),读出其值及相应的平方、立方、四次
方值输出。
程序:
程序运行结果如下:
另外,Turbo Pascal还提供了第三种形式文件即无类型文件,无类型文件是低层I
/O通道,如果不考虑有类型文件、 文本文件等存在磁盘上字节序列的逻辑解释,则数
据的物理存储只不过是一些字节序列。这样它就与内存的物理单元一一对应。无类型文
件用128个连续的字节做为一个记录(或分量)进行输入输出操作,数据直接在磁盘
文件和变量之间传输,省去了文件缓解区,因此比其它文件少占内存,主要用来直接访
问固定长元素的任意磁盘文件。
无类型文件的具体操作在这里就不一一介绍,请参看有关的书籍。
三、综合例析
例8 建立城市飞机往返邻接表。文本文件内容如下:
第一行两个数字N和V;
N代表可以被访问的城市数,N是正数<100;
V代表下面要列出的直飞航线数,V是正数<100;
接下来N行是一个个城市名,可乘飞机访问这些城市;
接下来V行是每行有两个城市,两城市中间用空格隔开,表示这两个城市具有直通
航线。
如:CITY1 CITY2表示乘飞机从CITY1到CITY2或从CITY2到CITY1。
生成文件,由0、1组成的N×N邻接表。
邻接表定义为:
分析
(1)用从文本文件中读入N个城市名存入一些数组CT中;
(2)读入V行互通航班城市名,每读一行,查找两城市在CT中的位置L、K,建
立邻接关系,lj[l,k]=1和lj[k,j]=1;
(3)将生成的邻接表写入文本文件中。
设内容如下:
10 20
fuzhou
beijin
shanghai
wuhan
hongkong
tiangjin
shenyan
nanchan
chansa
guangzhou
fuzhou beijin
fuzhou shanghai
fuzhou guangzhou
beijin shanghai
guangzhou beijin
wuhan fuzhou
shanghai guangzhou
hongkong beijin
fuzhou hongkong
nanchan beijin
nanchan tiangjin
tiangjin beijin
chansa shanghai
guangzhou wuhan
chansa beijin
wuhan beijin
shenyan beijin
shenyan tiangjin
shenyan shanghai
shenyan guangzhou
程序:
得到文件内容如下:
10
1 fuzhou
2 beijin
3 shanghai
4 wuhan
5 hongkong
6 tiangjin
7 shenyan
8 nanchan
9 chansa
10 guangzhou
0 1 1 1 1 0 0 0 0 1
1 0 1 1 1 1 1 1 1 1
1 1 0 0 0 0 1 0 1 1
1 1 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 1 0 0
0 1 1 0 0 1 0 0 0 1
0 1 0 0 0 1 0 0 0 0
0 1 1 0 0 0 0 0 0 0
1 1 1 1 0 0 1 0 0 0
例9 对例12.3的文件内容按总分的高低顺序排序。
分析:
文件的排序就是将文本文件的各分量按一定要求排列使文件有序,文件排序有内排
序和外排序二种,内排序是指将文件各分量存入一个数组,再对数组排列,最后将该数
组存入原来的文件。外排列不同于内排列,它不是将文件分量存入数组,而是对文件直
接排序,内排序比外排序速度要快,但当文件很大时,无法调入内存,此时用外排序法
较合适。
本程序使用过程SEEK,实现外排序。
程序:
习 题
1、编一程序,计算文本文件中行结束标志的数目。
2、计算文本文件的行长度的平均值、最大值和最小值。
3、一文本文件存放N个学生某学科成绩,将成绩转换成直方图存入
文件中。
如内容为:
5
78 90 87 73 84
得到直方图文件内容为:
5
********
*********
*********
*******
********
4、银行账目文件含有每一开户的账目细节:开户号、姓名、地址、收支平衡额。
写一程序,读入每一开户的账目,生成银行账目文件。
5、通讯录文件每个记录内容为:姓名、住址、单位、邮编、电话,编一程序按姓
名顺序建立通讯录文件,要求先建立文件,再对文件按姓名顺序进行外排序。
版权声明:本文标题:Pascal语言入门 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710923567a579782.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论