任意长整数的乘法数据结构课程设计报告样本.doc
《任意长整数的乘法数据结构课程设计报告样本.doc》由会员分享,可在线阅读,更多相关《任意长整数的乘法数据结构课程设计报告样本.doc(23页珍藏版)》请在咨信网上搜索。
1、课 程 设 计 任 务 书专 业计算机科学与技术( 专升本) 班 级姓 名设 计 起 止 日 期设计题目: 任意长整数的乘法设计任务( 主要技术参数) : 数据结构课程设计要求结合数据结构( C语言版) 课程所学的基础知识进行程序设计, 并实现下列目标: 1. 经过课堂讲解和学习研究, 查阅和收集C语言程序设计的相关资料; 2. 进行方案的选择、 分析与设计; 3. 对程序进行上机调试; 4. 写出设计体会; 5. 撰写数据结构课程设计报告。报告力求做到观点正确、 方法科学、 技术先进。硬件环境: CPU: 酷睿i5-2430内存: 6G 硬盘: 750G软件环境: 操作系统: win7 程序
2、开发环境: VC+6.0指导教师评语: 成绩: 签字: 年月日课程设计说明书 NO.1任意长整数的乘法1、 课程设计目的( 1) 较熟练地掌握数据结构( C语言) 课程的基本内容, 程序设计的基本方法与编程技巧。( 2) 较熟练地掌握C语言程序编辑、 编译、 连接和运行的方法。( 3) 经过运行C程序, 了解C语言的特点, 培养学生应用计算机解决和处理实际问题的思维方法与基本能力。2、 课程设计方案论证2.1设计思路( 1) 输入的形式和输入值的范围: 用户从键盘输入2个任意长度的长整数, 输入的时候是按4个为一段输入的, 即一段一段输入的, 求它们的乘积的大小, 并将结果在屏幕上显示; 2个
3、长整数的输入没有大小的限制, 要输入多大的数据,就能够输入多大的数据。( 2) 输出的形式: 输出直接在屏幕上显示2个任意长度的长整数的乘积大小。( 3) 程序所能达到的功能: 对于用户输入的任意长度的2个的长整数, 能够正确没有错误的显示结果, 和电脑附件中的计算器的计算值要一致; 能够准确无误地显示结果。( 4) 测试数据: 如输入1000 1000 和1111 2个长整数后, 显示0111 1111 1111 1000的话, 就是正确的结果形式。如输入1111 1111 1111和1111 2个长整数后, 结果显示0123 4444 4444 4322就不是正确结果, 因为这2个长整数的
4、积为0123 4444 4444 43212.2概要设计( 1) 抽象数据类型的定义为了实现任意长整数的乘法, 因为这种运算存在进位和位移等操作, 因此选择双链表的结构体( 如图2.2.1和图2.2.2) , 它有一个data, left, right; 考虑到data表示的数据的范围, 使它只接受4个数字的整数, 这样一个长整数就分为若干段, 每一段为4个数 沈 阳 大 学课程设计说明书 NO2字, 便于进位和借位以及位移的操作, 用户在输入时就是每次输入4个数字。( 2) 主程序的流程主程序是首先调用初始化2个长整数的函数, 用户4个数字一段一段地输入2个长整数, 用双链表的形式和头插法的
5、形式建立, 返回2个长整数的头节点; 建立完2个长整数后,就开始进行2个长整数的乘积的运算了; 首先将第一个长整数的全部去乘第2个长整数的最后一段, 这样得到一个长整数; 接着将第一个长整数的全部去乘第2个长整数的倒数第2段; 这样得到一个长整数, 可是要向左位移4位; 这次得到的长整数要和上一次相加, 得到一个新的长整数; 接着接着将第一个长整数的全部去乘第2个长整数的倒数第3段, 得到一个长整数, 再和前面相加; 依次进行, 一直到已经到第一个长整数的全部乘于了第2个长整数的最高1段, 那么乘法就结束了; 这时将得到的长整数从高位到低位一段一段, 4个4个数字显示在屏幕上, 程序就运行结束
6、了。( 3) 模块之间的层次(调用)关系程序的调用关系如下: 主函数调用了初始化2个长整数的函数, 然后再调用了2个2个长整数的乘积的函数; 2个长整数的乘积的函数调用了部分求和的函数和从表头得到表尾的函数, 以及将一个长整数前后数值交换的函数以及显示一个长整数的函数。图1双链表的数据结构图2双链表的数据结构( 虚线部分为地址值, 这个是为了描述方便随便写的值) 沈 阳 大 学课程设计说明书 NO.32.3详细设计( 1) 2个长整数的输入接着采用头插法的方式, 当输入一个 4个数字的整数时, 就产生一个新的节点, 它的值为输入的整数值, 建立起它的左右指针, 并用头节点指向它; 为了判断一个
7、长整数是否输入结束, 定义一个结束标志, 当输入正数时就继续, 当输入负数时, 就结束一个长整数的输入; 同时用一个函数得到长整数的尾节点和段数, 段数在比较2个数的大小有用。( 2) 2个长整数的乘法 先定义一个部分加法的函数, 就是2个正的长整数的加法的运算; 它从2个长整数的尾部开始, 同时相加, 接着再向左移一段, 又同时相加; 当2个数据的某一段同时存在时, 就相加; 当一个数据已经全部被相加后, 另外一个数据的剩下的段就要全部复制到和中; 在实行加法的时候, 设置一个进位标志位, 目的是为了使结果正确; 当一 段的数据相加产生进位时, 那么进位标志位为1; 下一次一段的数据相加就要
8、加上这个进位标志位; 而且如果2个长整数的所有的段的数据都相加完了, 还要判断是否产生了进位标志位, 如果有的话, 就要新建一个节点, 它的值就是1; 2个正的长整数的求和就完成了。再定义一个部分乘法的函数, 就是1个正的长整数乘于一个4位整数, 并向左位移特定的段数的运算; 其实开始实现向左位移的运算, 只需要建立新的节点, 节点的数目为需要左移段数, 并将这些节点的值设置为0; 接着实现一个长整数乘于一个4位整数的运算, 采用每一段都和这个4位整数的相乘的方法, 当积超过10000时, 那么多于高4位全为进位, 参与下一次相乘时要加上它; 低4位就是要新建的节点的值; 和加法一样, 当这个
9、正的长整数的每一段都和这个4位整数相乘后, 但还存在进位时, 就要新建一个节点, 它的值就是进位值; 现在1个正的长整数乘于一个4位整数, 并向左位移特定的段数的运算就完成了; 再实现2个正的长整数的乘法的运算, 采用第一个长整数作为一个整体乘于第二个长整数的每一段, 并向左位移的方法; 例如当采用第一个长整数作为一个整体乘于第二个长整数的最后一段, 就不用向左位移; 可是第一个长整数作为一个整体乘于第二个 沈 阳 大 学课程设计说明书 NO.4长整数的倒数第二段, 就用向左位移一段, 就是最后一段为0, 依次类推; 此过程是调用部分乘法的函数实现的; 我们只需要定义2个长整数的临时变量, 1
10、个是本次新产生的部分乘法的结果, 1个是上次的总和; 那么总和加上本次新产生的部分乘法的结果重新给总和, 此操作是调用2个长整数的加法实现的; 第2个数的段一直向左位移, 总和也就不断扩大, 当第2个数的段达到最高一段时, 就完成了2个正的长整数的乘法的运算。( 3) 补充说明在程序中, 因为我们需要得到一个长整数的头部和尾部, 因此定义了2个函数, 一个是已知一个一长整数的头部, 得到它的尾部; 一个是已知一个一长整数的尾部, 得到它的头部; 具体实现都是利用指针的左移和右移, 为空时就得到头部或尾部; 在程序中, 我们输入是从高位到低位输入的, 而相加后的顺序就相反了, 因此我们需要定义一
11、个将一个长整数的数据前后交换的函数, 新建一个一个长整数, 使用头插法, 将从原来一个长整数的尾部开始, 向左移, 一个一个给新建的长整数。2.4源程序清单#include#includetypedef struct linknodeint data;/*节点的值*/struct linknode *left,*right;/*左指针和右指针*/dnode;dnode *r1,*r2,*r3,*head1,*head2,*head3;dnode *head_temp,*rear_temp;/*head1为第1个数的头指针, r1为 为第1个的尾指针*/*head2为第2个数的头指针, r2为
12、为第2个的尾指针*/*head3为结果的头指针, r3为结果的尾指针*/*head_temp为临时数的头指针, rear_temp为临时数的尾指针*/*产生一个长整数*/dnode* creat()dnode *head,*p,*s;/*head为头指针, p和s为临时指针*/int x,cycle=1;/*x为输入的数据, cycle为是否继续输入的标志*/head=(dnode*)malloc(sizeof(dnode); 沈 阳 大 学课程设计说明书 NO.5p=head;/*指向头*/while(cycle)scanf(%d,&x);/*输入数据*/if(x=0)/*输入正数才有效*/
13、s=(dnode*)malloc(sizeof(dnode);s-data=x;p-right=s;s-left=p;p=s;/*采用的是头插法*/else cycle=0;/*输入负数就退出*/head=head-right;/*第一个头没有用到*/head-left=NULL;p-right=NULL;return head;dnode *rear(dnode *head)/*根据一个数的头节点, 得到尾节点, 并得到这个数的段数*/dnode *p;p=head;while(p-right)/*向右移*/p=p-right;return p;void input_and_init()/*
14、初始化2个数据的大小*/*符号变为对应的0或1*/printf(input the first data,input negative data exitn); head1=creat(); /*产生第一个数, 得到它的头指针*/ r1=rear(head1); /*得到第一个数的尾指针和*/ 沈 阳 大 学课程设计说明书 NO.6/*符号变为对应的0或1*/ printf(input the second data,input negative data exitn); head2=creat(); /*产生第2个数, 得到它的头指针*/ r2=rear(head2); /*得到第一个数的尾
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任意 整数 乘法 数据结构 课程设计 报告 样本
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。