C语言程序设计(收藏)_第1页
C语言程序设计(收藏)_第2页
C语言程序设计(收藏)_第3页
C语言程序设计(收藏)_第4页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计 2020-12-242 教材:C语言程序设计(C99版) 陈良银 游洪跃 李旭伟 主编 李志蜀 唐宁九 李 涛 主审 2006年9月出版 2020-12-243 本书内容 第1章 基础知识 第2章 C语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 C程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 C89 Vs C99 实验 (待安排) 2020-12-244 数据在计算机内的表示数据在计算机内的表示 本章主要内容 ARM Vector Ta

2、ble FIQ IRQ (Reserved) Data Abort Prefetch Abort Software Interrupt Undefined Instruction Reset 0 x1C 0 x18 0 x14 0 x10 0 x0C 0 x08 0 x04 0 x00 计算机语言计算机语言 计算机系统及基本工作原理计算机系统及基本工作原理 算法和数据结构算法和数据结构 C语言标准语言标准 编程风格介绍编程风格介绍 2020-12-245 本章的节本要求 了解计算机的基本组成结构及其基本工作原理 熟悉内存组织结构、内存地址概念 熟悉数据在存储器中的布局结构 深入理解计算机基本工

3、作原理、内存地址概念、C程序数据分区等基本内容 方法从总体结构入手、深入结构细节 2020-12-246 1.1 计算机系统 计算机系统包含了硬件系统和软件系统两大部分。 计算机硬件系统主要由运算器、控制器、存储器、输入设备和输出设备五大部件组成。 计算机软件系统又分为系统软件和应用软件两大部分。 2020-12-247 图1.1 计算机系统基本组成 计 算 机 系计 算 机 系 统统 硬件系统硬件系统软件系统软件系统 主主 机机 外部设备外部设备 系统软件系统软件应用软件应用软件 中央处理器中央处理器 内存储器内存储器 输入设备输入设备 输出设备输出设备 外存储器外存储器 文字处理软件文字处

4、理软件 表格处理软件表格处理软件 辅助设计软件辅助设计软件 实时控制软件实时控制软件 操作系统操作系统 语言处理系统语言处理系统 系统服务程序系统服务程序 数据库管理系统数据库管理系统 运算器运算器 控制器控制器 只读存储器只读存储器 随机存储器随机存储器 编译程序编译程序 解释程序解释程序 汇编程序汇编程序 连接编辑程序连接编辑程序 连接装配程序连接装配程序 调试程序调试程序 其他服务程序其他服务程序 2020-12-248 1.1.1 计算机的硬件系统 硬件( Hardware)是计算机的物理实体部分 。 计算机处理信息的过程有点类似人的大脑处理信息的过程。 计算机五大部件之间是否也可以通

5、过什么“线”来相互传递信号啦? 地址线( 传递地址信号)、数据线( 传递数据信号)和控制线( 传递控制信号) 。 2020-12-249 把计算机系统的所有地址线统称为地址总线,所有数据线统称为数据总线,所有控制线统称为控制总 线。 而地址总线、数据总线和控制总线合在一起统称为计算机系统总线。 计算机五大部件之间正是通过这些总线( 地址总线、数据总线和控制总线)相互连接、相互联系的。 2020-12-2410 系 统 总系 统 总 线线 存储器存储器 运算器运算器 控制器控制器 适配器适配器 输入设备输入设备输出设备输出设备 CPU 主机主机 2020-12-2411 为什么计算机需要以上三种

6、总线啦?这必须吗? 输入设备输入设备将信息从外界输入到计算机中 。 控制器控制器实际上就是计算机的指挥中心 。 运算器运算器的主要工作就是完成算术、逻辑运算 。 存储器存储器是计算机的记忆装置 。 输出设备输出设备是计算机的一个执行装置 。 2020-12-2412 计算机如何进行3+2这样的简单操作? 控制信号就是通过控制总线传递的。 数据信号通过数据总线进行传递。 那么计算机为何需要地址信号?地址信号起什么作用啦? 没有地址信号线,计算机就不可能准确找到某一个内存单元。 2020-12-2413 为了区分不同的存储单元,每个存储单元都有一个独一无二的编号,这个编号实际上就是该存储单元 的地

