1. 冬奥会的成功举办,让国民爱上了冰雪运动。某滑雪场改建一条趣味障碍赛道,根据改建要求,障碍物只能设置在相对平缓赛段。为测试滑雪场赛道的相关指标数据,工作人员在赛道上每间隔一段距离设置一个监测点。若出现连续三个及以上赛段的首尾监测点高度差不超过20 m,则称该赛段为相对平缓赛段。计算最长相对平缓赛段的总长度,再根据设定的障碍物间隔距离,计算该赛段中最多可设置障碍物的数量(要求障碍物相互之间距离、障碍物与相对平缓赛段的起始点之间的间距相等,且不小于设定的间距值)。

编写VB程序,实现上述功能。运行程序,在列表框List1中显示20个监测点的高度(赛段最高点和最低点分别为第1个和第20个监测点)。在文本框Text1中输入设置障碍间距值,单击“设置”按钮Command1,在标签Label5中显示最多设置障碍物数量,若赛道中不含有相对平缓赛段,则在标签Label5中显示0。程序运行界面如图所示。

(1) 如图所示,如果相对平缓赛段的长度为146m,则最多设置障碍物数量为
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n=20

Dim a(1 To 2*n) As Integer

Private Sub Form_Load()

    '在数据库中读取20个监测点名称和其高度值在List1中显示。读取监测点高度值和每个监测点距赛道起点的距离值,存入数组a,其中a(1)、a(3)、a(5)…a(2*i-1)存储监测点高度值,a(2)、a(4)、a(6)…a(2*i)存储每个监测点距赛道起点的距离值,代码略

End Sub

Private Sub Command1_Click()

    Dim i As Single, cnt As Integer, p As Integer

    Dim max As Integer, s As Integer

    s=Val(text1.Text)

    smax=0

    For i=1 To n

        cnt=1

        Do While

            cnt=cnt+1

        Loop

        If cnt-1 >=3 And cnt-1 > max Then

            max=cnt-1

           

        End If

    Next i

    i=smax

    If i=0 Then

        Label5.Caption=″0″

    Else

        p=0

        Do While i >=s

            p=p+1

            i=i / (p+1)

        Loop

        Label5.Caption=Str(p-1)

    End If

End Sub

Function judge(x As Integer, y As Integer) As Boolean

    judge=False

    jmin=x: jmax=x

    For m=

        If a(2*m-1) < a(2*jmin-1) Then jmin=m

        If a(2*m-1) > a(2*jmax-1) Then jmax=m

    Next m

    If a(2*jmax-1)-a(2*jmin-1) <=20 Then judge=True

End Function

【考点】
运算符、基本运算与表达式; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 小华开发了一个自动改卷系统,但是由于科目不同,没有固定的题号模板,于是小华又编写了python程序,能根据试卷答案自动输出题号。如图1为答案模板文件,小华在模板文件中录入答案后保存为"卷3.txt",如图2所示,每一行是一题或者一题中的一小题的答案,题号之间没有跳跃。例如:图2中【1】和【5】之间有4行,A、B、C、D为第1到4题的答案。程序运行结果如图3所示。

图 1

图 2

图 3

(1) 实现上述功能的 Python 程序如下,若删除图2最后一行(【7】所在的行),对程序运行结果  影响(填:有/没有)。
(2) 请在划线处填入合适的代码。

f=open("卷 3.txt",encoding="utf-8")

line=f.readline().strip() c=0      #strip()用于删除字符串尾部的"\n"换行符

preId=0

QuestionInfo=[ ]

while line:

    if line[0] == "【":

        curId =

        if curId - preId > 1:

            for i in range(preId, curId):

                QuestionInfo.append(str(i))

        elif c>0:

            for i in range(1, c + 1):

                QuestionInfo.append(str(preId) + "(" + str(i) + ")")

        c = 0

           

    else:

       

    line=f.readline().strip()         #strip()用于删除字符串尾部的"\n"换行符

