| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 731 人关注过本帖
标题:下面的两个程序输出有什么不同,为什么第二个运行之后得不出X的值???
只看楼主 加入收藏
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
 问题点数:0 回复次数:7 
下面的两个程序输出有什么不同,为什么第二个运行之后得不出X的值???
程序一较复杂 可运行~~
#include<stdio.h>
#include<math.h>
float  f(float x);
float ss(float x0,float h,int n);               
float rf(float a,float b);
float a,b,x;
int j;
int main()
{    
    float x0,h;
    int n;
    printf("please input x0 , h , n:\n");
    scanf("%f,%f,%d",&x0,&h,&n);
    ss(x0,h,n);
    printf("方程x*x*x-x-1=0的根x:\n");
    x=rf(a,b);
    printf("%f\n",x);
    printf("需要二分的次数为:%d\n",j);
    return 0;
}
float  f(float x)
{
    return x*x*x-x-1;
}
float ss(float x0,float h,int n)
{   int i;
    a=x0;
    b=x0;
    for(i=1;i<=n;i++)
    {      if(f(a)*f(b)<0)
           break;
        a=a-h;
    }
    for(i=1;i<=n;i++)
    {      
        if(f(a)*f(b)<0)
            break;
          b=b+h;
    }
    if(a==x0)
    {   a=b-h;
        printf("a,b的值为:");
         printf("a=%f,b=%f\n",a,b);
    }
    else
    {
        b=a+h;
        printf("a,b的值为:");
         printf("a=%f,b=%f\n",a,b);
    }
    return 0;
}
float rf(float a,float b)
{   j=0;
    while(fabs(b-a)>=0.001)
    {     
          j++;
          if (f((a+b)/2)==0)
             return (a+b)/2;
          if (f((a+b)/2)*f(a)<0)
             b=(a+b)/2;
          if (f((a+b)/2)*f(b)<0)
             a=(a+b)/2;
    }
    return (a+b)/2;
}
程序二是程序一的简化:具体问题是运行后输入a,b的值后就停下来了,没有算出x的值
#include<stdio.h>
#include<math.h>
int j;
float a,b,x;
float f(float x);
float rf(float a,float b);
int main()
{
   printf("请输入函数的区间a,b的值:\n");
   scanf("%f,%f",&a,&b);
   
   printf("方程x*x*x-x-1的根x: \n");
   x=rf(a,b);
   
}

float f(float x)
{
    return x*x*x-x-1;
}
float rf(float a,float b)
{    j=0;
  while(fabs(b-a)>=0.01)
  {
      j++;
      if (f((a+b)/2)==0)
          return (a+b)/2;
      if (f((a+b)/2)*f(a)<0)
          b=(a+b)/2;
      if (f((a+b)/2)*f(a)>0)
          a=(a+b)/2;
  }
    return (a+b)/2;
} 

[[it] 本帖最后由 crz03128 于 2008-6-17 21:05 编辑 [/it]]
搜索更多相关主题的帖子: 输出 运行 
2008-06-17 21:02
learnerboy
Rank: 2
等 级:论坛游民
帖 子:246
专家分:22
注 册:2007-11-11
收藏
得分:0 
这样就行了!
#include<stdio.h>
#include<math.h>
int j;
float a,b,x;
float f(float x);
float rf(float a,float b);
void main()/*改过.....*/
{
   printf("请输入函数的区间a,b的值:\n");
   scanf("%f,%f",&a,&b);
   x=rf(a,b);
   printf("方程x*x*x-x-1的根x==%f: \n",x);
/*改过.....*/
}

float f(float x)
{
    return x*x*x-x-1;
}
float rf(float a,float b)
{    j=0;
  while(fabs(b-a)>=0.01)
  {
      j++;
      if (f((a+b)/2)==0)
          return (a+b)/2;
      if (f((a+b)/2)*f(a)<0)
          b=(a+b)/2;
      if (f((a+b)/2)*f(a)>0)
          a=(a+b)/2;
  }
    return (a+b)/2;
}
这样就行了!
2008-06-17 21:08
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
得分:0 
谢谢
我也是这样改的
可为什么第一个就能运行呢?可以解释一下吧

老师领进门,成长靠自己+虚心
2008-06-17 21:16
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
得分:0 
帮帮忙,在线等.....

老师领进门,成长靠自己+虚心
2008-06-17 21:37
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
你自己单步调试一下不就知道了么~~~有的时候看不出来这样调一下很管用的,不过大部分的时候你发现的自己的错误的时候都想自杀~~~呵呵
2008-06-17 21:51
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
得分:0 
试过了看不出

老师领进门,成长靠自己+虚心
2008-06-17 22:00
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
得分:0 
试过了看不出

老师领进门,成长靠自己+虚心
2008-06-18 10:12
crabeam
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-6-17
收藏
得分:0 
死循环了 所以得不出X..........

刚才改了一下,不知到符合原题?
#include<stdio.h>
#include<math.h>

float a,b,c,x;      /*全局变量*/



float f(float x)
{
    int p;
    p=x*x*x-x-1;
    return p;
}

void rf(float a,float b,float c)
{   
       
        float n,m,z;
        m=f(a+b/2);
          n=f((a+b)/2)*f(a);
          z=f((a+b)/2)*f(a);
      if(fabs(b-a)>=0.01)
   

      if (m==0)
          {c=(a+b)/2;
          printf("%f",c);}
          else
      if (n<0)
          {b=(a+b)/2;
          printf("%f",b);}
          else
      if (z>0)
          {a=(a+b)/2;
          printf("%f",a);}
      
}

void main()
{
   printf("请输入函数的区间a,b的值:\n");
   scanf("%f,%f,%f",&a,&b,&c);
   printf("方程x*x*x-x-1的根\nx=");
   rf(a,b,c);
}



[[it] 本帖最后由 crabeam 于 2008-6-18 11:37 编辑 [/it]]

[[it] 本帖最后由 crabeam 于 2008-6-18 11:40 编辑 [/it]]
2008-06-18 11:35
快速回复:下面的两个程序输出有什么不同,为什么第二个运行之后得不出X的值?? ...
数据加载中...
 
   



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

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