C语言递归法整数四则运算,递归例题 整数的四则运算

#include

#include

#include

using namespace std;

int expression_value();//计算表达式的值,表现为:值+值

int term_value();//计算项的值,表现为:值*值

int factor_value();//计算因子的值,其中因子可能是括号中的表达式,也可能是数字

int main()

{

cout<

return 0;

}

//计算表达式的值

int expression_value(){

//将表达式的值先赋成项第一个项的值,项的值已被取走

int result=term_value();

//再看看有没有其他的项

char c=cin.peek();//只看一个字符,不取走,在这里表示观察下一个字符以判断表达式有没有结束

while(c=='+'||c=='-'){

cin.get();//作用是取走一个字符(在这里是加减符号)

//项之间的运算

if(c=='+'){

result+=term_value();

}

else

result-=term_value();

//再次看一个字符,回到循环判断

c=cin.peek();

}

return result;

}

//计算项的值,计算方法和表达式差不多,读取对象变成了因子

int term_value(){

int result=factor_value();

char c=cin.peek();

while(c=='*'||c=='/'){

cin.get();

if(c=='*'){

result*=factor_value();

}

else

result/=factor_value();

c=cin.peek();

}

return result;

}

//计算因子的值

int factor_value(){

int result=0;

char c=cin.peek();

//看是不是括号括起来的表达式

if(c=='('){

cin.get();

result+=expression_value();

cin.get();//两个get负责吃掉括号

}

//是数字的情况,接下来需要考虑怎么把字符串转化为数字,需要用到一个判断是否是数字的函数

else{

//每当有一个新的数,把原来的那个数向高位移动一位

while(isdigit(c)){

result=result*10+c-'0';

cin.get();//吃掉这一位

c=cin.peek();//读取下一位

}

}

return result;

}

这一题我第一反应是为什么没有输入语句。。。对cin输入流还不够清晰啊。

这道题情况比较复杂,但分解后就会成为比较好理解的几个模块

需要积累的是标准输入函数cin的用法:cin.peek(),cin.get()

还有判断字符是否为数字的函数 bool isdigit(char)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值