【2025年软考中级】第二章 2.1 程序设计语言的基本概念
文章目录
- 程序语言基础:程序设计语言的基本概念
- 程序设计语言是什么?
- 语言的级别:低级 vs 高级
- 程序如何运行?
- 理解语言本身:四个要素
- 编程语言的大家族(按风格分类)
程序语言基础:程序设计语言的基本概念
程序设计语言是什么?
简单来说,程序设计语言就是人和计算机沟通的“语言”。我们用它来编写指令(程序),告诉计算机要做什么。
语言的级别:低级 vs 高级
-
低级语言 (面向机器):
- 机器语言: 计算机硬件唯一能直接理解的“母语”,就是由0和1组成的指令。对初学者来说非常难懂和编写。
- 汇编语言: 用一些简单的英文单词缩写(符号)代替0和1指令,比如
ADD
代表加法,SUB
代表减法。比机器语言好读一些,但仍然很接近硬件,需要了解计算机内部结构。用汇编语言写的程序叫源程序。 - 为什么叫“低级”? 因为它们非常接近计算机硬件的底层操作(二进制)。
-
高级语言:
- 功能更强,抽象程度更高,更接近人类使用的自然语言(比如英语),比如使用
print
,if
,for
这样的关键词。大大降低了编程的难度。用高级语言写的程序也叫源程序。 - 常见高级语言特点:
- Fortran: 擅长科学计算,运行效率高。
- Pascal: 设计初衷是为了教学,结构清晰,表达能力强。
- C语言: 功能强大,运行效率高,是结构化语言。特别擅长直接操作计算机内存(指针操作),常用来开发操作系统、驱动程序等系统软件。
- C++: 在C语言基础上增加了面向对象编程能力,也很高效。
- Java: 面向对象语言。它先编译成一种中间代码(字节码),然后在Java虚拟机(JVM)上运行,因此能实现跨平台(一次编写,到处运行)。
- C#: 微软开发的面向对象语言。也编译成中间代码,在微软的.NET框架上运行。
- Python: 面向对象语言。它是一种解释型语言(下面会讲解释),常被用作脚本语言来自动化任务,语法简洁易学。
- Prolog: 一种特殊类型的语言(逻辑型),基于逻辑推理来解决问题。
- 功能更强,抽象程度更高,更接近人类使用的自然语言(比如英语),比如使用
程序如何运行?
我们写的源代码(源程序)计算机不能直接理解,需要“翻译”成机器语言。
- 汇编 (针对汇编语言): 把用符号(如
ADD
,SUB
)写的汇编语言源程序,翻译成计算机能执行的机器语言程序(目标程序)。 - 编译和解释 (针对高级语言): 把高级语言源程序转换成机器能执行的形式。
- 编译 (如 C, C++):
- 编译程序会一次性把你的整个源代码文件翻译成一个独立的可执行文件(比如Windows上的
.exe
文件)。 - 然后你直接运行这个可执行文件就行。
- 优点: 运行速度快,效率高(因为翻译工作提前做完了)。
- 缺点: 修改代码后需要重新编译才能看到效果;运行时可执行文件独立,无法直接控制源代码。
- 编译程序会一次性把你的整个源代码文件翻译成一个独立的可执行文件(比如Windows上的
- 解释 (如 Python, JavaScript):
- 解释程序会读取你的源代码,逐行一边翻译一边执行。
- 不会生成独立的可执行文件。
- 优点: 修改代码后立刻就能运行看到结果,非常方便调试;解释器在运行时可以访问和控制源代码。
- 缺点: 因为要边翻译边执行,运行速度通常比编译后的程序慢。
- 编译 (如 C, C++):
简单比喻:
- 编译: 像把一本外文书一次性全部翻译成中文书(可执行文件),以后直接读中文书就行了(运行快)。
- 解释: 像请一个翻译(解释器)坐在你旁边,你读一行外文(源代码),翻译就给你说一行中文(执行一行),没有生成完整的中文书(没有独立可执行文件)。
理解语言本身:四个要素
要真正掌握一门编程语言,需要了解它的四个方面:
- 语法 (Syntax): 语言的规则。就像英语的语法规定句子结构一样,程序语言的语法规定代码该怎么写才算“正确”。
- 词法规则: 规定基本字符(字母、数字、符号)如何组成有意义的“单词”(也叫符号或标记),比如
if
,123
,+
。 - 语法规则: 规定这些“单词”如何组合成更大的、有意义的“句子”和“段落”(如表达式、语句、函数、整个程序)。
- 词法规则: 规定基本字符(字母、数字、符号)如何组成有意义的“单词”(也叫符号或标记),比如
- 语义 (Semantics): 语法正确的代码片段到底是什么意思?它具体要计算机做什么?
- 静态语义: 在代码写好、编译之前就能确定的意思。主要是关于“类型”的规则(比如数字不能和文字直接相加),编译器在编译阶段就能检查出来。
- 动态语义: 在程序实际运行时才能体现出来的意思。比如
a / b
这个除法,语法和静态语义(类型检查)都没问题,但如果运行时b
的值是0,就会出错(除零错误),这就是动态语义。
- 语用 (Pragmatics): 研究语言符号(关键词、操作符等)与使用者(程序员)的关系。比如某个语法特性设计的初衷是什么?在什么场景下使用最合适?使用它会带来什么好处或潜在问题?
- 语境 (Context): 指语言运行和理解的环境。包括:
- 编译环境: 用什么编译器/解释器?版本是什么?有哪些编译选项?
- 运行环境: 程序在什么操作系统上跑?需要哪些库支持?硬件配置如何?
编译器如何理解你的代码?(简述过程)
- 词法分析: 把源代码拆分成一个个有意义的“单词”(符号)。
- 语法分析: 检查这些“单词”组合起来是否符合语言的语法规则(结构是否正确)。如果这里出错,就是“语法错误”。
- 语义分析: 检查代码在意思上是否合理(主要是类型检查)。如果这里出错,就是“语义错误”(比如类型不匹配)。同时收集代码信息。
- (可选)中间代码生成: 根据前面的分析,生成一种更容易被转换成机器码的中间形式。
- 目标代码生成: 把中间代码(或直接分析结果)最终转换成计算机能直接执行的机器语言代码(目标程序)。
编程语言的大家族(按风格分类)
- 命令式 & 结构化语言: 像写步骤清单一样告诉计算机一步一步怎么做。强调程序的控制流程(顺序、分支、循环)。代表:Fortran, Pascal, C。
- 面向对象语言 (OOP): 把程序看作一组相互作用的对象(包含数据和操作数据的方法)。核心概念是类、对象、继承、封装、多态。代表:C++, Java, C#, Python, Smalltalk。
- 函数式语言: 计算过程主要看作数学函数的求值。强调用函数来组合和变换数据,避免改变状态和可变数据。代表:LISP, Haskell, Scala, Scheme, APL。
- 逻辑型语言: 基于形式逻辑规则。程序员描述问题的事实和规则,语言系统根据逻辑推理来寻找答案。代表:Prolog。