猜测下面程序的输出结果,并上机尝试:
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)); }
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); }
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); }
答案: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.