C语言课程设计报告综述.docxVIP

  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语言课程设计报告综述

课程设计报告 课程名称:计算机高级语言课程设计(C) 学生姓名: 学号: 班号: 2015年春季学期 大数相乘问题 题目描述 两个大数相乘问题 【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。 【提示】两个相对较大的数肯定是不能够用LONG INT类型存储的,因为LONG型数据的数据范围也并不是很大,于是就需要采用其他的存储结构。这里推荐用数组存储一个大数,数组的初始空间可以定义到如200或300个单元,每个单元存储一位数据,形如下图: 255 96207.。。。。这样理论上,比如数组定义为200,就可以存储200个数字的整数,应该是满足足够大的条件了。而结果的存储也需要考虑空间的问题,所以需要一个更大的数组。 在解决了存储问题后,我们需要来实现乘法运送的过程,也就是说你必须要把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过程。 算法描述 1.简介 本程序用到多个int型变量与字符型数组a[]、b[]以及整形数组num1[]、num2[]、e[],结合for循环与do—while、while循环,使用if语句判断各个环节的运行结果,最终达到目的,做到了计算出两个大数相乘的结果并将其输出。未用到子函数,靠主函数与复杂的算法完成计算。 2.算法分析 1)、两个大数的输入:(自己设计完成) 考虑到两个大数长度非常长,采用单个变量显然会使程序臃肿混乱,故采用数组来储存这两个大数;又考虑到人们在键盘上的输入一串数字时是希望一次将其输完,因此在输入这两个数字时要避免其他繁杂的操作。字符型数组可一次性存入一个字符串,但字符无法进行数学运算;整型数组可以进行运算,但一次只能存入一个数字。所以本程序使用字符型数组读入两个大数,再将其转为整型数组进行相乘、相加运算。 2)、读取两个字符数组存入字符的长度:(自己设计完成) 两字符数组初始长度都比较大,本程序将它们长度均定义为200,(还可以更大);但人们在键盘输入的数字是随机的,因此每次执行两大数的长度都不会是一个定值,且一般会小于200。这就需要有一个算法来读取两字符串的长度。 字符串的末尾会有结束符’\0’跟随,可使用循环语句与计数器m、n,在计数的同时判断是否读到结束符位置,若检测到’\0’,说明用户输入的字符串已经结束,这时跳出循环,并取计数器最终值,即为大数长度。为达到修改程序时及时纠错目的,可将这两个字符长度用printf语句输出。这段算法采用do-while循环。 这里也可以运用函数库中更为简便的strlen函数。 3)、字符串转化为数字:(自己设计完成) 字符串与数字的转化可以应用常用字符与ASCII码之间的关系来完成。数组a、b接收到的是0-9之间的字符,虽然其显示的是数字,但与数字有别。ASCII值048-057段代表了1-9这些字符,’0’与048相对应,因此,用a中存放的字符减去’0’即可得到各字符所代表的数字。由于这些字符无法一次性转为数字,故会用到for循环结构。并在循环的同时将读取的数字存入数组num1、num2中。 4)、两大数相乘算法:(参考其他程序) 首先根据两数相乘的运算规则定义会用到的各个变量,他们有:计数器i、k、j、p;临时变量tmp;进位变量up;存放最终结果的数组e。 计算的过程用实例来说明,随机选择两个较大数字,如:65936×36794,可先将其笔算过程写出: 6 5 9 3 6 ×3 6 7 9 4 0 0 2 6 3 7 4 4 0 5 9 3 4 2 4 4 7 1 5 5 2 ……………. 本算法就是按照笔算的思想来进行的。num2中的数字由末位到第一位依次与num1中的最后一位数字相乘,并将结果正序存在数组e中。然后num2中所有数字再与nu1中倒数第二位相乘,同时用相乘的结果与前一次计算的结果错位做加法运算,并以此类推。 详细过程: 如65936先与4做乘法运算,tmp=6*4=24,进2余4,用取余符%得到余数4并存在e[1]中,用int型变量的除法运算特点得到进位量2存放在up中;至此最内层循环进行一次,数组num2中的因数前移一位变为3,tmp=3*4=12按乘法计算法则知,12取余应与上次运算的进位量2相加,而这一次的进位量1应继续存放在up中等待与下一次的余数相加,以后继续进行循环,直到num2中的第一位与4做完乘法。但当进行完

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档