7、址。 计算机的内存空间主要分为三个区:系统程序区、应用程序区和数据区,其中数据区又分为系统程序 数据区和应用程序数据区两类。 2020-12-2414 图1.3 C语言变量的存储类型与硬件的关系 运算器运算器 控制器控制器 寄存器寄存器 register型变量型变量 系统程序区系统程序区 应用程序区应用程序区 静态数据区静态数据区static型型 堆栈区堆栈区auto 堆区堆区 CPU存储器存储器 三总线三总线 2020-12-2415 在一个通用计算机系统中,以上三种总线缺一不可。 把计算机的内存储器的每一个存储单元从上向下依次叠放起来。把存储器的存储单元按照编号顺序排 成一竖排。 2020

8、-12-2416 0 x200000050 x20000005 0 x200000040 x20000004 0 x200000030 x20000003 0 x200000020 x20000002 0 x200000010 x20000001 0 x200000000 x20000000 0 x000000000 x00000000 0 xFFFFFFFF0 xFFFFFFFF 0 x180 x18 0 x100000030 x10000003 0 x100000020 x10000002 0 x100000010 x10000001 0 x100000000 x10000000 图1.4

9、 存储器的抽象结构 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 2020-12-2417 什么是“位”呀? 其实位是计算机信息表示的最小单位。计算机是通过存储0和1的不同编码组合来表示信息的。 0和1的不同组合就是编码。 由于每一位要么存放0、要么存放1,只有这两种选择,一共有8次选择的可能,所以总共有256种 不同的组合,也就是说0 x20000000存储单元就可以表示256种不同的信息。 只有只有0 0和和1 1 2020-12-2418 8位这其实就是“字节”的概念,计算机里的字节固定就是8位,一个字节占据一个存储单元。 绝大部分计算机的地址编码也是按照字节来进行编号

10、的,也就是说一个地址编码对应了一个字节存储 空间( 8位)。 存储单元的编号也就是地址编号(即地址编码)。 1 1字节字节8 8位位 2020-12-2419 计算机系统地址位数决定了其存储空间的大小。 地址系统只有20位,则内存单元只有1M字节 。 地址系统有32位,则内存单元只有4G字节 。 地址总线位数决定地址总线位数决定 地址编码范围。地址编码范围。 2020-12-2420 计算机系统的地址位数与C程序的指针长度密切相关。 指针变量的意思很简单就是一个用来存放编号( 也就是内存地址即指针值)的变量,也就是说用来 存放地址编号的变量叫指针变量。 指针变量(指针变量就是用来存放地址的变量

11、)所占用的存储空间大小就是地址编号的位数 。 地址总线位数决定地址总线位数决定 地址指针变量长度地址指针变量长度 2020-12-2421 1.1.2 计算机的软件系统 软件( Software)是计算机实现各种功能的程序、文档和数据的集合。 系统软件包括操作系统和各种语言处理软件等 。 应用软件主要包括各个行业或者领域的功能处理软件。 2020-12-2422 图1.5 计算机软件系统 各种语言处理软件各种语言处理软件 操作系统操作系统 硬件硬件 应用软件应用软件 系统软件系统软件 2020-12-2423 1.2 计算机的基本工作原理 冯诺依曼(Neumann)定义了现代计算机的基本结构,

12、其特点是: 硬件系统由五大部件组成,各部件具有独立的基本功能。 采用二进制形式表示数据和指令。二进制用来表示信息的基本符号只有两个:0和1。 2020-12-2424 存储程序的基本原理 计算机在执行程序和处理数据时必须首先将程序和数据存储在主存储器中,计算机工作时自动高速地 从主存储器中取出指令并加以分析、执行。 存储程序、自动执行存储程序、自动执行 2020-12-2425 图 1.6 图灵机的基本组成结构 读写头读写头 存储带存储带 2020-12-2426 0 x340 x34 0 x120 x120 x200000050 x20000005 0 x200000040 x2000000

13、4 0 x200000030 x20000003 0 x200000020 x20000002 0 x200000010 x20000001 0 x200000000 x20000000 0 x000000000 x00000000 0 xFFFFFFFF0 xFFFFFFFF 0 x100000030 x10000003 0 x100000020 x10000002 0 x100000010 x10000001 0 x100000000 x10000000 图图1.7 1.7 读写头的移动读写头的移动 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 读写头读写头 地址编号地址

