Free Pascal 教程:从入门到实践
第一部分:准备工作 - 你好,Pascal!
什么是 Free Pascal (FPC)?
Free Pascal 是一个 32/64 位的、跨平台的 Pascal 编译器,它支持多种 Pascal 方言(包括经典的 Turbo Pascal 和现代的 Delphi/Object Pascal),并且可以编译成多种平台的可执行文件(如 Windows, Linux, macOS, FreeBSD 等)。

它是一个免费、开源、功能强大的 Pascal 语言实现。
为什么要学习 Free Pascal?
- 教学友好:Pascal 语言语法严谨、结构清晰,非常适合作为编程入门的第一门语言,能帮助你建立良好的编程思维。
- 跨平台:一套代码,可以在不同操作系统上编译运行。
- 强大且成熟:拥有丰富的标准库和第三方库,足以开发从控制台应用到图形界面应用的各种程序。
- 怀旧与现代的结合:如果你怀念 Turbo Pascal 的简洁,又希望拥有现代编程语言的功能,Free Pascal 是一个绝佳的选择。
安装 Free Pascal
- 访问官网:前往 Free Pascal 官方网站 https://www.freepascal.org/
- 下载安装包:在 "Download" 页面,根据你的操作系统选择相应的安装包。
- Windows: 下载
install.exe或install-x64.exe,安装过程非常简单,一路点击 "Next" 即可,建议安装时选择 "Full"(完整)安装,以确保所有组件都被安装。 - Linux (Debian/Ubuntu): 可以通过包管理器安装,打开终端,输入:
sudo apt-get update sudo apt-get install fpc
- macOS: 可以使用 Homebrew 安装:
brew install fpc
- Windows: 下载
选择一个代码编辑器
你可以使用任何文本编辑器来编写 Pascal 代码,但为了更好的体验,推荐使用:
- Lazarus IDE (强烈推荐):Lazarus 是一个基于 Free Pascal 的快速应用程序开发环境,类似于 Delphi,它自带了强大的代码编辑器、调试器和窗体设计器。对于初学者,直接安装 Lazarus 是最简单、最方便的选择,因为它已经集成了 Free Pascal 编译器。 你可以在 Lazarus 官网 下载。
- VS Code + 插件:如果你喜欢 VS Code,可以安装
Pasdoc和Free Pascal Compiler插件来获得语法高亮和编译支持。
你的第一个程序:Hello, World!
打开你选择的编辑器(或 Lazarus),创建一个新文件,输入以下代码:
program HelloWorld;
begin
writeln('Hello, World!');
readln; // 等待用户按下回车键,防止程序窗口一闪而过
end.
代码解释:

