C 在查找圆的面积时获取垃圾值
我试图找到圆圈的面积,并找到了一个垃圾值。我正在使用gcc编译器 圆的面积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是应输出的面积。 但它正
#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
并不能很好地代表PI355/133
会更好,但比这要好得多(在可用的系统上):
当
double
变量具有更大的范围和精度时,也几乎没有理由使用float
类型。如果有很多单精度float
变量,并且希望减少存储空间,那么单精度float
变量可能很有用,但在大多数情况下,仅使用双精度是值得的。22/7
是整数除法,因此将截断为3
。你需要像这样的东西:
float c = 22.0 / 7 * a * a;
顺便说一句,
22/7
并不能很好地代表PI355/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)