2.5 数据的类型转换_第1页
2.5 数据的类型转换_第2页
2.5 数据的类型转换_第3页
2.5 数据的类型转换_第4页
2.5 数据的类型转换_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、数据的类型转换Teacher teaching designCONTENTS 目 录自动类型转换强制转换案例剖析 交流提升案例分析 仿真演练自动类型转换PART 01自动类型转换数据类型的转换方法:变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:一、自动类型转换(1)、自动转换的原则不同类型的数据可以进行混合运算,但是还要遵循一个原则:一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则。混合运算的自动转换规则如图所示。double float 高级longuns

2、ignedint char short 低级(2)、转换过程中注意点说明:、当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级按上图箭头所示:char/shorintunsignedlongfloatdouble即左边级别低的类型向右边转换。具体地说,若在表达式中优先级最高的数据是double型,则此表达式中其他数据均转换成double 型,且结果也是double型;自动类型转换、赋值过程中类型转换:C语言赋予了赋值表达式类型转换功能,一旦出现变量和表达式类型不一致时,会自动进行类型转换,将表达式的值向变量类型方向进行转换。类型转换有前提必须是相近的且

3、可以转换的才能进行,主要包括如下表中几种情况: 如,设x 是整型数,y是单精度实型数,z是双精度实型数,则: x+a 的值是整型数; x+1.5的值是双精度实型数; x+y的值是双精度实型数; x+y+z+x的值 是双精度实型数; a+a的值是整型数; y+y的值也是双精度实型数。变量类型变量类型表达式类型表达式类型转换方式转换方式整型整型实型实型截取小数部分截取小数部分实型实型整型整型小数部分补小数部分补0 0单精度实型单精度实型双精度型实型双精度型实型截取小数部分剩截取小数部分剩7 7位有效数字位有效数字双精度实型双精度实型单精度实型单精度实型小数部分补小数部分补0 0到到1616位位字符

4、型字符型整型整型低低8 8位送至字符变量一个字节的存储单元位送至字符变量一个字节的存储单元整型整型字符型字符型ASCASC码送至整型变量低码送至整型变量低8 8位位, ,若是带符号且若是带符号且ASCASC码码最高位为最高位为1,1,则补则补1,1,否则补否则补0.0.强制转换PART 02强制转换强制转换(1)强制转换的表示形式是: (类型说明符)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。强制类型转换符的对象是表达式,包括常量,变量,函数和表达式,把圆括号括起来的类型名称放置在预转换的表达式前面。例如: (float)x 把x转换为实型 (int)(a-b) 把a-b的结果

5、转换为整型 (int)a-b 把a转换为整型再与b相减在使用强制转换时应注意以下问题:1、类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。2、无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型,如下程序所示。main( ) float x; int y; x=3.6; y=(int)x; printf(%f,%d,x,y); 运行结果为:3.600000 , 3案例剖析 交流提升PART 03案例剖析 交流提升【例1】、分析以下

6、程序main()float a=12.3456;a=(int)(a*100+0.5)/100.0;printf(“a=%f”,a);程序运行的结果为:a=12.350000思考分析:(1)、由于(int) 的作用,(int)(a*100+0.5)运算的结果为为整型1235,(2)、除100.0运算时自动转换为实型12.350000,所以结果为12.35。2、强制转换的注意点、强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。也就是说强制的结果只是把变量值转换成要求的类型后参与所在环境运算,而变量本身的 类型 和 值 并未改变。例如,(double)a 只是将变量a的值转换成一

7、个double型的中间量,其数据类型并未转换成double型。、如果对一个整体表达式进行类型转换,要注意在表达式前后加上圆括号,以免出现只对表达式前面部分转换的情况。如(int)(x+y)和(int)x+y不同:(int)(x+y)是将x和y相加后,把结果转换为整型,而(int)x+y是把x转换成int型之后再与y相加。、当有些类型无法转换时,需要强制类型转换的支持。案例剖析 交流提升【例2】main()float a=12.34;int b; b=(int)a; printf( %d, %f,b,a);程序运行结果:12, 12.340000b是int型,a是float类型并不改变。3、无论

8、是强制转换或是自动转换,如果要转换的量超过了转换后类型的表示范围,将出现溢出错误或不可预料的结果。如:main() int a;float b=123456;a=b;printf(“a=%d”,a);程序运行结果:a=0仿真演练 体验探索PART 04仿真演练 体验探索1、分析下列程序的输出结果是( ) main( ) double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf(%d n, d*y); A) 3 B) 3.2 C) 0 D) 3.07思考题:数据类型自动转换对程序输出结果的影响?2、数字字符0的ASCII值为48,若有以下程序运行后的

9、输出结果是 ( ) 。main() char a=1,b=2; printf(%c,b+1); printf(%dn,b-a); A)3,1 B)50,2 C)2,2 D)2,50 思考题:字符型数据与整型数据之间的转换方法?3、下列程序执行后的输出结果是 A) G B) H C) I D) Jmain() int x=f; printf(%c n,A+(x-a+1); 思考: 允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,同样也允许允许对整型变量赋以字符值,把整型量按字符量输出。 仿真演练 体验探索4、设有char w;int x;float y;double z; 则表达式 w*x+z-y 值的数据类型为( )A)float B)char C)int D)double5、已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量101是( )A) 字符A B)字符a C)字符e D)非法的常量6、若变量a是int类型,并执行了语句:a=A+1.6;,则正确的叙述是( )A) a的值是字符C B) a的值是浮点型C) 不允许字符型和浮点型相加 D) a的值是字符A的ASCII值加上1。7、以下程序的输

温馨提示

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

评论

0/150

提交评论