大整数的四则运算 高质量C语言程序
C语言-四则运算

四则运算姓名:学号:班级:1.功能结构图2.程序功能进行整数的加减乘除和求模运算。
程序采用随机产生1~100的两个数进行运算每种运算有10个题目用户输入对应的答案程序提示答案的对错最后统计正确率。
每次给出两次答题机会。
3.程序流程图4.函数列表及功能5.源程序代码#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 10int f(int a,int b){ //自定义函数int result;result=a+b;return result;}int f1(int a,int b){int result;result=a-b;return result;}int f2(int a,int b){int result;result=a*b;return result;}int f3(int a,int b){int result;result=a*b/b;return result;}int mod(int a,int b){int result;result=a%b;return result;}int main(){int a,b,res,ans;int i,count;int op,c;srand((unsigned)time(NULL)); while(1){printf("\n---加减乘除运算练习系统---\n");printf("1.加法运算\n");printf("2.减法运算\n");printf("3.乘法运算\n");printf("4.除法运算\n");printf("5.求模运算\n");printf("6.混合运算\n");printf("0.退出练习\n");printf(" 请输入数字0~6:");scanf("%d",&op); //输入相应数字进行练习switch(op){case 1:printf("--请进行加法运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%100+1;b=rand()%100+1;res=f(a,b); //调用加法函数printf("%d+%d=",a,b);scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 2:printf("--请进行减法运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%100+1;b=rand()%100+1;res=f1(a,b); //调用减法函数printf("%d-%d=",a,b);scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 3:printf("--请进行乘法运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%100+1;b=rand()%100+1;res=f2(a,b); //调用乘法函数printf("%d*%d=",a,b);scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 4:printf("--请进行除法运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%10+1;b=rand()%10+1;res=f3(a,b); //调用除法函数printf("%d/%d=",a*b,b);scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 6:printf("--请进行混合运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%100+1;b=rand()%100+1;c=rand()%5; //产生0~4的随机数{switch(c) //随机出现进行混合运算{case 0:printf("%d+%d=",a,b);res=f(a,b);break;case 1:printf("%d-%d=",a,b);res=f1(a,b);break;case 2:printf("%d*%d=",a,b);res=f2(a,b);break;case 3:a=a%10+1;b=b%10+1;printf("%d/%d=",a*b,b);res=f3(a,b);break;case 4:printf("%d%%%d=",a,b);res=mod(a,b);break;}}scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 5:printf("--请进行求模运算--\n");count=0;for(i=1;i<=N;i++){a=rand()%100+1;b=rand()%100+1;res=mod(a,b); //调用求模函数printf("%d%%%d=",a,b);scanf("%d",&ans); //输入数值if(ans==res){printf("Very Good!\n");count++;}else{printf("wrong! 请重新输入\n");scanf("%d",&ans);if(ans==res)printf("Very Good!\n");elseprintf("Wrong Answer!\n");}}printf("***正确率为%.0f%%***\n",100.0*count/N); break;case 0:goto END; //转到结束}}END:printf("---练习结束---\n");return 0;}6程序运行图选取起始和加法混合运算程序开始显示6种练习方式输入0为退出。
四则运算c语言编程

