C语言之数值计算--级数算法
2024-10-11 02:39:01
在编程语言的学习中,我们学习过不少的算法,比如累加,累乘,数值交换,排序等等。在一些软件比赛和面试题中,有一类算法不容忽视,属于高频题目,我之前去企业面试的时候就遇到这样的一类题目,题目不算难,掌握方法,很快可以做出来。这类算法叫做----级数算法。
级数计算的关键是“描述出通项”,而通项的描述法有两种:一为直接法、二为间接法又称递推法。
直接法的要领是:利用项次直接写出通项式;递推法的要领是:利用前一个(或多个)通项写出后一个通项。
可以用直接法描述通项的级数计算例子有:
(1)1+2+3+4+5+……
(2)1+1/2+1/3+1/4+1/5+……等等。
可以用间接法描述通项的级数计算例子有:
(1)1+1/2+2/3+3/5+5/8+8/13+……
(2)1+1/2!+1/3!+1/4! +1/5!+……等等。
(1)直接法求通项
打个比方,我写段代码:
例1、求1+1/2+1/3+1/4+1/5+……+1/100的和。
#include <stdio.h> int main(void) { float s; int i; s=0.0; //程序中是利用项次的倒数直接描述出每一项,并进行累加。注意:因为是整数,所以分子必须写成浮点数1.0的形式 for(i=1;i<=100;i++) { s=s+1.0/i ; } printf("1+1/2+1/3+...+1/100=%f\n",s); return 0 ; }
运行结果:
例2:间接法求通项
这种方法也叫做递推法
例如:
计算下列式子前20项的和:1+1/2+2/3+3/5+5/8+8/13+……。
#include <stdio.h> int main(void) { float sum,fz,fm,t,fz1; int i; sum=1; /*先将第一项的值赋给累加器s*/ fz=1;fm=2; t=fz/fm; /*将待加的第二项存入t中*/ for(i=2;i<=20;i++) { sum=sum+t; /*以下求下一项的分子分母*/ fz1=fz; /*将前项分子值保存到fz1中*/ fz=fm; /*后项分子等于前项分母*/ fm=fz1+fm; /*后项分母等于前项分子、分母之和*/ t=fz/fm; } printf("1+1/2+2/3+...=%f\n",sum); }
运行结果:
例三:计算级数的值,当通项的绝对值小于eps时计算停止。
#include <stdio.h> #include <math.h> //求出最终的结果 float result(float x,float eps); int main(void) { float x,eps; scanf("%f%f",&x,&eps); printf("\n%f,%f\n",x,result(x,eps)); return 0 ; } float result(float x,float eps) { int n=1;float s,t; s=1; t=1; do { //以下t为递推算法部分 t=t*x/(2*n); s=s+(n*n+1)*t; n++; }while(fabs(t)>eps); return s; }
运行结果:
最新文章
- 数据结构与算法JavaScript (一) 栈
- Buffer cache hit ratio性能计数器真的可以作为内存瓶颈的判断指标吗?
- W3School-CSS 列表实例
- JS操作页面
- JDK中的Timer和TimerTask详解(zhuan)
- Keil AGDI Header File
- C#实现斐波那契数列求和
- MySQL通过Binlog恢复删除的表
- MySQL - “Timeout error occurred trying to start MySQL Daemon”解决方法
- 洛谷 P1066 2^k进制数
- Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
- Vue.js 学习笔记 第4章 v-bind 及 class与style绑定
- Vue全家桶(Vue-cli、Vue-route、vuex)
- JAVA递归生成树形菜单
- [Nmap] Regular script
- Linux磁盘故障案例
- js 小说格式整理
- 关于thinkphp5被入侵后的一些思考
- 转:在ASP.NET MVC中通过URL路由实现对多语言的支持
- 关于UITableView的黑线条
热门文章
- Windows编译ejabberd
- Android倒计时器——CountDownTimer
- Android Stutio中使用java8的Lambda表达式
- T-SQL注意事项(1)——SET NOCOUNT ON的去与留
- 剑指Offer——回溯算法
- iOS中 为 iOS 建立 Travis CI 韩俊强的博客
- UNIX网络编程——名字与地址转换(gethostbyname,gethostbyaddr,getservbyname,getservbyport,getaddrinfo,getnameinfo函数)
- sql中奇怪的sum(1),sum(2),count(1),count(6),count(*):统计总数
- Java-IO之PrintWriter(字符打印输出流)
- 深入浅出Java Dom4j读取XML