问题:输入一个值,若小于110(规定用100的1.1倍表示)输出YES。
最初代码:
#include <stdio.h>
int mian(void){
int a,b=100;
scanf("%d",&a);
if(a<1.1*b){
printf("YES\n");
}
return 0;
}
运行结果:
修改后代码:
#include <stdio.h>
int main(void){
int a,b=100;
double n;
n=1.1*b;
scanf("%d",&a);
if(a<n){
printf("YES\n");
}
return 0;
}
运行结果:
问题原因:1.1*b 表达式的值为double类型的110.000000。
C语言自动类型转换规则:
1、若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2、转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
a、若两种类型的字节数不同,转换成字节数高的类型。
b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型。
3、所有的浮点运算都是以双精度进行的。
4、char型和short型参与运算时,必须先转换成int型。
5、在赋值运算中,“ = ” 两边的数据类型不同时, “ = ” 右边的类型将转换为左边的类型。
6、当浮点类型被 降级(把一种类型转换成更低级别的类型)为整数类型时,原来的浮点值会被 截断(小数部分丢弃)。