在编程语言的学习中,我们学习过不少的算法,比如累加,累乘,数值交换,排序等等。在一些软件比赛和面试题中,有一类算法不容忽视,属于高频题目,我之前去企业面试的时候就遇到这样的一类题目,题目不算难,掌握方法,很快可以做出来。这类算法叫做----级数算法。

级数计算的关键是“描述出通项”,而通项的描述法有两种:一为直接法、二为间接法又称递推法。

直接法的要领是:利用项次直接写出通项式;递推法的要领是:利用前一个(或多个)通项写出后一个通项。

可以用直接法描述通项的级数计算例子有:

(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语言之数值计算--级数算法的更多相关文章

  1. 五种C语言非数值计算的常用经典排序算法

    摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...

  2. C语言实现粒子群算法(PSO)二

    上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*( ...

  3. C语言实现粒子群算法(PSO)一

    最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而 ...

  4. 基于R语言的梯度推进算法介绍

    通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Bo ...

  5. 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作

    第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...

  6. 用python语言讲解数据结构与算法

    写在前面的话:关于数据结构与算法讲解的书籍很多,但是用python语言去实现的不是很多,最近有幸看到一本这样的书籍,由Brad Miller and David Ranum编写的<Problem ...

  7. C语言100道经典算法

    经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...

  8. C语言100个经典算法

    POJ上做做ACM的题 语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后 ...

  9. C语言求素数的算法

    前言 最后一次是出了素数的问题C语言解决题目(面试),当时用了最粗暴的算法.回来细致參考资料,事实上答案有非常多种: 1,小学生版本号: 推断 x 是否为质数,就从 2 一直算到 x-1. stati ...

随机推荐

  1. 使用Intent传递对象

    Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActi ...

  2. Android学习路线指南

    看到这位大牛的博文,不禁得感概,我最近也遇到了很多问题,内心彷徨不堪,转载大牛这篇博文,是为了更好的勉励自己.原文地址在最后面. 前言 看到一篇文章中提到"最近几年国内的初级Android程 ...

  3. Jstorm与RocketMQ整合

    如果是经常关注阿里巴巴的朋友们,看到我这篇博客的题目,就知道我在参加今年的中间件比赛. 好了,废话不说,开始了. 首先我们知道,rocketmq的consumer有两种,一种是DefaultMQPus ...

  4. 【Netty源码学习】BootStrap

    BootStrap是客户端的启动类,其主要功能就是设置必要的参数然后启动客户端. 实现如下: Bootstrap b = new Bootstrap(); b.group(group) .channe ...

  5. Servlet之cookie处理

    Cookies 通常设置在 HTTP 头信息中(虽然JavaScript 也可以直接在浏览器上设置一个 Cookie).设置 Cookie 的 Servlet 会发送如下的头信息: HTTP/1.1 ...

  6. RecyclerView下拉刷新上拉加载(二)

    listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561 listview下拉刷新上拉加载扩 ...

  7. SSH深度历险(四) Maven初步学习

    这几天接触这个词,很多遍了,只是浅显的体会到它在GXPT中的好处,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理 ...

  8. Dynamics CRM 2015 Online Update1 UI界面的更新变化

    听说出  Dynamics CRM 2015 Online  Update1了,立马跑去申请了个30天试用版简单的看了下,UI上的变化还是让人耳目一新的,也可能是被CRM2013的UI蹂躏太久了没 ...

  9. Java EE 之 过滤器入门学习与总结(1)

    使用Filter技术来配合开发会使得开发变得简单起来.简单的一个例子就表现在"乱码问题"上.不使用Filter的话,我们有可能需要为每一个网页设置字符编码集,如request.se ...

  10. UNIX环境高级编程——信号基本概述和signal函数

    一.为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程.2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断.3. 如果CPU当前正在执行这个进程的代码,则 ...