一、前情回顾
05【C语言&趣味算法】经典:兔子产子问题(即:Fibonacci数列)
04【C语言&趣味算法】“抓交通肇事犯"问题。算法改进:设置“标识变量”,有效减少循环次数。
03【C语言&趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
二、New Problem:牛顿迭代法求方程根
2.1问题描述
2.2问题分析
2.3算法设计
2.4确定程序框架
2.5迭代法求方程根
2.6完整code及测试
// 趣味06:牛顿迭代法 求方程根 问题 #include<stdio.h> #include<math.h> int main() { float solution(float a,float b,float c,float d); /*函数功能是用牛顿迭代法求方程的根*/ float a,b,c,d,x; /*a,b,c,d代表所求方程的系数,x用来记录求得的方程根*/ printf("请输入方程的系数:"); scanf("%f %f %f %f",&a,&b,&c,&d); x=solution(a,b,c,d); printf("所求方程的根为x=%f",x); } float solution(float a,float b,float c,float d) { float x0,x=1.5,f,fd,h; /*f用来描述方程的值,fd用来描述方程求导之后的值*/ do { x0=x; /*用所求得的x的值代替x0原来的值*/ f=a*x0*x0*x0+b*x0*x0+c*x0+d; fd=3*a*x0*x0+2*b*x0+c; h=f/fd; x=x0-h; /*求得更接近方程根的x的值*/ }while(fabs(x-x0)>=1e-5); return x; }
两个测试结果如下: