我正在编写一个程序,它接受3个用户输入的二次方程值,做一些计算,并返回二次方有多少根。
当我打印*(point)
时,它会从函数中为我提供正确的值。
然而,当我在If条件中使用*(point)
时,它似乎不像我想要的那样工作 - 我相信*(point)
总是一些正数,因此它总是在执行具体如果条件。
用户值:a = 9
,b = -12
,c = 4
应打印出此二次方有1个根。和值:a = 2
, b = 16
,c = 33
应该打印出来这个二次方有两个根。但是程序总是打印出来这个二次方有0根。无论是什么输入的值。
这是我的代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
float *quadratic(float a1[]);
int main()
{
float a1[3] = {};
float *point;
cout << "Enter a: ";
cin >> a1[0];
cout << "\nEnter b: ";
cin >> a1[1];
cout << "\nEnter c: ";
cin >> a1[2];
point = quadratic(a1);
cout << endl << "d = " << *(point) << endl;
if (*(point) < 0) {
cout << "\nThis quadratic has 2 roots.\n";
}
else if (*(point) > 0) {
cout << "\nThis quadratic has 0 roots.\n";
}
else { //else if *(point) is equal to 0
cout << "\nThis quadratic has 1 root.\n";
}
return 0;
}
float *quadratic(float a1[]) {
float d;
d = (a1[1] * a1[1]) - (4 * a1[0] * a1[2]);
float xyz[1] = { d };
return xyz;
}
答案 0 :(得分:0)
您的函数quadratic
返回指向本地数组的指针。函数返回后,该数组不再存在。然后指针是一个悬空指针,一个指向内存中曾经拥有一个对象的位置的指针,但现在它可以容纳任何东西或只是垃圾。
由于quadratic
尝试返回的数组总是一个值,因此不需要返回数组。只需返回该值。
你甚至不需要处理多项式系数的数组,因为它们总是三个,但如果数组看起来好于单个a
,b
和c
变量,然后只使用std::array
,例如像这样:
#include <iostream>
#include <array>
#include <vector>
using namespace std;
using Float = double;
auto square_of( Float const v ) -> Float { return v*v; }
auto determinant( array<Float, 3> const& a )
-> Float
{
return square_of( a[1] ) - 4*a[0]*a[2];
}
auto main()
-> int
{
array<Float, 3> a;
cout << "Enter A: "; cin >> a[0];
cout << "Enter B: "; cin >> a[1];
cout << "Enter C: "; cin >> a[2];
Float const d = determinant( a );
cout << "d = " << d << endl;
if( d < 0 )
{
cout << "This quadratic has 2 roots." << endl;
}
else if( d > 0 )
{
cout << "This quadratic has 0 roots." << endl;
}
else // d == 0
{
cout << "This quadratic has 1 root.";
}
}
上面的代码等同于我认为代码的意图。
但是,在递交之前,我会查看formula for roots of quadratic equation并测试程序。