菜鸟关于C语言printf后面的问题!
m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);printf("x1=%f+%...
m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);
printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h)
和
printf("x1=%f+%fi\nx2=%f-%fi\n",-b/(2*a),sqrt(4*a*c-b*b)/(2*a),-b/(2*a),sqrt(4*a*c-b*b)/(2*a));
为什么我直接把m的表达式写在printf后面的m处,不要m这个中间变量,算出的值是错的啊?
就是不要m,n,l,h这几个中间变量。貌似可以不要m,n,l,h吧,但为什么错了呢,请高手解答
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d%d%d",&a,&b,&c);
if (a==0)
if (a==0&&b==0) printf("Input error!\n");
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c==0) printf("x1=x2=%f\n",x1);
else printf("x1=%f\nx2=%f\n",x1,x2);
}
else {m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);
if(b==0) printf("x1=%fi\nx2=-%fi\n",n,h);
else printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h);
}
}
getch();
}
这个原程序,就是求一元二次方程的解得问题。 展开
printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h)
和
printf("x1=%f+%fi\nx2=%f-%fi\n",-b/(2*a),sqrt(4*a*c-b*b)/(2*a),-b/(2*a),sqrt(4*a*c-b*b)/(2*a));
为什么我直接把m的表达式写在printf后面的m处,不要m这个中间变量,算出的值是错的啊?
就是不要m,n,l,h这几个中间变量。貌似可以不要m,n,l,h吧,但为什么错了呢,请高手解答
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d%d%d",&a,&b,&c);
if (a==0)
if (a==0&&b==0) printf("Input error!\n");
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c==0) printf("x1=x2=%f\n",x1);
else printf("x1=%f\nx2=%f\n",x1,x2);
}
else {m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);
if(b==0) printf("x1=%fi\nx2=-%fi\n",n,h);
else printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h);
}
}
getch();
}
这个原程序,就是求一元二次方程的解得问题。 展开
4个回答
展开全部
把printf("x1=%f+%fi\nx2=%f-%fi\n",-b/(2*a),sqrt(4*a*c-b*b)/(2*a),-b/(2*a),sqrt(4*a*c-b*b)/(2*a));
改为
printf("x1=%f+%fi\nx2=%f-%fi\n",(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)),(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)));就可以了。
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d%d%d",&a,&b,&c);
if (a==0)
if (a==0&&b==0) printf("Input error!\n");
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c==0) printf("x1=x2=%f\n",x1);
else printf("x1=%f\nx2=%f\n",x1,x2);
}
else {m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);
if(b==0) printf("x1=%fi\nx2=-%fi\n",n,h);
//else printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h);
printf("x1=%f+%fi\nx2=%f-%fi\n",(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)),(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)));
}
}
getch();
return 0;
}
改为
printf("x1=%f+%fi\nx2=%f-%fi\n",(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)),(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)));就可以了。
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d%d%d",&a,&b,&c);
if (a==0)
if (a==0&&b==0) printf("Input error!\n");
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c==0) printf("x1=x2=%f\n",x1);
else printf("x1=%f\nx2=%f\n",x1,x2);
}
else {m=-b/(2*a);n=sqrt(4*a*c-b*b)/(2*a);l=-b/(2*a);h=sqrt(4*a*c-b*b)/(2*a);
if(b==0) printf("x1=%fi\nx2=-%fi\n",n,h);
//else printf("x1=%f+%fi\nx2=%f-%fi\n",m,n,l,h);
printf("x1=%f+%fi\nx2=%f-%fi\n",(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)),(double)(-b/(2*a)),(double)(sqrt(4*a*c-b*b)/(2*a)));
}
}
getch();
return 0;
}
展开全部
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d %d %d",&a,&b,&c);//输入时要有间隔
if (a==0)
if (b==0) printf("Input error!\n");//没必要再来个a==0
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%f\nx2=%f\n",x1,x2);
else if(b*b-4*a*c==0)
printf("x1=x2=%f\n",x1);
}
getch();
}
#include "conio.h"
#include "math.h"
main()
{
int a,b,c;
double x,x1,x2,m,n,l,h;
scanf("%d %d %d",&a,&b,&c);//输入时要有间隔
if (a==0)
if (b==0) printf("Input error!\n");//没必要再来个a==0
else {x=-c/b;printf("x=%f\n",x);}
else {
if (b*b-4*a*c>=0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%f\nx2=%f\n",x1,x2);
else if(b*b-4*a*c==0)
printf("x1=x2=%f\n",x1);
}
getch();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的a,b,c定义的是整形,而m,n,l,h定义的是双精度double形,所以用你的方法在用printf输出就有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥!你那abc定义为整型啊,整型除整型还是整型啊!!
m=-b/(2.0*a);l=-b/(2.0*a) 这样ok了!
m=-b/(2.0*a);l=-b/(2.0*a) 这样ok了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询