14、编号 存储单元存储单元 存储内容存储内容 2020-12-2427 根据存储程序的基本原理,计算机执行的指令需要预先存放在计算机的存储器中,也就是内存储器中。 计算机程序的指令系列按照地址顺序依次存放在这些存储单元中。 地址也就是计算机存储单元的编号。 存储器的每个地址对应了一个唯一的存储单元,反过来,每个存储单元都对应了一个唯一的地址。 2020-12-2428 计算机工作的过程就是不断地从这些存储单元取出指令、分析指令并执行指令的过程。 计算机究竟应该从哪一个存储单元取指令则完全依赖于计算机CPU内的程序计数器值,程序计数器是 CPU内的一个特殊计数器,其中存放的就是将要取出的下一条指令的

15、存储单元地址。 表示了读写头的位置表示了读写头的位置 2020-12-2429 程序对某一个变量的操作实际上就是对这个变量所在的存储单元的操作。 C程序中的地址概念实际就是变量所在的存储单元的地址编号。 不同的变量可能占据不同个数的存储单元,存放变量的第一个存储单元的地址就是该变量的地址。 变量的地址等于变量的地址等于“首地址首地址” 2020-12-2430 1.2.3 C程序的内存分区 计算机的存储器是分段组织的 。 分成程序段( 程序区)和数据段( 数据区) 。 数据存储区分为了静态数据存储区和动态数据存储区两个部分,分别简称静态存储区和动态存储区。 动态存储区又分为“堆”和“堆栈”两种

16、结构形式。 2020-12-2431 “堆栈”空间大小有限,采用“先进后出”的方式管理其数据,而且C编译器或操作系统自动管理该 部分空间,且其大小有限; 而“堆”空间则可以很大,它的组织方式比较灵活,需要程序员自己管理。 堆栈的效率比堆的效率明显高很多 。 2020-12-2432 C编译器将计算机内存分配方式分为以下三种: 1. 在静态存储区中分配外部变量、static变量 。 2. 在动态存储区的“堆栈”上分配。 3. 在动态存储区的“堆”上分配,亦称动态内存分配。程序员用malloc( )函数申请堆内存,用free( )函 数释放堆内存。 2020-12-2433 0 x20000005

17、0 x20000005 0 x200000040 x20000004 0 x200000030 x20000003 0 x200000020 x20000002 0 x200000010 x20000001 0 x200000000 x20000000 0 x000000000 x00000000 0 xFFFFFFFF0 xFFFFFFFF 0 x100000030 x10000003 0 x100000020 x10000002 0 x100000010 x10000001 0 x100000000 x10000000 图1.9 内存分区 1 0 1 0 1 0 1 0读写头读写头 0 x

18、400000050 x40000005 0 x400000040 x40000004 0 x400000030 x40000003 0 x400000020 x40000002 0 x400000010 x40000001 0 x400000000 x400000001 0 1 0 1 0 1 0 0 x3000FFFF0 x3000FFFF 0 x3000FFFE0 x3000FFFE 0 x3000FFFD0 x3000FFFD 0 x3000FFFC0 x3000FFFC 0 x3000FFFB0 x3000FFFB1 0 1 0 1 0 1 0 静静 态态 数数 据据 区区 堆堆 栈栈

19、 区区 堆堆 区区 程程 序序 区区 数数 据据 区区 2020-12-2434 图1.8 内存数据区分区 静态存储区静态存储区 堆栈区堆栈区堆区堆区 永 永 久久 生生 命命 周周 期期 局 局 部部 生生 命命 周周 期期 用户自己管理其生命周期 用户自己管理其生命周期 2020-12-2435 1.3 计算机语言 计算机语言分为三类:机器语言、汇编语言和高级语言。 机器语言是计算机能够直接识别和处理的二进制机器指令;“01010101” 。 汇编语言是符号化了的机器语言,也就是用一些符号来表示二进制机器语言;“MOV AX,BX;” 。 而高级语言则是更符合人类思维特性的抽象语言。 “y

20、 = x*x;”。 2020-12-2436 1.4 数据在计算机内的表示 在计算机中,用0和1的不同组合来表示不同的信息。 00001001”究竟是表示1、2或者3啦?为什么它就表示的这个数啦?这涉及到进位计数制和编码的问题。 进位计数制就是用一组特定的数字符号按照一定的进位规则来表示数的计数方法。 2020-12-2437 十进制则采用了“0”、“1”.“9”这10个符号。 十六进制就有16个基本符号“0”、“1”.“9”、“A”、“B”、“C”、“D”、“E”、“F”。 八进制表示,有8个基本符号,分别是“0”、“1”.“7”。 涉及“基”和“位权”的概念。 2020-12-2438 在

