用c语言计算方程2x^2+3x+1=0的根x1,x2 看下哪有错

#include<stdio.h>voidmain(){floatx1=0,x2=0,x=0;for(x=-2.0;x<=2.0;x=x+0.1){if(2*x*x+3*... #include<stdio.h>
void main()
{
float x1=0,x2=0,x=0;
for(x=-2.0;x<=2.0;x=x+0.1)
{
if(2*x*x+3*x+1==0)
{
x1=x;
printf("%f ",x);
for(x=x1+0.1;x<=2.0;x=x+0.1)
{
if(2*x*x+3*x+1==0)
{
x2=x;
printf("%f \n",x);
break;

}
}

}
}

printf("计算完毕 \n");
}
展开
比唱控啊默与振1i
2011-06-24 · 超过27用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:70万
展开全部
首先呢void main()的写法在VC++下是没问题啦
但是到GCC编译器里就不通过了
最好改成int main()
其实main函数的标准定义应该是int main(int argc, char *argv[])
————————————
上面是闲话
然后下面说说算法的问题
你这个算法里用到的是在区间里步长0.1进行扫描取近似值的方法
先扫描出第一个根x1,然后从x1出发继续扫描x轴上后面的实数
理论上是没有错,但是有点小问题
就是 一个浮点数是不能直接跟0比较大小的
你这个步长是0.1能不能正好算到0姑且不论
就算是这样的语句

float x=0;

程序中(x==0)可能依然为假,因为计算机内部存储数据都是二进制,C里用4个字节来存放浮点数。浮点数精度很高但是也不可能是无限的精度,总得有个误差。
所以一般要比较两个浮点数是否相等,是先定义一个很小的值作为参照。比如:

#define EPSILON 0.00001

然后假设有float a,b需要比较
那么写进if语句是这样

if (abs(a-b)<EPSILON) //abs()是求绝对值的函数,使用需先包含math.h头文件
{
.....
}

这个if语句的条件为真的时候,就可以认为a,b是相等的。
用这样的表达式去代替你的判断相等的表达式,应该就能得到答案了。

这个算法适合用于知道根的区间,进一步确定根的位置。精确度取决于上面定义的EPSILON。
一般来说EPSILON定义得越小,根就越精确(当然还要看x本身的数据类型啦)。

上面有兄弟(姐妹?)说用求根公式算,对于一元二次方程当然是可以的,但是对于没有求根公式的方程来说,利用计算机的高速计算特点来解题也未尝不是个好方法。
水墓天堂
2011-06-23 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:91.4万
展开全部
float x1=0,x2=0,x=0;好像是没必要定义数值,应该改成 float x1,x2,x;
思路也不是很好 这个程序的针对性太强了,建议用x1=[-b+sqar(b∧2-4ac)]/2a,x2=[-b-sqar(b∧2-4ac)]/2a,当然要先判断b∧2-4ac是否大于0,也就是有无实根。
反正感觉你这个程序很乱,要的话可以帮你写一个求解 一元2次方程的程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式