C语言求1-1/3+1/5-1/7+...——小程序,大道理
问题:用C语言编写程序求1-1/3+1/5-1/7+...
示例:
#include <stdio.h>
void main(){
int n=;
float sum=,a=;
while(a<=){
sum=sum+n/a;
n=-n;
a=a+;
}
printf("%f\n",sum);
}
分析:
数列的求和问题,每一项正负交替,并且分母递增2。
首先,这是一个加法(累加)问题,涉及到被加数,加数,和的概念。每一次加法运算产生的和又作为新的被加数,然后加上一个新的加数,并且新的加数之间(即每一项之间)具有规律性。这样不断重复做加法运算。
计算离不开记忆,对于人,每一次运算的中间结果都要记住或者记到草稿纸上才能进行下一步计算,并且求出新结果后旧的结果无需再记忆;计算机也是如此,对于计算机来说,数据保存在存储单元中,在程序中用变量来表示,用来暂存各种数据,包括原始数据,中间结果和最终结果。并且,变量的值可以改变,当旧的值不再需要并且产生新值之后,变量便更新为新值。只从这点来看,草稿纸就毫无优势可言~
对于累加问题,被加数以及和(新的被加数)可以用同一个变量(sum)来保存,它不断地被更新。一开始为0,然后为各种中间结果,直到最后为最终结果并输出。另外,加数也是一个变量,它每次更新为新的值,并且这种更新是有规律可循的:作为一个分数,每次分子更新为相反数,分母则递增2。分子分母都在变化,因此可分别作为一个变量。
但是,我们并没有用一个真正的变量来表示加数,而是用一个含有变量的表达式n/a,这样可以节省一个变量。
然后,C代码要做的除了声明和初始化变量,就是根据逻辑(规律)更新变量(包括变量的引用和赋值)。并且,正因为变量的更新都是有规律可循的,都是在旧值的基础上做运算,可以用一个通用公式来表示,即具有相同的形式,所以可以采用循环结构来实现(这里,我们只循环到分母为99的项)。
小结:
我们从变量的角度分析了这个程序。做的事情无非是变量的声明和初始化(有时变量的输入取代了初始化),以及变量的多次引用和更新(首次赋值称为初始化,再次赋值便是更新),最终可能还要输出它,输出到屏幕或磁盘等。
从形式上来看,变量出现在赋值符(=)的左边(声明并初始化时,赋值时),或右边(引用)。
#include <stdio.h>
void main(){
/*变量的声明及初始化*/
int n=;
float sum=,a=;
/*变量的循环引用及赋值*/
while(a<=){
sum=sum+n/a;
n=-n;
a=a+;
}
/*变量的输出*/
printf("%f\n",sum);
}
注意:
这里面有一个坑,就是如果n和a都是整型变量的话,n/a也会是整型,而不是浮点型,结果就会有错误。因此,我们将a声明为浮点型。
拓展:
比较有意思的是,利用这个数列(无穷级数)可以求得圆周率。即将其乘以4便得到π的近似值,项数越多越精确。
C语言求1-1/3+1/5-1/7+...——小程序,大道理的更多相关文章
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- 说说用C语言求根的那些事儿
C语言--求根:计算机只识别0和1,那么问题来了,作为计算工具如何解决数学问题?其实,计算机是死东西,都是程序员用计算机的的思维去加数学公式计算数学题的.听起来好高端的样子,其实啊,也就那么回事儿, ...
- C语言求x的y次方,自定义函数,自己的算法
我是一名高二中学生,初中时接触电脑,非常酷爱电脑技术,自己百度学习了有两年多了,编程语言也零零散散的学习了一点,想在大学学习计算机专业,所以现在准备系统的学习C语言,并在博客中与大家分享我学习中的心得 ...
- c语言求最大公约数和最小公倍数(转)
最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- 用R语言求置信区间
用R语言求置信区间 用R语言求置信区间是很方便的,而且很灵活,至少我觉得比spss好多了. 如果你要求的只是95%的置信度的话,那么用一个很简单的命令就可以实现了 首先,输入da=c(你的数据,用英文 ...
- 基于php基础语言编写的小程序之计算器
基于php基础语言编写的小程序之计算器 需求:在输入框中输入数字进行加.减.乘.除运算(html+php) 思路: 1首先要创建输入数字和运算符的输入框,数字用input的text属性,运算符用sel ...
- 自动生成.py文件头部的C语言小程序
每次都 vi xxx.py 然后再打 #!/usr/bin/env python 等等的程序头信息感觉有点麻烦,于是便想着写一个小程序自动生成这些头信息了,顺便在 ~/.bashrc 里写入 alia ...
- c语言小程序
这是一个用c语言写的小程序,功能是随机输出30道100以内的四则运算,先生成两个随机数,再通过随机数确定四则运算符号,最后输出题目. #include<iostream> using na ...
- 通过反汇编C语言小程序学习Liunx汇编语言
大家好! 我是来自山东师范大学的吴乐. 今天在<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...
随机推荐
- GT sport真实赛道详解 - Brands Hatch | 伯蘭士赫治GP賽車場
参考:GT sport所有赛道简介 GT Sport - Tip/Guide For FASTER LAP TIMES (Brands Hatch) 赛道介绍.跑法.赛事网上都有大把的视频. GT s ...
- windows编程命名规则
转自:http://blog.sina.com.cn/s/blog_52cbfc3f0100fdy6.html 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名=属性+类型+对象描述.其中每一对 ...
- 在Mac os 10.11 下编译Berkeley caffe
安装各种补丁和组件,缺啥装啥. python 采用 2.7.13 最新版. 安装工具 homebrew , pip 很繁琐,但是没难度. 由于本人macbook pro不支持CUDA,所以不用安装. ...
- mongodb+express+nodejs(登陆退出)
1.安装expressnpm i -g express(新版本4.X以上要安装express-generator)npm i -g express-generator 2.安装mongodb下载地址h ...
- python3.7导入gevent模块报错的解决方案
最近更新了python解释器3.7 结果安装gevent,在导入gevent之后就报错了,错误信息如下 RuntimeWarning: greenlet.greenlet size changed, ...
- 使用Visual Studio Installer 2015打包WPF程序
前言 做过WPF项目,就少不了要将程序打包部署到客户现场,因为一般长时间不会更新打包程序,每次变动较大需要重新配置打包程序时,就会有些生疏,不那么得心应手.为了方便记忆,记录到博客中. 准备 因为做过 ...
- 多线程之interrupt
1.interrupt()作为中断程序,并不会直接终止运行,而是设置中断状态,由线程自己处理中断.可以选择终止线程.等待新任务或继续执行. 2.interrupt()经常用于中断处于堵塞状态的的线程, ...
- PHP基础入门(二)---入门基础知识必备
前言 在上一章中,我们初步了解了PHP的网页基础和PHP的入门基础,今天继续给大家分享更多有关PHP的知识. 理论知识看起来可能比较枯燥一些,但是我们的实践(敲代码)毕竟离不开它. 只有理论与实践相结 ...
- shogun docker image 中import shogun error
- kafka已生产消息查看
在测试过程中有用到kafka,由于开发说我往kafka里面生产了消息,通知了对方要消费....看到这块一头雾水 kafka主要2个功能生产和消费 ##查询topic列表 ./kafka-topics. ...