4.3.2 if…elif…else语句的应用 知识点题库

运行下列Python程序,输出结果为True,则空白处应为(     )

a=15

b=46

If :

  print(‘True’)

else:

  print(‘Flase’)

A . a=b B . a>b C . a<b D . a==b
在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下:

① 用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。

②分配方案的形成方法: 将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2 3 4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2 3 4 5 1”。

③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5 1 2 3 4”不符合要求,因为会使第2号选手重复拿到1号作品。

小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。

请回答下列问题:

  1. (1) n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是(单选,填字母:A . 5 4 3 1 2/B . 5 4 1 3 2/C . 3 4 5 1 2)
  2. (2) 请在划线处填入合适的代码。

    Dim n As Integer   '总人数/总作品数

    Dim m As Integer   '每人分配篇数

    Dim a(1 To 500) As Integer  '数组a大小满足处理要求

    Dim c(1 To 100) As Integer  '数组c大小满足处理要求

    Private Sub Command1_Click()

      Dim i As Integer, j As Integer, k As Integer

      n = Val(Text1.Text): m = Val(Text2.Text)

      Randomize

      i = 1

      Do While i <= m

        For j = 1 To n

          c(j) = 0         '本轮分配方案中还没有数字j, c(j)=0,否则c(j)=1

        Next j

        For j = 1 To n

          If j = n - 1 And c(n) = 0 Then

                ①   

          Else

            k = r(n, j)

          End If

          a((i - 1) * n + j) = k           '分配数字k到当前方案的第j个位置上

          c(k) = 1

        Next j

        If    ②     Then i = i + 1

      Loop

      s = ""

      For i = 1 To n

        s = "参赛者" & i & ":"

        For j = 1 To m

          s = s + Str(a((j - 1) * n + i))+ ","

        Next j

        List1.AddItem s

        s = ""

      Next i

    End Sub

    Function r(x As Integer, y As Integer) As Integer 

    '生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y andc(r)=0

    End Function

    Function check(c As Integer) As Boolean

    '本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE

      Dim p As Integer, f As Boolean

      f = True

      p = 1

      For i = 1 To c * n

        If   ③     Then

          f = False: Exit For

        End If

        p = p mod n +1

      Next i

      check = f

    End Function

     ② ③ 

有如下VB程序段:

Dim x As Integer,y As Integer

x=2:y=3

If x+y=5 Then x=x+2

y=x+y

该程序段运行后,x,y的值为(  )

A . 4,3 B . 5,5 C . 2,5 D . 4,7
下列程序执行后,变量c的值是(  )

c=0

For i=1 To 10

  If i Mod 2=0 Or i Mod 3=1 Then

    c=c+1

  End If

Next i

A . 4 B . 5 C . 6 D . 7
若x>0,下列选项中,与框中的VB程序段功能相同的是(    )

Y=x Mod 7

If y=0 Then y=7

A . y=(x-1) Mod 7 + 1 B . y=(x+1) Mod 7 +1 C . y=(x-1) Mod 7 - 1 D . y=(x+1) Mod 7 - 1
城堡问题。有一个城堡的地形图,城堡被分割成若干个方块,每个方块可以有 0~4 面墙(粗线表示墙)。

每个方块用一个代表其周围墙的数字之和(0≤p≤15)表示:1 表示西墙,2 表示北墙,4 表示东墙,8 表示南墙。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。城堡至少有两个房间。例如,图a的每个方块对应数字如图b所示。

图片_x0020_100012 图a

图片_x0020_100013 图b

程序运行界面如图c所示,现已知城堡地形对应的数字矩阵,要求出城堡一共有多少房间,最大 的房间有多大。小金利用深度优先搜索算法解决当 前问题,具体算法如下:

图片_x0020_100014 图c

