C语言程序设计(C版)

上传人:新** 文档编号:588609920 上传时间:2024-09-08 格式:PPT 页数:75 大小:736KB
返回 下载 相关 举报
C语言程序设计(C版)_第1页
第1页 / 共75页
C语言程序设计(C版)_第2页
第2页 / 共75页
C语言程序设计(C版)_第3页
第3页 / 共75页
C语言程序设计(C版)_第4页
第4页 / 共75页
C语言程序设计(C版)_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《C语言程序设计(C版)》由会员分享,可在线阅读,更多相关《C语言程序设计(C版)(75页珍藏版)》请在金锄头文库上搜索。

1、个人主页:*1C语言程序设计(C版)教材:教材:C语言程序设计(语言程序设计(C99版)版)陈良银陈良银 游洪跃游洪跃 李旭伟李旭伟 主编主编李志蜀李志蜀 唐宁九唐宁九 李李 涛涛 主审主审清华大学出版社清华大学出版社2006年年9月出版月出版2C语言程序设计(C版)本书本书内容内容 3C语言程序设计(C版)数据在计算机内的表示数据在计算机内的表示本章主要内容本章主要内容ARM Vector TableFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0x1C0x180x140

2、x100x0C0x080x040x001 13 32 2计算机语言计算机语言计算机系统及基本工作原理计算机系统及基本工作原理4 4算法和数据结构算法和数据结构5 5C语言标准语言标准6 6编程风格介绍编程风格介绍4C语言程序设计(C版)本章的节本要求本章的节本要求了解计算机的基本组成结构及其基本了解计算机的基本组成结构及其基本工作原理工作原理熟悉内存组织结构、熟悉内存组织结构、内存地址内存地址概念概念 熟悉数据在存储器中的布局结构熟悉数据在存储器中的布局结构 深入理解计算机基本工作原理、内存深入理解计算机基本工作原理、内存地址概念、地址概念、C程序程序数据分区数据分区等基本内容等基本内容方法方

3、法从从总体总体结构入手、深入结构结构入手、深入结构细节细节 5C语言程序设计(C版)1.1 计算机系统计算机系统计算机系统包含了计算机系统包含了硬件系统和软件系硬件系统和软件系统统两大部分。两大部分。 计算机硬件系统主要由计算机硬件系统主要由运算器、控制运算器、控制器、存储器、输入设备和输出设备器、存储器、输入设备和输出设备五五大部件组成。大部件组成。计算机软件系统又分为计算机软件系统又分为系统软件和应系统软件和应用软件用软件两大部分。两大部分。 6C语言程序设计(C版)图图1.1 计算机系统基本组成计算机系统基本组成计算机系统计算机系统硬件系统硬件系统软件系统软件系统 主主 机机外部设备外部

4、设备系统软件系统软件应用软件应用软件中中央央处处理理器器内内存存储储器器输输入入设设备备输输出出设设备备外外存存储储器器文文字字处处理理软软件件表表格格处处理理软软件件辅辅助助设设计计软软件件实实时时控控制制软软件件操操作作系系统统语语言言处处理理系系统统系系统统服服务务程程序序数数据据库库管管理理系系统统运运算算器器控控制制器器只只读读存存储储器器随随机机存存储储器器编编译译程程序序解解释释程程序序汇汇编编程程序序连连接接编编辑辑程程序序连连接接装装配配程程序序调调试试程程序序其其他他服服务务程程序序7C语言程序设计(C版)1.1.1 计算机的硬件系统计算机的硬件系统硬件硬件( Hardwa

5、re)是计算机的是计算机的物理物理实体实体部分部分 。计算机处理信息的过程有点类似人的计算机处理信息的过程有点类似人的大脑处理信息的过程。大脑处理信息的过程。计算机五大部件之间是否也可以通过计算机五大部件之间是否也可以通过什么什么“线线”来相互传递信号啦?来相互传递信号啦? 地址线地址线( 传递地址信号传递地址信号)、数据线数据线( 传递传递数据信号数据信号)和和控制线控制线( 传递控制信号传递控制信号) 。8C语言程序设计(C版)把计算机系统的所有地址线统称为把计算机系统的所有地址线统称为地地址总线址总线,所有数据线统称为,所有数据线统称为数据总线数据总线,所有控制线统称为所有控制线统称为控

