编写root()函数求解一元二次方程a*x*x+b*x+c=0(a!=0)的实根。root()函数的原型为:
int root(float a,float b,float c,float*px1,float*px2);
int root(float a,float b,float c,float&rx1,float&rx2);
其中,a,b和c分别为方程的系数;px1和px2分别指向存放方程两个根的变量,
rx1和rx2分别是存放方程两个根的变量的别名;返回值为0时表示无实根,为1时表示有相等的实跟,为2时表示有不等的实根。在main()函数中,调用root()函数分别求方程x*x+3*x+2=0和4.5x*x+5.7x+2=0的根。
不要答案,给点提示
那个里面是用到指针和引用吗?感觉晕晕的。
我根据提示写了下算法,不过错误很多:
#include <iostream>
#include <cmath>
using namespace std;
int root (float a,float b,float c,float *px1,float *px2)
{int A;
A=b*b-4*a*c;
if(A<0) return 0;
else
{if(A=0)
*px1=*px2=-b/(2a);
return 1;
else
{*px1=(-b+A)/(2a);
*px2=(-b-A)/(2a);
return 2;
}
}
}
}
int main(void)
{if(root(float 4.5,float 5.7,float 2,float &px1,float &px2)=0)
cout<<"方程没有实根";
else
{if(root(float 4.5,float 5.7,float 2,float &px1,float &px2)=1)
cout<<"方程有相同实根:"<<px1;
else(root(float 4.5,float 5.7,float 2,float &px1,float &px2)=2)
cout<<"方程有两实根:"<<px1<<"和"<<px2;
}
return 0;
}
root里面的参数是这样的:
a,b,c为方程系数,是从root外面传递给root供它使用的,在调用root之前必须已知,在root函数里面可以直接用。
px1,px2(或rx1,rx2)是要保存在root中计算得到的方程的根,就是计算方程的根,得到结果后让px1,px2分别指向两个根(或rx1,rx2分别等于两个根),这两个数是你调用root之后在外面要用到的。
返回值就是你说的那样,在程序里面判断方程实根情况,最后返回相应的值就行了。
main函数中你的a,b,c已知,你要再定义两个数保存计算得到的方程的根,比如x1,x2,还有一个保存函数的返回值(也可以不用变量)如count,那么调用root形式为:
count=root(a,b,c,&x1,&x2)指针调用
count=root(a,b,c,x1,x2)引用调用
之后x1,x2里面的值就是方程的根,count就是表示实根情况.
如果函数这样定义
int root(float a,float b,float c,float*px1,float*px2);
就这样调用root(1,2,3,&r1,&r2);函数执行完结果就保存在r1、r2里了。
如果这样定义
int root(float a,float b,float c,float&rx1,float&rx2);
就这样调用root(1,2,3,r1,r2);
函数也很好写,先计算b*b-4*a*c,就可以判断根的情况了,然后用公式算,结果保存在px1和px2里就可以了。