一元二次方程运行结果的问题
#include <stdio.h>#include <math.h>
int main()
{
double a,b,c,disc,p,q,x1,x2;
scanf("a=%lf b=%lf c=%lf",&a,&b,&c);
disc=b*b-4*a*c;
p=(-b)/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%f\nx2=%f",x1,x2);
}
这个代码不知道哪错了,得出来的X1,X2结果一样 本帖最后由 baige 于 2020-8-2 08:05 编辑
a=1 b=6 c=1这样输入scanf()是格式化输入,输入格式跟scanf()里面的内容要一致 baige 发表于 2020-8-2 08:04
a=1 b=6 c=1这样输入scanf()是格式化输入,输入格式跟scanf()里面的内容要一致
本帖最后由 风过无痕1989 于 2020-8-4 12:56 编辑
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,disc,p,q,x1,x2;
scanf("%lf,%lf,%lf",&a,&b,&c);
disc=b*b-4*a*c;
if (disc >= 0)
{
p=(-b)/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%f\nx2=%f\n",x1,x2);
}
else
{
printf("此方程无实数解\n");
}
return 0;
}
键盘输入 scanf() 函数是严格按照你在引号内的格式从缓冲区读取字符。一般情况下引号之间只写格式化要求,格式化内容要和输入内容一致,数与数、字符与字符之间可以用空格隔开,也可以用逗号隔开,否则就会出错。除了格式化操作符以外,不加任何其他字符,连空格都不要加。
scan在你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入语scanf句才结束。而且,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。
scanf("%d,%d,%d",&a,&b,&c),在每个数字之间需要输入逗号,否则后面的变量就无法正常赋值。假如你先输入18,然后输入逗号以外的其他非数字字符, scanf()会认为第一个int型变量输入完成,将18赋值给变量a;然后就会一直等待你输入逗号,但是你迟迟没有输入,超时之后程序没有正常给变量bc赋值,你的程序运行结果肯定和你的预期不一样。
你输入的数正好使得:b * b - 4 * a * c = 0 了,===> 使得 q = 0 ,这样的方程的两个根当然就相同了。
相信自己,你写的程序没有问题,过来给个 ” 最佳答案“吧 baige 发表于 2020-8-2 08:06
谢谢了,已经解决,是我输入数据格式的问题
页:
[1]