#include <iostream>
using namespace std;
int main ()
{
//If a triangle has a perimeter of 9 units, how many iterations(each iteration is 4/3 as much) would it take to obtain a perimeter of 100 units? (or as close to 100 as you can get?)
double p = 9; int it = 0;
for(p; p < 100; p = p * 4/3){
cout << p << endl;
it++;
}
cout << p << endl;
cout << it << endl;
system ("PAUSE");
return 0;
}
因此,对于我正在进行的数学项目,如果在每次迭代期间将周长增加4 / 3x,我必须弄清楚9周长达到100所需的迭代次数。当我像上面那样编写代码时,输出很好,但是如果我改变了
for(p; p < 100; p = p * 4/3)
到
for(p; p < 100; p *= 4/3)
我得到的输出没有意义。我误解了* =运算符吗?我需要在某个地方使用括号吗?
答案 0 :(得分:28)
这是操作的顺序。在p = p * 4/3
编译器正在执行:
p = (p * 4)/3
但是在p *= 4/3
中,编译器正在执行:
p = p * (4/3)
由于整数除法,计算机上的4/3为1,所以第二个例子基本上乘以1.
不是除以3(整数),而是除以3.0(双精度)或3.0f(浮点数)。那么p * = 4 / 3.0和p = p * 4 / 3.0是相同的。