6、制总线控制总线。而地址总线、数据总线和控制总线合而地址总线、数据总线和控制总线合在一起统称为在一起统称为计算机系统总线计算机系统总线。计算机五大部件之间正是计算机五大部件之间正是通过这些总通过这些总线线( 地址总线、数据总线和控制总线地址总线、数据总线和控制总线)相互连接相互连接、相互联系的。、相互联系的。 9C语言程序设计(C版)系系统统总线总线存储器存储器运算器运算器控制器控制器适配器适配器输输 入入 设设备备输输出出设设备备CPU主主机机10C语言程序设计(C版)为什么计算机需要以上三种总线啦?这必须为什么计算机需要以上三种总线啦?这必须吗?吗? 输入设备输入设备输入设备将信息从外界输入

7、到输入设备将信息从外界输入到计算机中计算机中 。控制器控制器控制器实际上就是计算机的指挥控制器实际上就是计算机的指挥中心中心 。运算器运算器运算器的主要工作就是完成算术、运算器的主要工作就是完成算术、逻辑运算逻辑运算 。存储器存储器存储器是计算机的记忆装置存储器是计算机的记忆装置 。输出设备输出设备输出设备是计算机的一个执行输出设备是计算机的一个执行装置装置 。11C语言程序设计(C版)计算机如何进行计算机如何进行3+2这样的简单操作?这样的简单操作?控制信号就是通过控制总线传递的。控制信号就是通过控制总线传递的。 数据信号通过数据总线进行传递。数据信号通过数据总线进行传递。那么计算机为何需要

8、地址信号?地址那么计算机为何需要地址信号?地址信号起什么作用啦?信号起什么作用啦?没有地址信号线,计算机就不可能准没有地址信号线,计算机就不可能准确找到某一个内存单元。确找到某一个内存单元。 12C语言程序设计(C版)为了区分不同的存储单元,每个存储为了区分不同的存储单元,每个存储单元都有一个单元都有一个独一无二的编号独一无二的编号,这个,这个编号实际上就是该存储单元的地址。编号实际上就是该存储单元的地址。 计算机的内存空间主要分为三个区:计算机的内存空间主要分为三个区:系统程序区、应用程序区和数据区系统程序区、应用程序区和数据区,其其中数据区又分为系统程序数据区和应中数据区又分为系统程序数据

9、区和应用程序数据区两类。用程序数据区两类。 13C语言程序设计(C版)图图1.3 C语言变量的存储类型与硬件的关系语言变量的存储类型与硬件的关系运算器运算器控制器控制器寄存器寄存器register型型变量变量系统程序区系统程序区应用程序区应用程序区静静态态数数据据区区static型型堆栈区堆栈区auto堆区堆区CPU存储器存储器 三总线三总线14C语言程序设计(C版)在一个通用计算机系统中,以上三种在一个通用计算机系统中,以上三种总线缺一不可。总线缺一不可。把计算机的内存储器的每一个存储单把计算机的内存储器的每一个存储单元从上向下元从上向下依次叠放起来依次叠放起来。把存储器。把存储器的存储单元

10、按照编号顺序排成一竖排。的存储单元按照编号顺序排成一竖排。 15C语言程序设计(C版)0x200000050x200000050x200000040x200000040x200000030x200000030x200000020x200000020x200000010x200000010x200000000x200000000x000000000x000000000xFFFFFFFF0xFFFFFFFF 0x180x180x100000030x100000030x100000020x100000020x100000010x100000010x100000000x10000000图1.4 存储器

11、的抽象结构1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 016C语言程序设计(C版)什么是什么是“位位”呀?呀?其实位是计算机信息表示的其实位是计算机信息表示的最小单位最小单位。计算机是通过存储计算机是通过存储0和和1的不同编码组合的不同编码组合来表示信息的。来表示信息的。 0和和1的不同组合就是编码的不同组合就是编码。 由于每一位要么存放由于每一位要么存放0、要么存放、要么存放1,只,只有这两种选择,一共有有这两种选择,一共有8次选择的可能,次选择的可能,所以总共有所以总共有256种不同的组合,也就是说种不同的组合,也就是说0x20000000存储单元就可以表示存储单元就可以表

12、示256种不种不同的信息。同的信息。只有只有0 0和和1 117C语言程序设计(C版)8位这其实就是位这其实就是“字节字节”的概念,计算的概念,计算机里的机里的字节固定就是字节固定就是8位位,一个字节占,一个字节占据一个存储单元。据一个存储单元。 绝大部分计算机的地址编码也是绝大部分计算机的地址编码也是按照按照字节来进行编号的字节来进行编号的,也就是说一个地,也就是说一个地址编码对应了一个字节存储空间址编码对应了一个字节存储空间( 8位位)。存储单元的编号也就是地址编号(即存储单元的编号也就是地址编号(即地址编码地址编码)。)。 1 1字节字节8 8位位18C语言程序设计(C版)计算机系统地址

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

