通常,我们了解到的函数只能有一个返回值,由return 语句返回。
一个一元二次方程有二个解,如何让此函数返回二个解。答案是采用指针作为函数的参数。
函数原型可设计为:
void SolveQuadratic(double a, double b, double c,
double *px1, double *px2)
函数的调用:
SolveQuadratic, 4.5, 2.1, &x1, &x2)
SolveQuadratic(a, b, c, &x1, &x2)
并不是每个一元二次方程都有两个不同根,有的可能有两个等根,有的可能没有根。函数的调用着如何知道x1和x2中包含的是否是有效的解?
让函数返回一个整型数。该整型数表示解的情况:
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std ;
int SolveQuadratic(double a,double b,double c, double *px1,double *px2)
{
double disc, sqrtDisc;
if(a == 0) return 3; //不是一元二次方程
disc = b * b - 4 * a * c;
if( disc < 0 ) return 2; //无根
if ( disc == 0 ) { *px1 = -b /(2 * a); return 1;} //等根
//两个不等根
sqrtDisc = sqrt(disc);
*px1 = (-b + sqrtDisc) / (2 * a);
*px2 = (-b - sqrtDisc) / (2 * a);
return 0;
}
int main()
{
double a,b,c,x1,x2;
int result;
cout << "请输入a,b,c: ";
cin >> a >> b >> c;
result = SolveQuadratic(a, b, c, &x1, &x2);
switch (result)
{
case 0: cout << "方程有两个不同的根:" << "\n" << "x1 = " << x1 << "\n" << "x2 = " << x2; break;
case 1: cout << "方程有两个等根:" << x1; break;
case 2: cout << "方程无根"; break;
case 3: cout << "不是一元二次方程";
}
getch();
return 0;
}
运算结果:
请输入a,b,c: 12 -2028 62370
方程有两个不同的根:
x1 = 128.577
x2 = 40.4234