問題描述:見下圖

程序代碼:
/* *題目描述:表達(dá)式求值(遞歸算法) 表達(dá)式:1、可以是一個項(xiàng) 2、也可以由多個項(xiàng)通過加減構(gòu)成 項(xiàng):1、項(xiàng)本身可以是一個因子 2、項(xiàng)也可以由若干個因子通過乘除組成 因子:1、因子本身可以是一個數(shù)字 2、因子也可以由表達(dá)式加上括號組成 */ #include <iostream> #include <cstring> #include <cstdlib> using namespace std; int factor_value();//讀入一個因子并且返回其值 int term_value();//讀入一項(xiàng)的并且返回其值 int exPRession_value();//讀入一個表達(dá)式并返回值 int main() { cout<< expression_value() <<endl; return 0; } int expression_value()//讀入一個表達(dá)式并返回值 { int result = term_value();//求第一項(xiàng)的值 bool more = true; while( more) { char op = cin.peek();//看一個字符不取走 if( op == '+'|| op == '-') { cin.get();//從輸入流中取走一個字符('+'或者'-') int value = term_value();//讀入下一個項(xiàng) if(op == '+') result +=value; else result -= value; } else more = false; } return result; } int term_value()//讀入一項(xiàng)的并且返回其值 { 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();//取出一個字符判斷輸入流中是一個因子還是一個整數(shù) if( c =='(') { cin.get();//去掉左括號 result = expression_value();//讀入表達(dá)式 cin.get();//去掉右括號 } else//是一個數(shù)字 { while(isdigit(c))//求出數(shù)字的值 { result = 10 * result +c- '0'; cin.get(); c= cin.peek(); } } return result; }運(yùn)行結(jié)果:
新聞熱點(diǎn)
疑難解答