17.1.4 程序设计语言的基本成分
程序语言至少要回答三个问题:数据是什么,能对数据做什么,执行顺序如何组织。对应到考试,就是数据类型、运算表达式、控制结构和函数/过程。
数据类型:给值划边界
数据类型规定了值的集合、存储方式以及允许的运算。比如整型可做整数算术,布尔型用于逻辑判断,字符型表示字符,指针保存地址。类型系统的意义不是“给变量贴标签”这么简单,而是让编译器能在程序运行前发现一部分错误。
| 类型 | 含义 | 常见误区 |
|---|---|---|
| 整型 | 表示整数,如 int、short、long | 范围有限,可能溢出 |
| 浮点型 | 表示近似实数 | 不适合直接做精确相等比较 |
| 布尔型 | 表示真/假 | 常用于条件表达式 |
| 字符型 | 表示单个字符 | 与字符串不是一回事 |
| 枚举型 | 在有限命名值中取一个 | 本质是受限取值集合 |
| 指针/引用 | 指向对象或地址 | 修改目标对象可能影响外部数据 |
类型转换
表达式中不同类型混合运算时,语言通常会进行隐式转换。例如 int + float 往往先把整数提升为浮点数再计算。赋值时还要看左侧变量类型,可能发生截断或精度损失。
text
int a = 3;
float b = 2.5;
a + b -> 3.0 + 2.5 -> 5.5考试问“表达式结果类型”时,不要只看第一个操作数,要看运算规则和赋值目标。
控制结构:程序流程的三种骨架
| 控制结构 | 作用 | 例子 |
|---|---|---|
| 顺序 | 按语句出现顺序执行 | 先输入,再计算,再输出 |
| 选择 | 根据条件选择分支 | if、switch |
| 循环 | 满足条件时重复执行 | for、while |
递归不是基本控制结构,它是函数调用的一种组织方式;函数也不是控制结构,它是把一段可复用逻辑封装为可调用单元。
为什么只强调三种基本控制结构
结构化程序设计认为,顺序、选择、循环足以表达常规算法流程。它减少了随意跳转带来的混乱,让程序更容易验证和维护。后来的面向对象、函数式、响应式等范式继续提高抽象层次,但底层执行流仍离不开这些基本组织方式。
小练习
题:顺序、选择、循环、递归中,哪一个不是结构化程序设计的基本控制结构?
答:递归。递归依赖函数调用栈,是一种算法组织方式,不是三种基本控制结构之一。
自查
- 数据类型为什么能帮助编译器发现错误?
int + float的结果为什么通常是浮点类型?- 函数、递归和控制结构的边界分别在哪里?