- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 6. 循环综合举例 3、求部分级数和 【例5.12】计算自然常数e的值,精确到小数点后6位 解题思路: 这是个级数计算问题,求n项累加和;用循环实现。循环终止的条件是 设fn=1/n!,而n!=(n-1)!*n,第n项可以写成 fn = fn-1/n 累加和放在e中,可以写成 en = en-1 + fn 设一个计数器n,每循环一次, n 增加1 * 6. 循环综合举例 #include stdio.h int main( ) { double e = 1.0, f = 1.0; int n= 0; do { n ++; f = f/n; e = e+f; } while(f=1.0E-6); printf(e=%lf(n=%d)\n,e,n); return 0; } * 6. 循环综合举例 4、利用迭代法求序列中的某项 【例5.13】斐波那契数列:一对兔子从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如所有的兔子都不会死,求前24个月中每月的兔子对数。 问题分析: F1=1 (最初的一对兔子) F2=1 (第2个月,最初的一对兔子长成,但尚未生育) F3=2 (最初的兔子开始生育) F4=3 (最初的兔子继续生育) F5=5 (第一次出生的兔子开始生育) … 从而形成了如下数列:1,1,2,3,5,8,13,21… 此数列的变化规律是:Fn = Fn-1+Fn-2 * 6. 循环综合举例 解题思路: 斐波那契数列:1,1,2,3,5,8,13,21… 该数列的函数为 算法: 设变量f1、f2、f3为连续3项,并为f1、f2赋初值1,令f3=f1+f2得到第3项 将f1←f2,f2←f3,再求f3=f1+f2得到第4项 以此类推求第5项、第6项… 迭代法:也称递推法,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复,每次重复都从旧值的基础上递推出新值,并由新值代替旧值 1 (n=1) Fn = 1 (n=2) Fn-1+Fn-2 (n2) * 6. 循环综合举例 #include stdio.h #define N 24 int main() { int i, f1=1, f2=1, f3; printf(%8d%8d,f1,f2); for(i=3; i=N; i++) { f3=f1+f2; f1=f2; f2=f3; printf (%8d,f3); if(i%6==0) printf (\n); } return 0; } * 6. 循环综合举例 递推法扩展 用辗转相除法求两自然数的最大公约数 算法思想: (1) 对于已知两数m,n,使得mn (2) m除以n得余数r (3) 若r=0,则n为最大公约数,结束;否则执行(4) m←n,n←r,再重复执行(2) printf(输入两个自然数:); scanf(%d%d,m,n); if(mn) { t=m, m=n, n=t; } while ((r=m%n)!=0) m=n, n=r; printf(最大公约数:%d\n,n); 迭代的三要素: 确定迭代变量 建立迭代关系式 对迭代过程进行控制 * 6. 循环综合举例 利用牛顿迭代法求方程 f(x)=3x3-4x2-5x+13=0 在x0附近的根的近似值。 牛顿迭代公式为: 输入x0值,由公式求出x1,再由x1从公式求出x2,......,直到 |xn+1-xn|ε时可视xn+1为方程f(x)=0在x0附近的一个近似根 ,设?为10-5 。 0 y x (x0,f(x0)) (x1,f(x1)) x0 x1 x2 x3 x (x2,f(x2)) scanf(%lf,x1); do { x0=x1; x1=x0-(3*x0*x0*x0-4*x0*x0-5*x0+13)/(9*x0*x0-8*x0-5) }while(fabs(x1-x0)1e-5); * 6. 循环综合举例 5、分类统计 【例5.14】输入一串字符,统计其中单词的个数、字母个数、数字个数。规定单词之间用一个空白符分开(空白符包括空格符、水平制表符、换行符)。以回车表示输入结束。 分析: (1)在循环中应使用getchar()函数逐一读取字符 (2)统计单词的个数,可通过统计空白符的个数得到 (3)判定是否字母 if((c=a c=z) || (c=A c=Z)) * 6. 循环综合举例 #include stdio.h int main( ) { int word
原创力文档


文档评论(0)