高中通用技术粤科版课件:NOIP第11讲循环嵌套.ppt

高中通用技术粤科版课件:NOIP第11讲循环嵌套.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

循环嵌套例6阶乘之和输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n=106,n!表示前n个正整数之积。样例输入:10样例输出:37913【分析】这个任务并不难,引入累加变量S之后,核心算法只有一句话:for(i=1;i=n;i++)S+=i!。不过C++语言并没有阶乘运算符,所以这句话只是伪代码,而不是真正的代码。事实上,我们还需要一次循环来计算i!:for(j=1;j=i;++j)factorial*=j;。循环嵌套代码如下:#includecstdiointmain(){ intn,s=0; scanf(%d,n); for(inti=1;i=n;++i) { intfactorial=1; for(intj=1;j=i;++j) factorial*=j; s+=factorial; } printf(%d\n,s%1000000); return0;}注意:累乘器factorial(英文“阶乘”的意思)定义在循环里面。换句话说,每执行一次循环体,都要重新声明一次factorial,并初始化为1(想一想,为什么不是0)。因为只要末6位,所以输出时对106取模。当n=100时,输出-961703,直觉告诉我们:乘法溢出了。这个直觉很容易通过“输出中间变量”法得到验证,但若要解决这个问题,还需要一点数学知识。试一下n=106时输出什么?更会溢出,但是重点不在这里。事实上,它的速度太慢!让我们把程序改成“每步取模”的形式,然后加一个“计时器”,看看它到底有多慢。循环嵌套#includecstdio#includectimeintmain(){ constintMOD=1000000; intn,s=0; scanf(%d,n); for(inti=1;i=n;++i) { intfactorial=1; for(intj=1;j=i;++j) factorial=(factorial*j%MOD); s=(s+factorial)%MOD; } printf(%d\n,s); printf(Timeused=%.2lf\n,(double)clock()/CLOCKS_PER_SEC); return0;//输出时间包含键盘输入的时间,建议用文件输入输出,后面章节介绍文件}clock()函数,返回从开启这个程序进程到程序中调用clock()函数时之间的CPU时钟计时单元(clocktick)数(挂钟时间),返回单位是毫秒可以用常量CLOCKS_PER_SEC,这个常量表示每一秒(persecond)有多少个时钟计时单元循环嵌套这个程序真正的特别之处在于计时函数clock()的使用。该函数返回程序目前为止运行的时间。这样,在程序结束之前调用它,便可获得整个程序的运行时间。这个时间除以常数CLOCKS_PER_SEC之后得到的值以“秒”为单位。输入100000,按Enter键,系统迟迟不输出答案,原因在于程序中重复进行了多次阶乘运算,浪费了大量时间,因此需要对程序进行优化,大家想想如何优化。while语句【上机练习】1.求阶乘的和【1.5编程基础之循环控制31】给定正整数n,求不大于n的正整数的阶乘的和(即求1!+2!+3!+...+n!),输出阶乘的和。输入:输入有一行,包含一个正整数n(1n12)。输出:输出有一行:阶乘的和。样例输入:5样例输出:153while语句【上机练习】2.求出e的值【1.5编程基础之循环控制32】利用公式e=1+1/1!+1/2!+1/3!+...+1/n!,求e的值,要求保留小数点后10位。输入:输入只有一行,该行包含一个整数n(2=n=15),表示计算e时累加到1/n!。输出:输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。样例输入:10样例输出:2.7182818011 while语句【上机练习】3.计算多项式的值【1.5编程基础之循环控制33】假定多项式的形式为x^n+x^(n-1)+…+x^2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。x在float范围内,n=1000000。多项式的值精确到小数点后两位,保证最终结果在floa

文档评论(0)

K12精品教育资源分享 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年03月20日上传了教师资格证

1亿VIP精品文档

相关文档