四則運算表示式生成

2022-09-08 18:48:07 字數 1826 閱讀 1220

隨機生成乙個數字,代表著生成表示式中運算元的個數。

迴圈生成乙個數字,將其輸出,然後等概率生成『+』『-』『*』『/』中的乙個跟在該數字後面,輸出。

以一定概率生成左括號,若生成了左括號則輸出,並進行計數標誌當前共有多少個未完成匹配的左括號。

若當前有未完成匹配的左括號,則在生成乙個數字後,生成乙個操作符前,以一定的概率生成右括號。

在生成完畢後,生成最後乙個數並將為匹配的左括號予以匹配。

根據上述思路,其**實現如下:

1 #include 2

3#define maxl 8

4#define maxn 10056

using

namespace

std;

78 typedef long

long

ll;9

10 ofstream fout("

equation.txt");

11char op = ;

1213

void

create()

14while(length < 2

);20

bool div = false; //

用來防止出現除0錯誤

21int brack_cnt = 0; //

記錄未匹配的左括號個數

22ll num, op;

2324

for (int i = 1; i < length; i++) //

迴圈生成算式

25while(num == 0

);32 fout <34else

35 fout << rand()%maxn; //

否則直接生成數字輸出

36int tmpcnt =brack_cnt;

37for (int j = 0; j < tmpcnt; j++) //

若當前有未匹配的左括號,則對每乙個未匹配的左括號,都有一定概率生成相應右括號。

3844}45

46 op = rand()%4; //

生成運算子

47 fout <48if (op == 3) //

若生成了除號,則需要置相應標誌位

49 div = true;50

51if (!(rand()%3)) //

以一定概率生成左括號,概率為1/3

5261}62

if (div) //

生成最後乙個數字,該數字後不需要跟運算子

63while(num == 0

);68 fout <70else

71 fout << rand()%maxn;

72while(brack_cnt--) //

補全右括號

73 fout << ")"

;74 fout <7677

intmain()

78

這個程式在一定程度上實現了我們所需要的功能,但是仍有一定的不足,最重要的乙個問題就是會生成一些無用的括號,比如(2*3)*4等。所以整個程式還是有改進的餘地的,在日後可以對其進行優化,使其能夠完美的實現需求的功能。

四則運算表示式求值

03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...

四則運算表示式求值

表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...

四則運算表示式總結

這兩周完成了第乙個個人專案 四則運算表示式。在整個開發的過程中我有一些收穫也發現了自身的一些問題。下面就分條簡述一下。1 實現隨機生成任意長度的四則表示式 括號 2 實現四則表示式的計算 包括分數 3 實現接收使用者對某四則運算表示式計算的結果並判斷正確性。4 實現結合1 2 3功能的mfc應用程式...