每当我尝试运行它时,它会返回错误的解决方案,例如:
答:303
B:405
C:50
真正的解决方案:-0.13762776465722773
我的解决方案:-110079.531250
#include <stdio.h>
#include <math.h>
int main(){
float a;
float b;
float c;
float solution;
float d;
printf("A: ");
scanf("%f", &a);
printf("B: ");
scanf("%f", &b);
printf("C: ");
scanf("%f",&c);
d = b * b - 4 * a * c;
solution = (-b - sqrt(d))/ 2*a;
printf("%f", solution);
}
答案 0 :(得分:6)
你忘记了BODMAS。将(-b - sqrt(d))/ 2*a
替换为(-b - sqrt(d))/ (2*a)
答案 1 :(得分:2)
solution = (-b - sqrt(d))/ (2*a);
答案 2 :(得分:0)
两件事。
您需要注意操作顺序。
solution = (-b - sqrt(d)) / (2*a);
根据您的客户,您需要考虑结果的准确性。 有关详细信息,请参阅“Avoiding loss of significance”
最后 - 我编写自己的程序版本时有点乐趣:
#include <stdio.h>
#include <math.h>
void printLineSolution( double a, double b, double c );
int main()
{
printLineSolution(303,405,50);
printLineSolution(1,2,0);
printLineSolution(1,2,-1);
printLineSolution(1,-2,-3);
printLineSolution(1,-6,9);
printLineSolution(1,3,3);
getchar();
}
void printLineSolution( double a, double b, double c )
{
double d = (b * b) - (4 * a * c);
printf("(%lg)x^2 + (%lg)x + (%lg) = 0 ", a, b, c);
if( a == 0 )
{
printf("=> not quadratic");
}
else
{
if( 0 > d )
{
double r = - b / (2*a);
double i = sqrt( -d ) / (2*a);
printf("=> 2 complex: %lg + %lgi ; %lg - %lgi", r, i, r, i);
}
else if ( 0 == d )
{
double solution = - b / (2*a);
printf("=> 1 real: %lg", solution);
}
else
{
double s1 = (- b + sqrt( d ) ) / (2*a);
double s2 = (- b - sqrt( d ) ) / (2*a);
printf("=> 2 real: %lg ; %lg", s1, s2);
}
}
printf("\n");
}