21、C语言中,十六进制表示以0 x开头,八进制以0开头,十进制以非0数字开头。 比如: 0 x1777 (十六进制表示)、 01777 (八进制表示)、 1777 (十进制表示)。 2020-12-2439 所谓“基”,就是在一种进位计数制中所使用的基本符号的个数。 比如: 0 x88 ( 正确的十六进制表示)、 088 ( 错误的八进制表示)、 8FF ( 错误的十进制表示)。 2020-12-2440 “位权”实际上就是在某种进制的编码中,某一个位置的基本符号为1时,它所代表的数值的大小。 8648.72D = 8103+6102+4101+8100 +710-1+210-2 在这个数中,从左

22、至右的各位数字由于所处位置不同,它们所代表的数值的大小也不相同 2020-12-2441 在C语言以外的场合,通常可以用下标2、8、10、16或字母B、O、D、H分别表示二进制、八进制、十 进制、十六进制数, 如 (11001)B、(354)O、(1224)D、(4DE)H及(10101)2、(102)8、(790)10、(B5B. CD)16等。 为便于区分一般用为便于区分一般用Q Q表示表示 2020-12-2442 十进制十进制二进制二进制 八进制八进制 八进制转换为二进制码八进制转换为二进制码 十六进制十六进制 十六进制转换为二进十六进制转换为二进 制码制码 0 0000000000

23、00000000 000000000 1 1000100011 10010011 100010001 2 2001000102 20100102 200100010 3 3001100113 30110113 300110011 4 4010001004 41001004 401000100 5 5010101015 51011015 501010101 6 6011001106 61101106 601100110 7 7011101117 71111117 701110111 8 81000100010100010000010008 810001000 9 9100110011111001

24、0010010019 910011001 1010101010101212001010001010A A10101010 1111101110111313001011001011B B10111011 1212110011001414001100001100C C11001100 1313110111011515001101001101D D11011101 1414111011101616001110001110E E11101110 1515111111111717001111001111F F11111111 161610000100002020010000010000101000010

25、00000010000 17171000110001212101000101000111110001000100010001 2020-12-2443 不同进位计数制之间的转换 R进制数转换为十进制数 1001.11 = 23 + 20 + 2-1 + 2-2 = 9.75 0227 = 282 + 281 + 780 = 151 0 x3AB = 3162 + A161 + Bl60 = 3162 + 10161 + 11160 = 939 2020-12-2444 十进制数转换为R进制数 125 = 1111101B,转换过程如图1.10所示: 125 = 0175,转换过程如图1.10所

26、示: 125 = 0 x7D,转换过程如图1.10所示: 2020-12-2445 图1.10 十进制数转换为二进制数、八进制数、十六进制数 2 1252 125 2 622 621 1 2 312 31 0 0 2 152 15 1 1 2 72 7 1 1 2 32 3 1 1 2 12 1 1 1 0 0 1 1 余数余数 商商 高位高位 8 1258 125 8 158 15 5 5 8 18 17 7 0 0 1 1 余数余数 商商 高位高位 16 16 125125 16 716 7 D D 0 07 7 余余 商商高位高位 2020-12-2446 二进制数与八进制、十六进制数之

27、间的转换 分组:010 100 111 101 代值: 2 4 7 5 结果:10100111101B = 02475 ( 小数分组,不足三位,必须补0) 010 100 101 . 100 100 2 4 5 . 4 4 2020-12-2447 1100 0101 1010B = 0 x0C5A 111 1111.101B = 0 x7F.A 0 x0ABC = 1010 1011 1100 0 x0D65.4A =1101 0110 0101.0100101B 2020-12-2448 数值信息在计算机中的表示 数据分为数值型数据和非数值型数据两大类 。 数值型数据是指能进行算术运算(

28、加、减、乘、除四则运算)的数据 。 非数值数据是指文字、图像等不能进行算术运算的数据。 如何表示啦?实际上就是根据一定的约定来表示,这种约定就是表示数值大小的编码规则。 2020-12-2449 机器数本身所具有的实际数值称为真值。 同一个机器数按照编码约定的方式不同可能具有不同的真值。 大家一定要掌握某个数在计算机的机内表示及其运算规则。 相同的机器数、不同的真值相同的机器数、不同的真值 2020-12-2450 原码 原码就是在真值的基础上加上符号位即可。 十进制 二进制真值 原码 +94 +1011110 01011110 -49 -0110001 10110001 2020-12-24

