c语言程序注释统计二分法求零点程序带注释

欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 10911 人关注过本帖
标题:二分法求根问题
等 级:论坛游民
帖 子:11
专家分:18
结帖率:100%
&&已结贴√
&&问题点数:20&&回复次数:6&&&
二分法求根问题
#include&stdio.h&
#include&math.h&
/*int main()
&&& int a = -10,b = 10;
&&& flf = 2*a*a*a-4*a*a+3*a-6;
&&& frg = 2*b*b*b-4*b*b+3*a-6;
&&& mid = (a+b)/2;
&&& fmid = 2*mid*mid*mid-4*mid*mid+3*mid-6;
&&& if(flf*frg &= 0)
&&&&&&&&printf(&原方程在区间上无根或不止一根\n&);
&&&&&&&&while(flf*mid & 0)
&&&&&&&&&&&&
int main()
&&& float a = -10,b = 10,mid,fmid,flf,
&&& float _x=20;
&&& int icount = 0;
&&&&&&&&flf = 2*a*a*a-4*a*a+3*a-6;
&&&&&&&&frg = 2*b*b*b-4*b*b+3*a-6;
&&&&&&&&//if(flf*frg &= 0)
&&&&&&&&//{
&&&&&&&&//printf(&原方程在区间上无根或不止一根\n&);
&&&&&&&&//
&&&&&&&&//}
&&&&&&&&mid = (a+b)/2;
&&&&&&&&fmid = 2*mid*mid*mid-4*mid*mid+3*mid-6;
&&&&&&&&if((flf*fmid) & 0)
&&&&&&&&&&&&b =
&&&&&&&&&if((fmid*frg)&0)
&&&&&&&&&&&&a =
&&&&&&&&&//if(fabs(fmid)& 1e-6)
&&&&&&&&&&&&//
&&&&&&&&_x= b-a;
&&&&&&&&//printf(&%f\n&,_x);
&&&&&&&&icount++;
&&& }while(_x & 1e-2);
&&&&&&&&printf(&The root is %f\n&,(a+b)/2);
&&&&&&&&printf(&%d\n&,icount);
//想用二分法求方程2x^3 - 4x^2 + 3x - 6 = 0 在[-10,10]上的根,达不到目的(改小1e-2也没用),跪求高手指点
搜索更多相关主题的帖子:
等 级:蝙蝠侠
帖 子:198
专家分:809
&&得分:10&
#include&stdio.h&
#include&math.h&
#define f(x) (2*x*x*x-4*x*x+3*x-6)
#define MIN -10
#define MAX 10
#define exp 1e-7
int main(int argc,char *argv[])
&&& float mid=0;
&&& float start=MIN;
&&& float end=MAX;
&&& while(fabs(end-start)&exp)
&&&&&&&&if(f(start)*f(end)&0)
&&&&&&&&&&&&printf(&函数在%d和%d之间没有根或者有多个根:&,MIN,MAX);
&&&&&&&&&&&&
&&&&&&&&&&&&else
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&mid=(start+end)/2.0;&&&
&&&&&&&&&&&&&&&&&&&&if(f(start)*f(end)&0)
&&&&&&&&&&&&&&&&&&&&&&&&end=
&&&&&&&&&&&&&&&&&&&&&&&&else
&&&&&&&&&&&&&&&&&&&&&&&&&&& start=
&&&&&&&&&&&&&&& }
&&& if(fabs(end-start)&=exp)
&&&&&&&&printf(&方程的根是:%f&,(end+start)/2);
&&& return 0;
想帮你试着写一下,但结果好像不对,还请大家指点一下,找出错!
等 级:论坛游民
帖 子:11
专家分:18
回复 2楼 小糊涂神c30
本人觉得是精度问题,flf*frg&0这个条件无法判断两者是否异号,望大神指导
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
&&得分:10&
你俩写的这是什么呀?
程序代码:#include&stdio.h&
double f(double x)
&&& return <font color=# * x * x * x - <font color=# * x * x + <font color=# * x - <font color=#;
double real_root(double (*fun)(double), double left, double right, double deviation)
&&& double x,
&&& if(deviation & <font color=#) deviation = -
&&& while(right - left & deviation)
&&&&&&&&x = (left + right) / <font color=#;
&&&&&&&&y = fun(x);
&&&&&&&&if(y &= <font color=#) right =
&&&&&&&&if(y &= <font color=#) left =
&&& return (left + right) / <font color=#;
int main()
&&& printf(&%lf\n&, real_root(f, -<font color=#, <font color=#, 1e-<font color=#));
&&& return <font color=#;
重剑无锋,大巧不工
等 级:论坛游民
帖 子:11
专家分:18
回复 4楼 beyondyf
谢谢版主了,一个用宏,一个用函数,函数指针有必要吗。难道double就把精度问题解决了?soga分数补上,谢啦!
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
这不是必不必要的问题。以你现在的应用水平还体会不出各种方式的利弊及如何取舍。
你的代码问题不是出在精度上,而是二分法的构造就完全不对。别再问为什么不对,要么看书,要么看我的代码。
重剑无锋,大巧不工
等 级:新手上路
回复 6楼 beyondyf
为什么不需要考虑根的个数?
版权所有,并保留所有权利。
Powered by , Processed in 0.030872 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved16:59 提问
C语言初学者来求教,关于二分法
原题是要求从一个有15个元素从大到小排列的数组中利用折半查找法查找到一个值x的位置,我写了如下代码,一运行就报错,求大神指正
在此谢过了!
#include &stdio.h&
int num[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int m=0,n=14,x,p,q;
printf("请输入欲定位的数x \n");
scanf("%d",x);
while (m&=n)
p=(m+n)/2;
if (x==num[p])
else if (x&num[p])
else if (x&num[p])
printf("数字位于第%d位",q);
printf("数组中无此数字");
按赞数排序
算法本身没错,语法问题
scanf("%d",x); 换成scanf("%d",&x);
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐关于二分法查找,一个程序求助
编辑:www.fx114.net
本篇文章主要介绍了"关于二分法查找,一个程序求助
0",主要涉及到关于二分法查找,一个程序求助
0方面的内容,对于关于二分法查找,一个程序求助
0感兴趣的同学可以参考一下。
用二分法查找,不知一个元素,我写了一段
递归的,可是我自己已经晕了,能告诉我是怎么
错的么。谢谢
#include&stdio.h&
void&midfind(int&num[4],int&front,int&rear,int&i)
int&mid,find=0;
while(front&=rear&&!find)
mid=(front+rear)/2;
if(num[mid]&i)
midfind(num,mid+1,rear,i);
if(num[mid]&i)
midfind(num,front,mid-1,i);
if(num[mid]=i)
printf("%d\t",mid);
midfind(num,front,mid-1,i);
midfind(num,mid+1,rear,i);
void&main()
int&a[4]={1,1,2,2};
printf("please&input&b:");
scanf("%d",&b);
printf("\n");
midfind(a,0,3,b);
printf("\n");
}大家能帮我看看么,我真的很急if(a&=&b)&---&&if(a&==&b)可那不是问题的根源,我盖了以后还是不行if(num[mid]=i)
应改为if(num[mid]==i)我已经将那个错误改了,可还是不好事,
怎么办那,谢谢#include&stdio.h&
void&midfind(int&num[4],int&front,int&rear,int&i)
int&mid,find=0;
while(front&=rear&&!find)
mid=(front+rear)/2;
&&&&&&&&&&&&&&&&&&if(num[mid]==i){
&&&&&&&&&&&print("%d\t",mid);
&&&&&&&&&&&find=1;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&else{
if(num[mid]&i)
midfind(num,mid+1,rear,i);
&&&&&&&&&else&
&&if(num[mid]&i)midfind(num,front,mid-1,i);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
void&main()
int&a[4]={1,1,2,2};
printf("please&input&b:");
scanf("%d",&b);
printf("\n");
midfind(a,0,3,b);
printf("\n");
}楼上老兄,不好使呀你前面不应该定义int&find=0;
这样的话,你每次递归开始都会把find变为0,这样就变成了死循环了那个应该没有问题#include&stdio.h&
static&int&mid,find=0;
void&midfind(int&num[4],int&front,int&rear,int&i)
while(front&=rear&&!find)
mid=(front+rear)/2;
&&&&&&&&&&&&&&&&&&if(num[mid]==i){
&&&&&&&&&&&printf("%d\t",mid);
&&&&&&&&&&&find=1;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&else{
if(num[mid]&i)
midfind(num,mid+1,rear,i);
&&&&&&&&&else&
&&if(num[mid]&i)midfind(num,front,mid-1,i);
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
void&main()
int&a[4]={1,1,2,2};
printf("please&input&b:");
scanf("%d",&b);
printf("\n");
midfind(a,0,3,b);
printf("\n");
}可是只能返回一个,希望能返回所有相同的所有值抱歉,刚才买东西,出去了一趟
刚才的代码贴错了,正确的是:
#include&stdio.h&
int&mid,find=0;
void&midfind(int&num[4],int&front,int&rear,int&i)
while(front&=rear&&!find)
mid=(front+rear)/2;
&&&&&&&&&&&&&&&&&&if(num[mid]==i){
&&&&&&&&&&&printf("%d\t",mid);
&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&midfind(num,front,mid-1,i);
&&&&&&&&&&&&&&&&&&midfind(num,mid+1,rear,i);
&&&&&&&&&&&&&&&&&&&&&&&&&&&find=1;
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&else{
if(num[mid]&i){midfind(num,mid+1,rear,i);}
&&&&&&&&&else&{if(num[mid]&i)midfind(num,front,mid-1,i);}
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
void&main()
int&a[4]={1,1,2,2};
printf("please&input&b:");
scanf("%d",&b);
printf("\n");
midfind(a,0,3,b);
printf("\n");
}if(num[mid]=i)改为if(num[mid])==i)
midfind(num,front,mid-1,i);
midfind(num,mid+1,rear,i);删去
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:用C语言使用二分法求sinx的零点,输入一个自变量x的范围后,求出这个范围内的所有零点。_百度知道
用C语言使用二分法求sinx的零点,输入一个自变量x的范围后,求出这个范围内的所有零点。
我有更好的答案
首先,要用到数学函数,需要包含头文件math.h其次,如果x不是弧度,需要转换为弧度,如果x本身是弧度,则可以写为:sin(x)如果x不是弧度,可以写为:sin(60*3.)
采纳率:81%
为您推荐:
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。二分法c语言程序? - 知乎3被浏览200分享邀请回答0添加评论分享收藏感谢收起

我要回帖

更多关于 c语言程序的注释是 的文章

 

随机推荐