函數與指針5884

函數與指針5884

來自專欄 C語言代碼精簡及分析

感謝劉漢鑫同學的問題.

說這道題讀不懂?這道題出題是有問題的

應為

下面普及一下概念:

牛頓迭代法:利用遞推(目前咱們的做法)求得近似解.

迭代即後一項由前一項帶入遞推公式求得.題中的牛頓迭代公式即為本題的遞推公式.

簡單地說就是用計算機在演算,舉個例子

這是遞推公式,牛頓迭代公式可看做一種特殊的遞推公式

下面為此題代碼

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>void operation(double *n,int mark){ if(mark==1) *n=*n-(pow(*n,3)-pow(*n,2)-1)/(3*pow(*n,2)-2*(*n)); else if(mark==2) *n=*n-(pow(*n,4)-3*(*n)+1)/(4*pow(*n,3)-3); else if(mark==3) *n=*n-((*n)-exp(-(*n)))/(1+exp(-(*n)));//exp()是math.h下的函數,詳見書後附錄}void iteration(double *n,double remain,int mark)//iteration為迭代的意思,以後也會用到{ double ans; while(fabs(ans-*n)>remain) //ans存儲的是x(n),*n則是x(n+1),兩者差的絕對值用來判定迭代是否繼續 { ans=*n; operation(n,mark); }}int main(){ int mark; double n,remain; while(scanf("%d",&mark)!=EOF) { scanf("%lf%le",&n,&remain); iteration(&n,remain,mark); printf("%d %.2le %.5lf
",mark,remain,n);//此處是題目要求格式,不懂的先翻書 }}

ps.看不懂題要問,但如果一直問的問題都不是很有營養,那也不要怪別人嘲諷你呦(為以後嘲諷別人鋪墊hh)

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>//考慮到代碼的可讀性(其實是老師的建議),這版代碼將三種情況分寫為函數,並使用了switch語句//因為返回值只有一個故將形參從指針更正為普通變數,以區分指針使用的必要情況//一定要注意返回值!!!我在修改過程中就忘記了導致出錯double case1(double n){ return n-(pow(n,3)-pow(n,2)-1)/(3*pow(n,2)-2*n);}double case2(double n){ return n-(pow(n,4)-3*n+1)/(4*pow(n,3)-3);}double case3(double n){ return n-(n-exp(-n))/(1+exp(-n));//exp()是math.h下的函數,詳見書後附錄}double operation(double n,int mark){ switch(mark) { case 1: n=case1(n); break; case 2: n=case2(n); break; case 3: n=case3(n); break; } return n;}double iteration(double n,double remain,int mark)//iteration為迭代的意思,以後也會用到{ double ans; while(fabs(ans-n)>remain) { ans=n; n=operation(n,mark); } return n;}int main(){ int mark; double n,remain,ans; while(scanf("%d",&mark)!=EOF) { scanf("%lf%le",&n,&remain); ans=iteration(n,remain,mark); printf("%d %.2le %.5lf
",mark,remain,ans);//此處是題目要求格式,不懂的先翻書 }}

推薦閱讀:

使用PyTorch從零開始構建Elman循環神經網路
分段函數的複合函數要怎麼求(1)
機器學習基礎——帶你走近機器學習
算不盡購物網站折扣價,回頭看又是一年雙十一
淺談機器學習時代的哈希演算法(一)

TAG:函數 | 科技 | 指針 |