长整数四则运算+数据结构课程设计_第1页
长整数四则运算+数据结构课程设计_第2页
长整数四则运算+数据结构课程设计_第3页
长整数四则运算+数据结构课程设计_第4页
长整数四则运算+数据结构课程设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长整数四则运算长整数四则运算 题目 编制一个演示长整数的四则运算的程序题目 编制一个演示长整数的四则运算的程序 一 需求分析一 需求分析 1 本程序实现计算任意长的整数的四则运算 以用户和计算机对话的 方式 先后输入数字的最多位数 然后程序就计算并显示出这两个数 的运算 2 利用双向循环链表现实长整数的存储 每个结点含一个整形变量 输入的形式以回车结束 可以直接输入正数或负数 程序会过滤掉无 效的字符 按中国对于长整数的表示习惯 每四位一组 除数字和位 于首位置的负号外 其它一切字符都将作为分隔符 连续多个分隔符 当一个处理 但不使用分隔符也不影响结果 3 测试数据 1 0 0 输出 0 2 2345 6789 7654 3211 输出 1 000 000 3 9999 9999 1 0000 0000 0000 输出 9999 0000 0001 4 1 0001 0001 1 0001 0001 输出 0 5 1 0001 0001 1 0001 0001 输出 1 6 9999 9999 9999 9999 9999 9999 输出 1 9999 9999 9998 7 1 0000 9999 9999 1 输出 1 0001 0000 0000 二 概要设计二 概要设计 为实现上述程序功能 应以双向循环链表表示长整数 为此 需要 定义一个抽象数据类型 1 抽象数据类型定义为 ADT OrderedList 2 数据对象 D ai ai int i 1 2 n n 0 基本操作 init 数字 struct longnode low1 指向低一位节点 struct longnode high1 指向高一位节点 longnode typedef struct xlong 每个长整数的结构 longnode High 每个长整数的最高节点 longnode Low 每个长整数的最低节点 int digit4 每个长整数的总位数 不包括高位的 0 4 xlong int init xlong a int digit4 int I init longnode j a xlong malloc sizeof struct xlong 为 a 的头结构申请空间 并赋初 始值 a High NULL a Low NULL a High NULL a Low NULL a digit4 0 for i 0 inum 0 j high1 NULL j low1 a High if a High a High high1 j else a Low j a High j a digit4 int pass xlong a xlong b xlong c int cf 0 两个数字的相加 longnode a1 a Low b1 b Low c1 c Low while a1 c1 num a1 num b1 num cf if c1 num 9999 cf 1 如果产生进位 借位 c1 num 10000 else cf 0 a1 a1 high1 b1 b1 high1 c1 c1 high1 return cf 最高位的进位 借位 int passa xlong a xlong b xlong c int cf 0 两个数字的相减 longnode a1 a Low b1 b Low c1 c Low while a1 c1 num a1 num b1 num cf if c1 num 9999 cf 1 如果产生进位 借位 c1 num 10000 else cf 0 a1 a1 high1 b1 b1 high1 c1 c1 high1 return cf 最高位的进位 借位 int passb xlong a xlong b xlong c int cf 0 两个数字的相乘 longnode a1 a Low b1 b Low c1 c Low while a1 c1 num a1 num b1 num cf if c1 num 9999 cf 1 如果产生进位 借位 c1 num 10000 else cf 0 a1 a1 high1 b1 b1 high1 c1 c1 high1 return cf 最高位的进位 借位 int passc xlong a xlong b xlong c int cf 0 两个数字的相除 longnode a1 a Low b1 b Low c1 c Low while a1 c1 num a1 num b1 num cf if c1 num 9999 cf 1 如果产生进位 借位 c1 num 10000 else cf 0 a1 a1 high1 b1 b1 high1 c1 c1 high1 return cf 最高位的进位 借位 nep xlong a 求 a 的相反数 int cf 1 因为求相反数是取反加一 所以这里 cf 1 longnode a1 a Low while a1 a1 num 9999 a1 num cf if a1 num 9999 a1 num 10000 else cf 0 a1 a1 high1 return printlong xlong a longnode i a High 打印长整数 a if i num 5000 printf 最高位 bit 1 表示负数 即用补码表示 nep a 求反打印其绝对值 while i 跳过最位的 0 if i printf d i num i i low1 if i printf else printf 0 a 0 打 0 while i printf 04d i num if i low1 printf i i low1 int ston char in xlong out 把字符串转化为数字赋给 a int bit i jishu 1 num0 0 longnode j out Low i strlen in 1 while i 0 把字符形式的值赋给整数形式的 bit if bit 0 j j high1 存入一个节点 num0 0 jishu 1 i if num0 j num num0 j j high1 把最后一个没存入节点的数存入节点 for j j j high1 j num 0 最位不足补 0 if out High num 5000 return 1 如果最高位是 1 返回 1 表示出 if in 0 nep out 如果最后一个字符是 则取反 return 0 int add char a1 b1 加 int digit4 cf 0 xlong a b c do printf How much digits do you need 输入最多位数 scanf d while digit4 0 a1 char malloc digit4 1 b1 char malloc digit4 1 digit4 digit4 4 1 init init init 初始化 a b c do cf 0 printf Enter 2 number n scanf s a1 printf n scanf s b1 cf ston a1 a cf ston b1 b while cf 输入被加数和加数 如果转换出错 则重输 pass a b c 执行相加运算 printlong a printf 打印结果 printlong b printf printlong c printf n printf n bioskey 0 int subtract 减 char a1 b1 int digit4 cf 0 xlong a b c do printf How much digits do you need 输入最多位 scanf d while digit4 0 a1 char malloc digit4 1 b1 char malloc digit4 1 digit4 digit4 4 1 init init init 初始化 a b c do cf 0 printf Enter2number n scanf s a1 printf n scanf s b1 cf ston a1 a cf ston b1 b while cf 输入被减数和减数 如果转换出错 则重输 passa a b c 执行相减运算 printlong a printf 打印结果 printlong b printf printlong c printf n printf n bioskey 0 int multiply 乘 char a1 b1 int digit4 cf 0 xlong a b c do printf How much digits do you need 输入最多位数 scanf d while digit4 0 a1 char malloc digit4 1 b1 char malloc digit4 1 digit4 digit4 4 1 init init init 初始化 a b c do cf 0 printf Enter2number n scanf s a1 printf n scanf s b1 cf ston a1 a cf ston b1 b while cf 输入被乘数和乘数 如果转换出错 则重输 passb a b c 执行相乘运算 printlong a printf 打印结果 printlong b printf printlong c printf n printf n bioskey 0 int division 除 char a1 b1 int digit4 cf 0 xlong a b c do printf How much digits do you need 输入最多位数 scanf d while digit4 0 a1 char malloc digit4 1 b1 char malloc digit4 1 digit4 digit4 4 1 init init init 初始化 a b c do cf 0 printf Enter 2 number n scanf s a1 printf n scanf s b1 cf ston a1 a cf ston b1 b while cf 输入被除数和除数 如果转换出错 则重输 passc a b c 执行相除运算 printlong a printf 打印结果 printlong b printf printlong c printf n printf n bioskey 0 2 主函数代码 void main main int c clrscr textcolor BLUE printf n printf Welcome to Thunder studio n printf n printf 本程序实现长整数四则运算 n one printf 1 HELP n printf 2 ADD n printf 3 SUBTRACT n printf 4 MULTIPLY n printf 5 DiVISION n printf 6 EXIT n for c getch switch atoi goto one break case 2 add break case 3 subtract break case 4 multiply break case 5 division break case 6 textcolor BLUE printf n n printf Thanks cw s work n break default textcolor 4 printf Sorry please input right number n break 四 调试分析四 调试分析 1 由于对基本要求看得不仔细 一开始使用的形式是数组 并非链表 导致 空间开销大 2 本程序的模块划分比较合理 且尽可能将指针的操作封装在结构体中 对于一个长整数只需一个指针便可访问其所有信息 所以数据结构清晰 3 算法的时空分析1 本程序的计算量不是很大 所以时间复杂度极低 2 每个长整数的位数可能不同 考虑到根据位数调整空间比较麻烦 而且 容易出错 所以对每个长整数都是用同样大小的空间储存的 3 由于计算完毕 显示结果后程序即结束 所以无须释放空间 五 用户手册五 用户手册 1 本程序的运行环境为 DOS 操作系统 执行文件为 j01242 5 EXE 2 进入程序有菜单提示 选择需要的操作进入程序 3 进入程序后屏幕提示 How much digits do you need 用户输入两个数 中最多的位数 如 0 则输 1 12 则输入 2 依此类推 负号不必考虑在内 4 接着屏幕提示 Enter 2 n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论