if ((A < (float)(B+C)) && (B < (float)(A+C)) && (C < (float)(B+A)))
在这一行中, A<(float)(B+C)..... 其余相同的条件都适用。但我无法理解里面发生了什么。谁能解释一下?为什么要写“(float)(B+C)。”这是只读取小数点后的值吗???谁能解释一下!!
编辑:我用它来计算三角形的周长。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float a,b,c;
cin>>a>>b>>c;
if(a<(float)(b+c) && b< (float)(a+c) && c < (float)(b+c))
{
float perimeter = a+b+c;
cout<<"Perimetro = "<<fixed<<setprecision(1)<<perimeter<<endl;
}
else
{
float area = 0.5 *(a+b)*c;
cout<<"Area = "<<fixed<<setprecision(1)<<area<<endl;
}
return 0;
}
答案 0 :(得分:2)
(float)
中的强制转换 (float)(b+c)
的唯一效果是丢弃”加法中使用的多余精度,确保结果是实际的 float
值。 (C++ 标准允许评估 float
表达式,就好像它们是 double
或以其他方式具有更高的精度。)在代码中没有明显的原因。事实上,它引入了额外的计算错误,可能会使结果更糟。
可以在不影响程序的情况下删除三个演员表。但是,请注意第三个比较有一个错字; c < (float)(b+c)
应该是 c < (float)(b+a)
。
总而言之,if
条件测试 a
、b
和 c
是否是三角形边的有效长度。鉴于此,我们希望 else
子句报告它们不是。相反,它旨在计算和报告一个区域。这没有多大意义。