14、的变量叫指针变量号的变量叫指针变量。 指针变量(指针变量就是用来存放地指针变量(指针变量就是用来存放地址的变量)所占用的存储空间大小就址的变量)所占用的存储空间大小就是地址编号的位数是地址编号的位数 。地址总线位数决定地址总线位数决定地址指针变量长度地址指针变量长度20C语言程序设计(C版)1.1.2 计算机的软件系统计算机的软件系统 软件软件( Software)是计算机实现各种是计算机实现各种功能的程序、文档和数据的集合。功能的程序、文档和数据的集合。系统软件包括操作系统和各种语言处系统软件包括操作系统和各种语言处理软件等理软件等 。应用软件主要包括各个行业或者领域应用软件主要包括各个行业

15、或者领域的功能处理软件。的功能处理软件。 21C语言程序设计(C版)图图1.5 计算机软件系统计算机软件系统 各种语言处理软件各种语言处理软件操作系统操作系统 硬件硬件 应用软件应用软件 系统软件系统软件22C语言程序设计(C版)1.2 计算机的基本工作原理计算机的基本工作原理冯冯诺依曼诺依曼(Neumann)定义了现代计算定义了现代计算机的基本结构,其特点是:机的基本结构,其特点是:硬件系统由硬件系统由五大部件组成五大部件组成,各部件具,各部件具有独立的基本功能。有独立的基本功能。采用二进制采用二进制形式表示数据和指令。二形式表示数据和指令。二进制用来表示信息的基本符号只有两进制用来表示信息

16、的基本符号只有两个:个:0和和1。 23C语言程序设计(C版)存储程序的基本原理存储程序的基本原理计算机在执行程序和处理数据时必须计算机在执行程序和处理数据时必须首先将程序和数据存储在主存储器中首先将程序和数据存储在主存储器中,计算机工作时计算机工作时自动自动高速地从主存储器高速地从主存储器中中取出指令取出指令并加以并加以分析、执行分析、执行。存储程序、自动执行存储程序、自动执行24C语言程序设计(C版)图图 1.6 图灵机的基本组成结构图灵机的基本组成结构读写头读写头存储带存储带25C语言程序设计(C版)0x340x340x120x120x200000050x200000050x200000

17、040x200000040x200000030x200000030x200000020x200000020x200000010x200000010x200000000x200000000x000000000x000000000xFFFFFFFF0xFFFFFFFF 0x100000030x100000030x100000020x100000020x100000010x100000010x100000000x10000000图图1.7 1.7 读写头的移动读写头的移动1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0读写头读写头地址编号地址编号存储单元存储单元存储内容存储内容26C语

18、言程序设计(C版)根据存储程序的基本原理,计算机执根据存储程序的基本原理,计算机执行的指令需要行的指令需要预先存放在计算机的存预先存放在计算机的存储器中储器中,也就是内存储器中。,也就是内存储器中。 计算机程序的指令系列计算机程序的指令系列按照地址顺序按照地址顺序依次存放依次存放在这些存储单元中。在这些存储单元中。 地址也就是计算机存储单元的编号。地址也就是计算机存储单元的编号。存储器的每个地址对应了一个存储器的每个地址对应了一个唯一唯一的的存储单元,反过来,每个存储单元都存储单元,反过来,每个存储单元都对应了一个唯一的地址。对应了一个唯一的地址。 27C语言程序设计(C版)计算机工作的过程就

19、是不断地从这些计算机工作的过程就是不断地从这些存储单元取出指令、分析指令并执行存储单元取出指令、分析指令并执行指令的过程。指令的过程。 计算机究竟应该从哪一个存储单元取计算机究竟应该从哪一个存储单元取指令则完全依赖于计算机指令则完全依赖于计算机CPU内的程内的程序计数器值,序计数器值,程序计数器程序计数器是是CPU内的内的一个特殊计数器,其中存放的就是将一个特殊计数器,其中存放的就是将要取出的下一条指令的存储单元地址。要取出的下一条指令的存储单元地址。 表示了读写头的位置表示了读写头的位置28C语言程序设计(C版)程序对某一个变量的操作实际上就是程序对某一个变量的操作实际上就是对这个变量所在的