f.close()

print("卷 3 题号划分为: ")

for Id in QuestionInfo:

    print(Id)

综合题 困难
2. 小王设计“模拟撤销”程序,需要用一个“历史记录”,“历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23位插入了“abc”,“模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。对字符串“Book”的操作与撤销过程,如图所示。

小王编写的“模拟撤销”Python程序如下,输入撤销前字符串和历史记录,显示撤销过程代码如下所示。

实现上述功能的代码如下,请回答下列问题。

s=input("输入撤销前的字符串")

t=input("历史记录")

t=t[::-1]

c,num="",""

ss=s

for ch in t:

    if "a"<=ch<="z"or"A"<=ch<="Z":

    c=ch+c

    elif "0"<=ch<="9"··

    num=ch+num

    else:

                  ①        

    if ch=="-":

                 ②     

    else:

         s=s[:n-1]+s[n-1+len(c):]

    ss=ss+"→"+s

    c,num="",""

print("撤销过程:"+     ③     )

(1) 请在划线处填入合适的代码。

程序划线①处应填入的代码为;

程序划线②处应填入的代码为;

程序划线③处应填入的代码为

(2) 运行该程序,输入的内容分别是"April"和"-3p+3ri-6e",字符串s的值是
综合题 困难
3. 小林在玩一种纸牌游戏——纸牌钓鱼。他对牌做了如下处理:

1)取两副纸牌去除大小王,共104张,其中▲表示黑桃,○表示红心,★表示梅花,◇表示方块,将牌按顺序叠好,成为原始牌叠;

2)对原始牌叠洗牌:进行104次洗牌,每次将面上的第一张牌随机插在牌叠中,成为洗牌牌叠;

3)摸牌:从洗牌牌叠中从上向下连续摸牌,使得摸到的牌里没有重复的牌(同花色、同点数视为重复的牌),这样连接的牌数量最多时即为最长无重复牌叠。

现设计Python程序模拟这个游戏:先显示原始牌叠,洗牌后再显示洗牌牌叠,摸牌后显示最长无重复牌叠张数、起点及终点,并显示最长无重复牌叠的信息。运行结果如第所示。

(1) 实现上述功能的Python程序如下,请在划线处填入合适的代码。

from random import randint

def dayin(head,tail):               #打印牌叠

    pt=head; k=0

    while :

        print(str(pai[pt][0])+'-'+str(pai[pt][1]),end='||')

        pt=pai[pt][1]; k=k+1

        if k==13: print(); k=0

    print('\n','*'*105)

dic={0:'▲',1:'○',2:'★',3:'◇',4:'A',5:'2',6:'3',7:'4',8:'5',9:'6',10:'7',11:'8',12:'9',13:'10',14:'J',15:'Q',16:'K'}

pai=[]; head=- 1; k=0

while k<104:

    pai.append([ ,head])

    head=len(pai)- 1; k=k+1

print('原始的牌叠')

dayin(head,- 1)        #打印原始牌叠

k=0

while k<=103:

    x=randint(0,103)

    i=0;pt=head

    while i<x:

        pt=pai[pt][1]

        i+=1

    if pt!=head:

        nhead=pai[head][1]

       

        pai[pt][1]=head

        head=nhead

    k+=1

print('洗牌后的牌叠')

dayin(head,- 1)        #打印洗牌牌堆

f={}

for i in range(4):

    for j in range(4,17):

        f[dic[i]+dic[j]]=False

L=ans=0; i=j=head

while j!=- 1:

    m=pai[j][0]

    if not f[m]:

        f[m]=True; L=L+1

        if L>ans: ans=L; pt=j; qt=i

            j=pai[j][1]

        else:

            while  :

                f[pai[i][0]]=False

                L=L- 1

                i=pai[i][1]

print('最长无重复牌叠%d 张'%ans,'起点',qt,'终点',pt)

dayin(  )

(2) 程序最后的加框处代码有错,请改正。
综合题 困难