所谓的二元计算式就是只有两个操作数的计算式,例如12+234,34-20,23*45等。如何利用C/C++语言完成功能的实现呢?小编就为大家演示。
工具/原料
VS2010
方法/步骤
1、首先建立一个程碌食撞搁序的整体框架:#include<stdio.h>#include<string.h>#in艘早祓胂clude<stdlib.h>intcompute(constchar*,int*);//函数声明intmain(){charbuf[30];//输入的存储空间 printf("Pleaseinput:\n>"); gets(buf); intresult;//计算结果 intstate=compute(buf,&result);//调用函数 if(state==0) printf("Theresultis%d.\n",result);//输出结果 elseif(state==-1) printf("Theformatyourinputiswrong!\n"); system("pause"); return0;}其中包括计算函数的声明,该compute函数主要完成输入字符串的转换以及计算。buf[30]用来存储输入字符串,result用于存放计算结果。
2、完成compute函数的编老揉孟阼写,完整的函数如下:intcompute(constchar*str,int*re霜杼厮贿s){ intnum1=0; intnum2=0; intnum=0; intcomputeSign=0; intcomputeSignStart=0; charsign;while(1) { if(*str>='0'&&*str<='9') { num=num*10+*str-'0'; computeSignStart=1; } elseif(*str=='+'||*str=='-'||*str=='*'||*str=='/'||*str==0) { if(*str=='+'||*str=='-'||*str=='*'||*str=='/') sign=*str; if(computeSignStart) { computeSign++; computeSignStart=0; } if(computeSign==1)//第一个操作数 { num1=num; num=0; } elseif(computeSign==2)//第二个操作数 { num2=num; num=0; } if(*str==0)break; } elseif(*str!='') { return-1; } str++; } switch(sign) { case'+':*res=num1+num2;break; case'-':*res=num1-num2;break; case'*':*res=num1*num2;break; case'/':*res=num1/num2;break; } return0;}首先定义几个变量,num1用于存储第一个计算数,num2用于存储第二个计算数,num用于暂存从字符串中截取出来的计算数,然后根据标志赋值给两个计算数,computeSignStart用于标志是否截取的数字,computeSign用于标志是第几个计算数,sign用于存储操作数。
3、下面的while循环主要用于从字符串中提取出两个操作数和操作符,同时忽略空格,如果输入的字符串中有错误的字符程序将会返回。思路是:1.如果是连续的数字,程序将会转化为数字并存放在num中,同时将computeSignStart置为1,表示已经记录到数字。
4、2.如果不是数字而是操作符或者是字符串结束符,则判断将操作符存储在sign,然后如果已记录到数字,再根据computeSign判断是第几个操作数,然后赋值给它,如果是结束符则程序推出。
5、3.如果是除空格外的其它字符程序返回并报错。
6、最后根据操作数和操作符计算出结果并返回,这里采用的是swith语句。
7、运行结果演示如下。