20、存储单元的操作。对这个变量所在的存储单元的操作。 C程序中的地址概念实际就是变量所在程序中的地址概念实际就是变量所在的存储单元的地址编号。的存储单元的地址编号。 不同的变量可能占据不同个数的存储不同的变量可能占据不同个数的存储单元,存放变量的单元,存放变量的第一个存储单元第一个存储单元的的地址就是该变量的地址。地址就是该变量的地址。 变量的地址等于变量的地址等于“首地址首地址”29C语言程序设计(C版)1.2.3 C程序的内存分区程序的内存分区计算机的存储器是分段组织的计算机的存储器是分段组织的 。分成程序段分成程序段( 程序区程序区)和数据段和数据段( 数据区数据区) 。数据存储区分为了数据

21、存储区分为了静态数据存储区和静态数据存储区和动态数据存储区动态数据存储区两个部分,分别简称两个部分,分别简称静态存储区和动态存储区。静态存储区和动态存储区。 动态存储区又分为动态存储区又分为“堆堆”和和“堆栈堆栈”两种结构形式。两种结构形式。30C语言程序设计(C版)“堆栈堆栈”空间空间大小有限大小有限,采用,采用“先进先进后出后出”的方式管理其数据,而且的方式管理其数据,而且C编译编译器或器或操作系统自动管理操作系统自动管理该部分空间,该部分空间,且其大小有限;且其大小有限;而而“堆堆”空间则可以很大,它的组织空间则可以很大,它的组织方式比较灵活,需要方式比较灵活,需要程序员自己管理程序员自

22、己管理。堆栈的效率比堆的效率明显高很多堆栈的效率比堆的效率明显高很多 。 31C语言程序设计(C版)C编译器将计算机内存分配方式分为以编译器将计算机内存分配方式分为以下三种:下三种: 1. 在在静态存储区中分配静态存储区中分配外部变量、外部变量、static变量变量 。 2. 在动态存储区的在动态存储区的“堆栈堆栈”上分配上分配。 3. 在动态存储区的在动态存储区的“堆堆”上分配,上分配,亦亦称动态内存分配。程序员用称动态内存分配。程序员用malloc( )函函数申请堆内存,用数申请堆内存,用free( )函数释放堆内函数释放堆内存。存。 32C语言程序设计(C版)0x200000050x20

23、0000050x200000040x200000040x200000030x200000030x200000020x200000020x200000010x200000010x200000000x200000000x000000000x000000000xFFFFFFFF0xFFFFFFFF 0x100000030x100000030x100000020x100000020x100000010x100000010x100000000x10000000图1.9 内存分区10101010读写头读写头0x400000050x400000050x400000040x400000040x40000003

24、0x400000030x400000020x400000020x400000010x400000010x400000000x40000000101010100x3000FFFF0x3000FFFF0x3000FFFE0x3000FFFE0x3000FFFD0x3000FFFD0x3000FFFC0x3000FFFC0x3000FFFB0x3000FFFB10101010静静态态数数据据区区 堆堆栈栈区区 堆堆区区 程程序序区区数数 据据 区区33C语言程序设计(C版)图图1.8 内存数据区分区内存数据区分区静态存储区静态存储区堆栈区堆栈区堆区堆区 永永 久久 生生 命命 周周 期期 局局 部部

25、 生生 命命 周周 期期 用用户户自自己己管管理理其其生生命命周周期期34C语言程序设计(C版)1.3 计算机语言计算机语言计算机语言分为三类:计算机语言分为三类:机器语言、汇机器语言、汇编语言和高级语言。编语言和高级语言。 机器语言是计算机能够直接识别和处机器语言是计算机能够直接识别和处理的二进制机器指令;理的二进制机器指令;“01010101” 。汇编语言是符号化了的机器语言,也汇编语言是符号化了的机器语言,也就是用一些符号来表示二进制机器语就是用一些符号来表示二进制机器语言;言;“MOV AX,BX;” 。而高级语言则是更符合人类思维特性而高级语言则是更符合人类思维特性的抽象语言。的抽象

26、语言。 “y = x*x;”。35C语言程序设计(C版)1.4 数据在计算机内的表示数据在计算机内的表示在计算机中,用在计算机中,用0和和1的不同组合来表的不同组合来表示不同的信息。示不同的信息。 00001001”究竟是表示究竟是表示1、2或者或者3啦?啦?为什么它就表示的这个数啦?这涉及为什么它就表示的这个数啦?这涉及到进位计数制和编码的问题。到进位计数制和编码的问题。 进位计数制进位计数制就是用一组特定的数字符就是用一组特定的数字符号按照一定的进位规则来表示数的计号按照一定的进位规则来表示数的计数方法。数方法。 36C语言程序设计(C版)十进制则采用了十进制则采用了“0”、“1”.“9”