29、51 反码 对于正数,其反码与原码形式相同;对于负数,将原码中符号位以外的各位数字取反即得补码( 即 “0”变为“1”,“1”变为“0”)。例如: 十进制 二进制真值 原码 反码 +114 +1110010 01110010 01110010 89 1011001 11011001 10100110 2020-12-2452 补码 对于正数,其补码与原码形式相同;对于负数,在反码的基础上,末位再加1就得到负数的补码。例 如: 十进制 二进制真值 原码 反码补码 +114 +1110010 01110010 01110 89 1011001 1101110100111 2020-12-2453

30、基本表示 数值数值3232位表示位表示1616位位8 8位位 -2-21111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 11101111 1111 1110 1111 1111 1111 1111 1111 1111 11101110 1111 11101111 1110 -10-101111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 01101111 1111 0110 1111 1111 1111 1111 1111 1111 01100110 1111

31、 01101111 0110 11110000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 10110000 1011 0000 0000 0000 0000 0000 0000 10111011 0000 10110000 1011 1281280000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 00000001 0000 0000 0000 0001 0000 0000 0001 0000 00000000 超出表示范超出表示范 围围 2020-1

32、2-2454 定点数和浮点数 机器数又分为定点数和浮点数两种 。 定点表示是将小数点位置约定在一个固定的位置上。通常有以下两种约定:定点整数和定点小数。 浮点数的小数点位置是不固定的,可以浮动。 2020-12-2455 图1.11 定点整数和定点小数的表示 1 1 1 1 1 0 0 1 数符小数点位置 数 值 部 分 1 1 1 1 1 0 0 1 数符 小数点位置 数 值 部 分 a. 定点小数表示b. 定点整数表示 2020-12-2456 不同类型的数在计算机中所占的字节数 变量的数据类型就决定了变量在内存单元中所占据的字节数,也决定了其取值范围。 folat( 浮点型) 4个字节

33、double( 双精度浮点型) 8个字节 char( 字符型) 1个字节 short( 短整型) 2个字节 long( 长整型) 4个字节 int( 整型) 可能2字节,也可能4字节( 随环境而不同)。 决定长度决定长度 2020-12-2457 二进制算术运算和逻辑运算 算术运算即加(+)、减(-)、乘(*)、除(/)、取余(%)五种运算。 1 1 0 1 1 0 ( 被加数) 1 0 1 1 1 0 ( 加 数) +) 1 1 1 1 1 ( 进 位) 1 1 0 0 1 0 0 ( 和 数) 2020-12-2458 与运算 A AB BC C 0 00 00 0 0 01 10 0 1

34、 10 00 0 1 11 11 1 2020-12-2459 或运算 A AB BC C 0 00 00 0 0 01 10 0 1 10 00 0 1 11 11 1 2020-12-2460 非运算 A AC C 0 01 1 1 10 0 2020-12-2461 异或运算 A AB BC C 0 00 00 0 0 01 11 1 1 10 01 1 1 11 10 0 2020-12-2462 位运算 C C语言的语言的 逻辑逻辑 运算运算 C C语言的位运算语言的位运算 操作数操作数1 1 0000 0001(0000 0001(非非0=0= 真真) ) 0 00 00 00 0

35、0 00 00 01 1 操作数操作数2 2 0000 0010( 0000 0010( 非非 0=0=真真) ) 0 00 00 00 00 00 01 10 0 结果结果结果为真结果为真1 10 00 00 00 00 00 00 00 0 最后结果为最后结果为0 0 2020-12-2463 ASCII码 ASCII码是美国国家标准信息交换码( American national Standard Code for Information Interchange)的简 称,是目前国际上使用最广泛的计算机字符编码。 ASCII码的编码规则为:每个字符用7位二进制数( b6b5b4b3b2b

36、lb0)来表示( 如表1.9所示),7位二进制共 有128种状态( 27=128),可表示128个字符,7位二进制编码的取值范围为。 2020-12-2464 b b6 6b b5 5b b 4 4 b b3 3b b2 2b b1 1b b0 0 000000001001010010011011100100101101110110111111 00000000NULNULDLEDLESPSP0 0 P P p p 00010001SOHSOHDC1DC1! !1 1A AQ Qa aq q 00100010STXSTXDC2DC2 2 2B BR Rb br r 00110011ETXETXDC3DC3# #3 3C CS Sc cs s 01000100EOTEOTDC4DC4$ $4 4D DT Td dt t 01010101ENQENQNAKNAK% %5 5E EU Ue eu u 01100110ACKACKSYNSYN& &6 6F FV Vf fv v 01110111BELBELETBETB 7 7G GW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论