我正在尝试编写一个程序,该程序将通过弹射器可以从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,但未更改。重命名内部变量并可能使用二分法,因为以这种方式最大程度地寻找函数是无效的。

08-19 19:08