风寒因子
Wind Chill Factor
尝试用C++编写风寒因子方程,并且我的方程和返回值遇到问题。
这是出现错误的函数。
void eqfunction(int temperature, int windspeed){
int windindex;
windindex = 35.74 + (0.6215 * temperature);
windindex = windindex - (35.75 * windspeed^0.16);
windindex = windindex + ((0.4275 * temperature)*windspeed^0.16);
return windindex;
}
编辑:(编辑)按照答案中给出的建议修复功能后,会出现新的错误:
float windChillFactor(float temperature, float windspeed){
float windindex = 35.74f + 0.6215f * temperature;
windindex -= 35.75f * std::pow(windspeed, 0.16f);
windindex += 0.4275f * temperature * std::pow(windspeed, 0.16f);
return windindex;
}
我知道我做错了两件事,只是不知道如何解决它们。显然是"^"和我的返回值。如何从 0.16 开始为风速创建一个正方形?如何创建正确的风指数返回值?
这些是我的错误
1>c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(18):
warning C4244: 'argument' : conversion from 'int' to 'float',
possible loss of data
1>c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(18):
warning C4244: 'argument' : conversion from 'int' to 'float',
possible loss of data
1>c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(18):
error C2440: '=' : cannot convert from 'void' to 'int'
1> Expressions of type void cannot be converted to other types
1>c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(22):
error C2556: 'float eqfunction(float,float)' : overloaded function differs
only by return type from 'void eqfunction(float,float)'
1> c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(6) :
see declaration of 'eqfunction'
1>c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(22):
error C2371: 'eqfunction' : redefinition; different basic types
1> c:usersryandesktopfinal.cppfinal.cppfinal project.cpp(6) :
see declaration of 'eqfunction'
虽然您没有包含编译器给出的错误消息(您应该始终这样做),但以下是我看到的错误:
void eqfunction(int temperature, int windspeed){
- 错误:函数返回一个值。
void
函数是不返回任何内容的函数,在其他一些编程语言中也称为"过程"。因为要返回实数,所以可能要用float
(也有double
和long double
,但在日常使用中,float
往往足够精确)。 - 设计错误:温度和风速是实数,因此您的函数不应取
int
而是float
最好给你 - 的函数一个描述性名称,就像你对变量名称所做的那样(与 C 不同,在 C++ 中,不使用助记符名称更常见)
int windindex;
- 最好始终初始化内置类型
- 您正在使用实数类型计算最终结果,但如果使用
int
来存储中间结果,则重要信息可能会丢失(将实数类型分配给整型时,小数部分将被丢弃);因此,使用float
而不是int
windindex = 35.74 + (0.6215 * temperature);
windindex = windindex - (35.75 * windspeed^0.16);
windindex = windindex + ((0.4275 * temperature)*windspeed^0.16);
- 错误:运算符
^
是C++中的按位独占 OR 运算符。幂函数是C++中的库函数,即从cmath
标头std::pow(x,y)
算 - 术运算
a = a + something
、a = a - something
、a = a * something
和a = a / something
可以简化为a += something
,其他运算也是如此。 - 在C++中,
1.0
形式的文本表示double
值,1.0f
形式的文本表示float
值
return windindex;
}
- 没关系。
因此,考虑到这些要点,这可能更适合您想要的:
#include <cmath>
float windChillFactor(float temperature, float windspeed){
float windindex = 35.74f + 0.6215f * temperature;
windindex -= 35.75f * std::pow(windspeed, 0.16f);
windindex += 0.4275f * temperature * std::pow(windspeed, 0.16f);
return windindex;
}
请注意,由于运算符优先级,*
和/
是在 +
和 -
之前计算的,因此不需要括号。
这是可能的错误:
windspeed^0.16
在C++中,^
是按位独占或 (XOR) 运算符。
你可能的意思是将windspeed
提升到0.16
的幂,你可以使用它std::pow
:
除此之外,你的函数应该返回 void 以外的内容。看起来它应该是返回浮点数或双精度数,windindex
不应该是int
,而是一些浮点类型。最后,您可以使用+=
和-=
来简化表达式:
#include <cmath> // for std::pow
double eqfunction(int temperature, int windspeed)
{
double windindex = 35.74 + 0.6215 * temperature;
windindex -= 35.75 * std::pow(windspeed, 0.16);
windindex += 0.4275 * temperature * std::pow(windspeed, 0.16);
return windindex;
}
double eqfunction(int temperature, int windspeed)
{
double windindex = 35.74 + 0.6215 * temperature;
windindex -= 35.75 * std::pow(windspeed, 0.16);
windindex += 0.4275 * temperature * std::pow(windspeed, 0.16);
return windindex;
}
double eqfunction(int temperature, int windspeed){
double windindex;
windindex = 35.74 + (0.6215 * temperature);
windindex = windindex - (35.75 * pow(windspeed,0.16));
windindex = windindex + ((0.4275 * temperature)*pow(windspeed,0.16));
return windindex;
}
相关文章:
- 没有找到相关文章