常用算法与程序设计第7章 模拟.ppt
《常用算法与程序设计第7章 模拟.ppt》由会员分享,可在线阅读,更多相关《常用算法与程序设计第7章 模拟.ppt(30页珍藏版)》请在三一文库上搜索。
1、常用算法与程序设计,1,第 7 章,模 拟,常用算法与程序设计,2,主要内容,常用算法与程序设计,3,7.1 模拟概述,应用计算机程序设计模拟自然界的随机现象,模拟特定条件下的操作过程,是程序设计难以把握且颇具魅力的课题之一。 根据模拟对象的不同特点,计算机模拟可分为决定性模拟与随机性模拟。 决定性模拟是对决定性过程进行的模拟,其模拟的事件 按其固有的规律发生发展。 例如运算模拟就是决定性模拟。 随机性模拟的对象是随机事件,利用随机数作为参数实施模拟。 例如数字模拟(又称数字仿真)。,常用算法与程序设计,4,运算模拟是按整数的四则运算法则进行模拟操作,最后得出模拟运算的结果。 7.2.1 运算
2、模拟描述 运算模拟,主要是模拟整数逐位乘除的运算过程,求解一些整数计算问题。 在实施乘除运算模拟之前,必须根据参与运算整数的实际设置模拟量,以模拟乘除运算进程中数值的变化,并判定运算是否结束。,7.2 运算模拟,常用算法与程序设计,5,1. 模拟除法运算,除运算模拟框架描述: 输入 确定 while() a=c*10+m; /* 构造被除数a,m为 */ b=a/p; /* 实施除运算,计算商b */ printf(b); c=a%p; /* 试商得余数c */ 其中,与必须根据模拟除运算问题的具体实际确定。,常用算法与程序设计,6,乘运算模拟框架描述: 输入 确定 while() k=k+1
3、; a=w(k)*p+m; /* 计算乘积a,m为 */ w(k)=a%10; /* 积a的个位存储到w(k) */ m=a/10; /* 积a的十位以上作为进位数 */ 输出(w(d),w(d-1),w(1); /* 高位到低位输出 */ 乘运算模拟的,与根据模拟乘运算问题的实际确定。,2. 模拟乘法运算,常用算法与程序设计,7,1. n个1被2009整除问题 【例7.1】 一个由n个1组成的整数能被2009整除,n至少为多大? 模拟除运算设计 : 被除数为a, 除数p=2009,每次试商的余数为c。 被除数a=c*10+1,每次试商所得余数为c=a%2009。 设置初始值c=1111,n=
4、4,进入模拟整除循环。 循环条件为c0。每循环一次,变量n增1。 若余数c=0,结束,输出n的值。,7.2.2 n个1的整除问题,常用算法与程序设计,8,void main() int a,c,n; c=1111;n=4; /* 确定初始值 */ while(c!=0) a=c*10+1; /* 构造被除数a */ c=a%2009; n+; /* 实施除运算,得余数c */ printf(至少%d个1.n,n); ,常用算法与程序设计,9,2. 积为n个1的数字游戏 【例7.2】 两位计算机爱好者在进行“积为n个1的数字游戏”:其中一位给定一个正整数p(约定整数p为个位数字不是5的奇数),另
5、一位寻求正整数q,使得p与q之积为全是1组成的整数. 模拟除运算设计: 设整数除运算每次试商的被除数为a, 除数为p(即给定的正整数),每次试商的商为b,相除的余数为c。 被除数a=c*10+1,余数c=a%p,商b=a/p即为所寻求数q的一位。若余数c=0,结束;否则,继续运算直到c=0为止。,常用算法与程序设计,10,void main() int a,b,c,p,n; printf(n请输入整数p:); scanf(%d, ,常用算法与程序设计,11,7.2.3 尾数前移问题,【例7.3】 整数n的尾数是9,把尾数9移到其前面(成为最高位)后所得的数为原整数n的3倍,原整数n至少为多大?
6、 这是数学通报上发表的一个具体的尾数前移问题。我们要求解一般的尾数前移问题: 整数n的尾数q(限为一位)移到n的前面所得的数为n的p倍,记为n(q,p)。这里约定。 对于指定的尾数q与倍数p,求解n(q,p)。 下面试用模拟除运算与模拟乘运算两种方法设计求解。,常用算法与程序设计,12,1. 模拟整数除法,首先第一位数q除以p(注意约定qp),余数为c,商为b。输出数字b作为所求n的首位数。 进入模拟循环,当余数c=0且商b=q时结束,因而循环条件为c!=0 | b!=q。 在循环中计算被除数a=c*10+b,试商得b=a/p, 输出作为所求n的一位b;求得余数c=a%p;然后b与c构建下一轮
7、试商的被除数,依此递推。,常用算法与程序设计,13,void main() int a,b,c,p,q; scanf(%d,%d, ,常用算法与程序设计,14,设置存储数n的w数组。 从w(1)=q开始,乘数p与n的每一位数字w(i)相乘后加进位数m ,得a=w(k)*p+m; 积a的十位以上的数作为下一轮的进位数 m=a/10; 而a的个位数此时需赋值给乘积的下一位w(i+1)=x%10。 当计算的被除数a为尾数q时结束。,2. 模拟整数乘法,常用算法与程序设计,15,void main() int a,m,j,k,p,q,w100; scanf(%d,%d, ,常用算法与程序设计,16,7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用算法与程序设计第7章 模拟 常用 算法 程序设计
链接地址:https://www.31doc.com/p-7213404.html