program HelloWorld;:定义程序的名称为HelloWorld,这是一个良好的编程习惯。begin ... end.:这是 Pascal 程序的主要代码块,所有可执行的语句都放在这里。writeln('Hello, World!');:writeln是 "write line" 的缩写,意思是“写一行”,它会将在括号内的内容(字符串)输出到屏幕上,并自动换行。readln;:readln是 "read line" 的缩写,它会暂停程序,等待用户按下回车键,在 Windows 控制台程序中,如果没有这一句,程序输出后会立即关闭窗口,你可能就看不到结果了。end后面的句点 标志着整个程序的结束。
如何编译和运行?
- 在 Lazarus IDE 中:
- 点击工具栏上的 Run 按钮(通常是一个绿色的播放图标 ▶️)。
- Lazarus 会自动编译并运行你的程序,一个黑色的控制台窗口会弹出,显示 "Hello, World!",然后等待你按回车。
- 在命令行中 (Windows):
- 将代码保存为
hello.pas。 - 打开命令提示符 (CMD) 或 PowerShell。
- 使用
fpc hello.pas命令进行编译。 - 编译成功后,在同一目录下会生成
hello.exe文件。 - 输入
hello.exe并回车来运行程序。
- 将代码保存为
第二部分:Pascal 语言核心语法
变量与常量
变量是用于存储数据的容器,在使用变量前,必须先声明它的类型。
变量声明:
使用 var 关键字。
var myName: string; // 存储字符串 age: integer; // 存储整数 height: real; // 存储实数(小数) isStudent: boolean; // 存储布尔值 (true/false)
常量声明:
使用 const 关键量,常量的值在程序运行期间不能被改变。
const PI = 3.14159; APP_NAME = 'My First App';
赋值:使用 符号(注意是冒号等号,不是等号)。
myName := 'Alice'; age := 25; height := 1.68; isStudent := true;
基本数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
integer |
整数 ( -123, 0, 42) | var num: integer; |
real |
实数/浮点数 ( -3.14, 0.0, 100.5) | var pi: real; |
string |
字符串 (一串文本) | var s: string; |
char |
单个字符 | var c: char; |
boolean |
布尔值,只有 true 和 false 两个值 |
var flag: boolean; |
输入与输出
writeln(输出内容);并换行。write(输出内容);但不换行。readln(变量);:从键盘读取一行输入,并赋值给变量,如果省略变量,则只等待回车。
示例:
program InputOutput;
var
userName: string;
userAge: integer;
begin
write('请输入你的名字: ');
readln(userName); // 读取用户输入的名字
write('请输入你的年龄: ');
readln(userAge); // 读取用户输入的年龄
writeln('你好, ', userName, '!'); // 使用 write 输出,不换行
writeln('你今年 ', userAge, ' 岁了。');
readln;
end.
运算符
- 算术运算符: (加), (减), (乘), (除, 结果为实数),
div(整数除法),mod(取余)。var a, b: integer; a := 10; b := 3; writeln(a / b); // 输出 3.333333... writeln(a div b); // 输出 3 writeln(a mod b); // 输出 1
- 比较运算符: (等于),
<>(不等于),<(小于),>(大于),<=(小于等于),>=(大于等于),结果为布尔值。 - 逻辑运算符:
and(与),or(或),not(非),用于连接布尔值。var x, y: boolean; x := true; y := false; writeln(x and y); // 输出 false writeln(x or y); // 输出 true writeln(not x); // 输出 false
控制结构
A. 条件语句
if ... then ... else ...
program IfElse;
var
score: integer;
begin
write('请输入你的考试分数 (0-100): ');
readln(score);
if score >= 90 then
writeln('优秀!')
else if score >= 60 then
writeln('及格。')
else
writeln('不及格,继续努力!');
readln;
end.
B. 循环语句
for ... do ...:用于已知循环次数的场景。
program ForLoop;
var
i: integer;
begin
for i := 1 to 5 do
writeln('这是第 ', i, ' 次循环。');
readln;
end.
while ... do ...:用于在条件为真时重复执行。
program WhileLoop;
var
count: integer;
begin
count := 1;
while count <= 5 do
begin
writeln('Count is: ', count);
count := count + 1; // 别忘了更新循环变量!
end;
readln;
end.
repeat ... until ...:与while类似,但它是先执行一次,然后判断条件,如果条件为true则退出循环。
program RepeatLoop;
var
number: integer;
begin
repeat
write('请输入一个大于 10 的数字: ');
readln(number);
until number > 10;
writeln('你输入的数字是: ', number);
readln;
end.
第三部分:进阶概念
过程与函数
为了代码的复用和模块化,我们将代码块封装成过程或函数。
- 函数:执行一个任务,并返回一个结果。
- 过程:执行一个任务,但不返回结果。
语法:
function 函数名(参数列表): 返回类型; begin // 函数体 // 必须使用 函数名 := 值; 来返回结果 end; procedure 过程名(参数列表); begin // 过程体 end;
示例:
program FunctionsProcedures;
// 函数:计算两个数的和
function Add(a, b: integer): integer;
begin
Add := a + b; // 返回结果
end;
// 过程:打印欢迎信息
procedure Welcome(name: string);
begin
writeln('欢迎, ', name, '!');
end;
var
x, y, sum: integer;
myName: string;
begin
myName := 'Bob';
Welcome(myName); // 调用过程
x := 10;
y := 20;
sum := Add(x, y); // 调用函数,并将返回值赋给 sum
writeln('计算结果: ', sum);
readln;
end.
数组
数组是存储一系列相同类型数据的集合。
program Arrays;
var
// 声明一个包含 5 个整数的数组
numbers: array[1..5] of integer;
i: integer;
begin
// 给数组赋值
numbers[1] := 10;
numbers[2] := 20;
numbers[3] := 30;
numbers[4] := 40;
numbers[5] := 50;
// 使用 for 循环遍历并打印数组
for i := 1 to 5 do
writeln('numbers[', i, '] = ', numbers[i]);
readln;
end.
记录
记录允许你将不同类型的数据组合成一个单一的结构体。
program Records;
// 定义一个“学生”记录类型
type
TStudent = record
name: string;
age: integer;
score: real;
end;
var
student1: TStudent; // 声明一个 TStudent 类型的变量
begin
// 给记录的各个字段赋值
student1.name := 'Charlie';
student1.age := 21;
student1.score := 88.5;
// 访问并打印记录的字段
writeln('学生姓名: ', student1.name);
writeln('学生年龄: ', student1.age);
writeln('学生分数: ', student1.score:0:1); // :0:1 表示不显示整数部分,保留1位小数
readln;
end.
第四部分:学习资源与进阶
官方资源
- Free Pascal 官网: https://www.freepascal.org/ - 获取最新的编译器、文档和新闻。
- Lazarus 官网: https://www.lazarus-ide.org/ - Lazarus 的主页,包含教程、组件库和社区支持。
- FPC 官方文档: https://www.freepascal.org/docs.html - 最权威的参考手册,适合查阅具体函数和语言的细节。
社区与论坛
- Lazarus 中文论坛: https://www.lazarus-cn.org/ - 非常活跃的中文社区,遇到问题可以在这里提问。
- Free Pascal 邮件列表: https://lists.freepascal.org/ - 官方的邮件列表,适合深度讨论。
推荐书籍
- 《Pascal 程序设计》 - 由 Niklaus Wirth (Pascal 语言的创始人) 编写,是经典中的经典,适合深入理解语言本质。
- 《使用 Lazarus 开发跨平台应用程序》 - 中文书籍,专门针对 Lazarus IDE 进行讲解。
项目实践
学习编程最好的方式就是动手实践,尝试用你学到的知识做一些小项目:
- 计算器:实现一个简单的命令行计算器,支持加减乘除。
- 猜数字游戏:程序随机生成一个数字,让用户来猜,并给出“大了”或“小了”的提示。
- 通讯录:使用记录和数组,实现一个简单的命令行通讯录,可以添加、删除和查看联系人。
- 待办事项列表:创建一个可以添加、标记完成和删除待办事项的程序。
这份教程为你铺就了学习 Free Pascal 的道路,从安装环境、编写第一个程序,到掌握变量、循环、函数等核心概念,再到学习数组和记录,你已经具备了用 Pascal 解决基本问题的能力。
编程是一门实践性很强的技能,多写代码、多思考、多尝试,遇到问题多查阅文档和社区,祝你学习愉快!
