第4周 C语言及程序设计提高例程-9 函数的嵌套调用
2016-04-20 11:33
309 查看
问题及代码:
知识总结:
自定义函数间的嵌套及各类算法。
学习心得:
懂得弦截法在求根中的运用;
对fabs(y)>=0刚开始不太理解;是求绝对值,当其值无限接近0时,即可表示此时的x即为所求。
还有就是scanf()为何用%lf,而不是%f。
/*用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根。*/ #include<stdio.h> #include<math.h> double f(double x); double root(double x1,double x2); double point(double x1,double x2); int main () { double x1,x2,f1,f2,x; do { printf("输入两个数字x1,x2:"); scanf("%lf %lf",&x1,&x2);//这里为何要用lf,做题时因为用%f,导致程序算不出来 f1=f(x1); f2=f(x2); } while(f1*f2>=0);//弦截法介绍,两个值为异号,则在(x1,x2)区间有根,即函数段与x轴有交点。 x=root(x1,x2); //x为在x轴上的交点的坐标值 printf("实根是%f\n",x); return 0; } /* 功能:求(x1, x2)区间方程的实根 参数:两个浮点型值,表示x轴上两点,由主调函数保证f(x1)和f(x2)是异号 返回值:方程的根 */ double root (double x1,double x2) { double x,y,y1; y1=f(x1);//这步的目的是什么,为了后续的判断吗? do { x=point(x1,x2);//x为在(x1,x2)区间的x轴坐标值 y=f(x); if(y*y1>0) //这个判断有什么根据? { y1=y; x1=x; } else x2=x; } while(fabs(y)>=0.00001);//求绝对值,当其值无限接近0时,即可表示此时的x即为所求。 return x; } /* 功能:求(x1, f(x1))和(x2, f(x2))的连线与x轴的交点x 参数:两个浮点型值,表示x轴上两点 返回值:交点的x轴坐标 */ double point(double x1,double x2) { double x; x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));//这是一个已经通用的公式。 return x; } /* 功能:求函数f(x)=x3-5x2+16x-80的值 参数:一个浮点型数,表示x轴上的一点 返回值:给定函数的值 */ double f(double x) { double y; y=x*x*x-5*x*x+16*x-80; return y; }运行结果:
知识总结:
自定义函数间的嵌套及各类算法。
学习心得:
懂得弦截法在求根中的运用;
对fabs(y)>=0刚开始不太理解;是求绝对值,当其值无限接近0时,即可表示此时的x即为所求。
还有就是scanf()为何用%lf,而不是%f。
相关文章推荐
- 强大的c/c++测试工具--lint简介
- 实例讲解C语言编程中的结构体对齐
- C语言的小算法技巧
- 解析C语言中结构体struct的对齐问题
- C++ 解析CSV文件
- java 仿c/c++ 中#define #ifdef 的功能做Debug(转载)
- C++ 基础杂项
- C语言中结构体struct编写的一些要点解析
- OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ImgTrans(Canny边缘检测)
- C++中const 、static、 static const和const static的初始化以及修改问题
- C语言01深入理解基本概念(一)
- 关于C语言中无符号与有符号数之间运算问题
- getchar()和getch()的区别
- 详解C语言中结构体的自引用和相互引用
- [C++]排序模板(含C++模板代码)
- C++中的基本知识点
- C++ STL stack queue 的使用函数
- C语言100个经典的算法
- eclipse 开发C/C++自动补全
- 根据某一分隔符分隔字符串