二次方程程序输出数字

quadratic equation program output numbers

为文字墙道歉。

根据我正在使用的书,我被赋予了以下任务:

"二次方程的形式为:a x^2 + b x + c = 0

要解决这些问题,可以使用二次公式:(-b±√(b^2-4ac))/2a

但是有一个问题:如果 b^2-4ac 小于零,那么它将失败。 编写一个程序,计算二次方程的 x。创建一个函数,打印出给定 a、b、c 的二次方程的根。 当程序检测到一个没有实根的方程时,让它打印出一条消息。你怎么知道你的结果是合理的?你能检查一下它们是否正确吗?"

我已经写好了我的程序。但是,我得到的所有输出都是奇怪的数字。例如:7.08141e+268。这是使用 4,所以我相信 sqrt 应该是 2。

编辑:我修改了代码,现在收到了 a、b、c 的平方根的正确值。但是,x1 和 x2 给出了 nan,这是错误的。希望这段代码更简洁,布局更好。

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

double quad_x2(double b, double a, double c) {
double x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
return x2;
}

double square_root_a(double a) {
double sq_a=sqrt(a);
if(sq_a<0){
throw invalid_argument("Input is less than zero.");
}
else {
return sq_a;
}
}

double square_root_b(double b) {
double sq_b=sqrt(b);
if(sq_b<0) {
throw invalid_argument("Input is less than zero.");
}
else {
return sq_b;
}
}

double square_root_c(double c) {
double sq_c=sqrt(c);
if(sq_c<0) {
throw invalid_argument("Input is less than zero.");
}
else {
return sq_c;
}
}

int main ()
{
try{
double a=4;
double b=4;
double c=4;

double sq_a = square_root_a(a);
double sq_b = square_root_b(b);
double sq_c = square_root_c(c);
double x1 = quad_x1( b, a, c);
double x2 = quad_x2( b, a, c);

cout<<"The square roots are: a = "<<sq_a<<" b = "<<sq_b<<" c = "<<sq_c<<'\n';
cout<<"The answer to the quadratic is:\n";
cout<<"x1 = "<<x1<<'\n';
cout<<"x2 = "<<x2<<'\n';
}

catch (invalid_argument) {
cerr<<"Invalid Input - Less than zero"<<'\n';
return 1;
}

return 0;
}

你没有调用你的函数。

   double square_root(double a, double b, double c); //send values to sqrt check
   double quad_x1(double b, double a, double c);    //send values to get x1
   double quad_x2(double b, double a, double c);    //send values to get x2

这些是函数声明,用于上面已经定义的函数。它们完全没有作用。函数未被调用。

就好像你这样做了:

#include <iostream>

void f()
{
    std::cout << "global\n";
}

int main()
{
   void f(); // just a declaration, f() is not called
}

另一个问题是你没有初始化mainsq_asq_bsq_cx1x2变量.这些变量的类型为 double。因此,尝试读取它们是 未定义的行为,这意味着您的整个程序无效。

您似乎误以为 C++ 中的变量名总是全局的。但这远非事实。 main 中的 x1quad_x1 中的 x1 完全无关。您可能打算做类似的事情:

x1 = quad_x1(b, a, c);

等等...


您应该从许多更简单的程序开始学习 C++。调用函数并将结果存储在局部变量中是您可以做的最基本的事情。在你做对之前不要处理二次方程。从一个使用函数将两个数字相加的程序开始。