函数调用算一元二次方程,逻辑出错在哪里啊?请耐心帮忙。谢谢。
原题是这样的,求一元二次方程的根,用三个函数分别求当判别式大于零,等于零,小于零时的根并输出结果。从主函数输入a,b,c的值。
我是这样做的。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;
float deita;//deita表示根的判别式。
void gen1 (float,float,float,float);//四个形参分别存放a,b,c,和deita.
void gen2 (float,float,float,float);
void gen3 (float,float,float,float);
scanf("%f%f%f",&a,&b,&c);
deita = b*b-4*a*c;//判别式的计算公式。
if (deita>0)
gen1(a,b,c,deita);
else if (deita==0)
gen2(a,b,c,deita);
else
gen3(a,b,c,deita);
}
void gen1 (float a,float b,float c ,float deita)
{
float x1,x2;
x1 = (-b+sqrt(deita))/2*a; //deita是main函数的变量,等下还要转换。
x2 = (-b-sqrt(deita))/2*a;
printf("方程的两个根是x1=%f,x2=%f。\n",x1,x2);
}
void gen2 (float a,float b,float c ,float deita)
{
float x;
x = -b/(2*a);
printf("x1=x2=%f\n",x);
}
void gen3 (float a,float b,float c,float deita)
{
printf("对不起的亲,此方程经过函数的调用这种高级算法,但是遗憾的告诉你,找不到答案!\n");
}
问题出来了。a,b,c系数分别为下列情况时候时,结果是正确的。
1,5,6 //判别式大于零。
1,2,1 //判别式等于零。
1,5,7 //判别式小于零。
三者输出的结果与笔算的结果是相同的。
但是当a,b,c的系数是下列时候,就出错了。
3,4,-7 //判别式大于零。笔算的结果是:x1=1,x2=7/3.
但是机器运行输出的结果是:
3
4
-7
方程的两个根是x1=9.000000,x2=-21.000000。
Press any key to continue 算法 一元二次方程?函数调用
[解决办法]
debug 一下,程序员必需掌握
[解决办法]
#include<stdio.h>
#include<math.h>
#include <iostream>
using namespace std;
void main()
{
double a,b,c;
double deita;//deita表示根的判别式。
void gen1 (double,double,double,double);//四个形参分别存放a,b,c,和deita.
void gen2 (double,double,double,double);
void gen3 (double,double,double,double);
scanf("%lf,%lf,%lf",&a,&b,&c);
deita = b*b-4*a*c;//判别式的计算公式。
if (deita>0)
gen1(a,b,c,deita);
else if (deita==0)
gen2(a,b,c,deita);
else
gen3(a,b,c,deita);
system("pause");
}
void gen1 (double a,double b,double c ,double deita)
{
double x1,x2;
x1 = (-b+sqrt(deita))/(2*a); //deita是main函数的变量,等下还要转换。
x2 = (-b-sqrt(deita))/(2*a);
printf("方程的两个根是x1=%f,x2=%f。\n",x1,x2);
}
void gen2 (double a,double b,double c ,double deita)
{
double x;
x = -b/(2*a);
printf("x1=x2=%f\n",x);
}
void gen3 (double a,double b,double c,double deita)
{
printf("对不起的亲,此方程经过函数的调用这种高级算法,但是遗憾的告诉你,找不到答案!\n");
}
楼主,我改了三处:
1.都把float改为double
2.改变了输入格式为:3,4,-7
3(最重要的地方):
void gen1 (double a,double b,double c ,double deita)
{
double x1,x2;
x1 = (-b+sqrt(deita))/(2*a); //这里应该有个括号,楼主忘记了
x2 = (-b-sqrt(deita))/(2*a);
printf("方程的两个根是x1=%f,x2=%f。\n",x1,x2);
}
[解决办法]
x1 = (-b+sqrt(deita))/(2*a); //deita是main函数的变量,等下还要转换。
x2 = (-b-sqrt(deita))/(2*a);
[解决办法]
以下语句有问题:
x1?=?(-b+sqrt(deita))/2*a;?
x2?=?(-b-sqrt(deita))/2*a;
这两个计算的是a*(-b+sqrt(deita))/2和a*(-b-sqrt(deita))/2