#include
#define PI 3.14159
main()
{
int a,b,c;
scanf("%d",&a);
b=PI*a*2;
c=PI*a*a;
printf("%.2f,%.2f",b,c);
}
printf 用的是d的话也没有问题。换成f就变成0.00了
实在有点 不知道哪里错了 希望有能力的老哥指正一下
#include
#define PI 3.14159
main()
{
int a,b,c;
scanf("%d",&a);
b=PI*a*2;
c=PI*a*a;
printf("%.2f,%.2f",b,c);
}
printf 用的是d的话也没有问题。换成f就变成0.00了
实在有点 不知道哪里错了 希望有能力的老哥指正一下
假设你输入了 1
(int)pi * a * 2 = 6
在内存里,实际上是表示为(2进制) 00000110 00000000 00000000 00000000 (注意,我们的x86 CPU把低字节放在前面,所以开头是00000110)
当成float的话,数符分配是1位,阶码分配了8位,尾数分配了是23位。
很明显,数符是0,阶码=0000110 0,尾数=0000000 00000000 00000000
也就是0 x 2的12次方。
所以结果就是0.0了。
所以你程序的正确写法
#include "stdio.h"
#define PI 3.14159
int main()
{
int a
float b, c;
scanf("%d",&a);
b=PI*a*2;
c=PI*a*a;
printf("%.2f,%.2f",b,c);
return 0;
}