27、这这10个符号。个符号。十六进制就有十六进制就有16个基本符号个基本符号“0”、“1”.“9”、“A”、“B”、“C”、“D”、“E”、“F”。八进制表示,有八进制表示,有8个基本符号,分别是个基本符号,分别是“0”、“1”.“7”。 涉及涉及“基基”和和“位权位权”的概念。的概念。 37C语言程序设计(C版)在在C语言中,十六进制表示以语言中,十六进制表示以0x开头开头,八进制以八进制以0开头开头,十进制以,十进制以非非0数字开数字开头头。比如:比如:0x1777 (十六进制表示十六进制表示)、01777 (八进制表示八进制表示)、1777 (十进制表示十进制表示)。38C语言程序设计(C版

28、)所谓所谓“基基”,就是在一种进位计数制,就是在一种进位计数制中所使用的中所使用的基本符号的个数基本符号的个数。 比如:比如:0x88 ( 正确的十六进制表示正确的十六进制表示)、088 ( 错误的八进制表示错误的八进制表示)、8FF ( 错误的十进制表示错误的十进制表示)。 39C语言程序设计(C版)“位权位权”实际上就是在某种进制的编实际上就是在某种进制的编码中,某一个位置的码中,某一个位置的基本符号为基本符号为1时,时,它所代表的数值的大小它所代表的数值的大小。 8648.72D = 8103+6102+4101+8100 +710-1+210-2 在这个数中,从左至右的各位数字由在这个

29、数中,从左至右的各位数字由于所处于所处位置不同,它们所代表的数值位置不同,它们所代表的数值的大小也不相同的大小也不相同 40C语言程序设计(C版)在在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表示表示41C语言程序设计(C版)十进制十进制二进制二进制 八进制八

30、进制 八进制转换为二进制码八进制转换为二进制码 十六进制十六进制 十六进制转换为二进制码十六进制转换为二进制码0 0000000000 00000000 0000000001 1000100011 10010011 1000100012 2001000102 20100102 2001000103 3001100113 30110113 3001100114 4010001004 41001004 4010001005 5010101015 51011015 5010101016 6011001106 61101106 6011001107 7011101117 71111117 701110

31、1118 81000100010100010000010008 8100010009 91001100111110010010010019 9100110011010101010101212001010001010A A101010101111101110111313001011001011B B101110111212110011001414001100001100C C110011001313110111011515001101001101D D110111011414111011101616001110001110E E1110111015151111111117170011110011

32、11F F11111111161610000100002020010000010000101000010000000100001717100011000121210100010100011111000100010001000142C语言程序设计(C版)不同进位计数制之间的转换不同进位计数制之间的转换 R进制数转换为十进制数进制数转换为十进制数 1001.11 = 23 + 20 + 2-1 + 2-2 = 9.750227 = 282 + 281 + 780 = 1510x3AB = 3162 + A161 + Bl60 = 3162 + 10161 + 11160 = 93943C语言程序设

33、计(C版)十进制数转换为十进制数转换为R进制数进制数 125 = 1111101B,转换过程如图,转换过程如图1.10所所示:示: 125 = 0175,转换过程如图,转换过程如图1.10所示:所示:125 = 0x7D,转换过程如图,转换过程如图1.10所示:所示:44C语言程序设计(C版)图图1.10 十进制数转换为二进制数、八进十进制数转换为二进制数、八进制数、十六进制数制数、十六进制数2 1252 1252 622 621 12 312 310 02 152 151 12 72 71 12 32 31 12 12 11 1 0 01 1余余数数商商高位高位8 1258 1258 158

34、 155 58 18 17 7 0 01 1余余数数商商高位高位16 16 12512516 716 7D D 0 07 7余余商商高位高位45C语言程序设计(C版)二进制数与八进制、十六进制数之间的转换二进制数与八进制、十六进制数之间的转换 分组:分组:010 100 111 101代值:代值: 2 4 7 5结果:结果:10100111101B = 02475( 小数分组,不足三位,必须补小数分组,不足三位,必须补0)010 100 101 . 100 100 2 4 5 . 4 446C语言程序设计(C版)1100 0101 1010B = 0x0C5A111 1111.101B = 0

