浙教版 (2019)选修1 数据与数据结构第三章 字符串、队列和栈本章综合与测试教案设计
展开一、口算等式采集
为了便于学生进行后面的“口算批改”项目的进行,可以采用手工录入、互联网查找、OCR采集等各种方式,采集口算等式,并将所有等式存入“算式.csv”文件中。
二、抽象与建模过程
采集到的算式存储在“算式.csv”文件中,每行一个口算等式。判断一个等式是否正确,需要计算等号左边的运算式的值。等式中包括数字与运算符号,可以以字符串的形式,整体读入,存入字符串变量中。对于等号左边的算式,计算其结果时,用数字栈存储算式中的数字,用符号栈存储运算符号。由于算式中的运算符号加、减、乘、除、括号等存在着优先级别,以算式中的运算符号与符号栈栈顶元素进行比较,如果算式中的优先级别小于等于栈顶元素的优先级别,则栈顶元素出栈,否则入栈。如果是左括号,则直接入栈。如果是右括号,则栈中元素依次出栈,直至左括号。数字与运算符号的计算,把数字栈、符号栈结合起来操作。
三、算法与设计
采用文件读取的方式,从“算式.csv”中读取所有的算式。一个算式占一行,以字符串存储该算式。利用字符串的find函数,找到“=”在算式中的位置,并用字符串中求子串的操作,取出等号左边的算式与右边的值。对于左边等式,建立数字栈和符号栈,从左往右扫描,依次处理算式的中间计算过程。按如下方式处理:
(1)当遇到的字符是数字时,继续扫描,直至遇到非数字字符。把这次的数字串转换成整数,压入数字栈中。
(2)当遇到的是非数字时,必定为运算符号(因为字符串中仅有数字字符与运算符号),设该运算符号为x,符号栈顶元素为y,分以下几种情况处理:
= 1 \* GB3 ①如果x为“(”时,或栈空时,则把x压入符号栈。
= 2 \* GB3 ②如果x为“+”或“-”时,同时y为“(”,则入栈,否则, y出栈,同时,把数字栈最顶上的两个元素出栈,用运算符号y进行运算,并把运算结果压入数字栈。再把x压入符号栈。
= 3 \* GB3 ③如果x为“*”或“/”时,同时y为“*”或“/”时,则y出栈,同时,把数字栈最顶上的两个元素出栈,用运算符号y进行运算,并把运算结果压入数字栈。再把x压入符号栈。
= 4 \* GB3 ④如果x为“)”时,则把符号栈中元素逐一出栈,直至遇到第一个左括号。
= 5 \* GB3 ⑤继续扫描,直至左边的算式结束,则数字栈中的元素为左边的答案。
= 6 \* GB3 ⑥如果答案与等号右边的值一样时,则输出“✓”,否则输出“?”。
四、编写程序与测试
用Pythn语言编程实现。
imprt csv
number=[0]*100
ps=[' ']*100
tp1=-1
tp2=-1
#数字栈顶两个元素参与运算,并将运算结果压入栈
def cal():
p1=number[tp1]
tp1-=1
p2=number[tp1]
tp1-=1
p=ps[tp2]
tp2-=1
anwser=0
if p=='+':
anwser=p2+p1
if p=='-':
anwser=p2-p1
if p=='*':
anwser=p2*p1
if p=='/':
anwser=p2/p1
tp1+=1
number[tp1]=anwser
f=pen("算式.csv","r")
f_csv=csv.reader(f)
fr rw in f_csv:
exp=rw[0]
ps=exp.find('=')
expleft=exp[0:ps]
expright=exp[ps+1:]
print(expleft)
explen=len(expleft)
i=0
tp1=-1
tp2=-1
while i
while i
num*=10+rd(expleft[i])-48
i+=1
tp1+=1
number[tp1]=num
if i
cal;
tp2+=1
ps[tp2]=expleft[i]
if i
cal;
tp2+=1
ps[tp2]=expleft[i]
if expleft[i]=='(':
tp2+=1
ps[tp2]=expleft[i]
if expleft[i]==')':
while(ps[tp2]!='('):
cal;
tp2-=1
tp2-=1
i+=1
if number[tp1]==int(expright):
print("对")
else:
print("错")
f.clse()
四、结论与建议
本项目在用字符串存储后,在处理左边的算式时,也可以先把中缀表达式转后缀表达式,再用栈结构处理后缀表达式的值。
高中信息技术浙教版 (2019)选修1 数据与数据结构第六章 大数据时代数据的组织本章综合与测试教案: 这是一份高中信息技术浙教版 (2019)选修1 数据与数据结构第六章 大数据时代数据的组织本章综合与测试教案,共2页。
浙教版 (2019)5.3 数据排序教案: 这是一份浙教版 (2019)5.3 数据排序教案,共1页。
高中信息技术浙教版 (2019)选修1 数据与数据结构6.1 实时查询系统中数据的组织教案: 这是一份高中信息技术浙教版 (2019)选修1 数据与数据结构6.1 实时查询系统中数据的组织教案,共1页。