for循环不执行

时间:2015-04-20 10:11:25

标签: c++ for-loop

我使用简单的for循环为复数(自制类)写了一个天真的(只接受整数指数)幂函数,它将原始数字的结果乘以n次:

C pow(C c, int e) {
    C res = 1;
    for (int i = 0; i==abs(e); ++i) res=res*c;
    return e > 0 ? res : static_cast<C>(1/res);
}

当我尝试执行此操作时,例如

C c(1,2);
cout << pow(c,3) << endl;

我总是得到1,因为for循环没有执行(我检查过)。 这是完整的代码:

#include <cmath>
#include <stdexcept>
#include <iostream>
using namespace std;
struct C {
    // a + bi in C forall a, b in R
    double a;
    double b;
    C() = default;
    C(double f, double i=0): a(f), b(i) {}
    C operator+(C c) {return C(a+c.a,b+c.b);}
    C operator-(C c) {return C(a-c.a,b-c.b);}
    C operator*(C c) {return C(a*c.a-b*c.b,a*c.b+c.a*b);}
    C operator/(C c) {return C((a*c.a+b*c.b)/(pow(c.a,2)+pow(c.b,2)),(b*c.a - a*c.b)/(pow(c.a,2)+pow(c.b,2)));}
    operator double(){ if(b == 0) 
                        return double(a);
                       else 
                        throw invalid_argument(
                        "can't convert a complex number with an imaginary part to a double");}
};
C pow(C c, int e) {
    C res = 1;
    for (int i = 0; i==abs(e); ++i) {
        res=res*c;
        // check wether the loop executes
        cout << res << endl;}
    return e > 0 ? res : static_cast<C>(1/res);
}

ostream &operator<<(ostream &o, C c) { return c.b ? cout << c.a << " + " << c.b << "i " : cout << c.a;}

int main() {
C c(1,2), d(-1,3), a;
        cout << c << "^3 = " << pow(c,3) << endl;}

2 个答案:

答案 0 :(得分:1)

您所写的内容如下:

for (int i = 0; i == abs(e); ++i) 
  

用0和初始化i,而 i等于e的绝对值(即在函数调用开始时为3),做一些事情

应该是

for (int i = 0; i < abs(e); ++i) 

提示:由于双转换运算符(由a*c.b + c.a*b引起),代码将在第一次迭代时抛出,但这是另一个问题:修复复杂(即虚构部分)打印功能或实现漂亮的印刷方法等。

答案 1 :(得分:0)

你应该使用i!= abs(e)或i&lt; abs(e)关于循环条件。目前你正在使用i == abs(e),它会在第一次尝试时失败,因为:

i = 0 abs(e)= 3

所以0 == 3是假的,因此for循环不会执行。