- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【例2.22】 输入一个小于1的数x,求sinx的近似值,要求误差小于0.0001。近似计算公式如下: 分析:这个近似计算可以看作一个累加过程,关键在于累加项数的确定。该求近似值的奇次多项式各项顺序改变符号,若取前n项累加和作为sin(x)的近似值,则第n+1项的绝对值就是误差限。因此可以这样考虑,若公式中第一项作为累加和的初值,则第二项就是误差,如果误差不满足要求,则将该项累加到累加和上,进而用该项推出第三项,第三项又是新的累加和的误差。经过这样累加、递推,直至满足要求为止。如果用item保存第n项,则推出第n+1项的方法为: item?item*x*x/((2*n)*(2*n+1) 2.6 常用算法的应用实例【例2.22】 程序: int main(){ const double epsilon=0.0001; //用epsilon保存误差 double x,sinx,item; int n=3,sign=-1; //sign保存符号 coutinput x:; cinx; sinx=x;item=x*x*x/6; //第一项作为初值,第二项为误差项 while(itemepsilon){ sinx=sinx+item*sign; //将当前项累加进结果,注意符号作为因子 item=item*x*x/((2*n)*(2*n+1)); //推算新的误差项 sign=-sign; //注意符号的变换 n++; } coutsin(x)=sinxendl; return 0; } 2.6 常用算法的应用实例【例2.23】 【例2.23】 输入一个8位二进制数,将其转换为十进制数输出。 分析:二进制转换为十进制只要将每位二进制数乘以该位的权然后相加。实际上属于多项式求和问题: 对于本例,x=2。多项式的系数a i 即为二进制数的各个位,可以用数组保存。 如果直接求幂再求和,需要做(n*(n+1)/2)次乘法。现将多项式作如下变形: 就变成一个十分简单的计算,仅做了n次乘法。 算法: 1、用数字串存二进制数,数组bin[8]用来放各个二进制位;//考虑为什么? 2、整型变量dec= 0 ; x=2; //初始化 2、for(i=7;i=0;i--) //系数从a n 到a 0 依次投入运算 dec = dec * x +(bin[i] - 0 ); // (bin[i] - 0 ):数字字符转换为数字 2.6 常用算法的应用实例【例2.23】 程序: const int n=8; int main(){ char bin[n]; int x=2,a,dec,i; cout输入二进制序列:endl; for(i=n-1;i=0;i--) cinbin[i];//先输入的是高位 dec=0; for(i=n-1;i=0;i--){ a=bin[i]-0; //数字字符转换为数字 dec= dec*x+a; } cout二进制序列(; for(i=n-1;i=0;i--) coutbin[i]; cout)的值为:decendl; return 0;} *【例2.24】 口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取三个不同颜色的球,统计并输出所有的取法。 分析: 每个球的颜色都是这五种颜色之一,因此可以使用枚举类型来定义球的颜色。 假设所取三个球的颜色分别为i, j, k, 每个量都有5种取值,其中i≠j≠k就是满足要求的取法,因此用枚举算法(穷举法)可以解决。 2.7.2 枚举类型的变量的使用*【例2.24】 算法: 1、定义枚举类型及相应变量; enum color {red,yellow,blue,white,black}; color i,j,k,col; 2、 for(i=red;i=black;i++) for(j=red;j=black;j++) if(i!=j) //前两个球颜色不同 for(k=red;k=black;k++) if(k!=ik!=j) //第三个球不同于前两个,满足要求;找到一种取法 3、输出该取法:注意枚举量的输
文档评论(0)