35、x7F.A0x0ABC = 1010 1011 11000x0D65.4A =1101 0110 0101.0100101B47C语言程序设计(C版)数值信息在计算机中的表示数值信息在计算机中的表示 数据分为数据分为数值型数据和非数值型数据数值型数据和非数值型数据两大类两大类 。数值型数据是指能进行算术运算数值型数据是指能进行算术运算( 加、加、减、乘、除四则运算减、乘、除四则运算)的数据的数据 。非数值数据是指文字、图像等不能进非数值数据是指文字、图像等不能进行算术运算的数据。行算术运算的数据。 如何表示啦?实际上就是根据一定的如何表示啦?实际上就是根据一定的约定来表示,这种约定来表示,这种

36、约定就是表示数值约定就是表示数值大小的编码规则。大小的编码规则。 48C语言程序设计(C版)机器数本身所具有的机器数本身所具有的实际数值称为真实际数值称为真值。值。同一个机器数按照编码约定的方式不同一个机器数按照编码约定的方式不同可能具有不同的真值。同可能具有不同的真值。 大家一定要掌握某个数在计算机的机大家一定要掌握某个数在计算机的机内表示及其运算规则。内表示及其运算规则。 相同的机器数、不同的真值相同的机器数、不同的真值49C语言程序设计(C版)原码原码原码原码就是在真值的基础上加上符号位就是在真值的基础上加上符号位即可。即可。 十进制十进制 二进制真值二进制真值 原码原码+94 +101

37、1110 01011110-49 -0110001 1011000150C语言程序设计(C版)反码反码对于正数,其反码与原码形式相同;对于正数,其反码与原码形式相同;对于负数,将原码中符号位以外的各对于负数,将原码中符号位以外的各位数字取反即得补码位数字取反即得补码( 即即“0”变为变为“1”,“1”变为变为“0”)。例如:。例如:十进制十进制 二进制真值二进制真值 原码原码 反码反码+114 +1110010 01110010 0111001089 1011001 11011001 1010011051C语言程序设计(C版)补码补码对于正数,其补码与原码形式相同;对于正数,其补码与原码形式相

38、同;对于负数,对于负数,在反码的基础上,末位再在反码的基础上,末位再加加1就得到负数的补码就得到负数的补码。例如:。例如:十进制十进制 二进制真值二进制真值 原码原码 反码反码补码补码+114 +1110010 01110010 01110+114 +1110010 01110010 0111089 1011001 1101189 1011001 11011101001111010011152C语言程序设计(C版)基本表示基本表示数值数值 3232位表示位表示1616位位8 8位位-2-21111 1111 1111 1111 1111 1111 1111 1111 1111 1111 111

39、1 11101111 1111 1111 11101111 1111 1111 1111 1111 11101111 11101111 1111 11101110-10-101111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 01101111 1111 1111 01101111 1111 1111 1111 1111 01101111 01101111 1111 0110011011110000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 10110000 0000 0000 1

40、0110000 0000 0000 0000 0000 10110000 10110000 0000 101110111281280000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 00000000 0001 0000 00000000 0001 0000 0001 0000 00000000 0000超出表示超出表示范围范围53C语言程序设计(C版)定点数和浮点数定点数和浮点数机器数又分为机器数又分为定点数和浮点数定点数和浮点数两种两种 。定点表示是将小数点位置约定在一个定点表示是将小数点位置约定在一个固定的位置上。通常有以下两种约定

41、:固定的位置上。通常有以下两种约定:定点整数和定点小数。定点整数和定点小数。浮点数的小数点位置是不固定的,可浮点数的小数点位置是不固定的,可以浮动。以浮动。 54C语言程序设计(C版)图图1.11 定点整数和定点小数的表示定点整数和定点小数的表示 1 1 1 1 1 0 0 1数符小数点位置 数值部分1 1 1 1 1 0 0 1数符小数点位置 数值部分a. 定点小数表示b. 定点整数表示55C语言程序设计(C版)不同类型的数在计算机中所占的字节数不同类型的数在计算机中所占的字节数 变量的变量的数据类型数据类型就决定了变量在内存单元中就决定了变量在内存单元中所占据的字节数,也决定了其取值范围。

