C 在查找圆的面积时获取垃圾值

C 在查找圆的面积时获取垃圾值,c,C,我试图找到圆圈的面积,并找到了一个垃圾值。我正在使用gcc编译器 圆的面积 #include<stdio.h> void main() { int a=1; float c; c = 22/7 * a * a; printf("%f is the area" , c); } #包括 void main() { INTA=1; 浮点数c; c=22/7*a*a; printf(“%f为面积”,c); } 3.142857是应输出的面积。 但它正

我试图找到圆圈的面积,并找到了一个垃圾值。我正在使用gcc编译器

圆的面积

#include<stdio.h>  
void main() 
{
    int a=1;
    float c;
    c = 22/7 * a * a;
    printf("%f is the area" , c);
}
#包括
void main()
{
INTA=1;
浮点数c;
c=22/7*a*a;
printf(“%f为面积”,c);
}
3.142857是应输出的面积。 但它正在显现 3.000000是面积

22/7
是整数除法,因此将截断为
3
。你需要像这样的东西:

float c = 22.0 / 7 * a * a;

顺便说一句,
22/7
并不能很好地代表PI
355/133
会更好,但比这要好得多(在可用的系统上):


double
变量具有更大的范围和精度时,也几乎没有理由使用
float
类型。如果有很多单精度
float
变量,并且希望减少存储空间,那么单精度
float
变量可能很有用,但在大多数情况下,仅使用双精度是值得的。

22/7
是整数除法,因此将截断为
3
。你需要像这样的东西:

float c = 22.0 / 7 * a * a;

顺便说一句,
22/7
并不能很好地代表PI
355/133
会更好,但比这要好得多(在可用的系统上):



double
变量具有更大的范围和精度时,也几乎没有理由使用
float
类型。如果有很多单精度
float
变量并且希望减少存储空间,那么单精度
变量可能很有用,但在大多数其他情况下,仅使用双精度是值得的。

这不是垃圾值,您正在对所有整数执行的操作,请看一看

22/7 * a * a
这里变量a是整数,以及22和7,所以完整操作的最终结果是int,它被转换成float c变量,结果是3.0000

要解决此问题,请编写:

 22/7.0 * a * a

这不是一个垃圾值,您正在对所有整数执行的操作,请看一看

22/7 * a * a
这里变量a是整数,以及22和7,所以完整操作的最终结果是int,它被转换成float c变量,结果是3.0000

要解决此问题,请编写:

 22/7.0 * a * a
3.142857是应输出的面积。但是它显示了300万是这个区域

您可能会这样想,因为赋值运算符左侧有一个
float
数据类型,赋值运算符右侧的
计算应该是float计算

然而,
C
编程语言不会隐式地将变量提升为
float
。它将进行整数除法和乘法运算,计算结果后,结果(将是整数)将隐式转换为赋值运算符LHS上的数据类型(即浮点)

要了解有关整数除法的更多信息,请选中此项。它说:

6.5.5乘法运算符

6当整数被除时,/运算符的结果是丢弃任何分数部分的代数商。88)如果商a/b可重新表示,表达式(a/b)*b+a%b应等于a

因此,您得到的是
3.0000
,因为根据整数除法,
22/7
3
(小数部分被丢弃),在与
a
相乘两次后,您将得到一个值为
3
的整数。要将表达式的计算值指定给变量
c
,language将隐式转换为值为
3.000
的float

要解决您的问题,您需要在赋值运算符的RHS上显式使用
float
类型的变量或常量,或者可以使用显式强制转换运算符

float c = 22.0f / 7 * a * a;
由于除法运算符具有较高的关联性,将首先计算
(22.0/7)
,其结果将是一个浮点值,因为操作数(
22.0
7
)是一个浮点常量。然后,将计算表达式的结果,并将
整数
操作数提升为
浮点
数据类型。最后,您的结果(即float)将分配给变量
c

请参阅链接以了解
22.0
22.0f
之间的区别

3.142857是应输出的面积。但是它显示了300万是这个区域

您可能会这样想,因为赋值运算符左侧有一个
float
数据类型,赋值运算符右侧的
计算应该是float计算

然而,
C
编程语言不会隐式地将变量提升为
float
。它将进行整数除法和乘法运算,计算结果后,结果(将是整数)将隐式转换为赋值运算符LHS上的数据类型(即浮点)

要了解有关整数除法的更多信息,请选中此项。它说:

6.5.5乘法运算符

6当整数被除时,/运算符的结果是丢弃任何分数部分的代数商。88)如果商a/b可重新表示,表达式(a/b)*b+a%b应等于a

因此,您得到的是
3.0000
,因为根据整数除法,
22/7
3
(小数部分被丢弃),在与
a
相乘两次后,您将得到一个值为
3
的整数。要将表达式的计算值指定给变量
c
,language将隐式转换为值为
3.000
的float

要解决您的问题,您需要在赋值运算符的RHS上显式使用
float
类型的变量或常量,或者可以使用显式强制转换运算符

float c = 22.0f / 7 * a * a;
由于除法运算符的关联性较高,
(22.0/7)