小明有一本口算練習(xí)冊,但是做完之后需要校對,小明爸爸為此寫了一個計算口算練習(xí)題的Python程序。口算練習(xí)題存放在文件calculate.txt”中,將每一個式子和計算得到的結(jié)果寫入文件“ans.jye.ai”中,兩個文件中的部分內(nèi)容如下圖所示。
計算練習(xí)題的規(guī)則:①從左往右計算;②先計算括號內(nèi)的式子;③乘除的優(yōu)先級高于加減;④練習(xí)題中的除法計算默認(rèn)是整除。
考慮到運(yùn)算符優(yōu)先級的關(guān)系,小明爸爸的程序思路如下:①使用兩個棧分別保存式子中的數(shù)字和運(yùn)算符;②遇到“(”,運(yùn)算符直接入棧;③遇到“)”,則先計算括號中的式子,碰到“(”停止;④對于運(yùn)算符加減乘除,若先碰到乘除,或前后兩者優(yōu)先級相同,則先進(jìn)行計算。以13-(2+1)*2+7=為例:
字符 |
13 |
- |
( |
2 |
+ |
1 |
) |
* |
2 |
+ |
|
7 |
= |
數(shù)值 棧a |
13 |
13 |
13 |
13,2 |
13,2 |
13,2,1 |
13,3 |
13,3 |
13,3,2 |
13,6 |
7 |
7,7 |
14 |
運(yùn)算符 棧b |
空 |
- |
-,( |
-,( |
-,(,+ |
-,(,+ |
- |
-,* |
-,* |
- |
+ |
+ |
空 |
說明 |
入棧 |
算加法 |
入棧 |
算乘法 |
算減法 |
算加法 |
請回答下列問題。
(1)若有式子“5-4十2=”,當(dāng)處理完字符“+”后,數(shù)值棧a中的值從棧底到棧頂?shù)臄?shù)值依次為
1
1
。
(2)實(shí)現(xiàn)上述功能的Python程序如下,請在橫線處填入合適的代碼。
①
x//y
x//y
;②
a[topa]=int(t)
a[topa]=int(t)
;③
ch in['+','-','*','/']或ch!='('或b[topb]!='('
ch in['+','-','*','/']或ch!='('或b[topb]!='('
;④
b[topb]=s[i]
b[topb]=s[i]
。
(3)若每50道口算練習(xí)題為一份卷子,小明爸爸在校對過之后得到了每份卷子的錯題數(shù),存儲在了數(shù)組ct中。他想知道哪些卷子的錯題量大,故使用了冒泡排序?qū)?shù)組ct進(jìn)行從大到小排序,該算法的時間復(fù)雜度為
O(n2)
O(n2)
。