表示式求值 (遞迴實現)

2021-08-02 04:08:03 字數 1495 閱讀 4346

dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min(20,23)的值是20 ,add(10,98) 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀的更複雜的表示式。

假設表示式可以簡單定義為:

1. 乙個正的十進位制數

x是乙個表示式。

2. 如果 x 和 y 是 表示式,則 函式

min(

x,y 

)也是表示式,其值為x,y 中的最小數。

3. 如果 x 和 y 是 表示式,則 函式max

(x,y 

)也是表示式,其值為x,y 中的最大數。

4.如果 x 和 y 是 表示式,則 函式add

(x,y 

)也是表示式,其值為x,y 之和。

例如, 表示式 

max(

add(

1,2),7) 的值為 7。

請你編寫程式,對於給定的一組表示式,幫助 dr.kong 算出正確答案,以便校對卡多計算的正誤。

第一行:

n表示要計算的表示式個數 (1≤ n ≤ 10)  

接下來有n行,    每行是乙個字串,表示待求值的表示式

(表示式中不會有多餘的空格,每行不超過300個字元,表示式中出現的十進位制數都不 超過

1000

。)輸出有n行,每一行對應乙個表示式的值。3

add(1,2)

max(1,999)

add(min(1,1000),add(100,99)) 3

999

200一共有三個數學函式,add和min和max,裡面會出現兩個甚至多個函式巢狀的形式,計算出所給的數學函式的結果;

首先吃掉乙個字串,呼叫ff這個函式,ff這個函式的功能主要是判斷傳過來的字元是否是字母,如果是字母,則說明這是乙個函式,然後將函式裡面的逗號前面和逗號後面分開,呼叫到對應的函式裡面,如果ff接受到的是數字,則將字元轉化為數字輸出,三個數學函式,分貝計算出函式的兩個值,最後返回;

#include#include#include#include#define n 2000

int ff(char str);

int minn(char str1,char str2)

int addd(char str1,char str2)

int maxx(char str1,char str2)

int ff(char str)

else ch2[k++]=str[i];

}if(str[i]=='(')

}ch1[j]='\0';

ch2[k]='\0';

// puts(ch1);

// puts(ch2);

if(str[0]=='a')else if(str[0]=='m'&&str[1]=='a')else

}else {

m=0;

for(i=0;i

表示式求值(遞迴)

給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。輸入僅有一行,為需要你計算的表示式,表示式中只包含數字 加法運算子 和乘法運算子 且沒有括號,所有參與運算的數字均為 0 到 231 1 之間的整數。輸入資料保證這一行只有 0 9 這 12 種字元。輸入樣例 1 1 1 3 4 輸入...

表示式求值(遞迴)

題目 輸入為四則運算表示式,僅由整數 組成,沒有空格,要求求其值。假設運算子結果都是整數。結果也是整數。include include include using namespace std 讀入乙個因子並返回其值 intfactor value 讀入乙個項並返回其值 intterm value 讀...

表示式求值 遞迴

下面是 實現 include include include using namespace std intfactor value intterm value intexpression value intmain intexpression value else else return resu...