C语言迭代算法的题!
1.键盘输入一个实数a,输出它的立方根。请自行设计算法编写程序,不允许调用pow函数。提示是把他转化成一个方程来解,和迭代算法有啥关联?2.输出一个[m,n]范围内的,所有斐波那契数,ps, m,n这两个数由键盘输入。 1,1,2,3,5,8,13,21,34,……这是斐波那契(Fibonacci)数列的前几项。斐波那契数列的特点:前两项均为1,后面任意一项都是其前面两项之和。
不是很懂迭代算法.。
#include <stdio.h> #define zero 0.000001 double mypow(double x,int n) { if(n==0) return 1.0; double t=1.0; for(;n>0;t*=x,n--); return t; } int searchroot(double x,int n) { int t=1; while(1) { if (mypow(t,n)-x<=zero && mypow(t+1,n)-x>=zero) return t; t++; } return t; } double myfabs(double m,double n) { double t=m-n; if(t>0) return t;else return t*(-1); } double rooting(double x,int n) { int root=searchroot(x,n); double x1=(double)root; double x0,f0,f1; do { x0=x1; f0=mypow(x0,n)-x; f1=n*mypow(x0,n-1); x1=x0-f0/f1; }while(myfabs(x0,x1)>=zero); return x1; } int main() { double x=88888888; int n=2; for(;n<8;printf("对%12.0f进行开%d次方结果是%12.6f\n",x,n,rooting(x,n),n++)); n=2; for(;n<8;printf("验证%12.6f的%d次方=%12.6f\n",rooting(x,n),n,mypow(rooting(x,n),n),n++)); return 0; }