在城堡中按行搜索,找到第一个未被搜索过方块, 以它为起点,分别按左、上、右、下的顺序向其四个方向试探,若发现一个方向上的方块是未被搜索过且可以通往的(无墙),则以这个方块为新起点,再重复上述试探。若当前方块四个方向上均无路可走,则返回上一个方块进行其他方向上的搜索,直至返回开始当前搜索的第一个方块且这个方块四个方向上也无路可走是,则本轮搜索结束。

  1. (1) 将界面中方块(2,2)对应的数字9改为13,方块(2,3)对应的数字6改为7,则城堡中最大的房间占块方格。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const m = 4 Const n = 7

    Dim a(1 To m * n * 4) As Integer

    Dim f(1 To m * n) As Boolean

    Dim c(1 To m * n) As Integer

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, x As Integer, y As Integer

        Dim area As Integer, max As Integer, cnt As Integer

        '城堡地形对应的数字矩阵,存入 c 数组中,并显示在列表框 List1 中,f 数组初值为 false, 代码略

        For i = 1 To m * n

            x = c(i)

            For j = 1 To 4

                a((i - 1) * 4 + j) = x Mod 2

                x = x \ 2

            Next j

        Next i

        max = 0

        For i = 1 To m

            For j = 1 To n

                IfThen

                cnt = cnt + 1

                area = Search(i, j)

                If max < area Then

                    max = area

                End If

            Next j

        Next i

        Label1.Caption = "城堡一共有" + Str(cnt) + "个房间,最大的房间占" + Str(max) + "块方格."

    End Sub

    '从方块(x, y)开始搜索,并返回其所在房间所占方块数.

    Function Search(ByVal x As Integer, ByVal y As Integer) As Integer

        Dim i As Integer, j As Integer, sum As Integer, r As Integer, c As Integer

        Dim pre(1 To m * n) As Integer     '记录当前房间搜索的路径

        Dim row(1 To 4) As Integer, col(1 To 4) As Integer

        row(1) = 0: row(2) = -1: row(3) = 0: row(4) = 1

        col(1) = -1: col(2) = 0: col(3) = 1: col(4) = 0

        sum = 1: j = 1: pre(1) = x * 10 + y

        f((x - 1) * n + y) = True

        Do While True

            For i = 1 To 4

                r = x + row(i): c = y + col(i)

                If r >= 1 And r <= m And c >= 1 And c <= n Then

                    If f((r - 1) * n + c) = False AndThen

                        sum = sum + 1

                        x = r: y = c

                        f((x - 1) * n + y) = True

                        j = j + 1

                        pre(j) = x * 10 + y

                        Exit For

                    End If

                End If

            Next i

            If i > 4 Then

               

                If j = 0 Then

                Exit Do

                x = pre(j) \ 10: y = pre(j) Mod 10

            End If

        Loop

        Search = sum

    End Function

阅读以下程序段,根据要求回答以下问题。

a=4

b=5

If a<b Then

    a=2*b

    b=a+b

End If

Print a, b

执行上述程序段后,变量a的值是,变量b的值是

以下程序段运行后S的值是(   )。

S=0

For i=1 To 14

    x=2*i-1

    If x Mod 3 =0 Then s=s+1

Next i

A . 0 B . 4 C . 5 D . 14
某仓库物品代码格式为“X-XXX-XXXXX-Y”,其中“X”和“Y”均为0到9之间的数字,“Y”为校验码。校验码由前面9个X计算得到,计算方法为:从左边开始,第1个数字乘以1 加上第2个数字乘以2……依此类推,直到加上第9个数字乘以9,将该结果除以10,所得余数即为校验码。

小吴设计一个根据校验码校验物品代码的VB程序,功能如下:在文本框Text1中输入物品代码,单击“校验”按钮Command1,如果输入的校验码与计算所得的校验码一致,则输出“校验通过。”(如下左图所示),否则输出“校验不通过!”(如下右图所示)。

Dim s As String                '用于存储输入的物品代码

Dim t As String

Dim i As Integer, j As Integer

Dim sum As Integer         '用于存储计算校验码的累加和

Dim check_old As Integer              '用于存储输入物品代码中的校验码Y

Dim check_new As Integer            '用于存储按照前面9个数字X计算所得的新校验码

Dim a(1 To 10)As Integer

Private Sub Command1_Click()

    '从物品代码中取出9个数字X依次存储到a(1)到a(9)中,取出校验码Y存储到a(10)中

    s= Text          ①

    j=0

    For i=1 To 13

        t=Mid(s, i, 1)

        If(t>="0")And(t<="9") Then

             j=j+1

            a(j)=Val(t)

        End If

    Next i

    '计算新的校验码并和输入的校验码进行比较

    sum=0

    For i=1 To 9

        sum=sum+             ②

    Next i

    check_new=          ③

    check_old=a(10)

    If check_old=check_new Then

        Label1.Caption="校验通过。"

    Else

        Label1.Caption="校验不通过! "

    End If

End Sub

实现上述功能的VB程序如下,加框处代码有错,请改正。

小轩的绿色出行花费:某著名旅游城市H市为了鼓励大家采用公共交通方式绿色出行,推出了一种地铁换乘公交车的优惠方案,方案具体细则如下:

