1、首先要有函數(shù),設(shè)置成double類型的參數(shù)和返回值。
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)蘆淞,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
2、然后根據(jù)導數(shù)的定義求出導數(shù),參數(shù)差值要達到精度極限,這是最關(guān)鍵的一步。
3、假如函數(shù)是double fun(doube x),那么導數(shù)的輸出應(yīng)該是(fun(x)-fun(x-e))/e,這里e是設(shè)置的無窮小的變量。
4、C由于精度有限,因此需要循環(huán)反復測試,并判斷無窮小e等于0之前,求出上述導數(shù)的值。二級導數(shù)也是一樣,所不同的是要把上述導數(shù)公式按定義再一次求導。這是算法,具體的實現(xiàn)自己嘗試編程。
C語言的數(shù)據(jù)長度和精度都有限,因此用C語言編程求的導數(shù)并不精確,換句話說C語言編程不適合求導和極限。
擴展資料:
舉例說明:
一階導數(shù),寫一個函數(shù) y = f(x):
float f(float x){ ...}
設(shè) dx 初值
計算 dy
dy = f(x0) - f(x0+dx);
導數(shù) 初值
dd1=dy/dx;
Lab:;
dx = 0.5 * dx; ?// 減小步長
dy = f(x0) - f(x0+dx);
dd2=dy/dx; ?// 導數(shù) 新值
判斷新舊導數(shù)值之差是否滿足精度,滿足則得結(jié)果,不滿足則返回
if ( ?fabs(dd1-dd2) 1e-06 ) { 得結(jié)果dd2...}
else { dd1=dd2;goto Lab;}。
我做了個輸入一個數(shù)的?:但轉(zhuǎn)換為數(shù)字??不考慮轉(zhuǎn)換成字符(也就是有這樣的缺陷?輸入1000??則轉(zhuǎn)換后只是1不會是0001)
你要是輸入多個數(shù)采用上面的朋友寫的
程序不是很好?要是輸入的不是?int類型就不成了
/*?Note:Your?choice?is?C?IDE?*/
#include?"stdio.h"
int?lfun(int?a)
{int?i=1,s=1;
if(a)
for(i;ia;i++)
s=s*10;
return?s;
}
int?fun(int?a)
{?int?i=1,j=10,swap=0,s=0;
if(a0)
while(1)
{
if(a%j!=a)
{
s++;
j=j*10;
}
else
{s++;
break;
}
}
for(i;i=s;i++)
{
j=j/10;
swap=swap+a/j*lfun(i);
a=a%j;
}
return?swap;
}
void?main()
{
char?ch;
int?a,b;
printf("輸入一個整數(shù):\n");
scanf("%d",a);
b=fun(a);
printf("輸入前:?%d??輸出之后:?%d\n",a,b);
printf("是否在轉(zhuǎn)換回來?Y/N\n");
getchar();
ch=getchar();
if(ch=='y'||ch=='Y')printf("還原:?%d\n",a);
system("pause");
return?0;
}
先問一下,你想求的是相乘等于一的倒數(shù),還是將排列順序反過來的倒數(shù)