首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数调用算一元二次方程,逻辑出错在哪里啊请耐心帮忙。多谢

2013-03-21 
函数调用算一元二次方程,逻辑出错在哪里啊?请耐心帮忙。谢谢。原题是这样的,求一元二次方程的根,用三个函数

函数调用算一元二次方程,逻辑出错在哪里啊?请耐心帮忙。谢谢。
原题是这样的,求一元二次方程的根,用三个函数分别求当判别式大于零,等于零,小于零时的根并输出结果。从主函数输入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

热点排行