使我的C代码更短

时间:2012-02-21 22:17:13

标签: c

我制作了一个计算方程的程序(给出了值x1和x2)。但问题是,我需要为x1和x2编写2个单独的函数,即使我只需要将“+”符号更改为“ - ”符号来获取x2。是否可以仅使用一个函数获得相同的输出?下面是代码:

double equation(double a, double b, double c) {
    double argument, x1;
    argument = sqrt(pow(b, 2) - 4*a*c);
    x1 = ( -b + argument ) / (2 * a);
    return x1;
}

double equation2(double a, double b, double c) {
    double argument, x2;
    argument = sqrt(pow(b, 2) - 4*a*c);
    x2 = ( -b - argument ) / (2 * a); // here i changed the "+" sign to "-"
    return x2;
}

提前谢谢!

3 个答案:

答案 0 :(得分:4)

Theres有几种不同的方法可以做到这一点。 Gareth提到了一个,但另一个是使用输出参数。

使用指针作为输入参数,您可以在一个函数中填充它们,并且您不需要返回任何内容

void equation(double a, double b, double c, double *x1, double *x2) {
    double argument, x1;
    argument = sqrt(pow(b, 2) - 4*a*c);
    *x1 = ( -b + argument ) / (2 * a);
    *x2 = ( -b - argument ) / (2 * a);
}

然后从主代码中调用它:

int main (void )
{
    //Same up to the prints above
    double x1, x2;
    equation ( a , b, c , &x1, &x2);

    printf("\nx1 = %.2f", x1);
    printf("\nx2 = %.2f", x2);
}

答案 1 :(得分:3)

传入另一个参数,该参数为+1或-1,并乘以argument。或者,传入另一个参数,该参数为0 / false或非0 / true,并有条件地添加或减去(使用if语句或...?...:...“三元运算符”。

[已删除对已删除的部分原始问题的回复。]

答案 2 :(得分:1)

好吧,你可以做类似的事情:

double equation_either (double a, double b, double c, double d) {
    double argument, x1;
    argument = sqrt(pow(b, 2) - 4*a*c);
    x1 = ( -b + (d * argument)) / (2 * a);
    //          ^^^^^^^^^^^^^^
    // auto selection of correct sign here
    //
    return x1;
}
:
printf("\nx1 = %.2f", equation_either(a, b, c,  1.0));
printf("\nx2 = %.2f", equation_either(a, b, c, -1.0));