①在搭乘一次地铁后可以获得一张优惠票,有效期为45分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间与开始乘地铁的时间之差小于等于45分钟,即:t_bus-t_ subway <=45

②搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。

③搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。

小轩同学编写了VB程序计算最近公共交通出行的费用,程序运行时,在文本框Text1中输人小轩的公共交通出行记录(各数之间以逗号分隔),单击“获取数据”按钮Command1将数据按顺序存储在数组a中并在List1中显示。其中第i条出行记录乘坐的交通工具存储在数组元素a(3*i-2)中,0代表地铁,1代表公交车;第i条记录乘车的票价存储在数组元素a(3*i-1)中;第i条记录开始乘车的时间(距0时刻的分钟数)存储在数组元素a(3* i)中。如小轩最近6条乘车记录的数据为0,5,1,0,20,16,0,7,23,1,18,31,1,4,38,1,7,68在数组a中的存储结构如下表所示。

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

……

a(16)

a(17)

a(18)

0

5

1

0

20

16

……

1

7

68

单击“计算”按钮Command2,则在标签Label2中显示小轩同学的公共交通出行总费用。程序运行界面如图所示。

  1. (1) 若小轩的出行数据如上表所示,则小轩此次出行总花费为。(填数字)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const maxn= 1005

    Dima(1 To 3 * maxn) As Integer

    Dim ticket(1 To 3 * maxn) As Integer

    Dim i,n,k,x,y,cost As Integer

    Dim tail,head As Integer

    Dim s As String

    Dim found As Boolean

    Private Sub Command1_Click()

        s= Text1.Text

        k= 1

        For i=1 To L en(s)

            c= Mid(s,i,1)

            If c="," Then k=k+1 Else

        Next i

        '将各条出行数据输出在列表框List1中,代码略

    End Sub

    Private Sub Command2_ Click()

        head=1:tail= 1

        For i=1 To k\ 3

            If a(3 * i-2)=0 Then

                cost= cost+a(3 * i-1)

                ticket(3 * tail)=a(3 * i)+45

                

                tail= tail+1

            Else

                Do While head < tail And ticket(3 * head) < < a(3 * i)

                    head= head+1

                Loop

                

                If found= False Then cost=cost+a(3 * i-1)

            End If

        Next i

        Label2.Caption= Str( cost)

    End Sub

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

        pd= False

        For j=x Toy

            If ticket(3 * j-1) >=a(3 * i-1) And ticket(3 * j-2)=0 Then

                pd=True

    ticket(3 * j-2)=1

                Exit Function

            End If

        Next j

    End Function

下面程序运行结果是

a=10

s=0

if a>5:

      s=s+a

print(s)

地球绕太阳的运行周期为365天5小时48分46秒(合365.24219天),即一回归年。公历的平年只有365天,比回归年短约0.2422天,每四年累积约一天,把这一天加于2月末(即2月29日),使当年的时间长度变为366天,这一年就是闰年。判断某一年是否是闰年的方法是年份数能被4整除,但不能被100整除,或者年份数能被400整除。以下是一段用于判断某一年是否是闰年的程序。

 ② ③ ④ ⑤

下列关于计算1×3×5×7×9×…×99值的算法描述中,错误的是(   )
A .          B . C .          D .
运行如下VB程序:

Private Sub Command1_Click( )

    Dim x As Integer

    Dim y As String

    x=Val(Text1.Text)

    If x>=95 Then

        y=“非常满意”

    ElseIf x>=80 Then

        y=“满意”

    ElseIf x>=60 Then

        y=“基本满意”

    Else

        y=“不满意”

    End If

    Label1.Caption=y

End Sub

在文本框Text1中输入50,单击命令按钮Command1后,在标签Label1中显示(    )

A . 非常满意 B . 满意 C . 基本满意 D . 不满意
有如下Visual Basic程序段:

Private Sub Command1_ Click( )

    Dim a(1 To 10) As Integer, i As Integer, k As Integer

    a(1)=1:a(2)=17:a(3)=8:a(4)=9:a(5)=18

    a(6)=15:a(7)=20:a(8)=13:a(9)=7:a(10)=11

    k=0

    For i= 2 To 9

        If(a(i)-a(i-1))*(a(i+1)-a(i))< 0 Then k=k+1

    Next

    Text1. Text = Str (k)

End Sub

该程序段运行后后,文本框Text1中显示的内容是(    )

