我制作了一个计算方程的程序(给出了值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;
}
提前谢谢!
答案 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));