42、所占据的字节数,也决定了其取值范围。 folat( 浮点型浮点型) 4个字节个字节double( 双精度浮点型双精度浮点型) 8个字节个字节char( 字符型字符型) 1个字节个字节short( 短整型短整型) 2个字节个字节long( 长整型长整型) 4个字节个字节int( 整型整型) 可能可能2字节,也可能字节,也可能4字节字节( 随环境随环境而不同而不同)。 决定长度决定长度56C语言程序设计(C版)二进制算术运算和逻辑运算二进制算术运算和逻辑运算 算术运算即加算术运算即加(+)、减、减(-)、乘、乘(*)、除、除(/)、取余取余(%)五种运算。五种运算。 1 1 0 1 1 0 ( 被

43、加数被加数) 1 0 1 1 1 0 ( 加加 数数) +) 1 1 1 1 1 ( 进进 位位) 1 1 0 0 1 0 0 ( 和和 数数)57C语言程序设计(C版)与运算与运算A AB BC C0 00 00 00 01 10 01 10 00 01 11 11 158C语言程序设计(C版)或运算或运算A AB BC C0 00 00 00 01 10 01 10 00 01 11 11 159C语言程序设计(C版)非运算非运算A AC C0 01 11 10 060C语言程序设计(C版)异或运算异或运算A AB BC C0 00 00 00 01 11 11 10 01 11 11 1

44、0 061C语言程序设计(C版)位运算位运算C C语言的逻语言的逻辑运算辑运算C C语言的位运算语言的位运算操作数操作数1 10000 0001(0000 0001(非非0=0=真真) )0 00 00 00 00 00 00 01 1操作数操作数2 20000 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 062C语言程序设计(C版)ASCII码码 ASCII码是码是美国国家标准信息交换码美国国家标准信息交换码( American n

45、ational Standard Code for Information Interchange)的简称,是的简称,是目前国际上使用最广泛的计算机字符目前国际上使用最广泛的计算机字符编码。编码。ASCII码的码的编码规则为:每个字符用编码规则为:每个字符用7位二进制数位二进制数( b6b5b4b3b2blb0)来表示来表示( 如表如表1.9所示所示),7位二进制共有位二进制共有128种状种状态态( 27=128),可表示,可表示128个字符,个字符,7位位二进制编码的取值范围为。二进制编码的取值范围为。 63C语言程序设计(C版) b b6 6b b5 5b b4 4b b3 3b b2 2

46、b b1 1b b0 000000000100101001001101110010010110111011011111100000000NULNULDLEDLESPSP0 0 P P p p00010001SOHSOHDC1DC1! !1 1A AQ Qa aq q00100010STXSTXDC2DC2 2 2B BR Rb br r00110011ETXETXDC3DC3# #3 3C CS Sc cs s01000100EOTEOTDC4DC4$ $4 4D DT Td dt t01010101ENQENQNAKNAK% %5 5E EU Ue eu u01100110ACKACKSYN

47、SYN& &6 6F FV Vf fv v01110111BELBELETBETB 7 7G GW Wg gw w10001000BSBSCANCAN( (8 8H HX Xh hx x10011001HTHTEMEM) )9 9I IY Yi iy y10101010LFLFSUBSUB* *:J JZ Zj jz z10111011VTVTESCESC+ +;K K k k 11001100FFFFFSFS, , N N n n 11111111SISIUSUS/ /?O O_ _o oDELDEL64C语言程序设计(C版)1.5 算法和数据结构算法和数据结构程序程序 算法算法 数据结构数

48、据结构对于学习程序设计语言而言,数据结对于学习程序设计语言而言,数据结构是很重要的,所有的算法都基于某构是很重要的,所有的算法都基于某种结构。种结构。 比如:当一个艄公想把小羊、大白菜、比如:当一个艄公想把小羊、大白菜、和狼渡到河对岸的时候和狼渡到河对岸的时候( 当艄公不在时,当艄公不在时,狼要吃小羊、小羊要吃大白菜,而艄狼要吃小羊、小羊要吃大白菜,而艄公的船一次只能够载一样东西公的船一次只能够载一样东西),他就,他就会思考如何解决这件事,而他会思考如何解决这件事,而他完成这完成这件事的方法和步骤就是算法。件事的方法和步骤就是算法。65C语言程序设计(C版)它有以下特点:它有以下特点:有穷性有

49、穷性:一个算法应包含有限的操作步骤而:一个算法应包含有限的操作步骤而不能是无限的。不能是无限的。 确定性:确定性:算法中每一个步骤应当是确定的,算法中每一个步骤应当是确定的,而不应当是含糊的、模棱两可的。而不应当是含糊的、模棱两可的。有零个或多个输入有零个或多个输入。有一个或多个输出有一个或多个输出。有效性有效性:算法中每一个步骤应当能有效地执:算法中每一个步骤应当能有效地执行,并得到确定的结果。行,并得到确定的结果。66C语言程序设计(C版)数据结构主要数据结构主要研究数据的组织方式研究数据的组织方式、结构关系以及相应的操作方法。结构关系以及相应的操作方法。 算法的设计与实现算法的设计与实现