A . 6 B . 7 C . 8 D . 9
设计一个算法,从一串数字中找出所有数字之间绝对值的最大差值。具体程序功能如下:在文本框输入数字串(数据间用逗号分隔,以数字结尾),单击按钮,在标签框输出结果。例如在Text1中输入“13,-5,20,3,-1”,单击“计算”按钮“Command1”,在标签框“shuchu”输出“25”。实现算法的VB程序如下,界面如图所示,回答下列问题:

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t1 As Integer, t2 As Integer

    Dim s As String, c As String, st1 As Integer, st2 As Integer, max As Integer

    s = Text1.Text: max = 0: st1 = 1

    For i = 1 To Len(s) - 1

        c = Mid(s, i, 1)

        If c = "," Then

            t1 = Val(Mid(s, st1, i - st1))

               ①    

            st2 = st1

            For j = i + 1 To Len(s)

                   ②   

                If c = "," Then

                    t2 = Val(Mid(s, st2, j - st2))

                    st2 = j + 1

                   

                End If

            Next j

        End If

        If j>0 Then t2 = Val(Mid(s, st2, j - st2))

        If Abs(t1 - t2) > max Then max = Abs(t1 - t2)

    Next i

    shuchu.Caption = "所有数之间绝对值相差最大为:" + Str(max)

End Sub

  1. (1) 为实现该程序,在窗体中使用了多个对象,如图所示,不包括窗体,该程序使用了类对象。
  2. (2) 根据算法要求,请在划线处填入合适代码,使程序完整。

     ② 

  3. (3) 若删除程序中加框处语句,则计算出的最大差值为:
展开字符串。如果在输入的字符串中,含有类似于“c-g”或者“3-7”的字符子串,就把它当作一种简写,字符串展开输出时有如下规则:

1)如果“-”号右边的字符按照ASCI码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“-”号,例如:“c-g”输出为“cdefg”,“3-7”输出为“34567”。

2)如果“-”号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,保留中间的“-”号,例如:“a-a”输出为“a-a”,“4-1”输出为“4-1”。

3)如果“-”号右边的字符恰好是左边字符的后继,则删除中间的“-”号,例如“d-e”应输出为“de”,“3-4”应输出为“34”。

某同学按照上述算法,编写了VB程序,功能如下:在文本框Text 1中输入简写字符串,单击“展开”按钮Command 1,程序进行字符串展开处理并显示在文本框Text 2中。程序运行界面如图所示。

  1. (1) 如果输入的简写字符串为“abs-w-Y1234-5S-4z”,则展开后的字符串为
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适代码。

    Private Sub Command1_Click()

        Dim st1 As String, st2 As String, i As Integer

        st1=Text1. Text

        n=Len(st1)

        st2=""

        For i=1 To n

            If pos(st1, i)Then<> "-" Then

                st2=st2+pos(st1, i)

            Else

                If pos(st1, i-1)<pos(st1, i+1) Then

                    For j=Asc(pos(st1, i-1))+1 To Asc(pos(st1, i+1))-1

                       

                    Next j

                Else

                    st2=st2+"-"

                End If

            End If

        Next i

        Text2. Text=st2

    End Sub

    Function pos(s As String, x As Integer) As String     '返回字符串s中x位置的字符

       

    End Function

下面的Python代码实现了读入若干非负整数,统计其中奇数个数的功能。要想实现这一功能,应该在空格处填(    )。

li = map(int, input(). split())

cnt=0

for i in li:

 if                        :

   cnt+=1

print("奇数有{}个。". format(cnt))

A . i%2==1 B . i%2 C . i//2==1 D . i/2==1
有如下VB程序段:

s=Text1. Text

s1=" "

For i=1 To Len(s)   

    c= Mid(s, i, 1)

    If c>= "A" And c <= "Z" Then

        c= Chr(Asc(c)+ 32)

    ElseIf c>="a"Andc<(="z"Then

        c=Chr( Asc(c)-32)

    End If

    s1=c+s1

Next i

Text2. Text=s1

该程序段运行后,若在文本框Text1中输入 “Ab12CD”,则 文本框Text2中显示的内容是(    )

A . aBcd B . dcBa C . aB12cd D . dc21Ba
有如下python程序段:

n="p4y2t3h1o9n4";p=""

for i in n:

    if "0"<=i<="9":

        if p=="":

            p+=i

        elif i>=p[-1]:

            p+=i

        elif i<p[0]:

            p=i

执行该程序段后,则p的值是(     )

A . "239" B . "14" C . "19" D . "4"
最近更新