编程能力提高-----循环的设计技巧(for、while)
来源:互联网 发布:小狐仙软件功能 编辑:程序博客网 时间:2024/06/05 03:04
循环是程序设计中接触最多code。在进行数值计算的时候,循环往往是用来做累加或累乘的。累加和累乘都有通用的数学模型:
例1:实现一个函数,求1+2+3+…+100的和。
int sum (int n){ int s=0; for(int i=1;i<=n;i++) s=s+i; //累和,超级简单。 return s;}
例2:设计求
long long int fun (int n){ long long int f=1; for(int i=1;i<=n;i++) f=f*i; //累积,超级简单。 return f;}
但在编程中,问题往往既涉及累加式又涉及到累乘式。如下面这个题目:
例3:设计求
分析问题:
首先,数学模型为:
其次,累加的对象是一个累积的结果。
所以,初学者很容易想到利用二重循环实现该算法。
int main(){ int i,j,n,sign=1; //i、j为循环控制变量,n为问题规模 float s=1,t=1; //s累和,t累积 scanf("%d",&n); for(i=2;i<=n;i++) { t=1; for(j=1;j<=2*i-1;j++) t*=j; sign=1; for(j=1;j<=i+1;j++) sign=sign*(-1); s=s+sign/t; } printf("sum=%d",s);}
对以上算法分析,是正确的,但是时间复杂度是
数学模型2:
int main(){ int i,n,sign=1; //i为循环控制变量,n为问题规模 float s=1,t=1; //s累和,t累积 scanf("%d",&n); for(i=2;i<=n;i++) { sign=-sign; t=t*(2*i-2)*(2*i-1); s=s+sign/t; } printf("sum=%d",s);}
该算法的时间复杂度为
例4:设计求
/*sinx=x-x^3/3!+x^5/5-x^7/7!...*/#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){ int i=1,sign=1; float x,t,fac=1,sinx=0; scanf("%f",&x); t=x; do { sinx+=sign*t/fac; t=t*x*x; //分子t初值为x fac=fac*(i+1)*(i+2); //分母fac初值为1 i+=2; sign=-sign; }while(fabs(t/fac)>=1e-7); printf("%f\n",sinx); return 0;}
算法分析:该算法在
参考资料:《算法设计与分析》 第二版 吕国英
转载请注明出处:http://blog.csdn.net/so_geili/article/details/71436430
- 编程能力提高-----循环的设计技巧(for、while)
- 程序员提高编程能力的11个技巧
- 循环语句(for循环,while循环,do-while循环)
- while、do...while、for循环的使用
- Java的while、for循环
- for while 循环的相似性
- 提高自己的编程能力
- 提高编程能力的建议
- 提高编程能力的建议
- 循环语句(while、do...while、for)
- 【bash】编程之for,while,until循环
- plsql编程 循环示例 LOOP FOR WHILE
- 【shell编程学习】for 和 while循环
- shell脚本编程举例--for、while循环
- for 循环与while循环的等价
- while循环式for循环的特例
- for循环与while循环的优缺点
- for循环和while循环的区别
- 开放数据处理服务ODPS_SQL一些基础知识
- utf-8、unicode、gbk、gb2312、ANSI编码的区别
- Android App优化之网络优化
- 高斯模糊
- uboot移植第五天——ldr和adr的用法
- 编程能力提高-----循环的设计技巧(for、while)
- 快速排序之Java实现
- 文章标题
- 【LeetCode】3Sum
- 在一定情况下,最佳内部排序的方法
- js中立即执行函数的理解
- 操作系统之页面置换算法
- 栈模板的实现
- web中显示pdf文件