大整数的四则运算高质量C语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计题目: 大整数的四则运算
1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。
课程设计要求:采用模块化程序设计
源程序中应有足够的注释
必须上机调试通过
注重算法运用,优化存储效率与运算效率
需提交源程序(含有注释)及相关文件(数据或数据库文件);
提交设计报告书。
2. 总体结构:
加法
数据初
判断运算符
减法乘法除法退出
正整数非正整转变为转变为
转变为
流程图:
3 •概要设计:
1) 加法运算
利用两个整形数组分别存放两个数a 和b 的每一位的数值,最低位存放符号。如果a 和b 同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10 ,然后反序将计
算后的各个位的数值保存在一个数组C并输出,如果a和b都是负数则在前面要输出负号,
函数的返回值为C的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10 再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组C 并输出,在前面要输出相应的符号位。
2) 减法运算
可将减法运算转化为加法运算,只要将被减数的符号改变即可。
3) 乘法运算
符号存放在最低位,将其中一个数a 的每一位分别乘以另一个数b 的每一位,并将结果保存在数组C 中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在C 的值加上本次计算后的值,并保存在C自身中,直到a的最高位,最后输出符号和相应的计
算结果。
4) 除法运算
利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。
4. 函数功能:
1. void init(int a[],int b[],int *p1,int *p2)
2. 功能说明:读入所要计算的数值,数据初始化
3. int plus(int a[],int b[],int C[],int m,int n)
4. 功能说明:两个正整数相加
3. void Change(int a[],int b[],int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算
5. int minus(int a[],int b[],int d[],int m,int n)
6. 功能说明:两个正整数相减
5. void minusfun(int a[],int b[],int d[],int m,int n) 功能说明:判断两个异号数的相加方式
7. int multi(int a[],int b[],int C[],int m,int n)
8. 功能说明:两个正整数相乘
7. void print(long C[],int flag)
功能说明:打印带符号flag ( 1为负)的Iong c[]数组
8. int write(long a[],int flag)
功能说明:将键盘敲入的数字按4位一组放入Iong a[],且将符号放入flag
9. void mul(long a[],int first,int last,long b[],long C[])
功能说明:乘法,a的第last到first位乘以b,答案放到C
10. int compara(long a[],int first,int last,long b[])
功能说明:比较数组a,b大小,first last分别为a的最高最低位
11. int minusd(long a[],int first,int last,long b[],long c[],int flag)
功能说明:a为被减数,first IaSt为a最咼最低位,b为减数,c为差,flag为符号
12. void div(long a[],long b[],long c[],int fa)
功能说明:除法,a除以b的值放入c,fa为a符号
13. void menu()
功能说明:打印菜单函数
14. void main()
功能说明:主函数,调用其余函数,计算相应功能的值并输出。
5. 源程序:
#include
#define MAX 40 //可以修改,此时最大运算位数为四十位
#define N 10 //此处应为最大位数除以 4
void init(int a[],int b[],int *p1,int *p2) //输入
{
int i,j;
char r,s; for(i=0;i { a[i]=0; b[i]=0; } printf(" 请输入处理的第一个数的值:"); r=getchar(); if(r==45) { a[0]=r; for(i=1;(r=getchar())!='\n';i++) a[i]=r-48; } else { a[1]=r-48; for(i=2;(r=getchar())!='\n';i++) a[i]=r-48; *p1=i; }