C语言中,在实际应用中,会有不同类型数据一起做运算,由于类型的不同,得到的结果很可能不是自己想要的结果,如下面的例子:

  求1 + 1/2 + 1/3 ...  1/100

按照思路写如下的程序:

 
  
  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.   int i; 
  5. #由于结果有小数点,所以这样定义为float类型 
  6.   float sum = 0; 
  7.  
  8.   for(i = 1;i <= 100;i++) 
  9.   { 
  10.     sum = sum + 1 / i; 
  11.    } 
  12.   printf("sum = %f\n",sum); 
  13.  
  14.   return  0; 

但运行结果却是:

    sum = 1.000000

   显然结果是不对的,那么是由于上面原因导致运行结果不对呢?

  问题至于,没有做类型强制转换。在程序中,i 是int类型,而在C语言中,其他类型的数据与整型(int)做除法运算,最终得到的结果也是整型(int)的结果。

  所以在上面的程序中,1 / i,当i = 1的时候,结果等于1,当i > 1的时候,结果等于0。要使得运行结果正确,需要做类型的强制转换,如下程序:  

 
  
  1. #include <stdio.h> 
  2.  
  3. int main() 
  4.   int i; 
  5.   float sum = 0; 
  6.  
  7.   for(i = 1;i <= 100;i++) 
  8.   { 
  9.    #这里对i进行类型强制转换 
  10.    sum = sum + 1 / (float)(i); 
  11.    } 
  12.   printf("sum = %f\n",sum); 
  13.  
  14.   return  0; 

运行结果如下:

sum = 5.187378