c语言的基本数据类型及其表示_第1页
c语言的基本数据类型及其表示_第2页
c语言的基本数据类型及其表示_第3页
c语言的基本数据类型及其表示_第4页
c语言的基本数据类型及其表示_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

少年易学老难成,一寸光阴不可轻少年易学老难成,一寸光阴不可轻-百度文库#}讨论1:在TurboC2.0开发环境下运行此程序时,编译过程中提示有一个错误,信息窗口显示如图3-2所示的错误信息,说明源程序第五行有错,错误原因是主程序中的变量C没有定义。编辑窗口源程序反相显示出第五行,见图3-3所示。分析错误原因可知,程序第五行并没有错,而是在使用变量c之前没有定义其类型,修改程序第二行为:inta,b,c;重新编译即可通过。可见,C程序中的所有变量都必须先定义后使用。CompilingC:\TC\SUM.C:ErrorC:\TC5:Undefinedsymbolinfunctionnain图SUM.匚源程序编译出错信息,讨论2:由SUM.C源程序可见,该程序的运行结果应该是:c=32770,可实际运行结果如下:c=-32766FileEJHRUnC(Line5Col5main()tinta,b;a=327i7;h=3;printf("c=^d\nll,G);图mmsum.c源程序编辑窗口平显然这个结果是错误的,但系统没有提示出错。为什么会出现这种情况呢?图3-4是该程序运行后变量a、b、c中的存储情况。由图中可见,a和b的值都没有超出整型数的表示范围,而a加b后应得到32770,这个数已经超出了整型数的表示范围,称为溢出。但这种溢出在内存变量c中的表现形式正好是数值-32766的补码形式,当输出变量c的内容时自然就输出了-32766,造成结果错误。这就是数据溢出导致的结果。对于这种问题,系统往往不给出错误提示,而是要靠正确使用类型说明来保证其正确性。所以要求对数据类型的使用要仔细,对运算结果的数量级要有基本估计。变量*jI51444444^1川13JhlI嵬花了j变量匕」[口|皿口|口|口|可同川01爪1双口3j变量cj|"口|"口|"口|口|""口I01口1口I111国-嵬循6的补码J阁14两数相加变量存储示意图」如果把上述程序作以下修改:/*SUM.C源程序*/main(){longa,b,c;/*说明a、b、c为长整型变量*/a=32767;b=3;c=a+b;printf("c=%ld\n",c);/*按长整型格式输出变量c的值*/}即把变量a、b、c定义为长整型,就可以得到正确的运行结果。请读者思考:如果只把c定义为长整型,a和b还保持整型,结果会怎样?讨论3:在C程序中,要注意常量与变量的类型匹配问题,例如上述程序中变量c的结果是正整数32770,与之匹配的有longint型,还有unsignedint、unsignedshortint和unsignedlongint等所有无符号整型,因为32770是正数,又没有超出所有无符号整型数的表示范围。而int或shortint型是不能与之匹配的,否则会产生溢出。3.2.3实型数据及其表示.实数类型C语言提供了三种用于表示实数的类型:单精度型、双精度型和长双精度型。表3-3列出了实型数据的长度和表示范围。表中的有效位是指数据在计算机中存储和输出时能够精确表示的数字位数。表3-3实数基本类型表实数类型存储字节数最小数值范围有效位单精度型4字节10-38〜10386〜7双精度型8字节10-308〜1030815〜16长双精度型16字节10-4931〜10493218〜19在计算机中,实数是以浮点数形式存储的,所以通常将单精度实数称为浮点数。由计算机基础知道,浮点数在计算机中是按指数形式存储的,即把一个实型数据分成小数和指数两部分。例如十进制实型数据0.12345610-2在计算机中的存放形式可用图3-5示意。实际上计算机中存放的是二进制数,这里仅用十进制数说明其存放形式。数符- 小数• 指数符号招数•十0.123456-2-1小数部分p 指数部分图15懒飘在计算机中的存放形式・其中,小数部分一般都采用规格化的数据形式,即:小数点放在第一个有效数字前面,使小数部分存放小于1的纯小数。例如0.12345610-2还可表示为123.45610-5、1.2345610-3、0.000123456101等,但这些都不是规格化的数。表示小数部分的位数愈多,数的有效位就愈多,数的精确度就愈高。表示指数部分的位数愈多,数的表示范围就愈大。究竟用多少位来表示小数部分,多少位表示指数部分,C标准对此并无具体规定,由各C编译系统自定。对于单精度实数,一般的C编译系统用4个字节中的前24位表示小数部分,其中最高位为整个数的符号位,用后8位表示指数部分,其中最高位为指数的符号位(见图3-5)。这样,单精度实数的精度就取决于小数部分的23位二进制数位所能表达的数值位数,将其转换为十进制,最多可表示7位十进制数字,所以单精度实数的有效位是7位。由实型数据的存储形式可见,由于机器存储位数的限制,浮点数都是近似值,而且多个浮点数运算后误差累积很快,所以引进了双精度型和长双精度型,用于扩大存储位数,目的是增加实数的长度,减少累积误差,改善计算精度。2.实型常量实型常量亦被称为实型数或浮点数。在C语言中,实型常量一般都作为双精度来处理,并且只用十进制数表示。实型常量有两种书写格式:小数形式和指数形式。(1)小数形式:它由符号、整数部分、小数点及小数部分组成。例如以下都是合法的小数形式实型常量:12.34,0.123,.123,123.,-12.0,-0.0345,0.0,0.注意其中任何位置上的小数点都是不可缺少的。例如123.不能写成123,因为123是整型常量,而123.是实型常量。(2)指数形式:由十进制小数形式加上指数部分组成,其形式如下:十进制小数e指数或:十进制小数E指数格式中的e或E前面的数字表示尾数,e或E表示底数10,而e或E后面的指数必须是整数,表示10的幂次。例如25.34e3表示25.34x103=25340。以下都是合法的指数形式实型常量:2.5e3,-12.5e-5,0.123E-5,-267.89E-6,0.61256e3注意指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。例如:e3,3.0e,E-9,10e3.5,.e8,e都是不合法的指数形式。对于上述两种书写形式,系统均默认为是双精度实型常量,可表示15〜16位有效数字,数的表示范围可达到10-308〜10308。如果要表示单精度实型常量和长双精度实型常量,只要在上述书写形式后分别加上后缀f(F)或(L)即可。例如:2.3f,-0.123F,2e-3f,-1.5e4F为合法的单精度实型常量,注意只有7位有效数字。1256.34L,-0.123L,2e3L,为合法的长双精度实型常量,有18〜19位有效数字。对于超过有效数字位的数位,系统存储时自动舍去。3.实型变量在C语言中,实型变量分为单精度、双精度和长双精度等三种类型。ANSIC标准允许的定义三种实型变量的关键字如下:float单精度型double^双精度型longdouble^长双精度型实型变量的定义,只需在说明语句中指明实型数据类型和相应的变量名即可。例如:floata,b;/*说明变量a,b为单精度型实数*/doublec,d;/*说明变量c,d为双精度型实数*/longdoublee,f/*说明变量e,f为长双精度型实数*/4.实型数据应用中的误差问题例3-2:输出实型数据a,b/*L3_2.C源程序*/main(){floata;/*说明变量a为单精度型*/doubleb;/*说明变量b为双精度型*/a=12345.6789;/*为a赋值*/b=0.1234567891234567899e15;/*为b赋值*/printf("a=%f,b=%f\n",a,b);/*输出变量a、b的值*/}程序为单精度变量a和双精度变量b分别赋值,并不经过任何运算就直接输出变量a,b的值。理想结果应该是照原样输出,即:a=12345.6789,b=0.1234567891234567899e15但运行该程序,实际输出结果是:a=12345.678711,b=123456789123456.797000由于实型数据的有效位是有限的,程序中变量a为单

温馨提示

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

评论

0/150

提交评论