大整数的四则运算 高质量C语言程序
- 格式:doc
- 大小:412.64 KB
- 文档页数:20
四则运算姓名:学号:班级: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语言中使用“+”符号进行加法运算。
例如,计算两个整数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语言中,可以使用基本的算术运算符来进行四则运算,例如“+”表示加法,“-”表示减法,“*”表示乘法,“/”表示除法。
在程序中使用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语言编程四则运算为主题,详细介绍四则运算的实现方法和注意点。
一、加法运算加法运算是最简单的运算之一,只需要使用“+”符号即可实现。
例如,将两个整数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语言中如何实现大数的四则运算。
大数指的是超出了计算机所能表示的范围的数,例如超过了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语言编写四则运算#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);}。
C语⾔实现⼤数四则运算⼀、简介众所周知,C语⾔中INT类型是有限制,不能进⾏超过其范围的运算,⽽如果采⽤float类型进⾏运算,由于float在内存中特殊的存储形式,⼜失去了计算的进度。
要解决整个问题,⼀种解决⽅法是通过字符串数组实现数据的存储,然后实现它们之间四则运算的函数。
⼆、数据结构为了实现字符数组之间的运算,要考虑数值的正负性,数字的长度以及具体存储的数字typedef struct num{int len; //数值长度char symbol; //数字正负形int number[LEN]; //数组}NUM,*SNUM;三、函数整个程序使⽤了⼀下的函数SNUM expToNum(char exp[]);//将输⼊字符串转换为对应结构体void reverse(int a[],int len);//数组逆序int compareAbs(SNUM left,SNUM right);//⽐较两数绝对值⼤⼩SNUM anti_add(SNUM left,SNUM right);//元加法SNUM anti_sub(SNUM left,SNUM right);//元减法SNUM add(SNUM left,SNUM right); //加法SNUM sub(SNUM left,SNUM right); //减法SNUM multiply(SNUM left,SNUM right); //乘法SNUM divide(SNUM left,SNUM right); //除法SNUM mod(SNUM left,SNUM right);//求摸运算函数的定义1 SNUM multiply(SNUM left,SNUM right){2//left作为被乘数,right作为乘数3 SNUM mul = (struct num*)malloc(sizeof(struct num));4int i,j;5for(i=0;i<LEN;i++){6 mul->number[i]=0;7 }89if(left->symbol==right->symbol){10 mul->symbol='+';11 }else{12 mul->symbol='-';13 }14151617for(i=0;i<right->len;i++){18for(j=0;j<left->len;j++){19 mul->number[i+j]+=left->number[j]*right->number[i];20 }21 }22232425////进位化简26int len = left->len+right->len-1; //长度2728//29for(i=0;i<len;i++){30 mul->number[i+1]+=mul->number[i]/10;31 mul->number[i]%=10;3233if(i==len-1){34if(mul->number[i+1]!=0){ //还存在⾼位35 len++;36 }else{ //进位完毕,退出37break;38 }39 }40 }4145for(i=len-1;i>=0;i--){46if(mul->number[i]==0){47 len--;48 }else{49break;50 }51 }52if(len==0){53 len=1;54 }5556 mul->len=len;5758free(left);59free(right);60return mul;61 }62636465//减⼀个数等于加上⼀个数的相反数66 SNUM sub(SNUM left,SNUM right){67 right->symbol=(right->symbol=='+'?'-':'+');68return add(left,right);69 }7071//⽐较两数绝对值⼤⼩72int compareAbs(SNUM left,SNUM right){73if(left->len>right->len){ //left的位数更多74return1;75 }else if(left->len<right->len){ //right的位数更多76return -1;77 }else{78int i=left->len-1;79while(i>=0){ //从⾼位开始⽐较80if(left->number[i]>right->number[i]){81return1;82 }83if(left->number[i]<right->number[i]){84return -1;85 }86 i--;87 }88return0; //两者绝对值相等89 }90 }919293 SNUM expToNum(char exp[]){9495 SNUM temp=(struct num*)malloc(sizeof(struct num)); 9697int locan=0;98//确定正负号99if(exp[0]=='+'||exp[0]=='-'){100 temp->symbol=exp[0];101 locan++;102 }else{103 temp->symbol='+';104 }105106//输⼊到数组107int count=0;108while(exp[locan]!='\0'){109 temp->number[count]=exp[locan]-'0';110 locan++;111 count++;112 }113114int i=count;115for(i=count;i<LEN-1;i++){116 temp->number[i]=0;117 }118119 temp->len=count;120121122//数组逆序从个位开始计算123 reverse(temp->number,temp->len);124125return temp;129void reverse(int a[],int len){130int i,temp;131for(i=0;i<len/2;i++){132 temp = a[i];133 a[i] = a[len-1-i];134 a[len-1-i] = temp;135 }136 }137138139140//元加法,假设left和right都为正数或0141 SNUM anti_add(SNUM left,SNUM right){142int i=0;143144while(i<left->len||i<right->len){145int sum=0;146 sum=left->number[i]+right->number[i]; 147if(sum>=10){148 left->number[i]=sum%10;149 left->number[i+1]+=sum/10; //进位150 }else{151 left->number[i]=sum; //不进位152 }153154 i++;155 }156157if(left->number[i]!=0){158 i+=1;159 }160161 left->len=i;162return left;163 }164165//实现正数或负数的加法166 SNUM add(SNUM left,SNUM right){167 SNUM temp;168if(left->symbol==right->symbol){169 temp = anti_add(left,right);170 }else{171if(compareAbs(left,right)>=0){172 temp = anti_sub(left,right);173174 }else{175 temp = anti_sub(right,left);176 }177 }178return temp;179 }180181//元减法,假设left>=right,left和right均为正数或0 182 SNUM anti_sub(SNUM left,SNUM right){183int i=0;184int count=0;185while(i<left->len){186int temp = left->number[i]-right->number[i]; 187if(temp<0){188 left->number[i+1]-=1;189 left->number[i]=temp+10; //退位190 }else{191 left->number[i]=temp;192 }193194 count+=1;195196 i++;197 }198199200201202//舍掉多余的0203for(i=count-1;i>=0;i--){204if(left->number[i]==0){205 count--;206 }else{207break;208 }213 }214215 left->len=count; 216return left;217218 }。
c语言程序做四则运算四则运算是我们经常在数学中使用的一种基本运算方式,它包括加法、减法、乘法和除法。
通过这些运算,我们可以进行数字之间的相加、相减、相乘和相除,从而得到我们所需要的结果。
首先,让我们来谈谈加法运算。
当我们需要将两个数相加时,我们可以使用加法运算符“+”。
例如,如果我们想知道5和3相加的结果是多少,我们只需要将它们相加,得到的结果是8。
加法可以帮助我们计算两个数的总和或总量。
接下来是减法运算,减法是指从一个数中减去另一个数。
我们可以使用减法运算符“-”来实现这个过程。
例如,如果我们想知道8减去3的结果是多少,我们只需要进行减法运算,得到的结果是5。
减法可以帮助我们计算两个数之间的差别或减量。
然后是乘法运算,乘法是指将两个数相乘得到结果。
我们可以使用乘法运算符“*”来实现这个过程。
例如,如果我们想知道4乘以6的结果是多少,我们只需要进行乘法运算,得到的结果是24。
乘法可以帮助我们计算两个数的乘积或倍数。
最后是除法运算,除法是指将一个数除以另一个数得到结果。
我们可以使用除法运算符“/”来实现这个过程。
例如,如果我们想知道12除以3的结果是多少,我们只需要进行除法运算,得到的结果是4。
除法可以帮助我们计算两个数之间的比率或商数。
通过四则运算,我们可以处理各种数学问题,例如求解方程、计算面积和体积等。
在日常生活中,四则运算也经常被应用于计算购物总额、分摊费用、计算时间等方面。
四则运算不仅仅是数学运算,更是人们思维和逻辑能力的锻炼。
通过运用四则运算,我们可以培养自己的思考能力、解决问题的能力和逻辑推理的能力。
此外,四则运算还要求我们具备良好的数学基础和计算技巧,提高我们的计算效率。
在学习四则运算的过程中,我们需要注意几点。
首先,我们要熟悉四则运算的规则和运算符的使用。
其次,我们要掌握进位和借位的方法,避免出错。
最后,我们要进行反复练习,巩固所学知识,提高计算的准确性和速度。
总之,四则运算是我们日常生活和学习中不可或缺的运算方式。
C语⾔课程设计⼤整数运算明⼈不说暗话,直接上,输⼊提取码baxj即可下载。
该⼤整数运算系统⽤于对有符号的位数不超过500位的⼤整数进⾏加、减、乘、除四则运算和计算N(0<=N<=10000)的阶乘。
注意事项:1、操作期间,进⾏四则运算时若⼤整数为正数请直接省略‘+ ’号。
\n");2、该⼤整数运算系统设定处理位数不超过500位的⼤整数四则运算和计算N(0<=N<=10000)的阶乘,可根据情况调整相关程序参数,进⾏位数更⼤的四则运算和N值更⼤的阶乘计算。
3、为了保证程序设计流程的简捷性,该系统没有很⾼的操作容错性能,所以欲执⾏某项功能,请务必根据提⽰输⼊正确的选项值进⾏操作。
课程设计中包含程序,程序运⾏所需⽂件,设计报告(电⼦版和打印版),应有尽有,欢迎⼩伙伴们在本博客的⽂件中下载使⽤。
下⾯的程序正常运⾏需要在百度⽹盘中下在相应输出⽂件,否则⽆法正常使⽤哦。
1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<ctype.h>5 #include <conio.h>6const int N1=40000;7const int N2=510;89void Display(); //显⽰主菜单10char* Input(char str[]); //输⼊11void Output(int result[],int j); //输出12int Add(char str1[],char str2[],int result[]); //相加13int Sub(char str1[],char str2[],int result[]); //相减14int Mul(char str1[],char str2[],int result[]); //相乘15int Div(char str1[],char str2[],int result[]); //相除16int Fac(int n,int result[]); //计算阶乘17int Substract(int *bjs,int *js,int Num_len1,int Num_len2); //计算差的位数18//以上函数返回值为int类型的均是结果的⾸位⾮零数字在数组中的下标,⼩于0表⽰⽆结果不输出19int IsBig_num(char str1[],char str2[]); //⽐较2021int main()22 {23int select,op,n,rs=-1,result[N1];24//rs表⽰该数的⾸位⾮零数字在数组中的下标,⼩于0表⽰⽆结果不输出25char str1[N2],str2[N2],*Fir_num,*Sec_num;26while(1)27 {28 Display();29 printf("\n请输⼊欲执⾏功能的选项值(0-4): ");30 scanf("%d",&select);31switch(select)32 {33case1:34 printf("\n\t\t1 加法运算\n");35 printf("\n\t\t2 减法运算\n");36 printf("\n\t\t3 乘法乘法\n");37 printf("\n\t\t4 除法运算\n");38 printf("\n请输⼊对应运算的选项值(1-4): ");39 scanf("%d",&op);40 memset(result,0,sizeof(result));41switch(op)42 {43case1:44 printf("\n请输⼊⼀个不超过500位的⼤整数作为⼀个加数\n");45 Fir_num=Input(str1);46 printf("\n请输⼊另⼀个不超过500位的⼤整数作为另⼀个加数\n");47 Sec_num=Input(str2);48 printf("\n两数之和为\n");49 rs=Add(Fir_num,Sec_num,result);50break;51case2:52 printf("\n请输⼊⼀个不超过500位的⼤整数作为被减数\n");53 Fir_num=Input(str1);54 printf("\n请输⼊另⼀个不超过500位的⼤整数作为减数\n");55 Sec_num=Input(str2);56 printf("\n两数之差为\n");57 rs=Sub(Fir_num,Sec_num,result);58break;59case3:60 printf("\n请输⼊⼀个不超过500位的⼤整数作为⼀个因数\n");61 Fir_num=Input(str1);66break;67case4:68 printf("\n请输⼊⼀个不超过500位的⼤整数作为被除数\n");69 Fir_num=Input(str1);70 printf("\n请输⼊另⼀个不超过500位的⼤整数作为除数\n");71 Sec_num=Input(str2);72 printf("\n两数之商为\n");73 rs=Div(Fir_num,Sec_num,result);74break;75default:76 printf("\n⽆效输⼊\n");77 }78break;79case2:80 printf("\n请输⼊N(0<=N<=10000)\n");81 scanf("%d",&n);82if(n>10000||n<0)83 printf("\n错误输⼊(0<=N<=10000)\n");84else85 {86 memset(result,0,sizeof(result));87 rs=Fac(n,result);88 printf("\n%d!为\n",n);89 }90break;91case3:92 FILE *fp;93if(NULL==(fp=fopen("系统简介.txt","r")))94 printf("⽂件打开失败!\n");95char ch1;96while(EOF != (ch1=fgetc(fp)))97 {98 printf("%c",ch1);99 }100 fclose(fp);101break;102case4:103 FILE *fq;104if(NULL==(fq=fopen("开发⼈员.txt","r")))105 printf("⽂件打开失败!\n");106char ch2;107while(EOF != (ch2=fgetc(fq)))108 {109 printf("%c",ch2);110 }111 fclose(fq);112break;113case0:114return0;115default:116 printf("\n⽆效输⼊\n");117 }118if(rs >= 0)119 {120 Output(result,rs);121 rs=-1;122 }123 printf("\n__________________________________________\n"); 124 printf("\n按任意键继续 . . . ");125 getch();126 system("cls");127 }128 }129//主菜单130void Display(void)131 {132 printf("\n* * * * * * * * * * * * * * * * * * * * *\n");133 printf("\t ⼤整数运算系统 \n");134 printf("* * * * * * * * * * * * * * * * * * * * *\n");135 printf("\t\t1 四则运算\t \t\n");136 printf("\t\t2 计算N! \t\t\n");137 printf("\t\t3 系统简介 \t\t\n");138 printf("\t\t4 开发⼈员 \t\t\n");139 printf("\t\t0 退出 \t\t\n");140 printf("* * * * * * * * * * * * * * * * * * * * *\n");141 }142//输⼊函数143char* Input(char str[])144 {145 scanf("%s",str);150 p--;151return p;152 }153//输出函数154void Output(int result[],int j)155 {156int i;157for(i=j;i>=0;i--)158 printf("%d",result[i]);159 printf("\n");160 }161//加法函数162int Add(char str1[],char str2[],int result[])163 {164int Num_len1,Num_len2,l,i,j;165if(str1[0]=='-'||str2[0]=='-')166 {167if(str1[0]=='-'&&str2[0]=='-')168 {169 printf("-");170 str1++;171 str2++;172 }173else174 {175if(str1[0]=='-')176 {177if(IsBig_num(str1+1,str2)==0)178return0;179else if(IsBig_num(str1+1,str2)<0)180return Sub(str2,str1+1,result);181else182 {183 printf("-");184return Sub(str1+1,str2,result);185 }186 }187else188 {189if(IsBig_num(str1,str2+1)==0)190return0;191else if(IsBig_num(str1,str2+1)>0)192return Sub(str1,str2+1,result);193else194 {195 printf("-");196return Sub(str2+1,str1,result);197 }198 }199 }200 }201 strrev(str1);202 strrev(str2);203 Num_len1=strlen(str1);204 Num_len2=strlen(str2);205if(Num_len1>=Num_len2) {//按较⼤数的位数将⼩数⾼位⽤0补齐206 l=Num_len1;207for(i=Num_len2;i<l;i++)208 str2[i]='0';209 }210else{211 l=Num_len2;212for(i=Num_len1;i<l;i++)213 str1[i]='0';214 }215for(i=0;i<l;i++){216 result[i] += str1[i]-'0'+str2[i]-'0';//⼀⼀对应-'0'217if(result[i] > 9)218 {219 result[i] %= 10;220 result[i+1]++;//进位221 }222 }223for(j=i;j>=0;j--)224if(result[j])//返回结果的⾮零⾸位在数组中的下标225return j;226return0;227 }228//减法函数229int Sub(char str1[],char str2[],int result[])234 {235if(str1[0]=='-'&&str2[0]=='-')236 {237if(IsBig_num(str1+1,str2+1)==0)238return0;239else if(IsBig_num(str1+1,str2+1)<0) 240 {241 temp=str2++;242 str2=str1++;243 str1=temp;244 }245else246 {247 printf("-");248 str1++;249 str2++;250 }251 }252else253 {254if(str1[0]=='-')255 {256 printf("-");257return Add(str1+1,str2,result);258 }259else260return Add(str1,str2+1,result);261 }262 }263else264 {265if(IsBig_num(str1,str2)==0)266return0;267else if(IsBig_num(str1,str2)<0)268 {269 printf("-");270 temp=str2;271 str2=str1;272 str1=temp;273 }274 }275 Num_len1=strlen(str1);276 Num_len2=strlen(str2);277 strrev(str1);278 strrev(str2);279if(Num_len1>Num_len2){//⾼位补零280for(i=Num_len2;i<Num_len1;i++)281 str2[i]='0';282 }283for(i=0;i<Num_len1;i++) {284 result[i] += (str1[i]-'0') - (str2[i]-'0');285if(result[i] < 0){286 result[i] += 10;287 result[i+1]--;288 }289 }290for(i=Num_len1-1;i>=0;i--)291if(result[i])292return i;293return0;294 }295//乘法函数296int Mul(char str1[],char str2[],int result[])297 {298int i,j,Num_len1,Num_len2;299if(str1[0]=='-'||str2[0]=='-')300 {301if(str1[0]=='-'&&str2[0]=='-')302 {303 str1++;304 str2++;305 }306else307 {308 printf("-");309if(str1[0]=='-')310 str1++;311if(str2[0]=='-')312 str2++;313 }318 strrev(str2);319//乘积320for(i=0;i<Num_len1;i++)321for(j=0;j<Num_len2;j++)322 result[i+j] += (str1[i]-'0')*(str2[j]-'0');323//处理进位324for(i=0;i<N2*2;i++) {325if(result[i] > 9)//先计算进位,否则前⾯的值先改变,不能进位326 {327 result[i+1] += result[i] / 10 ;328 result[i] %= 10;329 }330 }331//输出332for(i=2*N2;i>=0;i--)333if(result[i])334return i;335return0;336 }337//除法函数338int Div(char str1[],char str2[],int result[])339 {340int a[N2],b[N2];341int i,j,k,Num_len1,Num_len2,n;342if(str1[0]=='-'||str2[0]=='-')343 {344if(str1[0]=='-'&&str2[0]=='-')345 {346 str1++;347 str2++;348 }349else350 {351 printf("-");352if(str1[0]=='-')353 str1++;354if(str2[0]=='-')355 str2++;356 }357 }358 Num_len1=strlen(str1);359 Num_len2=strlen(str2);360if(Num_len2==1 && str2[0]=='0'){361 printf("错误输⼊(除数不能为零)\n");362return -1;363 }364 memset(a,0,sizeof(a));//数组初始化365 memset(b,0,sizeof(b));366for(j=0,i=Num_len1-1;i>=0;i--)367 a[j++]=str1[i]-'0';368for(j=0,i=Num_len2-1;i>=0;i--)369 b[j++]=str2[i]-'0';370371 Num_len1=Substract(a,b,Num_len1,Num_len2);372if(Num_len1<=0){373if(Num_len1<0) {374return0;//第⼀次减时不够减为375 }376else {377 result[0]=1;//正好够减商为378return0;379 }380 }381 result[0]++;382 n=Num_len1-Num_len2;383if(n<0) {384 result[0]=1; //减过⼀次不够减商为385return0 ;386 }387else if(n>0) {388for(i=Num_len1-1;i>=0;i--) {//将减数逆置389if(i>=n)//倒着存储当i⼤于等于n时,将i的位置存i-n的值,否则存0 390 b[i]=b[i-n];391else392 b[i]=0;393 }394 }395 Num_len2=Num_len1;396for(j=0;j<=n;j++) {397while( (k=Substract(a,b+j,Num_len1,Num_len2-j)) >= 0)//传递对应的参数403for(i=0;i<N2;i++){404if(result[i]>=10)405 result[i+1] += result[i]/10;//先进位再处理本位406 result[i] %= 10;407 }408for(i=N2;i>=0;i--)409if(result[i])410return i;411return0;412 }413//计算差的长度函数414int Substract(int *bjs,int *js,int Num_len1,int Num_len2)415 {416int i;417if(Num_len1<Num_len2)418return -1;419bool bLarge=false;//长度相等的⼩于420if(Num_len1==Num_len2) {421for(i=Num_len1-1;i>=0;i--) {422if(bjs[i]>js[i])423 bLarge=true;424else if(bjs[i]<js[i]) {425if(!bLarge)426return -1;427 }428 }429 }430for(i=0;i<Num_len1;i++) {431 bjs[i] -= js[i];432if(bjs[i]<0) {433 bjs[i] += 10;434 bjs[i+1]--;435 }436 }437for(i=Num_len1-1;i>=0;i--)438if(bjs[i])439return i+1;//返回长度加1440return0;441 }442//计算阶乘函数443int Fac(int n,int result[])444 {445int i,j,k,jw,t;446 result[0]=1;447for(k=1, i=1;i<=n;i++){448for(jw=0, j=0;j<k;j++){449 t = result[j]*i + jw;450 result[j] = t%10;451 jw = t/10;452 }453while(jw)//直到上⼀个阶乘结果处理完后,将结果数组扩⼤,存进进位数即可454 {455 result[++k -1]= jw%10;456 jw /= 10;457 }458 }459return k-1;460 }461//⽐较函数462int IsBig_num(char str1[],char str2[])463 {464int Num_len1,Num_len2;465 Num_len1=strlen(str1);466 Num_len2=strlen(str2);467if(Num_len1<Num_len2)468return -1;469else470 {471if(Num_len1==Num_len2)472 {473if(strcmp(str1,str2)==0)474return0;475else476 {477if(strcmp(str1,str2)<0)478return -1;479else480return1;481 }。
c语言四则运算程序本文将介绍一个简单的C语言程序,它可以实现四则运算。
四则运算是数学学科中最基础的计算方法之一,包括加、减、乘、除四个运算符。
通过本程序,您可以输入两个数和运算符,程序将自动计算并输出结果。
具体实现方法如下:1.首先,我们需要定义三个变量,分别代表输入的两个数和运算符。
这里我们使用float类型,以支持小数计算。
2.接着,我们需要使用scanf函数从键盘读入这三个变量的值。
scanf函数可以将输入的字符转换为相应的数据类型,这里我们可以使用“%f”读取浮点数,使用“%c”读取字符。
3.接下来,我们使用switch语句对输入的运算符进行判断。
根据不同的运算符,我们执行相应的计算,最终将结果输出到屏幕上。
4.在程序的结尾,我们可以使用return 0;语句来结束程序的执行。
下面是完整的C语言四则运算程序代码:#include <stdio.h>int main() {float num1, num2, result;char op;printf('请输入两个数和运算符,用空格隔开:');scanf('%f %f %c', &num1, &num2, &op); switch (op) {case '+':result = num1 + num2;printf('%.2f + %.2f = %.2f', num1, num2, result);break;case '-':result = num1 - num2;printf('%.2f - %.2f = %.2f', num1, num2, result);break;case '*':result = num1 * num2;printf('%.2f * %.2f = %.2f', num1, num2, result);break;case '/':if (num2 == 0) {printf('除数不能为0!');} else {result = num1 / num2;printf('%.2f / %.2f = %.2f', num1, num2, result);}break;default:printf('运算符错误!');}return 0;}通过以上程序,您可以轻松地进行四则运算,提高计算效率。
C语言编写四则运算#include<> ; 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);}。
大一c语言编程四则运算四则运算是我们日常生活中最常见的数学运算,它包括加法、减法、乘法和除法。
在计算机编程中,四则运算是非常基础的知识,也是必不可少的。
本文将介绍如何使用c语言实现四则运算。
加法加法是最基本的运算之一,在c语言中可以使用加号(+)来实现。
例如,我们要计算2+3的结果,可以写成:int result = 2 + 3;这样就可以将计算结果赋值给变量result。
在c语言中,加法还可以用于字符串拼接,例如:char str1[] = "hello";char str2[] = "world";char str3[12];strcpy(str3, str1);strcat(str3, str2);printf("%s", str3);这段代码会输出"helloworld",其中strcpy函数用于将str1复制到str3中,而strcat函数则用于将str2拼接到str3中。
减法减法是另一种基本的运算,可以使用减号(-)来实现。
例如,我们要计算5-3的结果,可以写成:int result = 5 - 3;这样就可以将计算结果赋值给变量result。
乘法乘法也是一种基本的运算,可以使用乘号(*)来实现。
例如,我们要计算2×3的结果,可以写成:int result = 2 * 3;这样就可以将计算结果赋值给变量result。
除法除法也是一种基本的运算,可以使用除号(/)来实现。
需要注意的是,在c语言中,整数除以整数的结果仍为整数,因此如果要得到小数结果,需要将其中一个操作数转换为浮点数。
例如,我们要计算5÷2的结果,可以写成:float result = 5.0 / 2;这样就可以将计算结果赋值给变量result,并且得到一个小数结果。
综合运算除了以上四种基本运算,c语言还可以进行更加复杂的运算,例如混合运算。
中北大学课程设计说明书学院、系:软件学院专业: 软件工程学生姓名:宋雨琪学号:1221011205 设计题目:大整数的四则运算起迄日期: 2013年10月11日~2013年11月16日指导教师:薛海丽日期: 2013年11月16日1 设计目的本课程设计是采用C语言,在VC平台下实现大整数的四则运算,该系统运行在MS-DOS命令行模式下。
本课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力.提高学生适应实际,实践编程的能力。
1)进一步巩固和复习C程序设计的基础知识;2)培养学生结构化程序、模块化程序设计的方法和能力;3)了解软件的编制过程及各环节的具体内容;4)提高学生程序调试技巧、软件设计能力和代码规范化等素质;提高学生分析问题、解决问题以及实际运用能力.2 任务概述完成大整数的四则运算任务,假定整数不超过五十位要求:1) 在屏幕上能够手动输入待求的两个大整数;2)输入完成后通过选择可以完成大整数的加、减、乘、除运算;3)将结果分别显示在屏幕上.4)验收时程序能够演示,自己单独做。
3 模块划分1) 定义c_to_d(char str[N], char d[N])函数,实现把str的各位转变成对应整数,右对齐存入d, start为最高位下标2)定义d_to_c(char d[N], char str[N], int start)函数,实现把d中数字d[start。
N—1]转变为字符左对齐存入str3)定义加法函数4)定义减法函数5)定义乘法函数6)定义除法函数7)定义输出格式函数8)运用主函数计算4 主要函数说明及其N-S图1)主函数说明①定义变量②输入要进行运算代码数字③输入数字④调用函数进行运算2)其他函数说明①min函数,比较两数大小②c_to_d(char str[N], char d[N])函数,实现把str的各位转变成对应整数,右对齐存入d, start为最高位下标③d_to_c(char d[N], char str[N], int start)函数,实现把d中数字d[start。
设计题目:大整数的四则运算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.调试结果程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。