欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C程序设计(第二版)第3章.ppt

    • 资源ID:70100856       资源大小:573KB        全文页数:121页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C程序设计(第二版)第3章.ppt

    3.1 C的数据类型的数据类型3.2 常量与变量常量与变量3.3 整型数据整型数据3.4 实型数据实型数据3.5 字符型数据字符型数据3.6 变量赋初值变量赋初值第第3章章 数据类型、运算符与表达式数据类型、运算符与表达式3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算3.8 算术运算符和算术表达式算术运算符和算术表达式3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式习题习题3.1 C的数据类型的数据类型一个程序应包括以下两方面内容:一个程序应包括以下两方面内容:(1)对数据的描述。在程序中要指定数据的类型和数据对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构的组织形式,即数据结构(data structure)。(2)对操作的描述。即操作步骤,也就是算法对操作的描述。即操作步骤,也就是算法(algorithm)。据是操作的对象,操作的目的是对数据进行加工处理,据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。打个比方,厨师做菜肴,需要有以得到期望的结果。打个比方,厨师做菜肴,需要有菜谱。菜谱上一般应包括:菜谱。菜谱上一般应包括:配料,指出应使用哪些原料;配料,指出应使用哪些原料;操作步骤,指出如何操作步骤,指出如何使用这些原料按规定的步骤加工成所需的菜肴。面对使用这些原料按规定的步骤加工成所需的菜肴。面对同一些原料可以加工出不同风味的菜肴。同一些原料可以加工出不同风味的菜肴。作为程序设计人员,必须认真考虑和设计数据结构作为程序设计人员,必须认真考虑和设计数据结构和操作步骤和操作步骤(即算法即算法)。因此,著名计算机科学家。因此,著名计算机科学家沃思沃思(nikiklaus Wirth)提出一个公式数据结构提出一个公式数据结构+算算法法=程序实际上,一个程序除了以上两个主要要素程序实际上,一个程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,可设计,并且用某一种计算机语言表示。因此,可以这样表示:以这样表示:程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环语言工具和环境境也就是说,以上也就是说,以上4个方面是一个程序设计人员所应个方面是一个程序设计人员所应具备的知识。在设计一个程序时要综合运用这几具备的知识。在设计一个程序时要综合运用这几方面的知识。在本书中不可能全面介绍这些内容,方面的知识。在本书中不可能全面介绍这些内容,它们都属于有关的专门课程范畴。在这它们都属于有关的专门课程范畴。在这4个方面中,个方面中,算法是灵魂,数据结构是加工对象,语言是工具,算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。算法是解决编程需要采用合适的方法。算法是解决“做什么做什么”和和“怎么做怎么做”的问题。程序中的操作语句,实的问题。程序中的操作语句,实际上就是算法的体现。算法处理的对象是数据,际上就是算法的体现。算法处理的对象是数据,而数据是以某种特定的形式存在的而数据是以某种特定的形式存在的(例如整数、实例如整数、实数、字符等形式数、字符等形式)。不同的数据之间往往还存在某。不同的数据之间往往还存在某些联系些联系(例如由若干个整数组成一个整数数组例如由若干个整数组成一个整数数组)。所谓数据结构指的是数据的组织形式。例如,数所谓数据结构指的是数据的组织形式。例如,数组就是一种数据结构。不同的计算机语言所允许组就是一种数据结构。不同的计算机语言所允许定义定义和使用的数据结构是不同的。例如,和使用的数据结构是不同的。例如,c语言提供语言提供了了“结构体结构体”这样一种数据结构,而这样一种数据结构,而fortran语言语言就不提供这种数据结构。处理同一类问题,如果就不提供这种数据结构。处理同一类问题,如果数据结构不同,算法也会不同。例如,对数据结构不同,算法也会不同。例如,对10个整个整数排序和对由数排序和对由10个整数构成的数组排序的算法是个整数构成的数组排序的算法是不同的。因此,在考虑算法时,必须注意数据结不同的。因此,在考虑算法时,必须注意数据结构。实际上,应当综合考虑算法和数据结构,选构。实际上,应当综合考虑算法和数据结构,选择最佳的数据结构和算法。择最佳的数据结构和算法。C语言的数据结构是以数据类型形式出现的。语言的数据结构是以数据类型形式出现的。c的的数据类型如下数据类型如下:数据类型,基本类型,整型,字符型,实型数据类型,基本类型,整型,字符型,实型(浮点浮点型型)单精度型,双精度型,枚举类型,构造类型,单精度型,双精度型,枚举类型,构造类型,数组类型,结构体类型,共用体类型,指针类型,数组类型,结构体类型,共用体类型,指针类型,空类型空类型C语言中数据有常量与变量之分,它们分语言中数据有常量与变量之分,它们分别属于以上这些类型。由以上这些数据类型还可别属于以上这些类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。体类型可以构成表、树、栈等复杂的数据结构。在程序中对用到的所有数据都必须指定其数据类在程序中对用到的所有数据都必须指定其数据类型。在本章中主要介绍基本数据类型。型。在本章中主要介绍基本数据类型。3.2 常量与变量常量与变量3.2.1 常量和符号常量常量和符号常量在程序运行过程中,其值不能被改变的量称为常在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型,如量。常量区分为不同的类型,如12,0,-3为为整型常量,整型常量,4.6、-1.23为实型常量,为实型常量,a,d为字符常量。常量一般从其字面形式即为字符常量。常量一般从其字面形式即可判别。这种常量称为字面常量或直接常量。可判别。这种常量称为字面常量或直接常量。也可以用一个标识符代表一个常量,如也可以用一个标识符代表一个常量,如:例例3.1符号常量的使用。符号常量的使用。#define price 30 main()int num,total;num=10;total=num*price;printf(total=%d,total);程序中用程序中用#define命令行定义命令行定义price代表常量代表常量30,此,此后凡在本文件中出现的后凡在本文件中出现的price都代表都代表30,可以和常,可以和常量一样进行运算,程序运行结果为量一样进行运算,程序运行结果为 total=300有关有关#define命令行的详细用法参见第命令行的详细用法参见第8章。章。这种用一个标识符代表一个常量的,称为符号常量,这种用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。请注意符号常量不同于变量,即标识符形式的常量。请注意符号常量不同于变量,它的值在其作用域它的值在其作用域(在本例中为主函数在本例中为主函数)内不能改变,内不能改变,也不能再被赋值。如再用以下赋值语句给也不能再被赋值。如再用以下赋值语句给price赋值赋值是错误的。是错误的。price=40;习惯上,符号常量名用大写,变量用小写,以示区别。习惯上,符号常量名用大写,变量用小写,以示区别。使用符号常量的好处是:使用符号常量的好处是:(1)含义清楚。如上面的程序中,看程序时从含义清楚。如上面的程序中,看程序时从price就就可知道它代表价格。因此定义符号常量名时应考虑可知道它代表价格。因此定义符号常量名时应考虑“见名知意见名知意”。在一个规范的程序中不提倡使用很在一个规范的程序中不提倡使用很多的常数,如:多的常数,如:sum=15*30*23.5*43。在检查程。在检查程序时搞不清各个常数究竟代表什么。应尽量使用序时搞不清各个常数究竟代表什么。应尽量使用“见名知意见名知意”的变量名和符号常量。的变量名和符号常量。(2)在需要改变一个常量时能做到在需要改变一个常量时能做到“一改全改一改全改”。例如在程序中多处用到某物品的价格,如果价格例如在程序中多处用到某物品的价格,如果价格用常数表示,则在价格调整时,就需要在程序中用常数表示,则在价格调整时,就需要在程序中作多处修改,若用符号常量作多处修改,若用符号常量price代表价格,只需代表价格,只需改动一处即可。如:改动一处即可。如:#define price 35 在程序中所有以在程序中所有以price代表的价格就会一律自动改为代表的价格就会一律自动改为35。3.2.2 变量变量其值可以改变的量称为变量。一个其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元据一定的存储单元。在该存储单元中存放变量的值。请注意区分变量中存放变量的值。请注意区分变量名和变量值这两个不同的概念,见名和变量值这两个不同的概念,见图图3.1。变量名实际上是一个符号。变量名实际上是一个符号地址,在对程序编译连接时由系统地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,通过变量名找到相应的内存地址,从其存储单元中读取数据。和其他从其存储单元中读取数据。和其他高级语言一样,用来标识变量名、高级语言一样,用来标识变量名、图图3.13.1符号常量名、函数名、数组名、类型名、文件名符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符的有效字符序列称为标识符(identifier)。简单。简单地说,标识符就是一个名字。地说,标识符就是一个名字。C语言规定标识符只能由字母、数字和下划线三种语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。字符组成,且第一个字符必须为字母或下划线。下面列出的是合法的标识符,也是合法的变量名:下面列出的是合法的标识符,也是合法的变量名:sum,average,-total,class,day,month,student-name,tan,lotus-1-2-3,basic,li-ling下面是不合法的标识符和变量名:下面是不合法的标识符和变量名:dohn,y 123,33,3d64,ab注意,大写字母和小写字母被认为是两个不同的字注意,大写字母和小写字母被认为是两个不同的字符。因此,符。因此,sum和和suM,class和和class是两个不同的是两个不同的变量名。一般,变量名用小写字母表示,与人们日变量名。一般,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。常习惯一致,以增加可读性。ANSI C标准没有规定标识符的长度标准没有规定标识符的长度(字符个数字符个数),但,但各个各个c编译系统都有自己的规定。有的系统编译系统都有自己的规定。有的系统(如如ib PC的的s C)取取8个字符,假如程序中出现的变量名个字符,假如程序中出现的变量名长度大于长度大于8个字符,则只有前面个字符,则只有前面8个字符有效,后面个字符有效,后面的不被识别。例如,有两个变量:的不被识别。例如,有两个变量:student_name和和student_number,由于二者的前,由于二者的前8个字符相同,系个字符相同,系统认为这两个变量是一回事而不加区别。可以将它统认为这两个变量是一回事而不加区别。可以将它们改为们改为stud_name和和stud_num,以使之区别。,以使之区别。Turbo C则允许则允许32个字符。因此,在写程序时应个字符。因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上了解所用系统对标识符长度的规定,以免出现上面的混淆。这种错误并不反映在编译过程中面的混淆。这种错误并不反映在编译过程中(即即语法无错误语法无错误),但运行结果显然不对。为了程序,但运行结果显然不对。为了程序的可移植性的可移植性(即在甲机器上运行的程序可以基本即在甲机器上运行的程序可以基本上不加修改,就能移到乙机器上运行上不加修改,就能移到乙机器上运行)以及阅读以及阅读程序的方便,建议变量名的长度不要超过程序的方便,建议变量名的长度不要超过8个字个字符。符。如前所述,在选择变量名和其他标识符时,应注意如前所述,在选择变量名和其他标识符时,应注意做到做到“见名知意见名知意”,即选有含意的英文单词,即选有含意的英文单词(或或其缩写其缩写)作标识符,如作标识符,如count、name、day、month、total、country等,除了数值计算程序外,等,除了数值计算程序外,一般不要用代数符号一般不要用代数符号(如如a、b、c、x1、y1等等)作作变量名,变量名,以增加程序的可读性。这是结构化程序的一个特以增加程序的可读性。这是结构化程序的一个特征。本书在一些简单的举例中,为方便起见,仍征。本书在一些简单的举例中,为方便起见,仍用单字符的变量用单字符的变量?如如a、b、c等等),请读者注意不,请读者注意不要在其他所有程序中都如此。要在其他所有程序中都如此。在在c语言中,要求对所有用到的变量作强制定义,语言中,要求对所有用到的变量作强制定义,也就是也就是“先定义,后使用先定义,后使用”,如例,如例12、例、例13那样。这样做的目的是:那样。这样做的目的是:(1)凡未被事先定义的,不作为变量名,这就能保凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。例如,如果在定义证程序中变量名使用得正确。例如,如果在定义部分写了部分写了int student;而在执行语句中错写成而在执行语句中错写成staent。如:。如:staent=30;在编译时检查出在编译时检查出statent未经定义,不作为变量名。未经定义,不作为变量名。因此输出因此输出“变量变量statent未经声明未经声明”的信息,便于的信息,便于用户发现错误,避免变量名使用时出错。用户发现错误,避免变量名使用时出错。(2)每一个变量被指定为一确定类型,在编译时就每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元。如指定能为其分配相应的存储单元。如指定a、b为为int型,型,turbo c编译系统为编译系统为a和和b各分配两个字节,并按整各分配两个字节,并按整数方式存储数据。数方式存储数据。(3)指定每一变量属于一个类型,这就便于在编译指定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。例时,据此检查该变量所进行的运算是否合法。例如,整型变量如,整型变量a和和b,可以进行求余运算:,可以进行求余运算:a%b%是是“求余求余”(见见3.8节节),得到,得到a/b的余数。如果将的余数。如果将a、b指定为实型变量,则不允许进行指定为实型变量,则不允许进行“求余求余”运算,运算,在编译时会给出有关在编译时会给出有关“出错信息出错信息”。下面各节分别介绍整型、实型下面各节分别介绍整型、实型(浮点型浮点型)、字符型数、字符型数据。据。3.3 整型数据整型数据3.3.1 整型常量的表示方法整型常量即整常数。c整常数可用以下三种形式表示:(1)十进制整数。如123,-456,0。(2)八进制整数。以0开头的数是八进制数。如0123表示八进制数123,即(123)8,其值为:182+281+380,等于十进制数8 3。-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0 x开头的数是十六进制数。如0 x123,代表十六进制数123,即(123)16=1162+2161+3160=256+32+3=291。-0 x12等于十进制数-18。3.3.2 整型变量整型变量1.整型数据在内存中的存放形式数据在内存中是整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。以二进制形式存放的。如果定义了一个整型变量如果定义了一个整型变量i:int i;/*定义为整型变量定义为整型变量*/i=10;/*给给i赋以整数赋以整数10*/十进制数十进制数10的二进制形式为的二进制形式为1010,在微机上使用的,在微机上使用的c编译系统,每一个整型变量在内存中占编译系统,每一个整型变量在内存中占2个字节。个字节。图图3.2(a)是数据存放的示意图。图是数据存放的示意图。图3.2(b)是数据在是数据在内存中实际存放的情况。内存中实际存放的情况。图图3.2实际上,数值是以补码实际上,数值是以补码(complement)表示的。一表示的。一个正数的补码和其原码的形式相同。图个正数的补码和其原码的形式相同。图3.2(b)就就是用补码形式表示的。如果数值是负的,在内存是用补码形式表示的。如果数值是负的,在内存中如何用补码形式表示呢中如何用补码形式表示呢?求负数的补码的方法求负数的补码的方法是:是:将该数的绝对值的二进制形式,按位取反再将该数的绝对值的二进制形式,按位取反再加加1。图图3.3可知整数的可知整数的16位中,最左面的一位是表示符号的,位中,最左面的一位是表示符号的,该位为该位为0,表示数值为正;为,表示数值为正;为1则数值为负。则数值为负。关于补码的知识不属于本书的范围,但学习关于补码的知识不属于本书的范围,但学习c语言语言的读者应该比学习其他高级语言的读者对数据在的读者应该比学习其他高级语言的读者对数据在内存中的表示形式有更多的了解。这样才能理解内存中的表示形式有更多的了解。这样才能理解不同类型数据间转换的规律。在本章稍后的叙述不同类型数据间转换的规律。在本章稍后的叙述中还要接触到这方面的问题。中还要接触到这方面的问题。2.整型变量的分类整型变量的分类整型变量的基本类型符为整型变量的基本类型符为int。可以根据数值的范围。可以根据数值的范围将变量定义为基本整型、短整型或长整型。在将变量定义为基本整型、短整型或长整型。在int 之前可以根据需要分别加上修饰符之前可以根据需要分别加上修饰符(modifier):short(短型短型)或或long(长型长型)。因此有。因此有以下三种整型变量:以下三种整型变量:(1)基本整型,以基本整型,以int表示。表示。(2)短整型,短整型,以以short int表示,或以表示,或以short表示。表示。(3)长整型,长整型,以以long int表示,或以表示,或以long表示。表示。在在turbo c中一个中一个int型的变量的值范围为型的变量的值范围为-215(215-1),即,即-3276832767。在实际应用中,变量的。在实际应用中,变量的值常常是正的值常常是正的(如学号、库存量、年龄、存如学号、库存量、年龄、存款额等款额等)。为了充分利用变量的表数范围,此时。为了充分利用变量的表数范围,此时可以将变量定义为可以将变量定义为“无符号无符号”类型。对以上三种类型。对以上三种都可以加上修饰符都可以加上修饰符unsigned,以指定是,以指定是“无符号无符号数数”。如果加上修饰符。如果加上修饰符signed,则指定是,则指定是“有符有符号数号数”。如果既不指定为如果既不指定为signed,也不指定为,也不指定为unsigned,则隐含为有符号,则隐含为有符号(signed)。实际上。实际上signed是完全可以不写的。归纳起来,可以用以是完全可以不写的。归纳起来,可以用以下下6种整型变量。即:种整型变量。即:有符号基本整型有符号基本整型 signed int 无符号基本整型无符号基本整型 unsigned int有符号短整型有符号短整型 signed short int无符号短整型无符号短整型 unsigned short int有符号长整型有符号长整型 signed long int无符号长整型无符号长整型 unsigned long int如果不指定如果不指定unsigned或指定或指定signed,则存储单元中最高,则存储单元中最高位代表符号位代表符号(0为正,为正,1为负为负)。如果指定。如果指定unsigned,为,为无符号型,存储单元中全部二进位无符号型,存储单元中全部二进位(bit)用作存放数用作存放数本身,而不包括符号。无符号型变量只能存放不带符本身,而不包括符号。无符号型变量只能存放不带符号的整数,如号的整数,如123、4687等,而不能存放负数,如等,而不能存放负数,如-123、-3。一个无符号整型变量中可以存放的正数的。一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。如果在范围比一般整型变量中正数的范围扩大一倍。如果在程序中定义程序中定义a和和b两个变量两个变量:int a;unsigned int b;则变量则变量a的数值范围为的数值范围为-3276832767。而变量。而变量b的的数值范围为数值范围为065535。图图3.4(a)表示有符号整型变量表示有符号整型变量a的最大值的最大值(32767)。图图3.4(b)表示无符号整型变量表示无符号整型变量b的最大值的最大值(65535)。图图3.43.4C标准没有具体规定以上各类数据所占内存字节数,标准没有具体规定以上各类数据所占内存字节数,只要求只要求long型数据长度不短于型数据长度不短于int型,型,short型不长型不长于于int型。具体如何实现,由各计算机系统自行决型。具体如何实现,由各计算机系统自行决定。如在微机上,定。如在微机上,int和和short都是都是16位,而位,而long是是32位。在位。在Vax 750 上,上,short是是16位,而位,而int和和long都是都是32位,一般以一个机器字位,一般以一个机器字(word)存乓桓鰅存乓桓鰅nt数据。前一阶段,微机的字长一般为数据。前一阶段,微机的字长一般为16位,故以位,故以16位存放一个整数,但整数的范围太小,往往不位存放一个整数,但整数的范围太小,往往不够用,故将够用,故将long型定为型定为32位。而位。而Vax的字长为的字长为32位,以位,以32位存放一个整数,范围可达正负位存放一个整数,范围可达正负21亿,亿,已足够用了,不必再将已足够用了,不必再将long型定为型定为64位。所以将位。所以将int和和long都定为都定为32位。通常的做法是:把位。通常的做法是:把long定定为为32位,把位,把short定为定为16位,而位,而int可以是可以是16位,也可以是位,也可以是32位。这主要取决于机器字长。在位。这主要取决于机器字长。在微机上用微机上用long型可以得到大范围的整数,但同时型可以得到大范围的整数,但同时会降低运算速度,因此除非不得已,不要随便使会降低运算速度,因此除非不得已,不要随便使用用long型。型。方括弧内的部分是可以省写的。例如方括弧内的部分是可以省写的。例如signed short int与与 short等价,尤其是等价,尤其是signed是完全多余的,一是完全多余的,一般都不写般都不写signed。一个整数。一个整数(以以13为例为例)在存储单在存储单元中的存储情况,见图元中的存储情况,见图3.5所示所示(假设使用的是微假设使用的是微机上的机上的c编译系统,如编译系统,如turbo、Ms)。图图3.53.整型变量的定义整型变量的定义前面已提到,前面已提到,c规定在程序中所有用到的变量都必规定在程序中所有用到的变量都必须在程序中定义,即须在程序中定义,即“强制类型定义强制类型定义”。这是和。这是和basic、fortran不同的,而和不同的,而和pascal相类似。例如:相类似。例如:int a,b;(指定变量指定变量a、b为整型为整型)unsigned short c,d;(指定变量指定变量c、d为无符号为无符号短整型短整型)long e,f;(指定变量指定变量e、f为长整型为长整型)对变量的定义,一般是放在一个函数的开头部分的对变量的定义,一般是放在一个函数的开头部分的声明部分声明部分(也可以放在函数中某一分程序内,但也可以放在函数中某一分程序内,但作用域只限它所在的分程序,这将在第作用域只限它所在的分程序,这将在第6章介绍章介绍)。例例3.2整型变量的定义与使用。整型变量的定义与使用。main()int a,b,c,d;/*指定指定a、b、c、d为整型变量为整型变量*/unsigned u;/*指定指定u为无符号整型变量为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);运行结果为运行结果为a+u=22,b+u=-14可以看到不同种类的整型数据可以进行算术运算。可以看到不同种类的整型数据可以进行算术运算。在本例中是在本例中是int型数据与型数据与unsigned int型数据进行型数据进行相加相减运算相加相减运算(有关运算的规则在本章有关运算的规则在本章3.7节中介节中介绍绍)。4.整型数据的溢出整型数据的溢出在在turbo c中一个中一个int型变量的最大允许值为型变量的最大允许值为32767,如果再加如果再加1,会出现什么情况,会出现什么情况?例例3.3整型数据的溢出。整型数据的溢出。main()int a,b;a=32767;b=a+1;printf(%d,%d,a,b);运行结果为运行结果为32767,-32768图图3.6从图从图3.6可以看到:变量可以看到:变量a的最高位为的最高位为0,后,后15位全位全为为1。加。加1后变成第后变成第1位为位为1,后面后面15位全为位全为0。而。而它是它是-32768的补码形式,所以输出变量的补码形式,所以输出变量b的值为的值为-32768。请注意:一个整型变量只能容纳。请注意:一个整型变量只能容纳-3276832767范围内的数,无法表示大于范围内的数,无法表示大于32767的数。的数。遇此情况就发生遇此情况就发生“溢出溢出”,但运行时并不报错。但运行时并不报错。它好像汽车的里程表一样,达到最大值以后,又它好像汽车的里程表一样,达到最大值以后,又从最小值开始计数。所以,从最小值开始计数。所以,32767加加1得不到得不到32768,而得到,而得到-32768,这可能与程序编制者的,这可能与程序编制者的原意不同。从这里可以看到:原意不同。从这里可以看到:c的用法比较灵活,的用法比较灵活,往往出现副作用,而系统又不给出往往出现副作用,而系统又不给出“出错信息出错信息”,要靠程序员的细心和经验来保证结果的正确。,要靠程序员的细心和经验来保证结果的正确。将变量将变量b改成改成long型就可得到预期的结果型就可得到预期的结果32768。3.3.3 整型常量的类型整型常量的类型我们已知整型变量可分为我们已知整型变量可分为int、short int、long int和和unsigned int、unsigned short、unsigned long等等类别。那么常量是否也有这些类别类别。那么常量是否也有这些类别?在将一个整在将一个整型常量赋值给上述几种类别的整型变量时如何做型常量赋值给上述几种类别的整型变量时如何做到类型匹配到类型匹配?请注意以下几点:请注意以下几点:(1)一个整数,如果其值在一个整数,如果其值在-32768+32767范围内,范围内,认为它是认为它是int型,它可以赋值给型,它可以赋值给int型和型和long int型型变量。变量。(2)一个整数,如果其值超过了上述范围,而在一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是范围内,则认为它是长整型,可以将它赋值给一个长整型,可以将它赋值给一个long int型变量。型变量。(3)如果某一计算机系统的如果某一计算机系统的c版本版本(例如例如turbo c)确定确定short int与与int型数据在内存中占据的长度相同,型数据在内存中占据的长度相同,则它的表数范围与则它的表数范围与int型相同。因此,一个型相同。因此,一个int型的型的常量也同时是一个常量也同时是一个short int型常量,可以赋给型常量,可以赋给int型或型或short int型变量。型变量。(4)一个整常量后面加一个字母一个整常量后面加一个字母u,认为是,认为是unsigned int型,如型,如12345u,在内存中按,在内存中按unsigned int规定规定的方式存放的方式存放(存储单元中最高位不作为符号位,存储单元中最高位不作为符号位,而用来存储数据,见图而用来存储数据,见图3.4(b)。如果写成。如果写成-12345u,则先将,则先将-12345转换成其补码转换成其补码53191,然后按无,然后按无符号数存储。符号数存储。(5)在一个整常量后面加一个字母在一个整常量后面加一个字母l或或l,则认为是,则认为是long int型常量。型常量。例如例如123l、432l、0l等,这往往用于函数调用中。等,这往往用于函数调用中。如果函数的形参为如果函数的形参为long int型,则要求实参也为型,则要求实参也为long int型,此时用型,此时用123作实参不行,而要用作实参不行,而要用123l作实参。作实参。3.4 实型数据实型数据 3.4.1 实型常量的表示方法实型常量的表示方法实数实数(real number)又称浮点数又称浮点数(floating-point number)。实数有两种表示形式:。实数有两种表示形式:(1)十进制小数形式。它由数字和小数点组成十进制小数形式。它由数字和小数点组成(注注意必须有小数点意必须有小数点)。.123、123.、123.0、0.0都都是十进制小数形式。是十进制小数形式。(2)指数形式。如指数形式。如123e3或或123e3都代表都代表123103。但。但注意字母注意字母e(或或e)之前必须有数字,且之前必须有数字,且e后面的指数后面的指数必须为整数,如必须为整数,如e3、2.1e3.5、e3、e等都不是等都不是合法的指数形式。合法的指数形式。一个实数可以有多种指数表示形式。例如一个实数可以有多种指数表示形式。例如123.456可以表示为可以表示为123.456e0,12.3456e1、1.23456e2、0.123456e3、0.0123456e4、0.00123456e5等。把等。把其中的其中的1.23456e2称为称为“规范化的指数形式规范化的指数形式”,即在字母即在字母e(或或e)之前的小数部分中,小数点左边之前的小数部分中,小数点左边应有一位应有一位(且只能有一位且只能有一位)非零的数字。例如非零的数字。例如2.3478e2、3.0999e5、6.46832e12都属于规范化都属于规范化的指数形式,而的指数形式,而12.908e10、0.4578e3、756e0则则不属于规范化的指数形式。一个实数在用指数形不属于规范化的指数形式。一个实数在用指数形式输出时,是按规范化的指数形式输出的。例如,式输出时,是按规范化的指数形式输出的。例如,指定将实数指定将实数5689.65按指数形式输出,必然输出按指数形式输出,必然输出5.68965e+003,而不会是而不会是0.568965e+004或或56.8965e+002。1.实型数据在内存中的存放实型数据在内存中的存放形式形式 在常用的微机系统中,一个实型在常用的微机系统中,一个实型数据在内存中占数据在内存中占4个字节个字节(32位位)。与整型数据的存图。与整型数据的存图3.7储方储方式不同,实型数据是按照指数式不同,实型数据是按照指数形式存储的。系统把一个实型形式存储的。系统把一个实型数据分成小数部分和指数部分,数据分成小数部分和指数部分,分别存放。指数部分采用规范分别存放。指数部分采用规范化的指数形式。实数化的指数形式。实数 3.14159 在内存中的存放形式可以用图在内存中的存放形式可以用图3.7示意。示意。实型变量图图3.7图中是用十进制数来示意的,实际上在计算机中是用图中是用十进制数来示意的,实际上在计算机中是用二进制数来表示小数部分以及用二进制数来表示小数部分以及用2的幂次来表示指数的幂次来表示指数部分的。在部分的。在4个字节个字节(32位位)中,究竟用多少位来表示中,究竟用多少位来表示小数部分,多少位来表示指数部分,标准小数部分,多少位来表示指数部分,标准C并无具体并无具体规定,由各规定,由各C编译系统自定。不少编译系统自定。不少c编译系统以编译系统以24位位表示小数部分表示小数部分(包括符号包括符号),以,以8位表示指数部分位表示指数部分(包括包括指数的符号指数的符号)。小数部分占的位。小数部分占的位(bit)数愈多,数的有数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。能表示的数值范围愈大。2.实型变量的分类实型变量的分类C实型变量分为单精度实型变量分为单精度(float型型)、双精度、双精度(double型型)和长双精度型和长双精度型(long double)三类。三类。ANSI C 并未具体规定每种类型数据的长度、精度并未具体规定每种类型数据的长度、精度和数值范围。有的系统将和数值范围。有的系统将double型所增加的型所增加的32位位全用于存放小数部分,这样可以增加数值的有效全用于存放小数部分,这样可以增加数值的有效位数,减少舍入误差。有的系统则将所增加的位位数,减少舍入误差。有的系统则将所增加的位(bit)用于存放指数部分,这样可以扩大数值的用于存放指数部分,这样可以扩大数值的范围。表范围。表3.2列出的是微机上常用的列出的是微机上常用的c编译系统编译系统(如如turbo c,Ms c,borland c)的情况。应当了解,的情况。应当了解,不同的系统会有差异。不同的系统会有差异。对每一个实型变量都应在使用前加以定义。如对每一个实型变量都应在使用前加以定义。如:floatx,y,(指定指定x、y为单精度实数为单精度实数)double z;(指定指定z为双精度实数为双精度实数)long double t;(指定指定t为长双精度实数为长双精度实数)在初学阶段,对在初学阶段,对long double型用得较少,因此我们型用得较少,因此我们不准备作详细介绍。读者只要知道有此类型即可。不准备作详细介绍。读者只要知道有此类型即可。3.实型数据的舍入误差实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位以外的数提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。例如,字将被舍去。由此可能会产生一些误差。例如,a 加加 20的结果显然应该比的结果显然应该比a大。请分析下面的程序:大。请分析下面的程序:例例3.4实型数据的舍入误差。实型数据的舍入误差。main()float a,b;a=123456,789e5;b=a+20;printf(%f,b);3.4.3 实型常量的类型实型常量的类型 C编译系统将实型常量作为双精度来处理。例如已编译系统将实型常量作为双精度来处理。例如已定义一个实型变量定义一个实型变量f,有如下语句:,有如下语句:f=2.45678*4523.65 系统将系统将2.45678和和4523.65按双精度数据存储按双精度数据存储(占占64位位)和和运算,得到一个双精度的乘积,然后取前运算,得到一个双精度的乘积,然后取前7位赋给实型变量位赋给实型变量f。这样做可以保证计算结果更精确,。这样做可以保证计算结果更精确,但是运算速度降低了。可以在数的后面加字母但是运算速度降低了。可以在数的后面加字母f或或f(如如1.65f,654.87f),这样编译系统就会按单精度,这样编译系统就会按单精度(32位位)处理。一个实型常量可以赋给一个处理。一个实型常量可以赋给一个float型、型、double型型或或long double变量。根据变量的类型截取实型常量中变量。根据变量的类型截取实型常量中相应的有效位数字。假如相应的有效位数字。假如a已指定为单精度实型变量:已指定为单精度实型变量:float a;a=111111111;由于由于float型变量只能接收

    注意事项

    本文(C程序设计(第二版)第3章.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开