1、大数处理沈阳航空工业学院课 程 设 计 大数处理班级 / 学号 200604021090 学 生 姓 名 刘 玮 航 指 导 教 师 赵 晨 光 沈阳航空工业学院课 程 设 计 任 务 书课 程 名 称 软件技术基础课程设计 院(系) 电子信息工程学院 专业 电子工程 班级 6402103 学号 200604021090 姓名 刘玮航 课程设计题目 大数处理 课程设计时间: 2008 年 7 月 14 日至 2008 年 7 月 27 日课程设计的内容及要求:由于计算机所能表示和处理的数的有效数字位数有限,因此在进行大数运算时会产生溢出要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)
2、。 提示:大数计算的因数和结果精度一般是少则数十位,多则几万位。在C语言中定义的类型中精度最多只有二十多位,因而我们采取用链表存贮的方式来存放大数。在计算中会用到从高位开始计算,和从低位开始计算数值的两种情况。所以我们将链表定义为双向链表,其中为一个单元来存贮数据,一个指针指向前方的数据,另一个指向后的数据。从而完成大数运算指导教师 2008 年 7 月 11 日负责教师 年 月 日学生签字 年 月 日一、 题目分析 1、在本设计题目中要求是大数的四则运算,但由于计算机所能表示和处理的数的有效数字位数有限,因此在进行大数运算时会产生溢出要求用C语言编写程序实现大整数的四则运算(加、减、乘、除)
3、。我们知道整型数只能存储16位的数,浮点型也就只能32位的数,对于题目要求的几百位根本不能实现,所以只有用链表或数组两种方法来实现大数的四则运算。 由于链表的方法对我来说实在是比较复杂,所以我选择了用数组的方法来实现设计题目的要求。只要将从1到9的数均放在一个字符串中,只要减去48即可得到数字结果(依据ASCII的值)。 2、程序主要模块:(1)大数加法模块;(2)大数减法模块;(3)大数乘法模块;(4)除法模块。 3、子程序:(1)读入函数;(2)比较函数;(3)大数减法子函数(4)大数乘法子函数。二、设计过程(设计流程图)1、本设计程序主要是由大数加、减、乘、除运算模块及各个子程序组成,经
4、过对变量及数组的定义,分别调用加法函数add、减法函数sub、乘法函数mul,除法函数divid,进行大数的四则运算。2、设计流程图(1)输入函数输入字符并统计字符串长度,将字符串的每个字符减去48即得到了哈有19的数,随后按顺序存放到数组a中,若输入的字符串不是19,则输出“输入出错”,程序退出。图1 输入函数的流程图(2)大数加法运算 加法函数是先比较数组a与数组b的长短,将长的数组字长存放到max_len 中。然后从低位算起,把对应的位相加,之后加上前一位的进位。判断最后一位是否还要向前进位,经过循环实现加法运算。图2 加法函数流程图(3)比较函数 判断数组a、b的长度,当a数组长返回1
5、,当b数组长返回0;当数组a、b相等时,利用for循环依次比较存放在数组中的值,则根据不同的情况返回不同的值。图3 比较函数流程图(4)大数减法子函数 此函数默认数组ab,过for循环语句,从低位到高位依次相减,并将得到的结果存放到数组c中,同时在相减过程中要充分考虑错位相减操作。图4 大数减法子程序流程图(5)大数减法先通过调用大数减法子程序比较两个数组aMAX和bMAX的长短,记下返回的数值k。当k等于2时两数组相等,直接输出减法结果0;当k等于1时,调用函数subABigerB(a,b,c),得到加法结果;当k等于0时,数组a小于数组b,调用函数subABigerB(b,a,c),得到减
6、法结果。图6 大数减法流程图(6)数组乘法子函数 此函数通过for循环语句,依次将m与数组a中的每一位相乘。如果所得的结果大于 10进行进位操作,并把所得的结果存放到数组c中。图6 数组乘法子函数流程图(7)大数乘法 此函数先调用数组乘法子函数,利用for循环把一个数组的第一位乘以另一个数组中的每一位,把第二位乘得的结果向前移一位,把第三位乘出的结果向前移两位,依次类推。最后将得到的所有结果通过调用的加法函数累加起来,最终得到运算结果。图7 大数乘法流程图(8)大数除法 此函数先调用大数减法子函数比较数组a与数组b的大小,并将比较的结果放入k中。当k等于2时,直接输出商1,余数0;当k等于1时,将被除数减去除数,若余数大于0时一直循环,利用大数加法函数累加循环次数,最后输出数组c,即为商的结果。当k等于0时,直接输出商0,余数数组a。图8 大数除法函数流程图(9)主函数 通过定义清零后,分别输入数组a与数组b的值,之后分别进行大数的加、减、乘、除四则运算。 图9 数函数流程图+三、调试过程及实验结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1