首页 > 代码库 > 初学者常见错误1——赋值时的类型转换

初学者常见错误1——赋值时的类型转换

猜测下面程序的输出结果,并上机尝试:

1.

#include<stdio.h>#include<math.h>int main(){	printf("%d",pow(5,2));}

 

2.

技术分享
#include<stdio.h>#include<math.h>int main(){    printf("%f",pow(5,2));}
View Code

 

3.

技术分享
#include<stdio.h>#include<math.h>int a[105];int main(){    int x,y,sum=0,n=0;    while (scanf("%d",&x)==1)    {        a[n++]=x;        }    for (int i=0;i<n;i++)      for (int j=i+1;j<n;j++)        sum=sum+pow(a[i],2)-pow(a[j],2);     printf("%f",sum);}    
View Code


 

4.

技术分享
#include<stdio.h>#include<math.h>int a[105];int main(){    int x,y,sum=0,n=0;    while (scanf("%d",&x)==1)    {        a[n++]=x;        }    for (int i=0;i<n;i++)      for (int j=i+1;j<n;j++)        sum=sum+pow(a[i],2)-pow(a[j],2);     printf("%d",sum);}    
View Code


答案:1.0   2. 25.000000   3.无论你输入任何数据,输出结果都为0   4.按实际结果输出

 

原因:

(1)指数函数pow(x,y)的计算结果为双精度实数。

(2)赋值时的类型转换规则:float、double型赋值给int型:直接截断小数。

         sum=sum+pow(a[i],2)-pow(a[j],2);

(3)使用printf输出时,如果格式控制符和输出列表不一致,导致输出结果为0.

 

 

       

初学者常见错误1——赋值时的类型转换