浙教版(2019)选择性必修1《第三章 字符串、队列和栈》2022年单元测试卷
发布:2024/12/5 20:30:2
一.选择题(共27小题)
-
1.有如下 python 程序段:
from random import*
s=''
for i in range(1,4):
k=int(random( )*3+1)
c=chr(96+k)
if i%2==k%2:
s=s+c
else:
s=c+s
print(s)
若该段程序执行以后,s 的值不可能的是( )组卷:1引用:3难度:0.5 -
2.有如下python程序段:(注:字母ASCII码>数字ASCII码,小写字母ASCII码>大写字母ASCII码)
import random
s=“olympicGames2021“;ans=““;i=0
while i<len(s)-2:
t=int(jye.ai.jye.ai( )*2)+1
x=s[i];y=s[i+t]
if x>y:
ans+=x
else:
ans+=y
i=i+t+1
print(ans)
执行程序后,输出结果可能为( )组卷:1引用:2难度:0.4 -
3.有如下Python程序段:
s=“ABCDEF“
ch=““
for i in range(0,len(s)):
a=int(input( ));b=(a+2)%6
ch=ch+chr(ord(s[b])+32)
print(ch)
运行程序后,依次输入3、1、4、5、2、6,输出ch的值是( )组卷:2引用:3难度:0.6 -
4.有如下Python程序段:
s=input(“请输入一串字符串:”)
m=cnt=1
for i in range(1,len(s)):
if s[i]>s[i-1]:
cnt+=1
if cnt>m:
m=cnt
else:
cnt=1
print(m)
该程序段的功能是( )组卷:14引用:5难度:0.5 -
5.有如下Python程序段:
s=input(“请输入一串字符串:”)
f=True
for i in range(0,len(s)//2):
if s[i]!=s[len(s)-i-1]:
f=False
break
print(f)
若执行该程序后,输出的结果是“True”,那么输入的值可能是( )组卷:15引用:4难度:0.5 -
6.一个栈的入栈序列为1,2,3,4,5,则其出栈序列不可能为( )
组卷:15引用:2难度:0.5 -
7.一个栈的输入序列为“12345“,输出的第一个元素为“4“,则输出的第3个元素不可能的是( )
组卷:7引用:3难度:0.6 -
8.某Python程序如下:
s=“xyAB#Fk”;k=x=“”;flag=True
for i in range(len(s)):
If“a”<=s[i]<=“z”and flag:
x=chr(((ord(s[i])-95))%26+97)#字符“a”的ASCⅡ码值为97
elif“A”<=s[i]<=“Z”and flag:
x=chr>(((Cord(s[i])-41))%26+65)#字符“A”的 ASCⅡ码值为65
flag=False
else:
x=s[i];flag=True
k=k+x
print(k)
执行该程序后,输出值为( )组卷:10引用:4难度:0.4 -
9.创建一个容量为3的队列,元素2,3,5,1,3,5,2依次等待入队。入队规则为:
①若当前待入队元素已经在队列中,则跳过该元素,否则转②
②若当前队列已满,将队首元素出队列,否则转③
③将当前待入队元素入队列
操作完成后,队列中的元素为( )组卷:14引用:2难度:0.4 -
10.已知一个栈的入栈序列是a,c,e,h,r,t,e,其出栈序列可能的是( )
组卷:11引用:5难度:0.7
二.简答题(共3小题)
-
29.为四则运算式“6+(8-2)*2÷3”转逆波兰表达“682-2*3÷+”设计算法,编程实现。
分析:在数学运算表达式中,运算符总是置于与之相关的两个运算对象之间,在计算结果时,要考虑括号、运算符号的优先性。为了程序实现的方便,波兰逻辑学家J.Lukasiewicz提出了另一种表示法,将运算符置于其运算对象之后,没有括号,不用考虑运算符号的优先性。这种表达式称为后缀表达式,又叫逆波兰表达式。
如表达式“682-2*3÷+”是四则运算式“6+(8-2)*2÷3”的逆波兰表达式。为了处理方便,规定表达式中的数均为小于10的正整数,运算符为+、-、*、÷。
(1)抽象建模
设计两个栈bds、fh,栈bds用来存放表达式,栈fh用来暂时存放运算符。从左往右扫描四则运算式,遇到数字时,入栈bds;遇到运算符号时,根据运算符号的优先级设计进栈与出栈。
四则运算式“6+(8-2)*2÷3”转换规则的模拟过程如表所示:
结合表格的操作过程,用栈bds和栈fh记录每个操作后的栈内情况(见图),那么在操作2中栈fh里有内容为
(2)设计算法
基于问题的抽象与建模,解决该问题的主要算法描述如下:
从左往右遍历四则运算式s(设中间变量为ch):
1)当ch是数字,直接入栈bds;
2)当ch是运算符:
a.若ch为左括号时,直接入栈fh;
b.若ch为右括号时,则将栈fh元素弹出,压入栈bds,直到遇到左括号(左括号只
弹出,不压入栈bds);
c.若ch为其它运算符时,如果运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空),直接入栈fh;否则,将栈fh元素依次弹出,并压入栈bds,直到运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空);
3)将栈bds中元素依次出栈,即为该四则运算s的后缀表达式。
(3)编写程序
实现上述功能的Python代码如下,请在横线处填入合适代码。组卷:19引用:2难度:0.3 -
30.【加试题】要求将某一字符串中指定的字符改写成小写或大写(如果原先是大写就改成小写,反之改成大写),并将处理后的字符重新输出.
程序界面如下图所示,在Text1中输入原始字符串,在Text2中输入需要改变的字符,单击“改变”按钮后,在Text3中输出处理后的结果.
程序代码如下:
Private Sub Command1_Click ( )
Dim s As String,result As String,k As String
Dim zs As String,n As Integer
result=“”
s=Text1.Text
k=Text2.Text
For n=1To Len(s)
If zs=k Then
If Asc(zs)>=65And Asc(zs)<=90Then
zs=Chr(Asc(zs)+32)
Else lf Asc(zs)>=97And Asc(zs)<=122Then
zs=Chr(Asc(zs)-32)
End If
End If
Next n
End Sub
在程序①、②、③横线处填入适当的语句或表达式,把程序补充完整.
(1)程序中①横线处应填入
(2)程序中②横线处应填入
(3)程序中③横线处应填入组卷:28引用:3难度:0.1