我正在尝试编写一个程序,该程序将通过弹射器可以从0-90度的角度运行,并计算每个角度将导致的距离。当角度导致的距离比上一个远时,应替换前一个变量“ bestAngle”中的角度。这是我到目前为止的内容:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double g = 9.8;
double v,a,d,bestAngle;
for(a=0; a<=90; ++a){
double rad = a*3.14159/180;
if(a<=30){
v=45;
}else if(a>30 && a<=60){
v = 40;
}else{
v=30;
}
d = pow(v,2)*sin(2*rad)/g;
double bestAngle = 0;
double bestAngleRad = bestAngle*3.14159/180;
if(d>pow(v,2)*sin(a*bestAngleRad)/g){
bestAngle = a;
bestAngleRad = bestAngle*3.14159/180;
}
}
cout << bestAngle << endl;
}
我认为问题与最后的if语句有关,因为我认为最好的角度是不更新。我不希望有人确切地告诉我该怎么做,但是如果有人可以指出错误的位置,那将是有帮助的。
最佳答案
bestAngle不会更新,因为您的外部bestAngle已被重新定义的bestAngle替换,其范围位于for循环内。退出循环后,内部的bestAngle不在范围内,您将还原为外部的bestAngle,但未更改。重命名内部变量并可能使用二分法,因为以这种方式最大程度地寻找函数是无效的。