Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2981534
  • 博文数量: 412
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 7374
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 15:15
个人简介

学习是一种信仰。

文章分类

全部博文(412)

文章存档

2014年(108)

2013年(250)

2010年(11)

2009年(43)

我的朋友

分类: C/C++

2014-01-22 16:53:13

上机1_1:温度转换

int main()

{

        int f;

        float c;

 

        scanf( "%d", &f );

 

        //c = 5/9*(f-32);

        c = 5.0/9*(f-32);

 

        printf( "%.2f\n", c );

 

        return 0;

}

现象: c = 5.0/9*(f-32)正确,输入93,输出33.98

       c = 5/9*(f-32)错误,输入93,输出0.00

 

c语言的类型转换:

语句和表达式通常应该是只使用一种类型的变量和常量,但如果你使用了混合类型,C则会用一个规则集合来自动完成类型的转换。这可能很方便,但也可能很危险,尤其在你无意地混合使用了不同类型的情况下。

 

隐式类型转换规则:

 

C语言自动转换不同类型的行为称之为隐式类型转换 ,转换的基本原则是:低精度类型向高精度类型转换,具体是:

 

int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long -> float -> double -> long double

 

注意,上面的顺序并不一定适用于你的机器,比如当intlong具有相同字长时,unsigned int的精度就会比long的精度高(事实上大多数针对32机的编译器都是如此)。另外需要注意的一点是并没有将charshort型写入上式,原因是他们可以被提升到int也可能被提升到unsigned int

 

提升数据的精度通常是一个平滑无损害的过程,但是降低数据的精度可能导致真正的问题。原因很简单:一个较低精度的类型可能不够大,不能存放一个具有更高精度的完整的数据。一个1字节的char变量可以存放整数101但不能存放整数12345。当把浮点类型数据转换为整数类型时,他们被趋零截尾或舍入。

 

强制类型转换:

 

通常我们应该避免自动类型转换,当我们需要手动指定一个准确的数据类型时,我们可以用强制类型转换机制来达到我们的目的,使用方法很简单,在需要强制转换类型的变量或常量前面加上(type),例如(double)i; 即把变量 i 强制转换成double型。

 

 

c = 5/9*(f-32)中,右边是int,结果为0,左边是float,发生隐式类型转换,c0.00

c = 5.0/9*(f-32)中,(f-32)的为int,结果为615.0/9发生隐式类型转换,转换为float,结果为9分之5,相乘为float,结果为33.98

因此,题中语句有两种写法:

c = 5.0/9*(f-32); --------------------发生隐式类型转换

c = (float5/9*(f-32);--------------强制类型转换

 

int main()

{

        int f;

        int c1,c2;

        float c;

 

        scanf( "%d", &f );

 

        //c = 5/9*(f-32);

        c1 = 5/9*(f-32);

        c2 = (float)5/9*(f-32);

        c = 5.0/9*(f-32);

 

        printf( "%d\n", c1 );-----------输出0

        printf( "%d\n", c2 );-----------输出33

        printf( "%.2f\n", c );----------输出33.98

 

        return 0;

}

 

 

 

 


阅读(1094) | 评论(0) | 转发(0) |
0

上一篇:sqlserver约束

下一篇:C语言1_2:计算书费

给主人留下些什么吧!~~