关于最基础的c语言的一些习题疑惑

#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;
}

我也是初学者。
你定义的a,b,c变量是int型即整(整数)型的。所以printf里面也要写对应的输出整数的形式即%d。

换句话说,int型的变量输出和输入的时候就是要用%d
如果你定义的是double或float型(这叫浮点型,也就是有小数点的数),在输入(scanf)的时候就要用%lf,在输出(printf)的时候要用%f
建议你看看相关的书,会有更深入的理解。

printf是格式化输出语句,通过格式控制符来进行输出,%f,就是把数据当成浮点来输出,%d是整型