C 语言 函数调用问题------牛顿迭代法

来源:百度知道 编辑:UC知道 时间:2024/09/22 01:39:11
我开始已经设定了a b c d四个变量但在F f 函数中用时却说没定义,怎么才能用呢 ?
这是我变得程序,还有错误,希望高手能帮我改一下,并能附上更好的算法代码。
#include<stdio.h>
#include<math.h>
F(double a,double b,double c,double d,double m)
{
double T;
T=a*pow(m,3)+b*pow(m,2)+c*pow(m,1)+d;
return T;
}
f(double a,double b,double c,double d,double n)
{
double t;
t=3*a*pow(n,2)+2*b*pow(n,1)+c;
return t;
}

double X(a1,b1,c1,d1)
{
double e[1000]={1};
int i=0;
do{
e[i+1]=e[i]-F(a,b,c,d,e[i])/f(a,b,c,d,e[i]);
while(e[i+1]-e[i]>=0.0005||e[i+1]-e[i]<=-0.0005)
i++;
}
return e[i+1];
}
main()
{
double a,b,c,d,x,e;
scanf("%f%F%F%F",&a,&b,&c,&d);
printf("Equation is:1.00x~3+2.00x~2+3.00x+4.00=0");
e=X(a,b,c,d);
printf("x=%f",e);
}
错误::\ygy\1.c(7) : warning C4244: 'return' : conversion from 'double &

首先指出你的两个错误:1,函数的默认返回值是int型,所以你返回float就错了.
2,你说a,b,c,d为什么没定义,那是因为你只在主函数里定义了,不是全局变量,到函数里,你把它赋给了a1,b1,c1,d1.就只能用a1,b1,c1,d1.
我查了以下牛顿跌代,修改如下:
#include <stdio.h>
#include <iostream>
#include <math.h>
double F(double a,double b,double c,double d,double m)
{
double T;
T=a*pow(m,3)+b*pow(m,2)+c*pow(m,1)+d;
return T;
}
double f(double a,double b,double c,double d,double n)
{
double t;
t=3*a*pow(n,2)+2*b*pow(n,1)+c;
return t;
}
double X(double a1,double b1,double c1,double d1)
{
double e[1000]={1};
int i=0;
do{ e[i++]=e[i]-F(a1,b1,c1,d1,e[i])/f(a1,b1,c1,d1,e[i]);
} while(e[i+1]-e[i]>=0.0005||e[i+1]-e[i]<=-0.0005);
return e[i+1];
}
int main(void)
{
double a,b,c,d,x,e;
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("Equation is:1.00x~3+2.00x~2+3.00x+4