C语言课程设计报告模板1(大数相乘).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中 国 地 质 大 学 本科生课程论文封面 课程名称 c语言课程设计 教师姓名 武进霞 本科生姓名 贾兵 本科生学号 20101002938 本科生专业 资源勘查工程 (基地班) 所在院系 资源学院 类别: 日期: 2012/2/22 目 录 课程设计评语 2 目 录 3 1.课程论文题目 4 2.程序设计思路 4 3.功能模块图 5 4.数据结构设计 5 5.算法设计 6 6.程序代码 13 7.程序运行结果 22 8.编程中遇到的困难及解决方法 25 9.总结心得及良好建议 26 10.致谢 26 1.课程论文题目 1.两个大数相乘问题 【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。 2.程序设计思路 1首先考虑设计将两个大数按照输入顺序存入分别存入数组a[ ],b[ ]中. 把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c[ ]中. 找到最高位在数组中的项c[i],然后依次输出各位上的数值 通过主函数来调用其它各个函数。 4.数据结构设计 1.输入阶段采用一维数组a[ ],b[ ] 在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a[ ],b[ ]。 2.调用函数计算阶段采用一维数组c[ ] 在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c[ ]中。 算法设计 算法设计过程: 1.找出每一列的所有项 首先找规律,如下所示 进行乘法a[0 ] a[1] a[2] b[0] b[1] b[2] b[2]a[0] b[2]a[1] b[2]a[2] b[1]a[0] b[1]a[1] b[1]a[2] b[0]a[0] b [0]a[1] b[0]a[2] 下标之和 0 1 2 3 4 i=4 i=3 i=2 i= 1 i =0(循环时的i的数值) 即有 下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。 故首先解决了找出每一列所有项的问题。 2.计算从低位到高位每一位的值。 显然考虑到进位的问题,故必须从低位到高位依次计算,对于每一列 ,第一项可以除十取余数,保留在原位,存入c[ ] ,所得商进位存入mm。然后对于第二列,第一项加进位mm,然后取余数存入su,再加第二项,取余数存入c[ ],求商存入进位mm,直到该列所有项参与运算到该列结束时,求的最终的c[ ],和mm. 依次进行后面的运算。 3找出反向存入结果c[ ]中的首项. 因为最高位一定不为零,故可以设计程序从c[399]开始判断,当c[i]不等于零时,即为最高项。 设计主函数,依次调用如上函数。然后通过for循环设 for(i=0;im+n;i++) { su=0; for(j=0;jm;j++) {if((tt=(m-1+n-1-i-j))=n||(tt=(m-1+n-1-i-j))0) continue; else su=su+a[j]*b[m-1+n-1-i-j]; } 6.程序代码 #include stdio.h #include math.h void sum(int a[200],int b[200],int m,int n)//结果在数组里顺序是反着的 { int mm=0;//保存进位 int c[400]={0};//保存结果 int i,j,su,tt; for(i=

文档评论(0)

youyang99 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档