为文本墙道歉。
我从我工作的书中获得了以下任务:
“二次方程的形式如下: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的sqrt的正确值。但是,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;
}
答案 0 :(得分:2)
你不打电话给你的职能。
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
}
另一个问题是您没有初始化main
sq_a
,sq_b
,sq_c
,x1
和x2
变量。这些变量的类型为double
。因此,尝试从中读取未定义的行为,这意味着您的整个程序无效。
您似乎误以为C ++中的变量名称始终是全局的。但这远非事实。 x1
中的main
与x1
中的quad_x1
完全无关。你可能想做的事情如下:
x1 = quad_x1(b, a, c);
等等......
你应该从很多更简单的程序开始学习C ++。调用函数并将结果存储在局部变量中是您可以做的最基本的事情。不要解决二次方程,直到你做对了。从使用函数添加两个数字的程序开始。