| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 783 人关注过本帖, 1 人收藏
标题:函数嵌套调用的请教!
只看楼主 加入收藏
糖果铺满
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-2-7
结帖率:100%
收藏(1)
 问题点数:0 回复次数:6 
函数嵌套调用的请教!
#include<stdio.h>
#include<math.h>
float f(float x)
{
    float y;
    y=(x*(x-5)+6)*x-80;
    return (y);
}
float xpoint(float x1,float x2)
{
    float y;
    y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
    return (y);
}
float root(float x1,float x2)
{
    float x,y1,y2;
    y1=f(x1);
    x=xpoint(x1,x2);
    y2=f(x2);
    while(fabs(f(x)>=0.0000001))
    {
       if(f(x)*f(x1)>0)x1=x;
       if(f(x)*f(x2)>0)x2=x;
    }
    return(x);
}
void main()
{
    float x1,x2,y1,y2,x;
    printf("please input x1,x2=");
    scanf("%f,%f",&x1,&x2);
    y1=f(x1);
    y2=f(x2);
    if(y1*y2>0)x=root(x1,x2);
    printf("Your answer is %d\n",x);

}
   

执行不了啊。。。编译时没有错误。。。但是执行不了。。求教!
搜索更多相关主题的帖子: 函数 嵌套 
2010-02-18 17:36
dydsdyds
Rank: 6Rank: 6
来 自:Java
等 级:侠之大者
帖 子:217
专家分:457
注 册:2010-2-14
收藏
得分:0 
程序没看明白……
刚开始学习,说错勿怪……


能执行啊 我输入了5 6
please input x1,x2=5 6
Your answer is 536870912
Press any key to continue
我的观点:输入的时候用空格分开,用逗号不行~


[ 本帖最后由 dydsdyds 于 2010-2-18 17:53 编辑 ]

c语言刚开一学期,就换开VB...
2010-02-18 17:44
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
while中陷入死循环了……

楼主这个程序想干什么,提问的时候最好写出来

[ 本帖最后由 heartnheart 于 2010-2-18 17:50 编辑 ]
2010-02-18 17:47
糖果铺满
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-2-7
收藏
得分:0 
回复 3楼 heartnheart
题目巨长,讲得很纠结。。但大体上就是求y=(x*(x-5)+6)*x-80;这个方程的跟。用截弦法~
2010-02-19 00:44
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
程序代码:
/*
由于程序中有f(x)*f(x1)>0这样的判断,但f(x)和f(x1)在循环中会达到小数点后7位,其乘积显然会达到小数点后14位,而float根本无法满足条件,故将程序中所有float改为double
*/
#include<stdio.h>
#include<math.h>
double f(double x)
{
    double y;
  y=(x*(x-5)+6)*x-80;
    return (y);
}
double xpoint(double x1,double x2)
{
    double y;
    y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
    return (y);
}
float root(double x1,double x2)
{
    double x,y1,y2;
    y1=f(x1);
    x=xpoint(x1,x2);
    y2=f(x2);
    while(fabs(  f(x)  )>=0.0000001)//仔细看看你原来怎么写的    {
       if(f(x)*f(x1)>=0)x1=x;
       if(f(x)*f(x2)>=0)x2=x;
        x=xpoint(x1,x2);//作为判断的条件不发生改变怎么能不死循环呢

    }
    return(x);
}
void main()
{
    double x1,x2,y1,y2,x;
    printf("please input x1,x2=");
    scanf("%lf,%lf",&x1,&x2);
    y1=f(x1);
    y2=f(x2);
    if(y1*y2<=0){
                x=root(x1,x2);
                printf("Your answer is %f\n",x);//是%f不是%d 
                }
    else
     printf("本区间内无解.");//加一个无解的情况

}
2010-02-19 10:56
糖果铺满
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-2-7
收藏
得分:0 
回复 5楼 heartnheart
照你这样修改了,能执行了,但是答案是错误的啊。。。
比如输入2,6
答案应该是5.但是输出地结果是无解~

我又修改了一下:
#include<stdio.h>

#include<math.h>

float f(float x)

{

       float y;

              y=(x*(x-5)+6)*x-80;

       return(y);

}

float xpoint(float x1,float x2)

{

  float x;

  x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));

  return (x);

}

float root(float x1,float x2)

{

    float x,y,y1;

       y=f(x);

       y1=f(x1);

       while(fabs(y)<0.0001)

    {if(y*y1>0)x=x1,y1=y;

       else x=x2;}

         return(x);

}

void main()

{

       float x1,x2,m,n;

       printf("please input x1,x2=");

       scanf("%f%f",&x1,&x2);

       m=xpoint(x1,x2);

       n=root(x1,x2);

    if (f(x1)*f(x2)<0)printf("Your answer is:%8.4f\n",m);

     else if (f(x1)*f(x2)>0)printf("Your answer is:%8.4f\n",n);

                else printf("无解!\n");

}


答案也是无解。。不过我觉得我的答案和标准答案是一个意思诶。。。标准答案如下::
#include<stdio.h>
#include<math.h>
float f(float x)
{
    float y;
        y=(x*(x-5)+6)*x-80;
    return(y);
}
float xpoint(float x1,float x2)
{
  float y;
  y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
  return (y);
}
float root(float x1,float x2)
{
    float x,y,y1;
    y1=f(x1);
    do
    {
        x=xpoint(x1,x2);
        y=f(x);
        if(y*y1>0)
        {
            x=x1;
            y1=y;
        }
    else
        x=x2;
    }while(fabs(y)>=0.0001);
      return(x);
}
void main()
{
    float x1,x2,f1,f2,x;
    do
    {
        printf("input x1,x2:\n");
        scanf("%f,%f",&x1,&x2);
        f1=f(x1);
        f2=f(x2);
    }
    while(f1*f2>=0);
    x=root(x1,x2);
    printf("A root of equation is%8.4f\n",x);
}


不过我检验了一下……标准答案好像……也不怎么对~


我不晓得要怎么搞了~

2010-02-19 16:43
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
【2,6】上5是解吗? y=(x*(x-5)+6)*x-80;
y= (5*(5-5)+6)*5-80=-30;
不是零啊
我做的答案是6.143160验证了是方程的根啊

[ 本帖最后由 heartnheart 于 2010-2-19 17:11 编辑 ]
2010-02-19 17:05
快速回复:函数嵌套调用的请教!
数据加载中...
 
   



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

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