C/C++完成简单二元计算式功能

2025-09-24 20:42:24

1、首先建立一个程序的整体框架:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int compute(const char*,int*);//函数声明

int main()

{

    char buf[30];//输入的存储空间

printf("Please input:\n>");

gets(buf);

int result;//计算结果

int state=compute(buf,&result);//调用函数

if(state==0)

printf("The result is %d.\n",result);//输出结果

else if(state==-1)

printf("The format your input is wrong!\n");

system("pause");

return 0;

}

其中包括计算函数的声明,该compute函数主要完成输入字符串的转换以及计算。buf[30]用来存储输入字符串,result用于存放计算结果。

C/C++完成简单二元计算式功能

2、完成compute函数的编写,完整的函数如下:

int compute(const char* str,int* res)

{

int num1=0;

int num2=0;

int num=0;

int computeSign=0;

int computeSignStart=0;

char sign;

    while(1)

{

if(*str>='0'&&*str<='9')

{

   num=num*10+*str-'0';

computeSignStart=1;

}

else if(*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;

}

else if(computeSign==2)//第二个操作数

{

   num2=num;

num=0;

}

if(*str==0)

                break;

}

else if(*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;

}

return 0;

}

首先定义几个变量,num1用于存储第一个计算数,num2用于存储第二个计算数,num用于暂存从字符串中截取出来的计算数,然后根据标志赋值给两个计算数,computeSignStart用于标志是否截取的数字,computeSign用于标志是第几个计算数,sign用于存储操作数。

C/C++完成简单二元计算式功能

3、下面的while循环主要用于从字符串中提取出两个操作数和操作符,同时忽略空格,如果输入的字符串中有错误的字符程序将会返回。

思路是:

1.如果是连续的数字,程序将会转化为数字并存放在num中,同时将computeSignStart置为1,表示已经记录到数字。

C/C++完成简单二元计算式功能

4、2.如果不是数字而是操作符或者是字符串结束符,则判断将操作符存储在sign,然后如果已记录到数字,再根据computeSign判断是第几个操作数,然后赋值给它,如果是结束符则程序推出。

C/C++完成简单二元计算式功能

5、3.如果是除空格外的其它字符程序返回并报错。

C/C++完成简单二元计算式功能

6、最后根据操作数和操作符计算出结果并返回,这里采用的是swith语句。

C/C++完成简单二元计算式功能

7、运行结果演示如下。

C/C++完成简单二元计算式功能

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:79
  • 阅读量:51
  • 阅读量:75
  • 阅读量:29
  • 阅读量:87
  • 猜你喜欢