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 ...
随机推荐
- springboot 启动报错
有一个警告 :** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the d ...
- Mtlab:抛物型方程的交替方向隐格式(ADI)
tic; clear clc M=[,,,,]; N=M; :length(M) h=/M(p);% 这里定义空间步长等距 tau=/N(p); % 时间步长 x=:h:; y=:h:; t=:tau ...
- servlet两种配置方法详解
1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...
- Oracle启用和禁用触发器
1.禁用 table_name 表的所有 trigger alter table table_name disable all triggers; 2.启用 table_name 表的所有 trigg ...
- git连接不上远程仓库---visualstudio提交代码报错:no upstream configured for branch 'master'
1,新建文件夹,在文件下下鼠标右键git bush--->git init,初始化仓库: 2,设置gitthub仓库地址:git remote add origin https://github ...
- Struts 2中如何解决中文乱码问题?
在配置文件中定义如下常量值配置: <constant name=”struts.i18n.encoding” value=”UTF-8”/> 注意:只能解决post请求的乱码问题,针对ge ...
- Python GUI之tkinter
https://blog.csdn.net/yingshukun/article/details/53985080 设置背景图:https://blog.csdn.net/rikkatakanashi ...
- PDF 补丁丁 0.6.0.3288 版发布(修复“合并文件”功能的文件夹文件排序问题)
新的测试版修复了合并文件功能中添加名称带有“.”点号的文件夹时无法正常排序文件的问题. 使用合并文件功能的用户建议更新.
- Oracle Database 11g安装及报错处理(win7)
稍后会将安装过程上传.Oracle数据库安装先决条件检查失败解决方案: 1,检查失败信息中,预期值:N/A 实际值:N/A ,并未出现具体的值 查看 “详细信息” . 引起失败的原因是:无法在指 ...
- springboot秒杀课程学习整理1-5
1)交易模型设计 交易模型(用户下单的交易模型)OrderModel id(String 交易单号使用String), userId,itemId,amount(数量),orderAmount(总金额 ...