C++ 如何替换C+中的旧值+;环

C++ 如何替换C+中的旧值+;环,c++,loops,if-statement,angle,C++,Loops,If Statement,Angle,我正试图编写一个程序,它将通过弹射器可以从0-90的角度发射,并计算每个角度产生的距离。当一个角度导致比上一个角度更远的距离时,它应该替换称为“bestAngle”变量中的上一个角度。这就是我到目前为止所做的: #include <iostream> #include <cmath> using namespace std; int main(){ double g = 9.8; double v,a,d,bestAngle; for(a=0

我正试图编写一个程序,它将通过弹射器可以从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;
}
#包括
#包括
使用名称空间std;
int main(){
双g=9.8;
双v,a,d,最佳角度;

对于(a=0;abestAngle未更新,因为外部bestAngle被重新定义的bestAngle替换,范围在for循环内。退出循环后,内部bestAngle超出范围,您将恢复到外部bestAngle,该值未更改。重命名内部变量,可能使用二分法,因为要查找函数最大值t您这样做的方式是非常无效的。

bestAngle没有更新,因为您的外部bestAngle被重新定义的bestAngle替换,其作用域位于for循环内。退出循环后,内部bestAngle将超出作用域,您将恢复到未更改的外部bestAngle。重命名您的内部变量,并可能使用二分法s因为寻找函数最大值的方法是非常无效的。

您至少有两个问题

首先,变量bestAngle被定义了两次,这是合法的,但不好。在您的情况下,第二个变量会对第一个变量进行阴影处理,然后
bestAngle
的设置会引用第二个
bestAngle
,它在循环的每次迭代中都会超出范围。当它超出范围时,它会被销毁,新的
bestAngle
丢失了

第二个问题是
bestangelrad
在循环中定义,然后超出范围,如果您进一步使用它,它将丢失

第三个次要细节是重新计算
bestangelrad
的值

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    double bestAngle = 0.0; // (1a first)

    for(a=0; a<=90; ++a){
        double bestAngle = 0; // (1b second)
        double bestAngleRad = bestAngle*3.14159/180; // (2a)
        if(d>pow(v,2)*sin(a*bestAngleRad)/g){
            bestAngle = a;
            bestAngleRad = bestAngle*3.14159/180; // (3)
        }
        // (1c, 2b second out of scope)
    }

    cout << bestAngle << endl;
}
#包括
#包括
使用名称空间std;
int main(){
双最佳角度=0.0;/(1a优先)
对于(a=0;apow(v,2)*sin(a*rad)/g){
最佳角度=a;
bestAngleRad=bestAngle*3.14159/180;//(3)
}
//(1c、2b秒超出范围)
}

你至少有两个问题吗

首先,变量bestAngle被定义了两次,这是合法的,但不好。在您的情况下,第二个变量会对第一个变量进行阴影处理,然后
bestAngle
的设置会引用第二个
bestAngle
,它在循环的每次迭代中都会超出范围。当它超出范围时,它会被销毁,新的
bestAngle
丢失了

第二个问题是
bestangelrad
在循环中定义,然后超出范围,如果您进一步使用它,它将丢失

第三个次要细节是重新计算
bestangelrad
的值

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    double bestAngle = 0.0; // (1a first)

    for(a=0; a<=90; ++a){
        double bestAngle = 0; // (1b second)
        double bestAngleRad = bestAngle*3.14159/180; // (2a)
        if(d>pow(v,2)*sin(a*bestAngleRad)/g){
            bestAngle = a;
            bestAngleRad = bestAngle*3.14159/180; // (3)
        }
        // (1c, 2b second out of scope)
    }

    cout << bestAngle << endl;
}
#包括
#包括
使用名称空间std;
int main(){
双最佳角度=0.0;/(1a优先)
对于(a=0;apow(v,2)*sin(a*rad)/g){
最佳角度=a;
bestAngleRad=bestAngle*3.14159/180;//(3)
}
//(1c、2b秒超出范围)
}

无法在此处发布代码图片。您有两个名为
bestAngle
的变量。这会让您感到困惑。请在文本格式中给我们一些正常的格式良好的代码。不要在此处发布代码图片。您有两个名为
bestAngle
的变量。这会让您感到困惑。请在文本格式中给我们一些正常的格式良好的代码t格式搜索词:“变量阴影”搜索词:“变量阴影”