要求编写一个程序,输入系数a,b,c,求一元二次方程ax2+bx+c=0的根,包括主函数和如下子函数:
① 判断a是否为零。
② 计算判别式 。
③ 计算根的情况。
④ 输出根。
请问我这个问题出在哪啊,我这个没有把复根考虑进去
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int zero(double a);
int derta(double a,double b,double c);
int jisuan(double a,double b,double c);
int main()
{
double a,b,c,r,x1,x2;
printf("输入二元一次方程组ax^2+bx+c=0的系数a,b,c\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(zero(a))
{
printf("输入的数a等于0\n");
exit(0);
}
derta(a,b,c);
if(r>0)
printf("方程组有两个不同的实数解\n");
else if(r=0)
printf("方程组有两个相同的解\n");
else if(r<0)
{
printf("方程组无解\n");
exit(0);
}
jisuan(a,b,c);
printf("方程组的解为x1=%.3lf,x2=%.3lf",&x1,&x2);
return 0;
}
int zero(double a)
{
return(a==0);
}
int derta(double a,double b,double c)
{
int r;
r=b*b-4*a*c;
return(r);
}
int jisuan(double a,double b,double c)
{
double x1=0,x2=0,y=0;
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
return(x1,x2);
}
不知道你这个问题是否已经解决, 如果还没有解决的话:2.编写一元二次方程(ax2+bx+c=0)求根的程序:
输入3个系数(double型),输出:如果有2个实数根,那么输出2个实数根的值,如果只有一个根,那么输出这个根的值,如果没有实数根,那么输出一句话:“没有实数根”
提示:
输入实数:
System.out.print(“请输入a:”);
double a = in.nextDouble();
输出:可以用System.out.println()
例子:
import java.util.Scanner;
public class Lab1{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入a: ");
double a =scan.nextDouble();
System.out.print("请输入b: ");
double b =scan.nextDouble();
System.out.print("请输入c: ");
double c =scan.nextDouble();
double x1,x2;
double delta=b*b - 4*a*c;
x1=(-b+Math.sqrt(delta))/(2*a);
x2=(-b-Math.sqrt(delta))/(2*a);
if(delta<0) {
System.out.println("没有实数根");
}
else if(0==delta) {
System.out.println("有一个根"+x1);
}
else {
System.out.println("有2个实数根:x1="+x1+","+"x2="+x2);
}
}
}
else if(r=0)
这里,==不是=
return(a==0);
浮点数最好不要直接用==比较因为可能有误差判断不出来
derta(a,b,c);
->
r = derta(a,b,c);
int jisuan。只能返回一个值,不能return(x1,x2)
jisuan(a,b,c);
这里没有用变量接受
printf("方程组的解为x1=%.3lf,x2=%.3lf",&x1,&x2);
这里x1 x2没有值,并且不应该用&符号。