c语言怎么编求导
#include <stdio.h>
#include <math.h>
float f(float x,float y)
{
y=2*x*x+3;
return y;
}
void main()
{
long double dx,dy,dd1,dd2,x,y,x0,eps;
dx=0.5,x0=3,eps=0.000001;
dy=f(x0,y)-f(x0+dx,y);
dd1=dy/dx;
loop: dx=0.5*dx;
dy=f(x0,y)-f(x0+dx,y);
dd2=dy/dx;
if (fabs(dd1-dd2)<eps)
printf("%d\n",dd2);
else
{ dd1=dd2;
goto loop;
}
} 展开
//多项式求导数
intPolyDeri(list<nodePoly>&polyFunc)
{
list<nodePoly>::iteratoriter;
for(iter=polyFunc.begin();iter!=polyFunc.end();++iter)
{
if((*iter).ex>1)
{
(*iter).coef=((*iter).coef)*((*iter).ex);
(*iter).ex=(*iter).ex-1;
}
elseif(1==(*iter).ex)
{
(*iter).ex=0;
}
elseif(0==(*iter).ex)
{
(*iter).coef=0;
}
}
returnRET_OK;
}
其中,多项式的定义是list<nodePoly>,如下:
//多项式节点结构体定义
typedefstructstuPolynomNode
{
doublecoef;
intex;
}nodePoly;
扩展资料
c语言求导数据范围及提示DataSize&Hint
#include<iostream>
#include<cmath>
usingnamespacestd;
intmain()
{
intnum=0,i=0;
cin>>num;
for(i=2;i<=sqrt(num);i++)
{
if(num%i==0)
break;
}
if(i>sqrt(num)
cout<<num<<"为素数"<<endl;
else
cout<<num<<"不是素数"endl;
return0;
}
#include<stdio.h>
#include<math.h>
void qiudao(float *a,int n) //求导的各个系数的值,s为求导的次数
{
int i;
n--;
for(i=0;i<=n;i++)
a[i]=a[i+1]*(i+1);
}
void display_daoshu(float *a,int n,int s) //显示S次求导后的函数
{ int i;
printf("%d次求导结果为:",s);
for(i=n;i>=0;i--)
{
if(*(a+i)==0){}//当系数为0时,不操作if(*(a+i)==1)
else
{
if(*(a+i)==1)//当系数为1时,显示格式为“X^次数+”
{
if(i==0||i==1)
{
if(i==0)
{
printf("%g+",*(a+i));//当次数为0时,显示格式为“系数+”
}
if(i==1)
{
printf("%g*X+",*(a+i)); //当次数为1时,显示格式为“系数*X+”
}
}
else
printf("X^%d+",i);
}
else
{
if(i==0||i==1)
{
if(i==0)
{
printf("%g+",*(a+i));//当次数为0时,显示格式为“系数+”
}
if(i==1)
{
printf("%g*X+",*(a+i)); //当次数为1时,显示格式为“系数*X+”
}
}
else
{
printf("%g*X^%d+",*(a+i),i); //当次数不为0或1是,显示格式为“系数*X^次数+”
}
}
}
}
printf("\b\t\t");//去掉多余的“+”符号,
}
int main()
{
double x=1.5,y; //y=x-f(x)/f'(x)
int n,i; /次数最大的值
int s=0;//求导次数
float a[100];
system("color 0c");
printf("请输入最大次数的值:");
scanf("%d",&n);
for(i=0;i<=n;i++)
{
printf("请输入次数为%d的系数:",i);
scanf("%f",a+i);
}
printf("\n\t\t原函数为/");
display_daoshu(a,n,s);
printf("\n\n");
printf("请输入求导的次数s:");
scanf("%d",&s);
for(i=0;i<s;i++)
{
qiudao(a,n,s);
--n;
}
printf("\n\t\t");
display_daoshu(a,n,s);
return 0;
}
举例输出:
扩展资料:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出。
如果想输出指定宽度可以指定域宽,%md-->m域宽,打印出来以后,在控制台上,显示m位;
如果我们要打印的数的位数如果超过我们设定m则原样输出;
如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白)。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。
如:printf("%f%%",1.0/3);输出结果:0.333333%。
编求导的源代码如下:
#include <
stdio.h>
#include <
malloc.h>
void main()
{
int n;
int i;
int *p;
printf("请输入最大值的次数\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
printf("请依次输入多项式的系数\n");
for(i=0;i<n;i++)
{
scanf("%d",p+i);
}
for(i=0;i<n;i++)
{
printf("%dx^%d+",p[i],n-i-1);
}
printf("\b\n");
free(p);
}
扩展资料
1、C语言中,通常以#include<stdio.h>开头。
2、#开头的是预处理指令,不是C语句的一部分,以#开头的语句,在预处理阶段,由预处理器处理。
3、处理器会将stdio.h文件的内容加入到当前文件的头部,而#define CONST 10则会将文件中的CONST,用10代替预处理完毕后,才对文件进行编译。
求导数有两种,一种是表达式求导,一种是数值求导。
表达式求导:需要对表达式进行词法分析,然后用常见的求导公式进行演算,求得导函数。在这方面,数学软件matrix,maple做得非常好。如果自己用C进行编程,不建议。
数值求导:利用导数的定义,用差分计算,当自变量趋于0时,前后两次差分收敛到需要精度,计算结束。这种方法可以求得某一点的导数。
例如:
求一阶导数,原函数 y = f(x), 程序中是float f(float x){ ...}
dx=0.01; //设 dx 初值
do{
dd1=(f(x0) - f(x0+dx))/dx; //计算导数dd1
dx = 0.5 * dx; // 减小步长
dd2=(f(x0) - f(x0+dx))/dx; //计算导数dd2
}while (fabs(dd1-dd2) >= 1e-06) //判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回