C++ 如何替换C+中的旧值+;环
我正试图编写一个程序,它将通过弹射器可以从0-90的角度发射,并计算每个角度产生的距离。当一个角度导致比上一个角度更远的距离时,它应该替换称为“bestAngle”变量中的上一个角度。这就是我到目前为止所做的: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
#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格式搜索词:“变量阴影”搜索词:“变量阴影”