50、,依赖于数据的逻,依赖于数据的逻辑结构与存储结构,数据结构的选择辑结构与存储结构,数据结构的选择直接决定了算法的质量,而算法则决直接决定了算法的质量,而算法则决定了程序的质量。定了程序的质量。67C语言程序设计(C版)传统流程图表示算法传统流程图表示算法 起止框起止框处理框处理框输入输出框输入输出框 判断框判断框流程线流程线或或连接点连接点起止框起止框 i100i100sum+1sumsum+1sum i+1ii+1i 输出输出sumsum0sum,1i0sum,1i结束框结束框b.b.求求sum=1+2+.+100sum=1+2+.+100的流程图的流程图a.a.流程图符号流程图符号68C语

51、言程序设计(C版)1.6 C语言标准简介语言标准简介C语言的发明者是语言的发明者是Dennis Ritchie,他,他在在19世纪世纪70年代发明了年代发明了C语言。语言。1989 年年12 月月14 日正式被批准为日正式被批准为ANSX3.159-1989。一年以后。一年以后, 该标准也该标准也被被ISO(国际标准化组织)接收(国际标准化组织)接收 ,这,这就是标准就是标准C,通常,通常1989年版的标准称为年版的标准称为C89标准标准。 1994年年, 技术勘误技术勘误1 (TC1) 修正了修正了C89标准中标准中40 处地方。处地方。69C语言程序设计(C版)1999年的年的C99标准标

52、准的产生。的产生。C99保持了几乎所有保持了几乎所有C89的特征的特征 。70C语言程序设计(C版)C89具有具有32个关键字,而个关键字,而C99增加了增加了5个关键字,达到个关键字,达到37个关键字。个关键字。C99增加增加的的5个关键字为:个关键字为:_Bool、_Imaginary、restrict、_Complex和和inline。 另外,所有的另外,所有的C编译器都带有实现一些编译器都带有实现一些常用功能的常用功能的标准库函数标准库函数。 71C语言程序设计(C版)图图1.14 C程序的存储区分区概念程序的存储区分区概念堆栈区堆栈区堆区堆区外部变量存储区外部变量存储区程序区程序区内

53、存储器内存储器72C语言程序设计(C版)1.7 C和和C+的不同的不同C+是以是以C语言为基础的面向对象程序语言为基础的面向对象程序设计语言,对于设计语言,对于C89而言,而言,C+实现了实现了它的全部特性,因为它的全部特性,因为C+标准的制定包标准的制定包容了容了C89的全部内容。而对于的全部内容。而对于C99而言,而言,部分部分C99特性,特性,C+并未包括。并未包括。 还有一点需要注意的是,还有一点需要注意的是,C语言源文件语言源文件的的扩展名是扩展名是.c,而不是,而不是.cpp。如果后缀如果后缀(即扩展名)为(即扩展名)为.cpp,那么编译器将按,那么编译器将按照照C+的要求编译文件

54、。因此,的要求编译文件。因此,C语言语言学习者在使用学习者在使用C+工具学习工具学习C语言时要语言时要注意将源文件的后缀命名为注意将源文件的后缀命名为.c。73C语言程序设计(C版)1.8 C语言编程风格简介语言编程风格简介本书在编程风格上主要采用了以下几条:本书在编程风格上主要采用了以下几条:1.采用采用缩进的格式缩进的格式,源程序书写时一定要采,源程序书写时一定要采用逐层缩进的格式,让人一望而知各层之间用逐层缩进的格式,让人一望而知各层之间的层次关系;的层次关系;2.适当的注释,写程序一定要有注释。没有适当的注释,写程序一定要有注释。没有注释的程序,别人不容易读明白。注释的位注释的程序,别人不容易读明白。注释的位置亦放置在语句前面或本条语句右侧,不亦置亦放置在语句前面或本条语句右侧,不亦放在语句后面,以免误读注释。放在语句后面,以免误读注释。3.变量名字应该有一定的变量名字应该有一定的自注释性自注释性,一望而,一望而知其含义等。变量命名首字母小写,函数命知其含义等。变量命名首字母小写,函数命名首字母大写名首字母大写 74C语言程序设计(C版)ThankThanks!s! 75C语言程序设计(C版)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号