
C语言相关:判断a*x*x+b*x+c=0方程有几个解,如果有解则输出,a,b,c由键盘输入
/*判断a*x*x+b*x+c=0方程有几个解,如果有解则输出,a,b,c由键盘输入*/#include<math.h>#include<stdio.h>main(){i...
/*判断a*x*x+b*x+c=0方程有几个解,如果有解则输出,a,b,c由键盘输入*/
#include <math.h>
#include <stdio.h>
main()
{
int a,b,c;
float x=0,x1=0,n=0;
printf("please input a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b!=0){x=-(b+c);printf("This formula has one solution! x=%d\n",x);}
if(a!=0)
{
n=(int)(b*b-4*a*c);
if(n<0)printf("The solution of equation\n");
if(n>=0)
{
if(n=0)
{
x=(int)((-b)/(2*a));
printf("The solution of equations has two identical!x=%=d\n",x);
}
if(n>0)
{
x=(int)(((-b)+((int)sqrt(n)))/(2*a));
x1=(int)(((-b)-((int)sqrt(n)))/(2*a));
printf("This formula has two solution!x=%d;x1=%d\n",x,x1);
}
}
}
printf("\n");
}
请帮忙指出所有错误的地方。有更好的程序再给个,简单点的,初学者。谢谢!!!! 展开
#include <math.h>
#include <stdio.h>
main()
{
int a,b,c;
float x=0,x1=0,n=0;
printf("please input a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b!=0){x=-(b+c);printf("This formula has one solution! x=%d\n",x);}
if(a!=0)
{
n=(int)(b*b-4*a*c);
if(n<0)printf("The solution of equation\n");
if(n>=0)
{
if(n=0)
{
x=(int)((-b)/(2*a));
printf("The solution of equations has two identical!x=%=d\n",x);
}
if(n>0)
{
x=(int)(((-b)+((int)sqrt(n)))/(2*a));
x1=(int)(((-b)-((int)sqrt(n)))/(2*a));
printf("This formula has two solution!x=%d;x1=%d\n",x,x1);
}
}
}
printf("\n");
}
请帮忙指出所有错误的地方。有更好的程序再给个,简单点的,初学者。谢谢!!!! 展开
4个回答
展开全部
唯一解应该是-c/b,n<0时解为两个共轭复根。
方程的解大部分是实数,如果全部强制转化为整数,算出的结果会出错
你的代码中有的if需要改为else,如n<0和n>=0是两种不同的情况,如果都用if就相当于“在n<0的情况下,如果n>=0……”
代码如下:
#include <stdio.h>
#include <math.h>
float less(float d,float a,float b) //求b*b-4ac<0时的根
{double y,z;
y=-b/(2*a);
z=sqrt(-d)/(2*a);
printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",y,z,y,z);
return 0;
}
float more(float d,float a,float b) //求b*b-4ac>0时的根
{double y,z,x1,x2;
y=-b/(2*a);
z=sqrt(d)/(2*a);
x1=y+z;x2=y-z;
printf("x1=%.2f,x2=%.2f\n",x1,x2);
return 0;
}
float equal(float a,float b) //b*b-4ac=0时的根
{double x;
x=-b/(2*a);
printf("x=%.2f\n",x);
return 0;
}
float main()
{
float a,b,c;
float n,x;
printf("please input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b!=0)
{x=-c/b;
printf("This formula has one solution! x=%f\n",x);}
else if(a!=0)
{n=b*b-4*a*c;
if(n<0)
less(n,a,b);
else if(n==0)
equal(a,b);
else
more(n,a,b);
}
return 0;
}
方程的解大部分是实数,如果全部强制转化为整数,算出的结果会出错
你的代码中有的if需要改为else,如n<0和n>=0是两种不同的情况,如果都用if就相当于“在n<0的情况下,如果n>=0……”
代码如下:
#include <stdio.h>
#include <math.h>
float less(float d,float a,float b) //求b*b-4ac<0时的根
{double y,z;
y=-b/(2*a);
z=sqrt(-d)/(2*a);
printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",y,z,y,z);
return 0;
}
float more(float d,float a,float b) //求b*b-4ac>0时的根
{double y,z,x1,x2;
y=-b/(2*a);
z=sqrt(d)/(2*a);
x1=y+z;x2=y-z;
printf("x1=%.2f,x2=%.2f\n",x1,x2);
return 0;
}
float equal(float a,float b) //b*b-4ac=0时的根
{double x;
x=-b/(2*a);
printf("x=%.2f\n",x);
return 0;
}
float main()
{
float a,b,c;
float n,x;
printf("please input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b!=0)
{x=-c/b;
printf("This formula has one solution! x=%f\n",x);}
else if(a!=0)
{n=b*b-4*a*c;
if(n<0)
less(n,a,b);
else if(n==0)
equal(a,b);
else
more(n,a,b);
}
return 0;
}
展开全部
a==0 b==0的情况掉了!
还有都是float了 你为什么老要强制装换成int呢?这样方程解就不正确了。
有唯一解时候也错了 x=-(b+c); 应该是-c/b
if(n>=0)这个多余的,你下面都又充分了 n>0;n=0 这里就没必要再卡一下if
还有都是float了 你为什么老要强制装换成int呢?这样方程解就不正确了。
有唯一解时候也错了 x=-(b+c); 应该是-c/b
if(n>=0)这个多余的,你下面都又充分了 n>0;n=0 这里就没必要再卡一下if
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <math.h>
#include <stdio.h>
main()
{
double a,b,c;
double x=0,x1=0,n=0;
printf("please input a,b,c:");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
if((b*b-4*a*c)<0)
{
printf("no soulutio;\n");
}
else
{
printf("There are two soultion;\n");
printf("The one soultion is: %.2f\n",(-b+sqrt(b*b-4*a*c))/(2*a*1.0));
printf("The one soultion is: %.2lf\n",(-b-sqrt(b*b-4*a*c))/(2*a*1.0));
}
}
你写得比较复杂,你看我的代码!希望可以帮得到你
#include <stdio.h>
main()
{
double a,b,c;
double x=0,x1=0,n=0;
printf("please input a,b,c:");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
if((b*b-4*a*c)<0)
{
printf("no soulutio;\n");
}
else
{
printf("There are two soultion;\n");
printf("The one soultion is: %.2f\n",(-b+sqrt(b*b-4*a*c))/(2*a*1.0));
printf("The one soultion is: %.2lf\n",(-b-sqrt(b*b-4*a*c))/(2*a*1.0));
}
}
你写得比较复杂,你看我的代码!希望可以帮得到你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主可以结贴了,楼上几位说的都很对,觉得那个的程序看起来简单就选谁的吧!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询