C语言程序:二分法解方程 5

要编一个用户可输入系数的五次方程,只存在1个根的区间[m,n]以及根的精度p,然后求出方程在这个区间的解和执行步骤数。我编了下面程序,输入值是0,0,1,0,-1,-1即... 要编一个用户可输入系数的五次方程,只存在1个根的区间[m,n]以及根的精度p,然后求出方程在这个区间的解和执行步骤数。我编了下面程序,输入值是0,0,1,0,-1,-1 即方程为x^3-x-1=0 1,1.5,0.001 即区间为(1,1.5),精度为0.001 但是输出结果总是-858993460。请问这是为什么,如何改程序?
#include<stdio.h>
#include<math.h>
#define f(x) (a*x*x*x*x*x+b*x*x*x*x+c*x*x*x+d*x*x+e*x+f) //定义五次方程
int main()
{
double m,n,j,h,p,t; //m,n为区间。j为方程解,h为区间中间值,p为精度,t为区间长度
int k,a,b,c,d,e,f; //k为执行步骤数,剩下为方程系数
printf("To a formula:ax^5+bx^4+cx^3+dx^2+ex+f=0:\n");
printf("Please input:a,b,c,d,e,f:");
scanf("%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&e,&f);//用户输入方程系数
printf("Please input the district (m,n) and precision p,for example(1,2,0.0001):");
scanf("%d,%d,%d",&m,&n,&p);//用户输入区间和精度
if(f(m)*f(n)>0)//判断区间是否有一个根
printf("There is no sole root in this district\n");
else
for(k=0;;k++)
{
h=(m+n)/2;//计算区间中间值
t=n-m;//区间长度
if(f(m)*f(n)==0)//判断端点值是否为根
if(f(m)==0)
j=m;
else
j=n;
break;//若端点值为根,跳出循环结构,输出结果
if(fabs(t)>p)//判断区间长度绝对值是否大于精度
if(f(m)*f(h)>0)
m=h;
else
n=h;
else
j=h;
}
printf("The root is %d and steps are %d\n",j,k);//输出方程的根和步骤数
return 0;
}
展开
 我来答
lygszmjj
2014-10-19 · TA获得超过1814个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:423万
展开全部
1. scanf("%d,%d,%d",&m,&n,&p);要改成scanf("%f,%f,%f",&m,&n,&p)
2.
if(f(m)*f(n)==0
if(f(m)==0)
j=m;
else
j=n;
break;
要改成
if(f(m)*f(n)==0
{ if(f(m)==0)
j=m;
else
j=n;
break; }
3:
else
j=h;
要改成
else
{ j=h; break; }

4:
printf("The root is %d and steps are %d\n",j,k)
要改成
printf("The root is %f and steps are %d\n",j,k)

另外,结果虽然正确了,但是逻辑还是比较混乱的。
wanglei980823
2014-10-19 · TA获得超过103个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:77万
展开全部
打印浮点变量要用%f
追问
不行啊,改成%f,输出结果更长更变态了。
追答
浮点数不能比较大小,只能比较区间,f()函数是怎么实现的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式