C语言第十二篇:迭代
来源:互联网 发布:刀路仿真软件 编辑:程序博客网 时间:2024/04/29 06:50
一、求菲波那切数列的前40个数
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/05*版 本 号:v1.0*问题描述:使用迭代法求斐波那契数列的前四十个数*程序输出:*/#include <stdio.h>#include <stdlib.h>int main(){ int f1,f2,fn; int i; f1=f2=1; fn=0; printf("斐波那契数列的初值为:"); printf("f1=%d\tf2=%d\t\n",f1,f2); //求斐波那契数列f3-f40的值 for(i=3;i<=40;++i) { fn=f1+f2; printf("f%d=%d\t",i,fn); if(i%5==0) printf("\n"); f1=f2; f2=fn; } return 0;}
运行结果
二、求1!+2!+3!+...+20!
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/05*版 本 号:v1.0*问题描述:求1!+2!+3!+...+20!*程序输出:*/#include <stdio.h>#include <stdlib.h>int main(){ int i=1,sum=0,f=1; while(i<=20) { f=f*i; sum=sum+f; ++i; } printf("1!+2!+3!+...+20!=%d\n",sum); return 0;}
运行结果
三、求级数公式(精确到小数点后五位)
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/05*版 本 号:v1.0*问题描述:求级数公式(精确到小数点后五位)*程序输出:*/#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){ double x,sum=1,term=1; int i=1; printf("请输入x:"); scanf("%lf",&x); while(fabs(term)>=1e-5) { term=term*(-1)*x*x/((2*i)*(2*i-1)); sum=sum+term; ++i; } printf("%lf\n",sum); return 0;}
运行结果
----------------------------------------我----是----昏----割----线(2016.04.07更新)---------------------------------------------
找工作这是生不如狗呀,晚上回来继续我地编程之路
四、另类求和
求Sn=a+aa+aaa+...+aa...a,其中a和n均由键盘输入
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/05*版 本 号:v1.0*问题描述:求Sn=a+aa+aaa+...+aa...a,其中a和n均由键盘输入*程序输出:*/#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){ int a,n,count=1,Sn=0,Tn=0; printf("请输入 a 和 n 的值:\n"); scanf("%d %d",&a,&n); while (count<=n) { Tn=Tn+pow(10,count-1); Sn=Sn+a*Tn; ++count; } printf("a+aa+aaa+...=%d\n",Sn); return 0;}
运行结果
----------------------------------------我----是----昏----割----线(2016.04.11更新)---------------------------------------------
参考了贺利坚老师给的答案之后,发现我的代码运行结果有问题,2222+222+22+2=2468(不是2464),我要搞清楚问题到底出在了哪里,使用单步执行的方式来调试 。我使用的CodeBlocks16.01这个版本,单步执行时,没有看到变量空间,这个要怎么调出来呢?——Watch窗口可以看到变量随程序执行而变化的过程。因此我的提问应该是这样的:CodeBlocks16.01怎样打开Watch窗口?找到答案了,从贺利坚老师写的一篇“CodeBlocks单步调试入门”的教程里找到答案。打开方法如下:
Debug—>Debugging windows—>Watches(即:勾选Watches选项)
我找到了出错的位置了
n=3时,Tn应该等于111,但是程序运算的结果时110,这是为什么呢?我预测问题出在了pow(10,count-1)这个表达式上了,于是跟踪pow(10,count-1)的变化,方法很简单,将pow(10,count-1)赋值给tmp,
编译器计算pow(10,3-1)=99,这就不难解释110的来历了(11+99=110)。难道pow(m,n)不能精确地计算m^n吗?想要 理解这一点,就需要理解pow(m,n)的用法。
pow() 函数用来求 x 的 y 次幂(次方),其原型为:double pow(double x, double y);
所以,错误原因是:自动类型转换导致的,double型赋值给int型。以后要很小心的使用pow(m,n)。
下面是贺利坚老师给出的参考答案:
代码
#include <stdio.h>int main( ){ int a,n,count=1,Sn=0,Tn=0; printf("请输入 a 和 n 的值:\n"); scanf("%d %d",&a,&n); while (count<=n) { Tn=Tn*10+a; Sn=Sn+Tn; count++; } printf("a+aa+aaa+...=%d\n",Sn); return 0;}
运行结果
五、反弹的皮球
题目与要求:一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?
代码:
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/11*版 本 号:v1.0*问题描述:一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,* 再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?*程序输出:s10,h10*/#include <stdio.h>int main( ){ float sn=100.0,hn=sn/2; int n; for (n=2; n<=10; n++) { sn=sn+2*hn; hn=hn/2; } printf("第10次落地时共经过%f米\n",sn); printf("第10次反弹%f米\n",hn); return 0;}
运行结果
----------------------------------------我----是----昏----割----线(2016.04.12更新)---------------------------------------------
六、求Bessel函数的通项Jn(x)
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/12*版 本 号:v1.0*问题描述:对于贝塞尔函数,由任意的n和x≠0求Jn(x)*程序输出:Jn(x)*/#include<stdio.h>#include<math.h>int main(){ printf("请输入n和x:"); int n=0,i; double x=0.0,J0,J1,Jn,p; scanf("%d %lf",&n,&x); J0=sin(x)/x,J1=sin(x)/(x*x)-cos(x)/x; p=(2*n-1)/x; //不是(2*n+1)/x for(i=2;i<=n;++i) //i的初值为2 { Jn=p*J1-J0; J0=J1; J1=Jn; } printf("Jn=%lf\n",Jn); return 0;}
运行结果
----------------------------------------我----是----昏----割----线(2016.04.17更新)---------------------------------------------
七、贪婪的富翁
代码
/**Copyright (c)2016,刘兵马俑*All rights reserved.*文件名称:main.c*作 者:刘兵马俑*完成日期:2016/04/12*版 本 号:v1.0*问题描述:贪财的富翁*程序输出:*/#include<stdio.h>#include<math.h>int main(){ double pn,rn;//pn表示第n天穷人付给富人的钱,rn表示第n天富人付给穷人的钱 double Pn,Rn;//Pn表示截止第n天穷人一共付给富人多少钱,Rn表示截止第n天富人一共付给穷人多少钱 int n=0; for(n=1;n<=30;++n) { pn=100000,rn=0.1*pow(2,n-1); Pn=100000*n,Rn=0.1*(pow(2,n)-1); printf("第%d天穷人付给富人的钱:%lf\n",n,pn); printf("第%d天富人付给穷人的钱:%lf\n",n,rn); printf("截止第%d天穷人一共付给富人多少钱:%lf\n",n,Pn); printf("截止第%d天富人一共付给穷人多少钱:%lf\n",n,Rn); printf("\n"); } if(Pn>Rn) printf("陌生人自找"); else { if (Pn<Rn) printf("富翁傻帽了"); else printf("两人持平,没意思的交易"); } printf("\n"); return 0;}
运行结果
- C语言第十二篇:迭代
- C语言入门第十二篇,数组
- C语言入门第十二篇,数组练习题
- Jacobi迭代和Gauss迭代 c语言实现
- C语言中的递归和迭代
- C语言:问题求解方法-迭代
- C语言第十二堂作业
- C语言第十二回合:指针
- C语言平方根迭代公式助教总结
- 【C语言】递归和迭代的区别
- 第十一周:C语言:牛顿迭代求根
- 堆排序(C语言实现)迭代
- 二分法c语言代码(递归、迭代)
- C语言学习第十二天(指针总结)
- C语言学习之关键字第十二讲
- 第十二周:C语言:进制转换
- 第十二周:C语言:宏定义
- qt,c++,迭代
- 长轮询和Comet
- ehcache通过注解实现缓存
- 漫长岁月
- MVC与MVP
- event事件句柄的封装
- C语言第十二篇:迭代
- http post请求
- opencv 肤色
- lightoj 1194 - Colored T-Shirts 状压DP
- js的【java.util.Date】转【String】
- 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解
- 音视频编码格式汇总
- 一次完整的HTTP事务是怎样一个过程
- 双目测距