内容正文:
YCF
正版可修改PPT
(中职)C语言程序设计案例教程 2.5 数据的类型转换ppt课件
1
数据的类型转换
Teacher teaching design
CONTENTS
目 录
自动类型转换
强制转换
案例剖析 交流提升
案例分析 仿真演练
自动类型转换
PART 01
自动类型转换
数据类型的转换方法:变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:
一、自动类型转换
(1)、自动转换的原则
不同类型的数据可以进行混合运算,但是还要遵循一个原则:一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则。混合运算的自动转换规则如图所示。
double float 高级
long
unsigned
int char short 低级
(2)、转换过程中注意点
说明:
①、当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级按上图箭头所示:char/shor<int<unsigned<long<float<double即左边级别低的类型向右边转换。具体地说,若在表达式中优先级最高的数据是double型,则此表达式中其他数据均转换成double 型,且结果也是double型;
自动类型转换
②、赋值过程中类型转换:C语言赋予了赋值表达式类型转换功能,一旦出现变量和表达式类型不一致时,会自动进行类型转换,将表达式的值向变量类型方向进行转换。类型转换有前提必须是相近的且可以转换的才能进行,主要包括如下表中几种情况:
如,设x 是整型数,y是单精度实型数,z是双精度实型数,则:
x+’a’ 的值是整型数;
x+1.5的值是双精度实型数;
x+y的值是双精度实型数;
x+y+z+’x’的值 是双精度实型数;
‘a’+’a’的值是整型数;
y+y的值也是双精度实型数。
变量类型 表达式类型 转换方式
整型 实型 截取小数部分
实型 整型 小数部分补0
单精度实型 双精度型实型 截取小数部分剩7位有效数字
双精度实型 单精度实型 小数部分补0到16位
字符型 整型 低8位送至字符变量一个字节的存储单元
整型 字符型 ASC码送至整型变量低8位,若是带符号且ASC码最高位为1,则补1,否则补0.
强制转换
PART 02
强制转换
强制转换
(1)强制转换的表示形式是:
(类型说明符)<表达式>
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
强制类型转换符的对象是表达式,包括常量,变量,函数和表达式,把圆括号括起来的类型名称放置在预转换的表达式前面。
例如:
(float)x 把x转换为实型
(int)(a-b) 把a-b的结果转换为整型
(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】、分析以下程序
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的值转换成一个double型的中间量,其数据类