首页 > 其他分享 >(二)递归 4132 四则运算表达式求值

(二)递归 4132 四则运算表达式求值

时间:2022-11-16 16:32:48浏览次数:87  
标签:peek double 4132 四则运算 cin value result factor 求值


四则运算表达式求值

  • ​​AC代码​​
  • ​​解析​​
  • ​​坑​​
  • ​​新知识​​
  • ​​cout格式​​
  • ​​true代表1,false代表0​​
  • ​​输入流操作​​
  • ​​ASCII​​

AC代码

/**********************************************************************/
/* _ _ __ __ ____ _____ */
/* | | | || \/ | / ___|| ___| */
/* | | | || |\/| | | | | |___ */
/* | |_| || | | | | |___ | |___| */
/* \___/ |_| |_| \____||_| */
/**********************************************************************/
#include <iomanip>
#include <iostream>

using namespace std;

double factor_value();//因式
double term_value();//项
double expression_value();//表达式

int main()
{
cout << fixed <<setprecision(2) << expression_value() << endl;
return 0;
}

double expression_value()
{
double result = term_value();
while(true)
{
char op = cin.peek();
if(op == '+' || op == '-')
{
cin.get();
double value = term_value();
if(op == '+')
{
result += value;
}
else
{
result -= value;
}

}
else
{
break;
}
}
return result;
}

double factor_value()
{
double factor_result= 0;//此处变量不初始化,会造成bug
if(cin.peek() == '(')
{
cin.get();
factor_result = expression_value();
cin.get();
}
else
{
while(isdigit(cin.peek()))
{
factor_result = 10 * factor_result + cin.peek() - '0';//必须初始化,第一次读书十位是0
cin.get();
}
if(cin.peek()=='.')
{
cin.get();
double base_result=0;
if(isdigit(cin.peek()))
{
for(double times =0.1; isdigit(cin.peek()); times *= 0.1)
{
base_result = base_result + times*(cin.peek() - '0');//必须初始化,第一次读书十位是0
cin.get();
}
}

factor_result += base_result;
}

}
return factor_result;
}

double term_value()
{
double term_result = factor_value();
//bool more = true;//true not 1
while(true)
{
char op = cin.peek();
if(op == '*' || op == '/')
{
cin.get();
double value = factor_value();
if(op == '*')
{
term_result *= value;
}
else
{
term_result /= value;
}

}
else
{
break;//more = false;//false not 1
}
}
return term_result;

}

解析

​参看中国大学慕课郭炜老师课程讲解递归二​

郭炜老师所讲是整数的,如果想要AC4132需要检查一下小数点。变量最好初始化,否则会有意想不到的问题

新知识

cout格式

cout << fixed <<setprecision(2) << expression_value() << endl;

可设置小数点右边位数

true代表1,false代表0

输入流操作

cin.peek();
cin.get();
isdigit();

ASCII

factor_result = 10 * factor_result + cin.peek() - ‘0’;
字符减0,转为数字


标签:peek,double,4132,四则运算,cin,value,result,factor,求值
From: https://blog.51cto.com/u_15721769/5856646

相关文章

  • 四则运算
    importjava.util.Scanner;publicclassMethodDemo4{/***运算的方法**@paramnum1数字1*@paramnum2数字2*@paramsign运......
  • 力扣-150-逆波兰表达式求值
    刚做完字符串解码,说是和逆波兰表达式求值很像,都是栈操作逆波兰式也知道,就是后缀表达式,但是要写一下子不一定写得出出来评论有说这题应属easy,应该是因为把这段儿写出来了......
  • 实验二四则运算
    一.任务分工驾驶员:孙钰欣,负责编写代码,对同伴做出评价领航员:吕浩,辅助驾驶员完成代码,设计单元测试用例,对同伴做出评价。二.代码审查功能模块名称四则运算 审查人......
  • 艾婷婷实验二结对四则运算
    一、代码审查表结对同学姓名:高宏鑫领航员(艾婷婷)代码地址https://github.com/1att2/hello/blob/main/%E8%89%BE%E5%A9%B7%E5%A9%B7%E5%AE%9E%E9%AA%8C%E4%BA%8C驾驶员(高......
  • 计算机等级考试二级C语言程序设计专项训练题——多项式求值
        在计算机等级考试二级C语言程序设计试题中,多项式求值是一个重要的考点,有关多项式求值的试题在历年考试试卷的程序填空题和程序设计题中经常出现。一.示例讲解......
  • 【Java】guava(六)函数式编程与惰性求值
    举个例子,比如我们的web服务器应用,我们可能会写一个类似拦截器一样的模块来提前把一些公共参数抽取出来,比如像token,userid,ip地址等等这样的信息,放入一个类似ThreadLocal的对......
  • 换个脑袋,做个小练习------四则运算系统的随机出题的jsp实现
    四则运算出题系统网页界面的实现(别期待,只有俩操作数)index.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>主界......
  • 【数据结构】例题:表达式求值 C++实现
    先写一个链栈#pragmaonce///链栈的结点类型template<classDataType>classStackNode{public: DataTypedata; StackNode*next; StackNode(){ next=nul......
  • C/C++表达式求值(带括号)
    C/C++表达式求值(带括号)实验内容及要求(功能)1.友好的用户界面,给出简单用户帮助2.通过键盘输入表达式(负数,小数),表达式可包含加(+)、减(-)、乘(*)、除(/)、求模(%)、开......
  • 1034 有理数四则运算
    本题要求编写程序,计算2个有理数的和、差、积、商。输入格式:输入在一行中按照 a1/b1a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号......