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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-30

#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--&gt;m域宽,打印出来以后,在控制台上,显示m位;

如果我们要打印的数的位数如果超过我们设定m则原样输出;

如果我们要打印的数的位数如果小于我们设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

本回答被网友采纳
第2个回答  2019-11-27

编求导的源代码如下:

#include &lt;

stdio.h&gt;

#include &lt;

malloc.h&gt;

void main()

{

int n;

int i;

int *p;

printf("请输入最大值的次数\n");

scanf("%d",&amp;n);

p=(int *)malloc(sizeof(int)*n);

printf("请依次输入多项式的系数\n");

for(i=0;i&lt;n;i++)

{

scanf("%d",p+i);

}

for(i=0;i&lt;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代替预处理完毕后,才对文件进行编译。

本回答被网友采纳
第3个回答  推荐于2017-09-16

求导数有两种,一种是表达式求导,一种是数值求导。

    表达式求导:需要对表达式进行词法分析,然后用常见的求导公式进行演算,求得导函数。在这方面,数学软件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) //判断新旧导数值之差是否满足精度,满足则得结果,不满足则返回

第4个回答  2012-08-02
float f(float x,float y)你定义的时候是浮点型,而且你之后的确有小数,所以你后面 long double 应该改成float,还有printf("%d\n",dd2);把%d改成%f
相似回答