C++程序设计第一章
计算机语言
程序员与计算机沟通的语言
描述解决问题的方法和相关数据
计算机语言的级别
- 二进制代码得机器语言
- 使用助记符的汇编语言
- 使用类似英语单词和语句的高级语言
C++是面向对象的高级语言
- 封装
- 消息通信
C++支持的程序设计方法
- 面向过程的程序设计方法
- 面向对象的程序设计方法
- 泛型程序设计方法
C++程序的开发过程
- 算法设计
- 源程序编辑
- 编译
- 连接
信息在计算机中的表示存储
- 计算机中的数据都是二进制的
- 逻辑数据,字符数据也用二进制码表示
计算机系统简介
- 输入设备
- 内存储器
- 外存储器
- CPU
- 输出设备
计算机的工作需要人来指挥
- 计算机解决问题是软件控制的
- 软件的程序就是操作步骤
- 程序要使用语言来表达
计算机能识别的是机器语言
机器语言指令是由0和1编码的
例如:
加法指令可能是 0001
计算机指令系统
- 机器硬件能够识别的语言(机器语言)的集合
- 它是软件和硬件的主要界面
计算机软件:
- 应用软件
- 系统软件 操作系统
- 中间件 提供系统软件和应用软件之间链接的软件
软件 = 程序 + 文档
计算机程序
- 指令的序列
- 描述解决问题的方法和数据
计算机语言和程序设计方法的发展
机器语言
- 由二进制代码构成
- 计算机硬件可以识别
- 可以表示简单的操作
- 例如:
加法,减法,数据移动等等
最初的计算机语言–机器语言和人类的自然语言之间存在巨大鸿沟
汇编语言
- 将机器指令映射为一些助记符。如ADD,SUB,MOV等
- 抽象层次低,需要考虑机器细节
高级语言
- 关键字,语句容易理解
- 有含义的数据命名和算式
- 抽象层次高,例如 A + B
- 屏蔽了机器的细节,例如 count << a + b + c
C++语言
- 是高级语言
- 支持面向对象的观点和方法
- 将客观事物看做对象
- 对象间通过消息传送进行沟通
- 支持分类和抽象
程序设计方法和发展历程
面向过程的程序设计方法
- 机器语言,汇编语言,高级语言都支持
- 最初的目的,用于数学计算
- 主要工作,设计求解问题的过程
大型复杂的软件,难以用面向过程的方式编写
面向对象的程序设计方法
- 面向对象的高级语言支持
- 一个系统有对象构成
- 对象与对象之间通过消息通信
面向对象的基本概念
对象(Object)
- 一般意义上的对象:
是现实世界中一个实际存在的事物 - 面向对象方法中的对象:
是系统中用来描述客观事物的一个实体
抽象与分类
- 分类所依据的原则–抽象
- 抽象出同一类对象的共同属性和行为,形成类
类与对象的关系
- 类型与实例的关系
封装
- 隐蔽对象的内部细节
- 对外形成一个边界
- 只保留有限的对外接口
- 使用方便,安全性好
继承
- 软件复用
- 改造,扩展已有类行成新的类
多态
- 同样的消息作用在不同对象上有可能引起不同的行为
程序的开发过程
高级语言 要翻译成 机器语言
源程序
- 用源语言写的,有待翻译的程序
目标程序
- 源程序通过翻译加工以后生成的机器语言程序
可执行程序
- 连接目标程序以及库中的某些文件,生成的可执行程序
三种不同类型的翻译程序
- 汇编程序
将汇编语言源程序翻译成目标程序 - 编译程序
将高级语言源程序翻译成目标程序 - 解释程序
将高级语言源程序翻译成机器指令,是边翻译边执行
JAVA语言是半编译半解释的,目的是为了跨平台
C++程序是直接编译成本地机器语言代码
C++程序开发过程
- 算法与数据结构设计
- 源程序编辑
- 编译
先做语法检查
编译 - 连接
- 测试
- 调试
信息的表示和存储
计算机中的信息与存储单位
计算机中的基本功能
- 算术运算
- 逻辑运算
计算机中的信息
- 控制信息
指挥计算机操作 - 数据信息
信息的存储单位
- 位 bit
数据的最小单位 - 字节 Byte
8位二进制 1Byte = 8bit - 千字节
1KB = 1024B - 兆字节
1MB = 1024KB - 吉字节
1GB = 1024MB
计算机的数字系统
数字系统是二进制系统,基本符合0,1
三个二进制 = 一个八进制 四个二进制 = 一个十六进制
R进制 转 十进制:
- 各位数字与他的权相乘,其积想加
例如:
11111111.11 = 1 * 27 + 1 * 26 + 1 * 25 + 1 * 24 + 1 * 23 + 1 * 22 + 1 * 21 + 1 * 20 + 1 * 2-1 + 1 * 2-2
= 255.75
十进制 转 R进制:
- 除以R 取余
十进制小数 转 R进制小数:
- 乘以R 取整
数据的编码表示
0 表示正数
1 表示负数
原码:
- 符号 – 绝对值 表示的编码
- 缺点
- 0的表示不唯一
- 进行四则运算时,符号位需单独处理且运算规则复杂
补码:
- 0的表示唯一
- 符号位可作为数值参加运算
- 补码运算结果还是补码
模数:
n位二进制整数的模数为2的n次方
n位小数的模数是2
补数:
一个数减去另一个数(加上一个负数)
等于第一个数加第二个数的补数
例如:
8 + (-2) = 8 + 10 (mod 12) = 6
补码的计算规则
反码:作为中间码
反码的计算规则:
负整数
- 原码符号位不变(仍是1)
- 其余各位取反(0 变 1 , 1 变 0)
例如:
X = -1100110
原码 = 11100110
反码 = 10011001
正整数
原码就是反码就是补码
补码的计算规则
- 反码作为中间码
- 负数补码 = 反码 + 1
- 正数补码 = 原码 = 反码
如果负数之和得正数或正数之和为负数说明运算结果溢出
小数的表示
浮点方案
N = M * 2E
E:2的幂次,称数N的阶码,反映了该浮点数所表示的数据范围
M:N的尾数 位数反映了数据的精度
字符的表示
字符在计算机中通过编码表示
- ASCII码:
常用的西文字符编码,7位二进制表示一个字符,最多可表示 2的7次方 = 128个字符 - 汉字编码
中国国家标准