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

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

好象函数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
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
#define eps 1e-1
这句是浪费了,1的-1次方不还是1吗?
2004-09-25 11:04
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

看到你的帖子,只想说:操!帖子题目长又不知问什么,代码的题目要干什么又不说。 题目不清楚,代码粘在一起,看得头晕,帮你改了一下,未完成。 错误在s+=d[n-1]*pow(x,n);

#include<stdio.h> #include<math.h> #include<conio.h> #include<stdlib.h> #define eps 1e-1

float f1(float,float,float(*f)(float)); float f(float); float n,d[5];

void 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); x=f1(a,b,f); printf("\nThe root of the equation is %f",x); }

float f(float x) { float s=0; for(;n>=0;n--) { s+=d[n-1]*(float)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(1); 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; }

你tmd乱写代码,x=f1(a,b,f); 这句之前d[]数组都没赋值你嵌套调用个屁啊!

s+=d[n-1]*(float)pow(x,n); //d[]没赋值

最可恨是函数嵌套调用,烦死!重新写过吧!

[此贴子已经被作者于2004-09-25 11:24:21编辑过]

2004-09-25 11:14
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
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

那你还有问题吗?我不会数值分析哦。
2004-09-25 19:58
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.017007 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved