第一章 第1章 C语言层序设计预备知识
第1节 计算机系统的组成
1. 什么是计算机?
计算机是以逻辑部件为物质基础,能够对信息进行自动处理的机器
2. 如何表示“信息”?
二进制
3. 计算机系统的组成
(1) 运算器(算术逻辑部件ALU)
数据运算包括算术运算和逻辑运算
(2) 控制器(中央处理器CPU)
它是计算机核心和关键
(3) 存储器
用来存放程序或数据。
存储器可分为两大类:即内存储器(主存)和外存储器(外存)
(4) 输入设备
(5) 输出设备
(6) 系统软件
软件是指计算机程序及相关程序的技术文档资料,更重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。
一类是面向计算机本身的软件,另一类是面向用户的软件
(7) 应用软件
4. 软件与硬件的关系
硬件和软件互相依存、硬件和软件无严格界线、硬件和软件协同发展
5. 计算机的工作原理
各种各样的信息通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示。整个过程由控制器进行控制
第2节 进位计数制及其转换
一、 数码、基与权
数码:表示数的符号
基数:数码的个数
权:每一位所具有的值
二、 十进制数、二进制(b)、八进制(O)和十六进制的表示(Ox)
三、 二进制和十进制、八进制和十六进制的转换(按权相加)(计算)
(练习)
第3节 机器的表示形式及其表示范围
一、 真值与机器数
(1) 真值:一个带符号数由两部分组成:一部分表示数的符号,另一部分表示数的数值。一般,直接用正号“+”和负号“-”来表示符号的二进制数,叫做符号数的真值。
(2) 机器数:计算机中的数是用二进制来表示的,数的符号也是用二进制来表示的。
二、 数的原码、反码、补码表示
(1) 原码(符号-数值表示)
- 当N为正数时,[N]原和N的区别只是增加一位用0表示的符号位。由于在数的左边增加一位0对该数的数值并无影响,所以[N]原就是N本身。
- 当N为负数时,[N]原和N的区别是增加一位用1表示的符号位
- 在原码表示中,有两种不同形式的0,即:
[+0]原 = 000…0 或 0.00…0
[-0]原 = 100…0 或 1.00…0
(2) 反码(对1的补数,将原码数值按位求反) - 正数N的反码[N]反与原码[N]原相同。
- 对于负数N,其反码[N]反的的符号为1,数值部分是将原码数值按位求反。
- 在反码表示中,有两种不同形式的0,即:
[+0]反 = 000…0 或 0.00…0
[-0]反 = 111…1 或 1.11…1
(3) 补码(对2的补数,按位求反,末位加1) - 正数的补码相同,而负数的补码表示不同
- 在补码中,0的表示形式是唯一的
- 绝大多数机器数的表示采用补码表示法。象C语言中整数在计算机中就是以其补码的形式存储的。
(4) 对比
原码 反码 补码
表示数的范围
三、 补码的加、减运算(计算)
四、 无符号整数
16位无符号数的表示范围是:0 ≤ N ≤ 65535,
8位无符号数的表示范围是:0 ≤ N ≤ 255。
五、 字符表示法
第4节 二进制数的位运算(计算)
(1) “与”运算(AND) “·”或“∧”- &
结论:即只有A、B两个变量取值均为1,则它们“与”运算的结果才为1,其它均为0
(2) “或”运算(OR) “+”或“∨”- |
结论:即A、B变量中只要一个变量取值为1,则它们“或”运算的结果就是1
(3) “非”运算(NOT) - ~
结论:即将A的值求反。
(4) “异或”运算(XOR)- ^
结论:即当两个变量的取值相异时,则它们“异或”运算的结果就是1,相同则结果为0。
第二章 基本数据类型、运算符与表达式
第1节 常量、变量和标识符
一、 标识符
(1) 定义:用来标识变量、常量、函数等的字符序列
- 组成:
- 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线
- C语言的关键字不能用作变量名
- 大小写敏感
(2) 长度:有效长度为32个字符。随系统而异,但至少前8个字符有效 - 命名原则:
- 变量名和函数名中的英文字母一般用小写,以增加可读性
- 见名知意
- 不宜混淆 如l与I, o与0
二、 常量
(1) 定义:程序运行时其值不能改变的量(即常数)
(2) 常量的分类 :
(1) 直接常量( 值常量)
整型常量: 10、15、-10、-30
实型常量: 12.5、 30.0、-1.5
字符常量: ‘A’、‘b’、‘c’
字符串常量: “sum”、“A”、“123”
(2) 符号常量
用标识符来代表常量。
其定义格式为:
三、 变量
(1) 定义:程序运行时其值可以被改变的量
(2) 变量的两要素 :变量名 、变量值
(3) 变量的定义格式 :
四、 简单数据类型与表示范围
(1) 整型数据
- 整型常量
- 十进制整数:由数字0~9和正负号表示 . 如:123,-456,0
- 八进制整数:由数字0开头,后跟数字0~7表示.如:0123,011
- 十六进制整数:由0x或0X开头,后跟0~9,a~f,A~F表示.如0x123,0Xff
-
整数在内存中的表示:在内存中用补码的形式存放。(P36)
-
整型变量
(1) 整型变量的定义 -
整数常量的分类
无符号基本型(unsigned int或unsigned)
有符号短整型(short int或short)
无符号短整型(unsigned short int或unsigned short)
有符号长整型(long int或long)
无符号长整型(unsigned long int或unsigned long)
整型常量后加字母l或L,认为它是long int 型常量。比如123L、45l、0XAFL。
无符号数也可用后缀表示,整型常数的无符号数的后缀为U或u。例如:358u, 0x38Au,235Lu 均为无符号数。
前缀、后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。
(2) 实型数据 -
实型常量(实数或浮点数)
十进制小数形式:由数字0~9和小数点组成 . 如:0.0,5.6,-5.
指数形式:由十进制数,加阶码标志e或E以及阶码(只能为整数,可以带符号)组成.
其一般形式为:aEn
-
实型变量
单精度实型(float)
float f = 3.14, g;
这种定义的变量在内存中占4个字节(32位)的存储单元。
双精度实型(double)
double x, y;
这种定义的变量在内存中占8个字节(64位)的存储单元。
长双精度实型(long double)
long double x, y;
(3) 字符型数据和字符串常量 -
字符型常量
(1) 定义:用单引号括起来的单个普通字符或转义字符
(2) 字符常量的值:该字符的ASCII码值
(3) 转义字符:反斜线后面跟一个字符或一个代码值表示
/、‘、“作为字符常量要使用’’括起来’\’ , ’\’’ , ’\”’
转义字符用到反斜杠,字符常量用到单引号,字符串用到双引号 -
字符串常量
(1) 定义:用双引号(“”)括起来的字符序列
(2) 存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志 -
字符型变量
字符型数据类型符是char(字符character)
在内存中占1个字节(8位)
字符变量存放字符ASCII码
char与int数据间可进行算术运算
存在有符号和无符号之分。默认情况下为有符号
(4) 简单数据类型的表示范围
第2节 C语言的运算符与表达式
五、 赋值运算符、赋值表达式
略
六、 强制类型转换符
(1) 自动转换
短长度的数据类型 → 长长度的数据类型
有符号短长度的数据类型 → 无符号或有符号长长度的数据类型
长长度的数据类型 → 短长度的数据类型
长度相同的数据类型转换
(2) 强制转换
无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。
七、 算术运算符、算术表达式
“-”负数时右结合
八、 自增自减运算符、符号运算符
(1) 负号运算符(“-”)
(2) 自增、自减运算符++ –
- 前置 ++i, --i (先执行i=i+1或i=i-1,再使用i值)
- 后置 i++,i-- (先使用i值,再执行i=i+1或i=i-1)
- 注意
5++、–(a+b)都是非法的表达式。
具有右结合性
九、 算术运算符中数据类型转换规则
十、 位运算符、位运算表达式
(1) 位运算
- 左移(<<)
实现将某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出的低位用零填补 - 右移(>>)
右移运算实现将某变量所对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填1,正数填0)
十一、 逗号运算符、逗号表达式
优先级:优先级最低。
结合性:左结合性 。即逗号表达式的求值顺序是从左向右依此计算用逗号分隔的各表达式的值。
逗号表达式的值:最后一个表达式的值就是整个逗号表达式的值。
用途:常用于循环for语句中。
十二、 sizeof运算符、复合运算符
第3节 运算符的优先级和结合性