计算机程序设计 声明 序·数据标识的目的:区分数据 模拟世界中各种数据的联系,构造具有复杂结构的数据 基 础°声明的目的 将程序执行时数据对象的名字与类型信息通知编译器, 在数据对象与数据值及存储位置间建立关联 辅助编译器选择合适的存储表示 使得类型检查静态化,减少程序错误 声明与定义 声明并不一定就是定义,声明虽引入名字,但只有那些 确实在程序中引入了实体的声明才是定义 清华大学计算中心 http://learn.tsinghua.edu.cn 6
清华大学计算中心 http://learn.tsinghua.edu.cn 6 计 算 机 程 序 设 计 基 础 声 明 • 数据标识的目的:区分数据 – 模拟世界中各种数据的联系,构造具有复杂结构的数据 • 声明的目的 – 将程序执行时数据对象的名字与类型信息通知编译器, 在数据对象与数据值及存储位置间建立关联 – 辅助编译器选择合适的存储表示 – 使得类型检查静态化,减少程序错误 • 声明与定义 – 声明并不一定就是定义,声明虽引入名字,但只有那些 确实在程序中引入了实体的声明才是定义
计 算 5.2代码的基本概念 机 程 序·表达式语义 设 计·赋值与初始化 基 础 代码与计算 控制流 断言与程序不变量 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 7 计 算 机 程 序 设 计 基 础 5.2 代码的基本概念 • 表达式语义 • 赋值与初始化 • 代码与计算 • 控制流 • 断言与程序不变量
计 算 表达式语义 机 程 序 表达式语义:表达式的求值顺序 设 C语言未规定表达式求值顺序,一般由操作符的优先级 计 与结合性决定 基 础·例外情况 递增递减操作符满足特定计算规则 不同编译器的实现可能不同:出于优化的目的,编译器 可能重排部分代码,表达式的求值顺序可能会发生用户 事先无法察觉的变化 既是优点(程序设计可以高度灵活)也是缺点(错 误的求值顺序带来错误的计算结果) 明确表达设计意图,尽量不在表达式中使用带副作用的 操作符,表达式应尽量简短 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 8 计 算 机 程 序 设 计 基 础 表达式语义 • 表达式语义:表达式的求值顺序 – C 语言未规定表达式求值顺序,一般由操作符的优先级 与结合性决定 • 例外情况 – 递增递减操作符满足特定计算规则 – 不同编译器的实现可能不同:出于优化的目的,编译器 可能重排部分代码,表达式的求值顺序可能会发生用户 事先无法察觉的变化 • 既是优点(程序设计可以高度灵活)也是缺点(错 误的求值顺序带来错误的计算结果) – 明确表达设计意图,尽量不在表达式中使用带副作用的 操作符,表达式应尽量简短
计 算 赋值与初始化 机 序·赋值:将数据对象与某个具体值相关联的基本操作 设 左值:出现在赋值号左边的数据对象具有左值,在程序 计 基 中表现为数据对象的地址 础 右值:出现在赋值号右边的数据对象具有右值,在程序 中表现为数据对象的值 例:x 初始化 初始化不是赋值:赋值可以在程序运行期间执行多次, 初始化只在为变量分配存储空间时执行一次 未初始化的数据对象只有左值没有右值,其存储内容维 持原先位序列,所以不要引用未初始化的数据对象 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 9 计 算 机 程 序 设 计 基 础 赋值与初始化 • 赋值:将数据对象与某个具体值相关联的基本操作 – 左值:出现在赋值号左边的数据对象具有左值,在程序 中表现为数据对象的地址 – 右值:出现在赋值号右边的数据对象具有右值,在程序 中表现为数据对象的值 – 例:x = x; • 初始化 – 初始化不是赋值:赋值可以在程序运行期间执行多次, 初始化只在为变量分配存储空间时执行一次 – 未初始化的数据对象只有左值没有右值,其存储内容维 持原先位序列,所以不要引用未初始化的数据对象!
计 算 代码与控制流 机 程 序·代码与计算:代码是计算的简洁表达 设 操作为程序的基本单位,一系列的操作构成计算以及计 计 基 算的顺序 础 静态代码文本与动态执行过程 程序在运行期间根据静态代码文本产生计算过程,即动 态执行过程 两者并不相同,优秀的程序员应保证两者尽可能匹配, 例如少用甚至不用goto语句 ·控制流 控制程序流向的程序结构:复合、分支、循环 清华大学计算中心 http://learn.tsinghua.edu.cn 10
清华大学计算中心 http://learn.tsinghua.edu.cn 10 计 算 机 程 序 设 计 基 础 代码与控制流 • 代码与计算:代码是计算的简洁表达 – 操作为程序的基本单位,一系列的操作构成计算以及计 算的顺序 • 静态代码文本与动态执行过程 – 程序在运行期间根据静态代码文本产生计算过程,即动 态执行过程 – 两者并不相同,优秀的程序员应保证两者尽可能匹配, 例如少用甚至不用goto语句 • 控制流 – 控制程序流向的程序结构:复合、分支、循环