四则运算c语言编程四则运算是数学中常见的基本运算,也是编程语言中必须掌握的基本知识。
在C语言中,四则运算包括加、减、乘、除四个基本运算。
本文将介绍C语言中四则运算的使用方法和注意事项。
加法运算加法运算是最基本的运算之一,C语言中使用“+”符号进行加法运算。
例如,计算两个整数a和b的和,可以使用以下代码:int a = 5;int b = 3;int sum = a + b;printf("sum = %d\n", sum);在这个例子中,首先定义了两个整数a和b,并将它们相加得到sum变量的值。
最后使用printf函数将sum的值输出到屏幕上。
减法运算减法运算也是常见的运算之一,C语言中使用“-”符号进行减法运算。
例如,计算两个整数a和b的差,可以使用以下代码:int a = 5;int b = 3;int diff = a - b;printf("diff = %d\n", diff);在这个例子中,首先定义了两个整数a和b,并将它们相减得到diff变量的值。
最后使用printf函数将diff的值输出到屏幕上。
乘法运算乘法运算也是常见的运算之一,C语言中使用“*”符号进行乘法运算。
例如,计算两个整数a和b的积,可以使用以下代码:int a = 5;int b = 3;int product = a * b;printf("product = %d\n", product);在这个例子中,首先定义了两个整数a和b,并将它们相乘得到product变量的值。
最后使用printf函数将product的值输出到屏幕上。
除法运算除法运算也是常见的运算之一,C语言中使用“/”符号进行除法运算。
例如,计算两个整数a和b的商,可以使用以下代码:int a = 5;int b = 3;int quotient = a / b;printf("quotient = %d\n", quotient);在这个例子中,首先定义了两个整数a和b,并将它们相除得到quotient变量的值。
c语言四则运算程序

c语言四则运算程序C语言是一种通用的计算机程序设计语言,用于开发软件和操作系统等工程项目。
C语言的语法简洁,可以编写出高效的代码,因此在编写四则运算程序中被广泛应用。
四则运算指的是加减乘除四种基本运算。
在C语言中,可以使用基本的算术运算符来进行四则运算,例如“+”表示加法,“-”表示减法,“*”表示乘法,“/”表示除法。
在程序中使用scanf函数获取用户输入的数字,然后通过计算输出运算结果。
下面展示一个简单的加法程序,用户输入两个数字,程序通过相加运算输出结果:#include<stdio.h>int main(){int a,b,c;printf("Please enter two numbers:");scanf("%d %d",&a,&b);c=a+b;printf("%d + %d = %d\n",a,b,c);return 0;}以上程序展示了如何使用scanf函数获取用户的输入。
scanf函数的第一个参数是格式化字符串,指定要读取的类型及其数量,例如“%d”表示整数,“%f”表示浮点数。
第二个参数是存储输入值的变量名或指针,它们必须与格式化字符串中要读取的类型相匹配。
当用户输入两个整数后,程序将它们相加并输出结果。
输出语句中使用了占位符“%d”,它们对应的是printf函数中的后三个参数,分别是a,b,c的值。
除了加法,减法、乘法、除法的处理也很相似。
下面展示一个利用switch语句实现四则运算的程序:#include<stdio.h>int main(){int a,b,c;char op;printf("Please enter two numbers:");scanf("%d %d",&a,&b);printf("Please enter the operator:");scanf(" %c",&op);switch(op){case '+': c=a+b;break;case '-': c=a-b;break;case '*': c=a*b;break;case '/': c=a/b;break;default: printf("Invalid operator!");return1;break;}printf("%d %c %d = %d\n",a,op,b,c);return 0;}这个程序通过switch语句根据输入的运算符选择相应的操作。
大整数的加减乘除实现代码总结

大整数的加减乘除实现代码总结大整数的加减乘除实现代码总结1)大正整数的加法具体思路就是模仿手算的加法,我在这里先将输入的字符串reverse便于操作,最后去掉结果的前置0即可。
注意:如果答案就是0,那么需要特殊处理。
大量的测试数据可以上交至hdu 1002[cpp]view plaincopy1.#include2.#include3.#include/doc/2c6095273.html,ing namespace std;5.int main()6.{7.int n;8. cin>>n;9.int m=0;10.int l=0;11.for(int i=1;i<=n;i++)12. {13. string s1,s2,s(10000,'0');14. cin>>s1>>s2;15. m++;16. cout<<(l++?"\n":"");17. reverse(s1.begin(),s1.end());18. reverse(s2.begin(),s2.end());19.for(int j=0;j<s1.length();j++)< bdsfid="90" p=""></s1.length();j++)<>20. s[j]=s1[j];21.int temp=0;22.for(int k=0;k<s2.length();k++)< bdsfid="94" p=""></s2.length();k++)<>23. {24. temp+=s[k]-48+s2[k]-48;25. s[k]=temp%10+'0';26. temp/=10;27. }28. s[s2.length()]=s[s2.length()]-48+temp+48;29. reverse(s.begin(),s.end());30. reverse(s1.begin(),s1.end());31. reverse(s2.begin(),s2.end());32. cout<<"Case "<<m<<":"<<endl;< bdsfid="105" p=""></m<<":"<<endl;<>33. cout<<s1<<" "<<s2<<"="<<s.substr(s.find_first_not_of('0'))<<endl</p><p>; </p><p>34.</p><p>35. }</p><p>36.return 0;</p><p>37.}</p><p>(2)大正整数的减法</p><p>同样是模拟手算,处理借位。
大一c语言编程四则运算

