购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2-7 数据形态的转换

C语言的数据类型有许多种,例如字符、整数、长整数、浮点数或是双倍精度浮点数。数据类型的转换类似倒水,如果将小杯的水倒入大杯中,水不会流失;如果将大杯的水倒入小杯中,水会流失。例如,可以想象整数是小杯的水,浮点数是大杯的水。

假设a是整数,值是2,将a转换成浮点数后值变成2.0,整体看数据是有保留。假设b是浮点数,值是2.5,将b转换成整数后值变成2,这时数据会有流失。

在程序设计中,会依据需要做上述数据形态的转换。

2-7-1 基础数据形态的转换

在设计C语言程序时,时常会面对不同变量数据形态之间的运算。例如,将某一浮点数和某一整数相加,碰上这种情形时,C编译程序会主动将整数转换成浮点数来运算。

实例1: 有一C语言指令如下:

s=a+b;

假设执行指令前,a是整数,a=3;b是浮点数,b=2.5;s是浮点数,s=2.0。

则在运算完成后,s=5.5,a=3,b=2.5。

实例2: 有一C语言指令如下:

s=a+b;

假设a是整数,a=3;b是浮点数,b=2.5;s是整数,s=2。

由于s是整数,所以尽管a+b=5.5,但s只能存储整数,所以最后结果s=5。

程序实例 ch2_9.c:数据形态的转换实例。

实例3: 有一C语言指令如下:

s=a / b;

假设执行指令前,a、b都是整数,s则是浮点数,其中a=3,b=2,s=1.0。

执行指令时,计算机会先执行整数相除,所以a / b的结果是1,然后将1存入s值内,因为s是浮点数,所以执行结果s值是1.0。

从以上运算可知,若不是一位很熟悉C语言的程序设计员,可能会被不同操作数形态的运算搞得有一点头疼。所以设计程序时,最好的方法是尽量避免不同形态的操作数在同一指令中出现。

当无法避免不同形态的操作数在同一指令中时,C语言提供了另一个功能可克服上面问题,那就是更改数据形态。使用时,只要在某个变量前加上括号,然后在括号中指明操作数形态即可。例如,若想将上述实例a和b强制改成浮点数,则可以将上述表达式改成:

s=( float) a / ( float) b;

此时计算机在执行时会先将a改成3.0,b改成2.0,所以运算完成后s的值是1.5。

另外,如果是进行整数值相除,假设指令如下:

s=3 / 2;

上述执行结果是1,假设s是浮点数,我们期待获得浮点数1.5的除法结果,可以将上述指令改为下列方式之一,即可以获得正确的浮点数结果。

s=3.0 / 2.0;

s=3 / 2.0;

s=3.0 / 2;

程序实例 ch2_10.c:数据形态的转换实例。

上述第12行的printf( )函数内的输出格式“%3.2f”,是设定输出的浮点数整数有3位数,其中小数部分有2位数。

实例4: 有一C语言指令如下:

s=(int) a / (int) b;

假设a和b是浮点数,a=4.6,b=2.1,s是整数,s=10。

执行指令时,由于C语言会先将浮点数a改成整数4,b改成整数2,所以运算完成后s的值是2。

程序实例 ch2_11.c:数据形态的转换应用。

2-7-2 整数和字符混合使用

另外,有时也可能会将整数(int)和字符(char)混用,它的处理原则是,先将字符转换成它所对应的整数值,然后进行运算。

实例5: 有一C语言指令如下:

i='a' - 'A';

假设i是整数,则在进行运算时,计算机首先将‘a’转换成ASCII码值97,然后将‘A’转换成ASCII码值65,所以运算完成后i的值是32。

程序实例 ch2_12.c:整数和字符混合使用。

至于有关整数和字符之间的应用,我们将在后面章节再做更详细的实例说明。

2-7-3 学生买球鞋

假设学生脚的尺寸是37.5,可是商店只售37码或38码的球鞋,现在售货员建议学生购买38码的球鞋。

程序实例 ch2_12_1.c:买球鞋程序。 KIL9a8bplqVGDvISDZxxMzJPTrzM8Q0teJfmw7Q91VakTzYL8PV7JY+vz9N1zEj4

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开