c语言程序纠错

来源:百度知道 编辑:UC知道 时间:2024/05/26 04:06:43
#include<stdio.h>
#include<math.h>
#include<windows.h>
int main()
{
float a,b,c;
float x,y;
scanf("%d %d %d",&a,&b,&c);
if ((b*b-4*a*c)>=0)
{
x=-b/(2*a)+(sqrt(b*b-4*a*c))/(2*a);
y=-b/(2*a)-(sqrt(b*b-4*a*c))/(2*a);
printf ("x=%d y=%d\n",x,y);
}
else
printf("没有实根\n");
system ("pause");
return 0;
}

我运行后总是输不出正确的,恳请各位高手指点

printf ("x=%f y=%f\n",x,y);

x,y是浮点数。不能%d输出。

你要好好看一下scanf和printf这两个函数的用法和格式控制符的含义,
除了2楼说的问题,你的scanf里面不能有空格或者其他任何东西就是:
scanf("%f%f%f",&a,&b,&c);

scanf("%d%d%d",&a,&b,&c);你定义是浮点型的不能用整型输入,应该改为
scanf("%f%f%f",&a,&b,&c);
输出是可以用不同的格式输出的。

3楼正解 其实最主要的还是%f
这个你要注意啊
我就经常错

楼上两位说的对,不过你们估计没有具体的编译过,其实还有两个小问题
1. x=-b/(2*a)+(sqrt(b*b-4*a*c))/(2*a);
y=-b/(2*a)-(sqrt(b*b-4*a*c))/(2*a);
这两句用到了sqrt()函数,它的原型为double sqrt(double x);即输入输出都是双精度,所以x,y,a,b,c的定义都必需用双精度,否则会有一个强制转换的警告,相应的printf和scanf的调用中就应用%lf比用%f更好
2. 从程序的效率上看程序中两次三次计算b*b-4*a*c是一种浪费,虽然在这个小程序中不明显,所以建议用一个变量delta代替即可。程序上来就是输入三个变量显得不太人性话建议加几句

以下是我修改后的程序,已经在VC6.0上运行通过,并且试验了a=1 b=4 c=4的情况下x=-2.0000,y=-2.0000的正确答案
#include<stdio.h>
#include<math.h>
#include<windows.h>
int main()
{
double a,b,c;
double x,y;
double delta;
printf(&