递归形式的表达式写法:
!!!多理解 多写就会拉
把表达式拆分,
表达式:可以是一项,也可以是多项通过加减构成。
项:可以是一个因子,也可以是多个因子的乘除形式。
因子,整数或者加上括号的表达式构成。
递归都要有出口,本题中的出口是当数为一个数的时候。
/*
*题目描述:表达式求值(递归算法)
表达式:1、可以是一个项
2、也可以由多个项通过加减构成
项:1、项本身可以是一个因子
2、项也可以由若干个因子通过乘除组成
因子:1、因子本身可以是一个数字
2、因子也可以由表达式加上括号组成
*/
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int factor_value();//读入一个因子并且返回其值
int term_value();//读入一项的并且返回其值
int expression_value();//读入一个表达式并返回值
int main()
{
cout<< expression_value() <<endl;
return 0;
}
int expression_value()//读入一个表达式并返回值
{
int result = term_value();//求第一项的值
bool more = true;
while( more)
{
char op = cin.peek();//看一个字符不取走
if( op == '+'|| op == '-')
{
cin.get();//从输入流中取走一个字符('+'或者'-')
int value = term_value();//读入下一个项
if(op == '+')
result +=value;
else
result -= value;
}
else
more = false;
}
return result;
}
int term_value()//读入一项的并且返回其值
{
int result = factor_value();//读入一个因子
while(true)
{
char op = cin.peek();//取出一个字符判断还有没有因子
if(op== '*'||op == '/')
{
cin.get();
int value = factor_value();//读入下一个因子
if(op == '*')
result *=value;
else
result /=value;
}
else
break;
}
return result;
}
int factor_value()//读入一个因子并返回值
{
int result = 0;
char c = cin.peek();//取出一个字符判断输入流中是一个因子还是一个整数
if( c =='(')
{
cin.get();//去掉左括号
result = expression_value();//读入表达式
cin.get();//去掉右括号
}
else//是一个数字
{
while(isdigit(c))//求出数字的值
{
result = 10 * result +c- '0';
cin.get();
c= cin.peek();
}
}
return result;
}
浮点表达式题目链接
题目:
描述
求一个可以带括号的小学算术四则运算表达式的值
输入
一行,一个四则运算表达式。’*’表示乘法,’/’表示除法
输出
一行,该表达式的值,保留小数点后面两位
样例输入
输入样例1:
3.4
输入样例2:
7+8.3
输入样例3:
3+4.5*(7+2)(3)((3+4)(2+3.5)/(4+5))-34(7-(2+3))
样例输出
输出样例1:
3.40
输出样例2:
15.30
输出样例3:
454.75
my code:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
double expression_value();
double term_value();
double factor_value();
double expression_value(){
double result=term_value();
bool more=true;//看看输入流里面是不是有东西
while(more){
char op=cin.peek();//只查看缓冲区的字符而不读取它
if(op=='+'||op=='-'){
cin.get();
double value=term_value();
if(op=='+'){
result+=value;
}
else{
result-=value;
}
}
else
more=false;
}
return result;
}
double term_value(){
//读入一项并返回其值{
double result=factor_value();//读入一个因子
bool more=true;
while(more){
char op=cin.peek();
if(op=='*'||op=='/'){
cin.get();
double value=factor_value();
if(op=='*'){
result*=value;
}
else{
result/=value;
}
}
else
more=false;
}
return result;
}
double factor_value(){
char op=cin.peek();
double result=0;
if(op=='('){
cin.get();
result=expression_value();
cin.get();
}
else{
scanf("%lf",&result);
}
return result;
}
int main()
{
printf("%.2lf",expression_value());
return 0;
}