电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

第6章 重复结构典型算法VIP免费

第6章 重复结构典型算法_第1页
1/28
第6章 重复结构典型算法_第2页
2/28
第6章 重复结构典型算法_第3页
3/28
6.9典型算法示例1递推法递推法的编程思路是:问题的共同特点是:前后项存在一定的关系,即后项可由前项推导出。第一步:设项号,找前后项关系;1,可直接由前项推出后项2,可直接利用项号推出当前项的值3,需要综合利用项号和前项推出后项第二步:构造重复结构;第三步:设定变量初始值。例6.5编写求1-2+3-4+5-...-100的和程序。第一步:设定项号,定义变量,找前后项关系这是关键的一步。设定项号n=1234...sum=1-2+3-4+5-...–100存和前后项关系为n=n+1,比较简单。生成的数n有正负号,且有规律:奇数为正,偶数为负,可用二选一if语句判别;这里定义一个变量s判别。第二步:构造重复结构求解这类题目,循环体总要执行多次。采用dowhile重复结构是很自然的。用其它重复结构,可行吗?do{n=n+1;s=-s;sum=sum+s*n;}while(n<100);第三步:设置变量初值设置变量初值是保证正确计算出第一项值。十分明显,各变量的初值为:intn=0,sum=0,s=-1;第四步:静态检查跟踪三步左右,如果结果是正确的,一般情况下,可断定算法是正确的。语句第一次循环第二次循环第三次循环n=n+1;123s=-s1-11sum=sum+s*n;1-12第五步:编程通过上述分析,确定了数据结构,定义了有关变量和类型(因明显是整型,未作说明),完成了算法设计。接下来编程就是用C语言精确表述这一思维过程。/*求1-2+3-4+5-...-100的和chap6_5.c*/#includevoidmain(){intsum=0,n=0,s=-1;printf("***运行结果***\n");do{n++;s=-s;sum+=s*n;}while(n<100);printf("1-2+3-4+...-100=%d\n",sum);}***运行结果***1-2+3-4+...-100=-50例6.6编写下述功能程序:求sinx=x-x3/3!+x5/5!-x7/7!+...的近似值,误差为1×10-8。do{n++;s=-s;sum+=s*n;}while(n<100);printf("1-2+3-4+...-100=%d\n",sum);}***运行结果***1-2+3-4+...-100=-50例6.6编写下述功能程序:求sinx=x-x3/3!+x5/5!-x7/7!+...的近似值,误差为1×10-8。•第一步:设定项号,定义变量,找前后项关系•设定项号n=1234...•sinx=x-x3/3!+x5/5!-x7/7!+...•存sin函数值存x的幂xn存阶乘fact•前后项关系比较复杂。从整体找前后项关系比较困难,分别找前后项的分子和分母的关系比较简便。前后项关系:•分子xn=-xn*x*x•分母fact=fact*(2*n-2)*(2*n-1)第二步:构造重复结构求解这类题目,循环体总要执行多次(循环次数不确定),一般采用dowhile重复结构。do{n=n+1;xn=-xn*x*x;fact=fact*(2*n-2)*(2*n-1);sinx=sinx+xn/fact;}while(fabs(xn/fact)>1e-8);第三步:设置变量初值floatx;doublen=1,xn=x,fact=1,sinx=x;为保证精度,xn,fact,sinx取double型。为防止溢出,n也取double。第四步:静态检查跟踪三步左右,如果结果正确,一般情况下,算法是正确的。语句第一次循环第二次循环第三次循环n=n+1;234xn=-xn*x*x;-x3x3-x7fact=fact*(2*n-2)*(2*n-1);3!5!7!sinx=sinx+xn/fact;x-x3/3!x-x3/3!+x5/5!x-x3/3!+x5/5!-x7/7!第五步:编程/*求sinx=x-x3/3!+x5/5!-x7/7!+...的近似值chap6_7.c*/#include#include#defineEPS1e-8/*符号常量,误差*/voidmain(){floatx;doublen=1,xn,fact=1,sinx;printf("***运行结果***\n");printf("输入x:");scanf("%f",&x);sinx=x;xn=x;/*不在变量定义时置初值,为什么?*/do{n=n+1;xn=-xn*x*x;fact=fact*(2*n-2)*(2*n-1);sinx=sinx+xn/fact;}while(fabs(xn/fact)>EPS);printf("递推法sin%0.4f=%0.8f\n",x,sinx);printf("调库函数sin%0.4f=%0.8f\n",x,sin(x));}***运行结果***输入x:1递推法sin1.0000=0.84147098调库函数sin1.0000=0.84147098例如:求a1/2的近似值迭代公式:xn+1=(xn+a/xn)/2误差公式:|xn+1-xn|<=EPSfloata;/*由用户输入*//*存当前近似值*//*暂存前一次的近似值*/数据:doublex0;doublex1;主要算法:x1=a/2;do{x0=x1;//保存当前解x1=(x0+a/x0)/2;//计算新解}while(fabs(x1-x0)>EPS);2迭代法问题具有的共同特点是:已知迭代公式和误差公式。可直接应用重复结构,按迭代公式计算一个新解,并与前一个解比较,直到满足误差要求为止。scanf(“%f”,&a);下面以例说明分析问题和算法设计的方法。例6.7编写求a1/2的近似值程...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

第6章 重复结构典型算法

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部