大一c语言编程四则运算在学习C语言过程中,四则运算是我们最常接触的基础知识之一。
四则运算包括加、减、乘、除四种基本运算,本文将以大一C语言编程四则运算为主题,详细介绍四则运算的实现方法和注意点。
一、加法运算加法运算是最简单的运算之一,只需要使用“+”符号即可实现。
例如,将两个整数a和b相加,可以使用以下代码实现:int a = 10;int b = 20;int c = a + b;其中,a和b为要相加的两个整数,c为保存结果的变量。
二、减法运算减法运算与加法运算类似,只需要使用“-”符号即可实现。
例如,将两个整数a和b相减,可以使用以下代码实现:int a = 20;int b = 10;int c = a - b;其中,a和b为要相减的两个整数,c为保存结果的变量。
三、乘法运算乘法运算需要使用“*”符号。
例如,将两个整数a和b相乘,可以使用以下代码实现:int a = 10;int b = 20;int c = a * b;其中,a和b为要相乘的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
四、除法运算除法运算需要使用“/”符号。
例如,将两个整数a和b相除,可以使用以下代码实现:int a = 20;int b = 10;int c = a / b;其中,a和b为要相除的两个整数,c为保存结果的变量。
需要注意的是,如果a和b中有一个是浮点数,那么结果也会是浮点数。
此外,如果b为0,程序将会出现除0错误。
五、复合运算除了基本的四则运算外,还有一些复合运算,例如加等于和减等于运算。
例如,将变量a加上10,可以使用以下代码实现:int a = 10;a += 10;其中,a += 10等价于a = a + 10。
减等于运算同理。
六、小数运算除了整数运算外,C语言还支持小数运算。
小数运算需要使用浮点型变量,例如:float a = 1.23;float b = 4.56;float c = a + b;其中,a和b为要相加的两个浮点数,c为保存结果的变量。
大数四则运算c语言 stm32f10

大数四则运算C语言(stm32f10)今天,我们来探讨一下在C语言中如何实现大数的四则运算。
大数指的是超出了计算机所能表示的范围的数,例如超过了int或long的表示范围。
在嵌入式系统中,我们常常会遇到需要进行大数运算的情况,比如在STM32F10系列的开发中。
实现大数的四则运算是一个非常有实际意义的问题。
在本文中,我们将首先介绍大数的表示方法,然后讨论在C语言中如何实现大数的加减乘除运算。
我们将以STM32F10系列的单片机为例,给出具体的代码实现并进行性能测试。
一、大数的表示方法大数可以通过数组或链表来表示。
在本文中,我们将使用数组来表示大数。
假设我们要表示一个非负整数,那么可以用一个数组来存储该整数的每一位数字,其中数组的每一位对应该整数的一位数字。
要表示xxx,我们可以用一个数组a[10]来存储这个数,即a[9]=1,a[8]=2, ..., a[0]=9。
这样,我们就可以很方便地对这个大数进行各种运算操作。
二、加法大数的加法实现起来比较简单。
我们只需要按照十进制加法的规则,从低位到高位依次相加,并且处理进位即可。
具体来说,我们可以按照以下步骤来实现大数的加法:1. 定义一个数组sum来存储相加的结果,数组大小为max(m,n)+1,其中m和n分别为两个加数的位数。
2. 从低位到高位依次相加,并且处理进位。
3. 将结果存入数组sum中,注意最高位可能还需要进位,因此需要判断并且处理这种情况。
4. 将数组sum转换为我们需要的形式,如字符串、数组等。
三、减法大数的减法实现方法与加法类似,只不过在计算过程中需要注意借位的处理。
具体来说,我们可以按照以下步骤来实现大数的减法:1. 定义一个数组diff来存储相减的结果,数组大小为max(m,n),其中m和n分别为被减数和减数的位数。
2. 从低位到高位依次相减,并且处理借位。
3. 将结果存入数组diff中,注意可能会出现负数的情况,需要做相应的处理。
用C语言实现超长整数的加减乘除四则运算

