问题:编写函数计算数列前n项之和,数列为1-2+3-4+5-6+7-8+......。

这个问题简单,编写一个计算数列之和的函数太容易了。

人们通常用计算解决问题,也就是编写程序解决问题。然而,编写程序解决问题,是多解的,即不同的程序可以计算出相同的结果。

解决这个问题,编写了3个不同的函数。

函数sum1(),遇到正数项则相加,遇到负数项则相减,使用逻辑判定来决定是做相加还是相减,即对于奇数项做加法计算,对于偶数项做减法计算。

函数sum2(),也是用一般累加求和的计算,对于每一项进行求和计算。其中使用了一个小技巧,用变量sign来控制项的正负。语句sign = -sign;每一次执行后,如果sign原先是1则变为-1,如果sign原先是-1则变为1。再通过乘法运算来改变一个数的符号。这种小技巧,许多地方都有可能使用,平时需要积累。

函数sum3(),则在对数列计算公式进行推导之后再进行计算,计算量是最小的。数列从小到大,两项两项相加都是-1,所以如果给定的n是为偶数时,其值为-n/2;若给定的n为奇数时,其值为前你项之和加上第n项,即-(n-1)/2+n。这个函数的计算效率是最高的。

源程序如下:

/* 编写函数计算数列前n项之和,数列为1-2+3-4+5-6+7-8+......。 */#include <stdio.h>/* 判断奇偶进行相加或相减计算,最后算出数列之和 */
long sum1(int n)
{long sum = 0;int i;for(i=1; i<=n; i++) {if(i % 2 == 1)sum += i;elsesum -= i;}return sum;
}/* 使用1和-1来乘,实现负数求和计算 */
long sum2(int n)
{long sum = 0;int i, sign=1;for(i=1; i<=n; i++) {sum += sign * i;sign = -sign;       // 每执行一次,1变-1,或-1变1}return sum;
}/* 先进行数学推导,再用程序实现计算 */
long sum3(int n)
{if(n % 2 == 1)return - (n-1) / 2 + n;elsereturn - n / 2;
}int main(void)
{int i;for(i=1; i<=20; i++)printf("%d %ld %ld %ld\n", i, sum1(i), sum2(i), sum3(i));return 0;
}

测试计算结果(计算到前20项之和为止)如下:

1 1 1 1
2 -1 -1 -1
3 2 2 2
4 -2 -2 -2
5 3 3 3
6 -3 -3 -3
7 4 4 4
8 -4 -4 -4
9 5 5 5
10 -5 -5 -5
11 6 6 6
12 -6 -6 -6
13 7 7 7
14 -7 -7 -7
15 8 8 8
16 -8 -8 -8
17 9 9 9
18 -9 -9 -9
19 10 10 10
20 -10 -10 -10

I00021 有负数项的数列之和相关推荐

  1. 突击计划——求数列之和

    题目:求数列之和 #include <stdio.h> //求数列之和int getSum(int number){int sum;if(number == 0){sum = 0;}els ...

  2. 华为OD机试--求解一个连续递增数列,使得长度为k的数列之和为num

    给定一个整数num和一个数字k,求解一个连续递增数列,使得长度为k的数列之和为num,存在该数列时输出数列,不存在时输出-1 例如: 输入: 525 6 输出: 85 86 87 88 89 90 输 ...

  3. C语言实现输出前n项Fibonacci数列

    百度百科:斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列 ...

  4. C语言之基本算法09—各位全是a的数列之和

    /* ================================================================== 题目:数列为a,aa,aaa,--.求a+aa+aaa+-- ...

  5. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

  6. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前20项之和。...

    题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前20项之和. 程序分析:请抓住分子与分母的变化规律. public class 第二十题求数列之和 {p ...

  7. matlab求斐波那契数列第n项的值,求fibonacci数列第n项的值. 1 1 2 3 5 8....n ?

    [C语言]用递归算法编写一个程序求Fibonacci数列的第n项值 #includeunsignedintFibonacci(intn);intmain(void){inti;for(i=1;i vb ...

  8. 求数列1/3到1/n之和

    求数列之和,数列从1/3开始,到1/n结束,当我们输入任意数x的时候,那么这个数列相加之和到1/x结束,控制台会输出数列之和. 求1/3到1/9数列之和 结果演示 代码演示 package com.f ...

  9. 6-3 计算Fibonacci数列每一项时所需的递归调用次数 (10 分)

    计算并打印Fibonacci数列每一项时所需的递归调用次数,数列第一项从1开始. 要求: 1)定义表示调用次数的全局变量count: 2)定义用递归方法求Fibonacci数列的Fib()函数. 函数 ...

最新文章

  1. Chem. Sci. | SyntaLinker: 基于Transformer神经网络的片段连接生成器
  2. PostgreSQL操作问题(转载)
  3. 机器人焊枪动作与编程实验_机器人编程实验报告.pdf
  4. mysql 代理作业_查看SQLServer 代理作业的历史信息
  5. python加载dll函数失败_Python:使用ctypes访问DLL函数 – 按函数* name *访问失败
  6. 22种编程语言新年快乐
  7. LeetCode 513. 找树左下角的值(按层遍历 queue)
  8. 服务器开设虚拟主机,服务器自动开设虚拟主机
  9. 贝叶斯信念网络和马尔科夫链有什么区别
  10. OVS-vsctl的帮助文件的中文版
  11. 交换机 路由器 三层交换机和路由器应用区别
  12. 《WCF技术内幕》翻译35:第2部分_第6章_通道:通道功能
  13. AI为移动医疗APP加码,智能提醒你:该吃药了!
  14. Spring Tool Suite开发环境搭建
  15. 2014年南京航空航天大学计算机学院推荐研究生公示,南京航空航天大学2013-2014学年研究生评优评奖公示...
  16. python半圆_复合半圆环图只要四句代码搞定
  17. python创建excel新的表格_python创建Excel表格并添加工作表
  18. R语言使用plot函数可视化数据散点图,使用title函数为可视化图像设置自定义标题名称、自定义adj参数将标题向右侧移动
  19. 关于实现手机定位,通过服务器,再发送给查询者,或指定人
  20. C++实现简易图书馆管理系统

热门文章

  1. mysqli_connect参数的写法以及如何设置特定端口
  2. golang实现RPC的几种方式
  3. Ubuntu 18.04 下搭建 C/C++编译开发环境及GCC多版本切换
  4. phoneGap实际开发中的某些雷区
  5. DXUT框架剖析(10)
  6. 一个对Winsock完成端口模型封装的类
  7. 小芭比linux怎么装win7_小户型再怎么装也是小?看完我闭嘴了
  8. mysql econnreset_javascript - 节点Js mysql(和mysql2)ECONNRESET - 堆栈内存溢出
  9. Bug--时区问题导致IDEA连接数据库失败
  10. hive中统计某列数组的元素个数