表示式求值 C語言 遞迴漸降語法分析

2021-10-08 15:44:40 字數 1658 閱讀 2217

題目:  給定乙個基本的算術表示式,請程式設計計算表示式的值。 

舉例:  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 讀...