【试题059】数据类型转换之强制类型转换例题合集

文章详细介绍了数据类型转换的规则,包括自动转换与强制转换的区别,以及在不同数据类型之间的转换可能导致的精度丢失和效率问题。通过实例演示了不同类型之间的运算和转换结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据类型强制转换一般格式:(数据类型符)(表达式)

2.说明:无论是自动的还是强制的转换,当把数据长度较长的结果存入数据长度较短的变量时,将截去超出的部分,有可能造成错误。

3.流程:首先按照自动转换类型原则计算表达式的值,然后转换为指定类型。

若表达式仅仅是单个常量或变量时,外面的对圆括号可以省略若是含有运算符的表达式,则必须用一对圆括号括起来!

4.中间变量:强制类型转换获得的是一个所需类型的中间量原表达式/变量的类型和值不发生改变。(参与运算的常量或变量类型自动转换是临时的)

5.精度丢失问题:较高类型转换成较低类型时,会截去超出部分,丢失小数点后的数值

6.效率问题:类型转换将占用系统时间,过多的转换会降低程序运行效率。


7.例题:设 float x=2.5,y=3,1;则表达式(int)(x+y)的类型为?

  • 分析:x+y会自动转换成double类型
  • 但是(int)将表达式强制转换成整型

8.例题:设int x;能正确将x+2强制转化为双精度实型的表达式是?

  • 分析:强制转化格式:(数据类型符表达式)
  • 又因为x+2不是单个常量也不是单个变量,括号不能省略。
  • 所以(double)(x+2)

9.例题:设double x=5.168;

执行printf("%5.3f\n",(int)(x*10+0.5)/10.0);后的输出结果是 ?

  • 分析:(x10+0.5)=5.16810+0.5=52.18
  • (int)52.18=52
  • 52/10.0=5.2
  • 又因为%5.3f表示输出所占域宽为5保留3位小数的实型数据
  • 所以结果为5.200

10.例题:如果要将表达式(3*4.5)强制转换成长整型,则该写成?

  • 分析:长整型类型关键字是long
  • *在 (3**4.5)之前加long即可
  • (long)(3*4.5)

11.例题:设int a;float b=1.9;

执行语句a=(int)b;后变量a和b的值分别是?

  • 分析:a=(int)b是将b的值转成int类型赋值给a
  • 所以a=1
  • b的值并未改变,还是1.9

12.例题♥♥:设float a;,执行表达式(double)a后,a的类型是?

  • 分析:本身a 是float类型
  • (double) a 进行强制类型转换,用来将 float 类型的值 a 转换为 double 类型
  • 这种类型转换仅影响表达式的计算过程,不会改变变量本身类型
  • 执行 (double) a 后,a 的类型仍然是 float,它只是在表达式中被临时转换为 double 类型以进行计算
//代码举例
#include <stdio.h>
int main() {
  float a = 1.5, b;
  b = (int)a;
  printf("a=%f\n", a);//a=1.500000
  printf("b=%d\n", b);//b=0 以错误类型输出造成结果错误,b本质上还是float类型
  printf("b=%f\n", b);//b=1.000000
//强制转型不改变原来的值和数据类型,只是临时的
//将 a 强制转换为整数类型,并将结果存储在 b 中
}

13.例题:设float m=3.89;则执行语句print("%d\n",(int)m);

后输出结果是?

  • 分析:(int)m是指将m强制转换成int类型
  • 所以输出结果为3

14.例题:设int A=9,B=6,C;,执行语句C=A/B+0.8;后C 的值是?

  • 分析:先计算A/B=9/6=1
  • 然后1+0.8=1.8
  • 接着因为C是int类型,所以C=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值