转, 高位在前低位在后, 然后是取被除数的前几位和除 数作循环减法, 不够减时加一位继续减直到被除数结 束, 即化除法为减法。 除法函数中, 循环相减最后剩下 的 s 串为相除余数。
2 程序实现
2. 1 加法 char 3 add (char 3 a, char 3 b)
加法函数, 传入加数、被加数, 返回加和结果。 如传入 ab 字串为 1234、5678, 则返回加和结果为 6912 { in t i= 0, 1a= strlen (a) , lb= strlen (b) , lc= la> lb? la: lb; cha r 3 s= m a lloc (1c+ 2) ; struct node 3 ha = in itlink ( ) , 3 hb = in itlink ( ) , 3 hc = in itlink () , 3 p , 3 q, 3 h; strto link (ha, a) ; strto link (hb, b) ; 将数字字符串 a、b 转化为链表, 低 位在前高位在后 p = ha > ; nex t; q hb > nex t; p、q 分别指向加数、被加数个位结点 w h ile (p ! = NU LL && q! = NU LL ) { h m alloc (sizcof (struct node) ) ; 申请相加和结点 h > data= p = > data+ q > data+ i; 结点相加, i 为进位 i= h > data 10; 取相加进位, 加和大于 10 时为 1, 否 则为 0 h > data= h > data&10; 加和大于 10 时, 和结点只 取个位 h nex t= hc ?nex t; hc > nex t h; 将和结点 h, 插入 和链表 hc p = p > nex t; q q > nex t; 加数、被加数下移一位 } w h ile (p ! = NU LL ) 加数已结束, 被加数还有数据 { h= m a lloc (sizeof (struct node) ) ; h > da ta= p > da ta+ i; i= h > da ta 10; h > da ta= h > da ta% 10; h > nex t= hc > nex t; hc > nex t= h; p = p > nex t; } w h ilc (q! = NU LL ) 被加数已结束, 加数还有数据 { h= m a lloc (sizeof (struct node) ) ; h > da ta= q > da ta+ i; i= h > da ta 10;
C语言编写四则运算

C语言编写四则运算#include<stdio.h>//计算器#include<malloc.h>#define STACK_SIZE100 //max size of the stack#define STACK_INCREMENT10 //realloc sizetypedef struct FStack//stack of int{float* base;float* top;int stacksize;}FStack;void Init(FStack* s){s->base = (float*)malloc(STACK_SIZE * sizeof(FStack));if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(FStack* s){if (s->top == s->base){return true;}else{return false;}}void Push(FStack* s, float e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (float*)realloc(s->base, (s->stacksize +sizeof(FStack)));if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}float GetTop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}float e = *(s->top - 1);return e;}void Pop(FStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}typedef struct CStack//stack of char{char* base;char* top;int stacksize;}CStack;void Init(CStack* s){s->base = (char*)malloc(STACK_SIZE * sizeof(CStack));if (!s->base){printf("overflow!\n");return;}s->top = s->base;s->stacksize = STACK_SIZE;}bool isEmpty(CStack* s){if (s->top == s->base){return true;}else{return false;}}void Push(CStack* s, int e){if (s->top - s->base >= s->stacksize){printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);s->base = (char*)realloc(s->base, (s->stacksize +sizeof(CStack)));if (!s->base){printf("overflow!\n");return;}s->top = s->base + s->stacksize;s->stacksize += STACK_INCREMENT;}*(s->top) = e;(s->top)++;}char GetTop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return 0;}char e = *(s->top - 1);return e;}void Pop(CStack* s){if (s->top == s->base){printf("stack is empty!\n");return;}s->top--;}bool isOper(char ch){if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%') {return true;}else{return false;}}int Priority(char ch){int p;switch(ch){case'(':p = 0;break;case'+':case'-':p = 1;break;case'*':case'/':case'%':p = 2;break;}return p;}float Calculate(float f1, float f2, char oper) {float f3;switch(oper){case'+':f3 = f1 + f2;break;case'-':f3 = f1 - f2;break;case'*':f3 = f1 * f2;break;case'%':f3 = (float)((int)f1 % (int)f2);break;case'/':if (f2 == 0){printf("\nDevided by zero!");exit(1);}else{f3 = f1 / f2;}break;}return f3;}float StrtoFloat(char* str, int* pos){float fRes;int i = *pos;int k;char n[50];for(k= 0; str[i] >= '0'&& str[i] <= '9'|| str[i] == '.'; i++, k++) {n[k] = str[i];}n[k] = '\0';*pos = i;fRes = atof(n);return fRes;}bool Check(char* str){int i = 0;while (str[i] != '\0'){if (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/' && str[i] != '%' && str[i] != '.' && str[i] != '(' && str[i] != ')' && (str[i] < '0' || str[i] > '9')){return false;}i++;}return true;}void main(){char exp[100];int i;float f, f1, f2;char oper;FStack fstack;CStack cstack;Init(&fstack);Init(&cstack);printf("The expression is:");gets(exp);if (!Check(exp)){printf("input error! exit now!\n");exit(1);}for (i = 0; exp[i] != '\0' && exp[i] != -52; i++){if (!isOper(exp[i])){f = StrtoFloat(exp, &i);Push(&fstack, f);}if (isOper(exp[i])){if (!isEmpty(&cstack)){while (!isEmpty(&cstack) && Priority(exp[i]) <= Priority(GetTop(&cstack))){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Push(&cstack, exp[i]);}else{Push(&cstack, exp[i]);}}else if (exp[i] == '('){Push(&cstack, exp[i]);}else if (exp[i] == ')'){while (GetTop(&cstack) != '(' && !isEmpty(&cstack)){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}Pop(&cstack);}}while (!isEmpty(&cstack)){oper = GetTop(&cstack);Pop(&cstack);f2 = GetTop(&fstack);Pop(&fstack);f1 = GetTop(&fstack);Pop(&fstack);f = Calculate(f1, f2, oper);Push(&fstack, f);}printf("\nThe result is:%f\n", GetTop(&fstack));Pop(&fstack);}。
- 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.函数功能:void init(int a[],int b[],int *p1,int *p2)1.功能说明:读入所要计算的数值,数据初始化2.int plus(int a[],int b[],int c[],int m,int n) 3. 功能说明:两个正整数相加 4. 3. void change(inta[],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)long c[]数组flag(1为负)的功能说明:打印带符号8. int write(long a[],int flag)功能说明:将键盘敲入的数字按4位一组放入long a[],且将符号放入flag9. void mul(long a[],int first,int last,long b[],long c[])c答案放到b,位乘以first到last的第,a功能说明:乘法.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 last为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<iostream.h>#include<math.h>#include<stdio.h>#define MAX 40 //可以修改,此时最大运算位数为四十位#define N 10 //此处应为最大位数除以4void init(int a[],int b[],int *p1,int *p2) //输入{int i,j;char r,s;for(i=0;i<MAX;i++){a[i]=0;b[i]=0;}牰湩晴尨请输入处理的第一个数的值:);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;牰湩晴尨请输入处理的第二个数的值:);s=getchar();if(s==45){b[0]=s;for(j=1;(s=getchar())!='\n';j++)b[j]=s-48;}else{b[1]=s-48;for(j=2;(s=getchar())!='\n';j++)b[j]=s-48;}*p2=j;}int plus(int a[],int b[],int c[],int m,int n) //加法运算{int d[MAX]={0},i,j,k;for(i=0;i<MAX;i++) c[i]=0;if(a[1]==0){for(i=0;i<n;i++) c[i]=b[i];return(i);}if(b[1]==0){for(i=0;i<m;i++) c[i]=a[i];return(i);}for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++){d[k]=a[i]+b[j]+d[k];if(d[k]>9){d[k+1]++;d[k]=d[k]-10;}}while(i>0){d[k]=d[k]+a[i];if(d[k]>9){d[k+1]++;d[k]=d[k]-10;}i--;}while(j>0){d[k]=d[k]+b[j];if(d[k]>9){d[k+1]++;d[k]=d[k]-10;}k++;j--;}d[0]=a[0]+b[0];c[0]=d[0];if(d[k]==0)k--;for(i=1;k>0;i++,k--)c[i]=d[k];return(i);}void change(int a[],int b[],int m,int n) //变号运算{int i,j;int c[MAX];if(m<=n&&b[0]==45){for(i=1;i<m;i++)c[i]=a[i];for(i=1,j=1;j<n;i++,j++)a[i]=b[j];for(i=1,j=1;j<n;i++,j++)b[i]=c[j];for(j=i;j<MAX;j++)b[j]=0;return;}if(m>=n&&a[0]==45){a[0]=0;b[0]=45;return;}减法运算// int minus(int a[],int b[],int d[],int m,int n){int c[MAX]={0},i,j,k;for(i=0;i<MAX;i++)d[i]=0;for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++){if(c[k]<0||a[i]<b[j]){c[k]=c[k]+a[i]-b[j];if(c[k]<0){c[k]+=10;c[k+1]--;}}else c[k]=a[i]-b[j];}while(i>0){c[k]=c[k]+a[i];if(c[k]<0){c[k]+=10;c[k+1]--;}k++;i--;}c[k]=a[i]+c[k];while(c[k]<=0&&k>0)k--;for(i=1;k>0;i++)d[i]=c[k--];return(i);}void minusfun(int a[],int b[],int d[],int m,int n) 判断是否两异号数相加// {int i,j,f=0,g=0;if(a[1]==0){if(b[0]!=0) printf(-);for(i=1;i<n;i++)printf(%d,b[i]);printf(\);return;}if(b[1]==0){if(a[0]!=0)printf(-);for(i=1;i<m;i++)printf(%d,a[i]);printf(\);return;}if(m==n){for(i=1;i<m;i++){if((a[i]<b[i]&&b[0]==45)||(a[i]>b[i]&&a[0]==45)) g=1;if(a[i]!=b[i]) f=1;}if(f==0){printf(return;}if(g==1){change(a,b,m,n);printf(-);j=minus(a,b,d,n,m);for(i=1;i<j;i++) printf(%d,d[i]);printf(\);return;}else if(a[0]==45&&b[0]==0) {j=minus(b,a,d,n,m);for(i=1;i<j;i++)printf(%d,d[i]);printf(\);return;}else{j=minus(a,b,d,m,n);for(i=1;i<j;i++)printf(%d,d[i]);printf(\);return;}}if(m>n&&b[0]==45){j=minus(a,b,d,m,n);for(i=1;i<j;i++) printf(%d,d[i]); printf(\);return;}if(m<n&&b[0]==45){change(a,b,m,n);printf(-);j=minus(a,b,d,n,m);for(i=1;i<j;i++)printf(%d,d[i]);printf(\);return;}if(m>n&&a[0]==45){change(a,b,m,n);printf(-);j=minus(a,b,d,m,n);for(i=1;i<j;i++)printf(%d,d[i]);printf(\);return;}if(m<n&&a[0]==45){j=minus(b,a,d,n,m);for(i=1;i<j;i++)printf(%d,d[i]);printf(\);return;}}int multi(int a[],int b[],int c[],int m,int n) //正整数乘法运算{int d[MAX]={0},e[MAX]={0},i,j,k,r,s,x,y;for(i=0;i<MAX;i++)c[i]=0;if(m<=n){for(i=m-1,s=1;i>0;i--,s++){for(r=0;r<MAX;r++){d[r]=0;e[r]=0;}for(j=n-1,k=1*s;j>0;j--,k++){d[k]=a[i]*b[j]+d[k];if(d[k]>9) {d[k+1]=d[k+1]+d[k]/10;d[k]=d[k]_x0010_;}}if(d[k]==0)k--;y=k;for(r=1;k>0;r++,k--)e[r]=d[k];for(r=1;r<MAX;r++)d[r]=e[r];if(s==1)x=plus(c,d,e,0,y+1);elsex=plus(c,d,e,y,y+1);for(r=0;r<MAX;r++)c[r]=e[r];}}else if(m>n){for(j=n-1,s=1;j>0;j--,s++) {for(r=0;r<MAX;r++){d[r]=0;e[r]=0;}for(i=m-1,k=1*s;i>0;i--,k++) {d[k]=a[i]*b[j]+d[k];if(d[k]>9){d[k+1]=d[k+1]+d[k]/10; d[k]=d[k]_x0010_;}}if(d[k]==0)k--;y=k;for(r=1;k>0;r++,k--)e[r]=d[k];for(r=1;r<MAX;r++)d[r]=e[r];if(s==1)x=plus(c,d,e,0,y+1);elsex=plus(c,d,e,y,y+1);for(r=0;r<MAX;r++)c[r]=e[r];}return(x);}void print(long c[],int flag) //输出{int i;for(i=N-1;i>=0;i--)if(c[i])break;if(flag)printf(-);printf(M,c[i--]);for(;i>=0;i--){if(c[i]/1000)printf( %4ld,c[i]);else if(c[i]/100)printf( 0%3ld,c[i]);else if(c[i]/10)printf( 00%2ld,c[i]);elseprintf( 000%1ld,c[i]);}}int write(long a[],int flag) //将键盘敲入的数字按4位一组放入long a[],且将符号放入flag {char num[N*4];char temp;int i,j,k;for(i=0;i<N*4;i++){num[i]=getchar();if(num[i]==10){i--;break;}if(num[i]==45){flag=(flag+1)%2;i--;}k=0;for(j=0;j<=i/2;j++){temp=num[j];num[j]=num[i-k];num[i-k]=temp;k++;}k=1;for(j=0;j<=i;j++)switch(k){case 1:a[j/4]+=(long)(num[j]-48);k++; break;case 2:a[j/4]+=(long)(num[j]-48)*10;k++; break;case 3:a[j/4]+=(long)(num[j]-48)*100;k++; break;case 4:a[j/4]+=(long)(num[j]-48)*1000;k=1; break;}return flag;}void mul(long a[],int first,int last,long b[],long c[]) //乘法{int i,j;int max_i;long temp;for(max_i=N-1;max_i>=0;max_i--)if(b[max_i])break;for(i=0;i<=max_i;i++)if(b[i])for(j=first;j<=last;j++){temp=a[j]*b[i];c[i+j-first]+=temp_x0010_000;c[i+j-first+1]+=((temp/10000)+(c[i+j-first]/10000));c[i+j-first]=c[i+j-first]_x0010_000;}int compara(long a[],int first,int last,long b[]) //比较数组a,b大小{int flag=2;int i;int k=0;int len;for(len=N-1;len>=0;len--)if(b[len])break;if((first-last)>=len){if((first-last)>len)flag=1;elsefor(i=len;i>=0;i--){if(a[first-k]>b[i]){flag=1;break;}if(a[first-k]<b[i]){flag=0;break;}k++;}}elseflag=0;returnflag;}int minusd(long a[],int first,int last,long b[],long c[],int flag){int notchange;int i,k=0;int max;notchange=compara(a,first,last,b);if(notchange){for(i=last;i<=first;i++){if(a[i]<b[k]){a[i]+=10000;a[i+1]--;}c[i]=a[i]-b[k];k++;}}else{flag=(flag+1)%2;for(max=N-1;max>=0;max--)if(b[max])break;for(i=0;i<=max;i++){if(b[i]<a[last+k]){b[i]+=10000;b[i+1]--;}c[i]=b[i]-a[last+k];k++;}}return flag;}void div(long a[],long b[],long c[],int fa) //除法{long result[N+1]={0};int len_a;int k;int i;printf(\);print(a,fa);for(len_a=N-1;len_a>=0;len_a--)if(a[len_a])break;k=len_a;while(compara(a,len_a,0,b))while(!compara(a,len_a,k,b))k--;c[k]=1;mul(c,k,k,b,result);while(compara(a,len_a,k,result)){c[k]++;for(i=N-1;i>=0;i--)result[i]=0;mul(c,k,k,b,result);}c[k]--;for(i=N-1;i>=0;i--)result[i]=0;mul(c,k,k,b,result);minusd(a,len_a,k,result,a,0);for(i=N-1;i>=0;i--)result[i]=0;for(len_a=N-1;len_a>=0;len_a--)if(a[len_a])break;k=len_a;}}void menu() //菜单{printf(==================================大器算计数整==================================);\n); 退出0.减法2. 3.乘法4.除法printf(.加法:); 中选择牰湩晴尨请从1~4return; }void main() //主函数{int flag;int max;int fa;int fb;long ad[N],bd[N],cd[2*N];int a[MAX]={0},b[MAX]={0},c[MAX]={0},d[MAX]={0};char s;int m,n,i,j;int *p1,*p2;p1=&m;p2=&n;s=getchar();getchar();while(1){switch(s){case '0':return;case '1':牰湩晴尨格式为:a+b\n); init(a,b,p1,p2);if(a[1]==0&&b[1]==0){牰湩晴尨结果是:a+b=0\n); break;}if(a[0]==b[0]){j=plus(a,b,c,m,n);牰湩晴尨结果是:a+b=);if(c[0]!=0)printf(-);for(i=1;i<j;i++)printf(%d,c[i]);}else{牰湩晴尨结果是:a+b=); minusfun(a,b,d,m,n);}printf(\);break;case '2':牰湩晴尨格式为:a-b\n); init(a,b,p1,p2);if(b[0]==0)b[0]=45;else if(b[0]==45)b[0]=0;if(a[1]==0&&b[1]==0){牰湩晴尨结果是:a-b=0\n);break;}if(a[0]==b[0]){j=plus(a,b,c,m,n);牰湩晴尨结果是:a-b=);if(c[0]!=0)printf(-);for(i=1;i<j;i++)printf(%d,c[i]);}else{牰湩晴尨结果是:a-b=);minusfun(a,b,d,m,n);}printf(\);break;case '3':init(a,b,p1,p2);if(a[1]==0||b[1]==0){牰湩晴尨结果是:0\n);break;}j=multi(a,b,c,m,n);牰湩晴尨结果是:);if((a[0]==45&&b[0]==0)||(b[0]==45&&a[0]==0)) printf(-);for(i=1;i<j;i++)printf(%d,c[i]);printf(\);break;case '4':flag=fa=fb=0;for(max=0;max<N;max++)ad[max]=bd[max]=cd[max]=0;牰湩晴尨请输入被除数:);fa=write(cd,fa);printf(\请输入除数:);fb=write(bd,fb);div(cd,bd,ad,fa);flag=(fa+fb)%2;printf( / );print(bd,fb);printf( = );print(ad,flag);printf(();print(cd,0);printf()\n);break;}menu();s=getchar();getchar();}}6.调试结果程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。