- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HUNAN UNIVERSIT Y 程序设计训练报告 题 目 求n! 学 生 姓 名 学 生 学 号 专 业 班 级 学 院 名 称 指 导 老 师 2013 年7月11 日 TOC \o 1-5 \h \z 第一部分 程序功能简介 3 第二部分 本人完成的主要工作 3 第三部分 设计方案 4 (一) 设计分析 4 \o Current Document (二) 模块的功能及程序说明 5 \o Current Document (三) 核心源程序模块 7 (四) 核心算法流程图 8 (五) 操作方法简介 9 (六) 实验结果 9 (七) 设计体会 10 第四部分 附录 错误!未定义书签 (一) 程序中主要变量的功能说明 …..… 错误!未定义书签 错误! 错误!未定义书签 第一部分 程序功能简介 该程序是求一个大数n的阶乘(n!), n的值范围从1~100之间变 化。输出结果从右往左每四个数之间用一个“,”隔开。 第二部分 本人完成的主要工作 刚开始,我尝试着通过递归函数(如下)将 100!的结果算出 long fac(int n)〃 函数:n 的 阶乘 { long s; if(n==0|| n==1) s=1; 结果发现无法得到正确结果(100的阶乘输出为0),询问后知道由于 100的阶乘结果太大,用长字符串也会溢出导致无法显示,所以只能 将阶乘后结果的个、十、百、千 … 位依次赋数给数组a[200]来解决 这一问题。 数组a[200]的引入也让n阶乘结果的位数昭然若揭,又使用 for循环使输出结果从右往左每四个数之间用一个“ ,”隔开。 最终设计出一个程序求一个大正整数数的阶乘( n!),n的值 范围从1?100之间变化(输出结果从右往左每四个数之间用一个 “,”隔开)。然后对程序进行编译,运行,并不断完善细节, 不断优化。 第三部分 设计方案 (一)设计分析 1、解决结果的存放问题 由于是求一个大数n的阶乘,结果的很大(会溢出),无法直 接输出或得到结果,所以在经过探索及请教同学之后拟定用乘法的基 本原理把用户给的数据求得阶乘后的结果的个、十、百、千 … 位依 次赋数给数组a[200] —— 即a[0]=个位上的数,a[1]=十位上的 数??…以此类推。 2、结果位数的解决 根据数组a中的数据存放情况,从数组最后一位a[199]开始, 往前依次进行观察,直至a[j]不为零,则证明结果的位数为j+1 3 、“,”隔开 根据题目所要求的,输出结果从右往左每四个数之间用一个 “,”隔开。分析可知,这是将之前存放在数组 a中的数进行规律 性输出,最终拟定采用for循环解决。又由于结果除以4的余数不同 引起的输出规律有些许差异,最终决定分余数是否为0两种情况来输 出最终结果。 4、意外处理 由于n的值是由操作者输入,需要考虑当输入值超出 1~100 范围时的程序应对方式(告知操作者:输入数据错误) (二)模块的功能及程序说明 ******文件包涵部分 ****** 文件包涵部分******/ #in elude #in elude #in elude v ******定义变量部分 ****** 定义变量部分****** int n;/*** int n;/*** 定义核心变量n ***/ int i,j,k=O;/*** 定义辅助变量 ***/ int a[200]={1},m; /***定义并初始化数组a ,其中m结果的位数除以4的余数***/ ******获取用户输入的数据 ****** 获取用户输入的数据****** (1~100) (1~100) n: \n ); *** 输入数据不合要求时的情况处理 ******/ if(n 100|| n1) prin tf(Sorry!You en ter a wrong nu mber. \n); 核心 for(i=1;i=n ;i++) { for(j=0;j200;j++) { a[j]*=i; } for(j=0;j200;j++) { a[j+1]+=a [j]/10; a[j]%=10; } } 上面的这一模块为核心模块,是用乘法的基本原理把用户给的数据求 得阶乘后的结果的个、十、百、千 … 位依次赋数给数组a[200],即 a[0]=个位上的数,a[1]=十位上的数.?… for(i=199;i=0;i--) { if(a[i]!=0) { j=i; break; } } /*** 求出n阶乘结果的位数减一(结果位数为j+1)***/ m=(j+1)%4;/***算出结果的位数除以4的余数***/ prin tf(the factorial of %d is:\n , n); ******按要求输出结果 ****** 按要
有哪些信誉好的足球投注网站
文档评论(0)