題目: 給定乙個基本的算術表示式,請程式設計計算表示式的值。
舉例: 1*2 + 3*4
思路: expression = "term + term" *****==> evalterm( "1*2" ) + evalterm( "3*4" ) ;
term = "factor * facotr" *****==> evalfactor( "1" ) * evalfactor( "2" ); ..............
括號 ( ...... ),看成 ( "......") *****==> evalexpression( "......" );
注意: evalexpression 呼叫 evalterm ,evalterm 呼叫 evalfactor ,在 evalfactor 中遇到括號 再呼叫 evalexpression
facotr 以非數字字元(包含小數點) 返回
term 以 * 、/ 運算字元返回
expression 以 +、- 運算字元返回
/** 遞迴漸降語法分析器
recursive-descent parser
*/#define _crt_secure_no_warnings
#include #include #include #include int invalid = 0;
int pos = 0;
double evalexpression( char *str );
double evalterm( char *str );
double evalfactor( char *str );
void replaceblank( char *str );
int main()
double evalexpression( char *str )
++pos;
double term = evalterm( str );
if( invalid )
return 0;
if( op == '+' )
result += term;
else
result -= term;
} return result;
}double evalterm( char *str )
return result;
}double evalfactor( char *str )
; int i = 0;
if( str[pos] == '-' )
if( str[pos] == '(' )
++pos;
} while( isdigit( str[pos] ) || str[pos] == '.' )
sscanf( buf, "%lf", &result );
if( negative )
result *= -1;
return result;
}// 去除表示式中的空格
void replaceblank( char *exp )
}
表示式求值 遞迴 c
題目描述 給定乙個字串描述的算術表示式,計算出結果值。輸入字串長度不超過100,合法的字元包括 0 9 字串內容的合法性及表示式語法的合法性由做題者檢查。本題目只涉及整型計算。輸入 400 50 2 30 3 6 輸出 515思路 表示式求值本就是遞迴定義,可使用遞迴求解。使用到的函式 includ...
表示式求值(遞迴)
給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。輸入僅有一行,為需要你計算的表示式,表示式中只包含數字 加法運算子 和乘法運算子 且沒有括號,所有參與運算的數字均為 0 到 231 1 之間的整數。輸入資料保證這一行只有 0 9 這 12 種字元。輸入樣例 1 1 1 3 4 輸入...
表示式求值(遞迴)
題目 輸入為四則運算表示式,僅由整數 組成,沒有空格,要求求其值。假設運算子結果都是整數。結果也是整數。include include include using namespace std 讀入乙個因子並返回其值 intfactor value 讀入乙個項並返回其值 intterm value 讀...