C 算術表示式的求值 資料結構課程設計

2021-10-01 14:27:20 字數 4481 閱讀 1789

資料結構課程設計——算術表示式的求值1.在課程設計中提高學生的動手能力和程式設計能力;

2.在課程設計中提高資料結構中理論知識(棧和二叉樹等知識)的應用。

3.在課程設計中提高自己對各個方面知識的綜合能力。

乙個算術表示式是由運算元(operand)、運算子(operator)和界限符(delimiter)組成的。假設運算元是正實數,運算子只含加減乘除等四種運算子,界限符有左右括號和表示式起始、結束符「#」,如:#(7+15)*(23-28/4)#。引入表示式起始、結束符是為了方便。程式設計利用「運算子優先法」求算術表示式的值。

1.設計建立二叉樹的標頭檔案(bitree.h);

2.設計程式中需要用到的棧的相關標頭檔案(stack.h);

3.設計乙個函式去判斷符號的優先順序(strpriority());

4.設計函式去判斷是否輸入的字元是否為運算子或者界符(is_operator());

5.通過輸入的字串陣列去建立表示式樹(initexptree());

6.設計乙個函式去實現運算(getstrvalue());

7.設計乙個函式去將輸入的數字型的字串轉換成double型(tonumber());

8.設計乙個函式去實現通過二叉樹遍歷進行運算結果求值(evalateexptree());

9.為了保證程式的健壯性,根據可能的錯誤可能性全部錯誤結果進行列印錯誤型別(errortest());

10.為了判斷是否要列印最終的結果,定義了乙個標誌is_success去進行判斷。

win10計算機一台

(1) 從鍵盤或檔案讀入乙個合法的算術表示式,輸出正確的結果。

(2) 顯示輸入序列和棧的變化過程。

(3) 考慮演算法的健壯性,當表示式錯誤時,要給出錯誤原因的提示。

#pragma once

#include

using

namespace std;

typedef

struct bitnode

bitnode,

*bitree;

void

createexptree_op

(bitree &t, bitree a, bitree b,

char theta)

//a是左孩子,b是右孩子,theta是符號域

void

createexptree_number

(bitree &t, bitree a, bitree b, string theta)

//a是左孩子,b是右孩子,theta是數字域

#pragma once

#include

"bitree.h"

#include

"stack.h"

typedef

struct stacknode

stacknode,

*linkstack;

intinitstack

(linkstack &s)

//棧的初始化

intpush_expt

(linkstack &s, bitree e)

//二叉樹入棧

intpush_optr

(linkstack &s,

char e)

//運算子入棧

intpop_expt

(linkstack &s, bitree &t1)

//二叉樹出棧

intpop_optr

(linkstack &s,

char

&ch)

//運算子出棧

char

gettop_optr

(linkstack s)

//取棧頂符號

bitree gettop_expt

(linkstack s)

//取棧頂樹

#include

#include

#include

#include

"bitree.h"

#include

"stack.h"

using

namespace std;

bool is_success =

true

;//成功標誌

int oparraylength =1;

//定義輸入陣列的長度

char

strpriority

(char top,

char ch)

//判斷符號的優先順序

else

if(top ==

'*'|| top ==

'/')

return

'>'

;else

return

'0';

}void

initexptree

(char

*str, linkstack &expt, linkstack &optr)

//建立樹

createexptree_number

(t,null

,null

, number)

;//建立只有乙個元素的二叉樹

number ="";

//建完數值的二叉樹後number置空

push_expt

(expt, t);if

(t->number!=

"")cout << t-

>number <<

"已出expt棧"

<< endl;

i++;}

else

//如果它是符號,執行下列語句}}

}double

getstrvalue

(char data,

double lvalue,

double rvalue)

//計算表示式的值

}double

tonumber

(string str)

//把string字元轉換成數值

return sum;

}double

evaluateexptree

(bitree t)

//遍歷表示式樹求表示式的值

}void

errortest

(char

*str1)

//錯誤判斷

j++;}

j =1;

//重置為1if(

!wrong_flag)if(

(str1[j]

=='+'

|| str1[j]

=='-'

|| str1[j]

=='/'

|| str1[j]

=='*'

)&& str1[j +1]

==')')if

((str1[j +1]

=='+'

|| str1[j +1]

=='-'

|| str1[j +1]

=='/'

|| str1[j +1]

=='*'

)&& str1[j]

=='(')if

((str1[j]

=='+'

|| str1[j]

=='-'

|| str1[j]

=='*'

|| str1[j]

=='/')&&

(str1[j +1]

=='+'

|| str1[j +1]

=='-'

|| str1[j +1]

=='*'

|| str1[j +1]

=='/'))

j++;}

j =1;

//重置為1

if(left != right)}}

void

mainrun

(linkstack expt,linkstack optr,bitree t,

char

*oparray)

cout <<

" is: "

<<

evaluateexptree

(t)<< endl;

//求值結果}}

1.通過課程設計中不斷的查詢相關資料,提高了自己對陌生知識的理解和掌握。

2.課程設計中大量用到了棧,增強自己對棧的相關知識的理解和應用。

3.提高了自己對程式健壯性判斷的重要性,如果沒有對錯誤進行判斷,很容易出現編譯器直接報錯的情況。

算術表示式求值 資料結構 C語言

1.實驗目的 熟練掌握棧的基本操作,深入了解棧的特性,能在實際問題的背景下靈活運用他們,並加深對這種結構的理解。2.實驗內容 設計乙個程式,演示用算符優先法對算術表示式求值的過程。以字串行的形式從終端輸入語法正確的 不含變數的整數表示式。利用教科書表3.1給出的算符優先關係,實現對算術四則運算混合運...

資料結構課程設計 算術表示式求值

題目 編制乙個用算符優先法對算術表示式求值的程式 evaluate expression include include includeusing namespace std int a 7 7 存放運算子的優先順序,3為 2為 1為 bool isoperator char optr 判斷是否操作...

資料結構之 用C 實現算術表示式求值

基本功能 利用棧實現整數的加減乘除運算。使用方法 輸入表示式之後再輸入 表示表示式結束,如下圖 缺點 不能進行小數的運算 如下 include include include using namespace std define maxnum 50 class stack for number fl...