C语言中,在实际应用中,会有不同类型数据一起做运算,由于类型的不同,得到的结果很可能不是自己想要的结果,如下面的例子:
求1 + 1/2 + 1/3 ... 1/100
按照思路写如下的程序:
- #include <stdio.h>
- int main()
- {
- int i;
- #由于结果有小数点,所以这样定义为float类型
- float sum = 0;
- for(i = 1;i <= 100;i++)
- {
- sum = sum + 1 / i;
- }
- printf("sum = %f\n",sum);
- return 0;
- }
但运行结果却是:
sum = 1.000000
显然结果是不对的,那么是由于上面原因导致运行结果不对呢?
问题至于,没有做类型强制转换。在程序中,i 是int类型,而在C语言中,其他类型的数据与整型(int)做除法运算,最终得到的结果也是整型(int)的结果。
所以在上面的程序中,1 / i,当i = 1的时候,结果等于1,当i > 1的时候,结果等于0。要使得运行结果正确,需要做类型的强制转换,如下程序:
- #include <stdio.h>
- int main()
- {
- int i;
- float sum = 0;
- for(i = 1;i <= 100;i++)
- {
- #这里对i进行类型强制转换
- sum = sum + 1 / (float)(i);
- }
- printf("sum = %f\n",sum);
- return 0;
- }
运行结果如下:
sum = 5.187378
转载于:https://blog.51cto.com/zoufuxing/1177319