C语言之数值计算--级数算法
在编程语言的学习中,我们学习过不少的算法,比如累加,累乘,数值交换,排序等等。在一些软件比赛和面试题中,有一类算法不容忽视,属于高频题目,我之前去企业面试的时候就遇到这样的一类题目,题目不算难,掌握方法,很快可以做出来。这类算法叫做----级数算法。
级数计算的关键是“描述出通项”,而通项的描述法有两种:一为直接法、二为间接法又称递推法。
直接法的要领是:利用项次直接写出通项式;递推法的要领是:利用前一个(或多个)通项写出后一个通项。
可以用直接法描述通项的级数计算例子有:
(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; }
运行结果:
C语言之数值计算--级数算法的更多相关文章
- 五种C语言非数值计算的常用经典排序算法
摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...
- C语言实现粒子群算法(PSO)二
上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*( ...
- C语言实现粒子群算法(PSO)一
最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...
- 基于R语言的梯度推进算法介绍
通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Bo ...
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...
- 用python语言讲解数据结构与算法
写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...
- C语言100道经典算法
经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...
- C语言100个经典算法
POJ上做做ACM的题 语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后 ...
- C语言求素数的算法
前言 最后一次是出了素数的问题C语言解决题目(面试),当时用了最粗暴的算法.回来细致參考资料,事实上答案有非常多种: 1,小学生版本号: 推断 x 是否为质数,就从 2 一直算到 x-1. stati ...
随机推荐
- 【安卓开发】Facebook工程师是如何改进他们Android客户端的
原文出处: Facebook 译文出处:penkzhou 欢迎分享原创到伯乐头条 作为世界上最大的社交网络,Facebook的Android客户端面临着各种各样的使用环境(地理环境.Andro ...
- Linux目录架构详解
Linux和Windows操作系统的显著区别之一就是目录架构的不同.Linux操作系统的目录架构遵循文件系统层级结构标准.不知你是否使用ls命令浏览过Linux的根目录"/",亲爱 ...
- 【Android 系统开发】使用 Source InSight 阅读 Android 源码
1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...
- Dynamics CRM 通过RetrieveEntityRibbonRequest和RetrieveApplicationRibbonRequest导出实体的Ribbon XML
今天看到勇哥的博客介绍了两个request指令用来导出实体的Ribbon XML,在没有工具之前编辑ribbon都是手工导出xml然后编辑的对于很多一开始接触CRM就用工具的人可能不是很熟悉.查了下这 ...
- 【美工设计 - Adobe Illustrator】基本设置 (图像显示 | 图像缩放 | 置入导出 | 标尺 | 网格 | 参考线 | 画板)
作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50232767 一. 基础操作 1. 设置图像显示效果 (1) ...
- 初探linux子系统集之timer子系统(三)
因为现在的linux虽然还是可以使用低精度的timer,但是趋势是高精度hrtimer,所以上一篇试着翻译一下hrtimer的一些介绍,翻译的不是很好,看来英语还得好好学习啊,下面还是好好学习下lin ...
- Linux:alias永久生效
alias(中文称为"别名")允许使用更加简短的名称来重新定义 Linux 中的 Shell 命令,从而简化命令行的输入. 如果经常与 CLI 打交道,那么使用 alias 不仅会 ...
- JAVA之旅(十九)——ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习
JAVA之旅(十九)--ListIterator列表迭代器,List的三个子类对象,Vector的枚举,LinkedList,ArrayList和LinkedList的小练习 关于数据结构,所讲的知识 ...
- Java Web 高性能开发,第 1 部分: 前端的高性能
Web 发展的速度让许多人叹为观止,层出不穷的组件.技术,只需要合理的组合.恰当的设置,就可以让 Web 程序性能不断飞跃.所有 Web 的思想都是通用的,它们也可以运用到 Java Web.这一系列 ...
- Android开机键失灵启动手机的解决办法
问题描述 Android手机的关机键损坏,无法开机. 解决方法 将手机通过USB线链接电脑,进入命令行,找到adb命令所在目录,运行如下命令: adb reboot 注意:用这种方法的前提是,如果你当 ...