1、首先要有函数,设置成double类型的参数和返回值。
10年积累的成都网站制作、做网站、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有衢州免费网站建设让你可以放心的选择与我们合作。
2、然后根据导数的定义求出导数,参数差值要达到精度极限,这是最关键的一步。
3、假如函数是double fun(doube x),那么导数的输出应该是(fun(x)-fun(x-e))/e,这里e是设置的无穷小的变量。
4、C由于精度有限,因此需要循环反复测试,并判断无穷小e等于0之前,求出上述导数的值。二级导数也是一样,所不同的是要把上述导数公式按定义再一次求导。这是算法,具体的实现自己尝试编程。
C语言的数据长度和精度都有限,因此用C语言编程求的导数并不精确,换句话说C语言编程不适合求导和极限。
扩展资料:
举例说明:
一阶导数,写一个函数 y = f(x):
float f(float x){ ...}
设 dx 初值
计算 dy
dy = f(x0) - f(x0+dx);
导数 初值
dd1=dy/dx;
Lab:;
dx = 0.5 * dx; // 减小步长
dy = f(x0) - f(x0+dx);
dd2=dy/dx; // 导数 新值
判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回
if ( fabs(dd1-dd2) 1e-06 ) { 得结果dd2...}
else { dd1=dd2;goto Lab;}。
#includestdio.h
#includestdlib.h
#includemath.h
#define pi 3.1415926
struct point
{
double X;
double Y;
};
struct line
{
point A;
point B;
double deg;
};
int main( )
{
line lineA;
line lineB;
double tmp;
printf("请输点坐标(x,y)构造第一条直线\n");
printf("第一点x与y:");
scanf( "%lf%lf", lineA.A.X, lineA.A.Y );
printf("第二点x与y:");
scanf( "%lf%lf", lineA.B.X, lineA.B.Y );
//求角度
tmp=(lineA.B.Y-lineA.A.Y)/(lineA.B.X-lineA.A.X);
lineA.deg=atan(tmp);
lineA.deg=lineA.deg*double(180)/pi;
printf( "第一条直线斜线角度:%lf,%lf\n", tmp,lineA.deg );
printf("请输点坐标(x,y)构造第二条直线\n");
printf("第一点x与y:");
scanf( "%lf%lf", lineB.A.X, lineB.A.Y );
printf("第二点x与y:");
scanf( "%lf%lf", lineB.B.X, lineB.B.Y );
//求角度
tmp=(lineB.B.Y-lineB.A.Y)/(lineB.B.X-lineB.A.X);
lineB.deg=atan(tmp);
lineB.deg=lineB.deg*double(180)/pi;
printf( "第二条直线斜线角度:%lf,%lf\n", tmp,lineB.deg );
printf( "两条直线角度差:%lf\n", lineA.deg-lineB.deg );
return 0;
}
/*
atan等三角函数算出来的是pi形式的,看看45度的:
printf("%f\n",tan(double(45)/double(180)*pi));
printf("%f\n",atan(1)*double(180)/pi);
写的真累,看你题目是C语言,所以没用C++类来写
用类来写,又好写,又好读,又不容易出错
point点(x,y)其实可以直接用COORD,又怕你没有数据结构COORD
比如:
struct line
{
point A;
point B;
double deg;
};
改成
struct line
{
COORD dian; //COORD编译器数据结构dian有dian.X和dian.Y
double deg;
};
*/
这其实就是一个解三元二次次方程组。
设三个点为(x1,y1),(x2,y2),(x3,y3)
用x1,y1,x2,y2,x3,y3这六个数把a,b,c表示出来,这样你可以得到三个式子。
把这三个式子用C语言表达出来,就可以了。
如果你想用计算机自己进行方程求解,也不是不可以,但稍许有些复杂,应该超出你所学范围了。
/***************
*
已知三点求圆的
get_circle()
函数
*
x1,
y1为第一个点的坐标,以此类推
*
r为求出的半径,x0,
y0为圆心坐标
*
调用函数之前应先检查三点是否共线
否则会弹出被零除的错误
***************/
#
include
void
get_circle(double
x1,
double
y1,
double
x2,
double
y2,
double
x3,
double
y3,
double*
r,
double*
x0,
double*
y0)
{
double
m1,
n1,
m2,
n2,
a1,
b1,
a2,
b2;
m1
=
(x1
+
x3)
/
2;
n1
=
(y1
+
y3)
/
2;
m2
=
(x2
+
x3)
/
2;
n2
=
(y2
+
y3)
/
2;
a1
=
(y3
-
y1)
/
(x3
-
x1);
b1
=
n1
-
a1*m1;
a2
=
(y3
-
y2)
/
(x3
-
x2);
b2
=
n2
-
a2*m2;
*x0
=
(b2
-
b1)
/
(a1
-
a2);
*y0
=
a1
*
*x0
+
b1;
*r
=
sqrt((x1-x0)*(x1-x0)
+
(y1-y0)*(y1-y0));
return;
}
希望对你有帮助!