| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1183 人关注过本帖
标题:哪位老大帮我这个菜鸟看一下这个程序,小第不甚感激!
取消只看楼主 加入收藏
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
 问题点数:0 回复次数:6 
哪位老大帮我这个菜鸟看一下这个程序,小第不甚感激!

俺是菜鸟,求哪位高手帮我看一下这个程序

好象函数F调用不起作用.

#include<stdio.h> #include<math.h> #include<conio.h> #define eps 1e-1 float f1(float,float,float(*f)(float)); float f(float); float n,d[5]; main() {float a,b; float x; printf("Enter the n:\n"); scanf("%f",&n); if(n<=5) printf("Enter the a,b:\n"); scanf("%f%f",&a,&b); clrscr(); x=f1(a,b,f); printf("\nThe root of the equation is %f",x); } float f(float x) { float s; for(s=0;n>=0;n--) {s+=d[n]*pow(x,n);} return s; } float f1(float a,float b,float(*f)(float))

{ float c,fc,fa=f(a),fb=f(b); int k=1; printf("k\t c\t f(x)\n"); while(1) {if(fa*fb>0) exit(); c=(a+b)/2,fc=f(c); if(fabs(fc)<eps)break; else if(fa*fc<0){b=c;fb=fc;} else {a=c;fa=fc;} if(b-a<eps) break; printf("%d\t\t%f\t\t%f\n",k++,c,fc);} return c; }

搜索更多相关主题的帖子: 老大 感激 
2004-09-25 09:46
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 

这是个数值分析题,是用"二分法"求方程的根,5>=n>=0,f(n)=Cn乘x的N次再加Cn-1乘X的n-1次,加到C0,EPS是精度要求0.1,

n,Cn,Cn-1..............C0从键盘输入

2004-09-25 19:30
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 

今天上午的程序传错了,那个是未编完的草稿,不好意思,小第再传一下

#include<stdio.h> #include<math.h> #include<conio.h> #define eps 1e-1 float f1(float,float,float(*f)(float)); float f(float); float d[5]; int n; main() {float a,b; float x; printf("Enter the n:\n"); scanf("%d",&n); if(n<=5) for(;n>=0;n--) {printf("Enter the d[%d]:\n",n); scanf("%f",&d[n]);} printf("Enter the a,b:\n"); scanf("%f%f",&a,&b); clrscr(); x=f1(a,b,f); printf("\nThe root of the equation is %f",x); } float f(float x) {float s; int i; for(i=n,s=0;i>=0;i--) {s+=d[i]*pow(x,i);} return s; } float f1(float a,float b,float(*f)(float)) { float c,fc,fa=f(a),fb=f(b); int k=1; printf("k\t c\t \n"); while(1) {if(fa*fb>0) exit(); c=(a+b)/2,fc=f(c); else if(fa*fc<0){b=c;fb=fc;} else {a=c;fa=fc;} if(b-a<eps) break; printf("%d\t\t%f\t\t%f\n",k++,c,fc);} return c; }

2004-09-25 19:33
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 
还有X的取值范围也是从键盘输入
2004-09-25 19:37
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 

呵呵,问题就是嵌套调用f()的时候f1()中的循环不能顺利执行,但如果把F( )中的改为一个常式,就是系数Cn和项数n用常量代替,不采用动态输入,又能出正确结果,如我把n=3,C3=1,C2=1,C1= -3,C0= -3.改后程序为:

#include<stdio.h> #include<math.h> #include<conio.h> #define eps 1e-1 float f1(float,float,float(*f)(float)); float f(float); main() {float a,b; float x; printf("Enter the a,b:\n"); scanf("%f%f",&a,&b); clrscr(); x=f1(a,b,f); printf("\nThe root of the equation is %f",x); } float f1(float a,float b,float(*f)(float)) { float c,fc,fa=f(a),fb=f(b); int k=1; printf("k\t\t c\t\t\t f(x)\n"); while(1) {if(fa*fb>0) exit(); c=(a+b)/2,fc=f(c); if(fabs(fc)<eps)break; else if(fa*fc<0){b=c;fb=fc;} else {a=c;fa=fc;} if(b-a<eps) break; printf("%d\t\t%f\t\t%f\n",k++,c,fc);} return c; } float f(float x) { return x*x*x+x*x-3*x-3; }

2004-09-26 08:50
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 

运行结果是:

k c f(x) 1 1.500000 -1.875000 2 1.750000 0.171875 3 1.625000 -0.943359

The root of the equation is 1.687500

2004-09-26 08:50
edzhh
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-9-25
收藏
得分:0 
其中a=1,b=2.
2004-09-26 08:52
快速回复:哪位老大帮我这个菜鸟看一下这个程序,小第不甚感激!
数据加载中...
 
   



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

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