| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1320 人关注过本帖
标题:一道研一的数学题,用C语言编程,期望高手ing!!非常的!!
只看楼主 加入收藏
kingcm
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
一道研一的数学题,用C语言编程,期望高手ing!!非常的!!

题目:
   用二分法求方程xsinx-1=0在区间[0,π/2]的近似根,若要求近似根的误差不超过0.001,问近似根是多少?应分几次?
搜索更多相关主题的帖子: 数学题 C语言 期望 ing 
2009-10-03 16:41
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:10 
自己对这个不是很熟,编了一个,也有个结果,你看看怎么样。
#include "stdio.h"
#include "math.h"
#define PI 3.1415926
void main()
{  
    int i=0;
    float a,b=PI/2,c=PI/4;
    for(a=0;fabs(c*sin(c)-1)>1e-3;i++)
       {
           c=(a+b)/2;
           if((a*sin(a)-1)*(c*sin(c)-1)<0)
              b=c;
           if((b*sin(b)-1)*(c*sin(c)-1)<0)
             a=c;
       }
    printf("the root is %f, the times it costs is %d.\n",c,i);
}
2009-10-03 17:20
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
有点要说明一下,对于c*sin(c)-1中,在算sinc的值时,先把c化成度数,再求其正弦值,不知道原题是不是这个意思。
2009-10-03 17:40
放弃那个阿姨
Rank: 2
等 级:论坛游民
帖 子:41
专家分:75
注 册:2009-9-29
收藏
得分:10 
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:
  1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
  2 求区间(a,b)的中点c.
  3 计算f(c).
  (1) 若f(c)=0,则c就是函数的零点;
  (2) 若f(a)·f(c)<0,则令b=c;
  (3) 若f(c)·f(b)<0,则令a=c.
  (4) 判断是否达到精确度ξ:即若┃a-b┃<ξ,则得到零点近似值a(或b),否则重复2-4.
我省了验证的部分。
 
     #include "math.h"
  #include "stdio.h"
    #define PI 3.141592653
   main()  
  {  
  double a =0.0, b =PI/2.0 ,c,d= 1e-3;  
    int i;
    for(i=0;fabs(a-b)>d;i++)
     
    {
      c=(a+b)/2.0;
      if((a*sin(a)-1)*(c*sin(c)-1)<0)
         b=c;
      if((b*sin(b)-1)*(c*sin(c)-1)<0)

         a=c;   
     }
   
  
   printf("近似值为%f\n分为%d",a,i);   
    
}

[ 本帖最后由 放弃那个阿姨 于 2009-10-4 10:22 编辑 ]
2009-10-03 19:56
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
原来精确度是这个意思。学习了。
for(i=0;fabs(a-b)<1e-3;i++);  
这里应该改成fabs(a-b)>1e-3吧。
而且我怎么得不到运行的结果呢,我在看看。
2009-10-03 20:09
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:0 
我刚想说你的一个else用的不好,你就改过来了。
2009-10-03 20:17
放弃那个阿姨
Rank: 2
等 级:论坛游民
帖 子:41
专家分:75
注 册:2009-9-29
收藏
得分:0 
额,
一开始我看错了。
其实我也得不出来。放在这里。
就是希望大家一起做。

[ 本帖最后由 放弃那个阿姨 于 2009-10-3 20:29 编辑 ]
2009-10-03 20:19
放弃那个阿姨
Rank: 2
等 级:论坛游民
帖 子:41
专家分:75
注 册:2009-9-29
收藏
得分:0 
我还是错了一个错,for后面多了个;
上面的是最后的了。
程序是没问题,但运行不了,是因为我输入有误,输入了几个全角符号。
这是全角符号
ABCDabcd1234,。
这是半角符号
ABCDabcd1234,.
一般的 SHIFT+空格 切换全角半角
对系统来说
A和A B和B ,和,是不一样的宽度,字符编码都不同

 所以lz请自己重输一遍,呵呵,

[ 本帖最后由 放弃那个阿姨 于 2009-10-4 10:56 编辑 ]
2009-10-04 10:26
放弃那个阿姨
Rank: 2
等 级:论坛游民
帖 子:41
专家分:75
注 册:2009-9-29
收藏
得分:0 
算了,我自己也想看看答案。自己输入了一遍。
#include "stdio.h"
#include"math.h"
#define PI 3.141592653
main()
{
  double a=0.0,b=PI/2.0,c,d=1e-3;
  int i;
  for(i=0;fabs(a-b)>d;i++)
  {
    c=(a+b)/2.0;
    if((a*sin(a)-1)*(c*sin(c)-1)<0)
    b=c;
    if((b*sin(b)-1)*(c*sin(c)-1)<0)  
    a=c; }
    printf("%f\n%d",a,i);
      
}

答案:1.113670 和11次。楼主一定要记得结贴哦,
2009-10-04 11:31
kingcm
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-3
收藏
得分:0 
谢谢大家支持啊!!!
我刚学C,以后难免还要请教大家,呵呵。。
2009-10-04 19:48
快速回复:一道研一的数学题,用C语言编程,期望高手ing!!非常的!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012612 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved