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

有如下 VB 程序段:

n = 8

L = 1: R = n

For i = 1 To n - 1

  If i Mod 2 = 1 Then

    pos = L: L = L + 1

  Else

    pos = R: R = R - 1

  End If

  k = pos

  For j = L To R

    If a(j) < a(k) Then k = j

  Next j

  If pos <> k Then

    t = a(pos): a(pos) = a(k): a(k) = t

  End If

Next i

已知a数组的各元素值分别为12,18,23,25,9,47,29,36,则运行程序段后,a数组各元素的值变为 (    )

A . 9,12,18,23,25,29,36,47 B . 9,18,25,36,47,29,23,12 C . 47,36,29,25,23,18,12,9 D . 12,23,29,47,36,25,18,9
某班级学生为毕业晚会的一个节目设计一个仿“V”字造型,先筛选出班级中n名学生的所有男生,然后将参演的男生按照身高,摆出中间低两边高(先右后左)的造型,如下图1 所示。王林同学用VB编写模拟“节目造型”程序,功能如下:从数据库中导出所有学生编号、性别和身高数据;单击“筛选排序”按钮Command2,根据身高仿“V”字和造型进行有序排列,并将结果显示在文本框Text2 中。程序运行界面如图2所示。举例说明如下:

原1-7号男生身高

171 172 180 174 176 179 178

筛选排序后序列

171 172 174 176 178 179 180

“造型设计”后序列

180 178 174 171 172 176 179

图1

身高顺序:男3号〉男6号〉男7号〉男5号〉男4号〉男2号〉男1号

图2

Dim h (1 To n) As Integer

Dim height1(1 To n) As Integer

Dim height2(1 To n) As Integer

Dim n As Integer, i As Integer, j As Integer, num As Integer, tmp As Integer

Dim sex(1 To n) As String

Private Sub Form_Load()

'n名学生的身高和性别由数据库导出,分别存储在数组h和sex中,代码略!

End Sub

Private Sub Command1_Click()

  b = 0

  For i = 1 To n         'n名学生中的男生

    If sex(i) = “男” Then      ①      : height1(num) = h(i)

  Next i

  For i = 1 To num – 1

    For j = num To i + 1 Step -1

      If height1(j) < height1(j - 1) Then

        tmp = height1(j): height1(j) = height1(j - 1): height1(j - 1) = tmp

      End If

    Next j

  Next i

  For i = 1 To num

    Text1.Text = Text1.Text + " " + Str(height1(i))

  Next i

End Sub

Private Sub Command2_Click()

  Dim left, right As Integer, i As Integer, mid As Integer

  mid = Int((1 + num) / 2)

  left = 0: right = 0

  height2(mid) = height1(1)

  For i = 1 To (num - 1) \ 2

    right = right + 1

    height2(mid + right) = height1(2*i)

    left = left + 1

         ②    

  Next i

  If num Mod 2 = 0 Then     ③   

  For i = 1 To num

    Text2.Text = Text2.Text + " " + Str(height2(i))

  Next i

End Sub

  1. (1) 若参演的8名男生身高为180、171、173、174、178、175、176、170,程序执行结束后height1(5)的值是
  2. (2) 在程序下划线处填入适当的语句或表达式。将程序补充完整:

编写VB程序,实现如下功能:在文本框Text1和Text2中分别输入体重(单位:kg)和身高(单位:m),单击命令按钮Command1,计算BMI(体重指数)(体重指数等于体重(kg)除以身高(m)的平方)。

如果BMI<18.5,则在标签Label5中显示“体重过轻!”;如果18.5≤BMI≤25,则在标签Label5中显示“体重正常!”;如果BMI>25,则在标签Label5中显示“体重过重!”。运行效果如图所示。

  1. (1) 若要删除标签Label5中显示的内容“Label5”,可在其属性窗口中将属性的属性值删除。
  2. (2) 为实现上述功能,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim h As Single, m As Single, bmi As Single

      Dim x As String

      m=Val(Text 1.Text)

      h=Val(Text2.Text)

          ①    

      If bmi<18.5Then

        x="体重过轻!"

      Else

        If    ②    Then x="体重正常!"Else x="体重过重!"

      End If

      Label5.Caption=x

    End Sub

    画线处应填入的代码为:①;②

  3. (3) 若某同学的身高为160cm,体重为110斤,则Label5显示的结果为
有如下VB程序段:

For i=1 To 6

    a(i)=Int(Rnd*10)+1

Next i

For i=1 To 5

    If i Mod 2=1 And a(i)>a(i+1)Then

      T=a(i):a(i)=a(i+1):a(i+1)=t

    Else

        a(i)=a(i)+1

    End If

Next i

执行该程序段后,a(1)~a(6)各元素可能的值是(  )

A . 11,11,7,9,3,9 B . 6,2,8,10,5,9 C . 6,9,3,7,8,12 D . 3,9,0,8,2,7
编写“二进制加法”程序,实现如下功能:在文本框Text1和Text2中分别输入两个二进制数,单击“计算”按钮Command1,程序在位数较少的二进制数前补“0”,使两个二进制数位数相同,然后从右向左按位依次进行加法运算,最后在文本框Text3中显示相加的结果。程序运行界面如图所示。

  1. (1) 在设计程序界面时,要设置窗体的标题为“二进制加法”,应修改窗体的属性。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim s1, s2, result, t As String

      Dim span, jw As Integer

      s1=Text1. Text:s2=Text2. Text

      span=Len(s1)-Len(s2)

      If span<0 Then

        t=s1:s1=s2:s2=t

        span=   ①  

      End If

      For i=1 To span

        s2="0"+s2

      Next i

      jw=0:result="  "

      For i=   ②   To 1 Step-1

        x=Val(Mid(s1, I, 1))+Val(Mid(s2,i,1))+jw

        jw=x\2

        result=Str(x Mod 2)+result

      Next i

      If jw=1 Then result="1"+result

      Text3. Text=result

    End Sub

  3. (3) 在文本框Text1中输入“10”,在文本框Text2中输入“11000”,单击“计算”按钮Command1后,变量b2的值是
有如下VB程序段,其中数组a各元素已赋值,且a(1)=1, a(2)=2;

t =True

For i =3 To 10

    d=a(i- 1)- a(i- 2)

    If a(i)-a(i-1)<>2*dThen

t = False

    End If

Next i

执行程序后,t的值是True,则a(10)的值为(    )

A . 64 B . 128 C . 256 D . 512
有如下VB程序段:

For i = 1 To 6

    x = Int(Rnd * 10) +1

    If i Mod 2 = 1 Then

        a(i) = 2 * x + 1

    ElseIf x mod 2 = 0 then

        a(i) = x \ 2

    Else

        a(i) = x - 1

    End If

Next i

执行程序后,a数组各元素可能的是(    )

A . 3,2,7,4,20,6 B . 9,3,11,5,17,7 C . 5,0,9,4,13,10 D . 3,3,9,0,19,5
求相邻两个元素的最大差值。随机生成n个[33,127]之间的不重复整数,将n个随机数进行排序后,返回有序后相邻两个元素之间的最大差值。程序界面如图a所示:

 

图a

程序VB代码如下:

Private Sub Command1_Click()

    Const n = 20

    Dim i, j As Integer

    Dim a(1 To n) As Integer

    Dim max As Integer

    Dim c As Integer

    Randomize

    For i = 1 To n

        a(i) =    ①  

        For j = 1 To i - 1

            If a(j) = a(i) Then

                    ② 

                Exit For

            End If

        Next j

    Next i

    '将不重复无序数组a添加到列表框List1中,代码略

    For i = 1 To n - 1

        For j = 1 To    ③  

            If a(j) > a(j + 1) Then

               temp = a(j): a(j) = a(j + 1): a(j + 1) = temp

            End If

        Next j

    Next i

    max = Abs(a(2) - a(1))

    i = 2

    Do While i <= n – 1

       

        If c > max Then max = c

        i = i + 1

    Loop

    Label1.Caption = "相邻两个元素最大的差值为:" + Str(max)

End Sub

请回答下列问题:

  1. (1) 程序界面中共有类对象。
  2. (2) 将程序横线处的代码补充完整

     ② ③ 

  3. (3) 加框处代码有误,请改正。
查找最短26个字母字符串:在文本框Text1中输入任意一串包含小写字母的字符串(长度n>=26),要求找到长度最小的一段区间,能够包含全部26个小写英文字母。小王设计了VB程序用于搜索最短字符串,单击“查找”按钮command1,若无解,则在标签Label1中输出“无解!”,反之程序在标签Label1中输出该最小区间的长度以及字符的开始位置,并在文本框Text2中输出相应的最短字符串,程序界面如图所示:

⑴确定初始右边界:从第1个字符开始,向右搜索到包含全部26个字母的子串,并因此而确定右边界,同时记录每个字母在子串中出现过的次数。

⑵调整子串左边界:若左边界有重复的字母则表明该子串可缩短,故左边可右移1位……直到找到一个符合条件的子串并记录,然后子串左边界再右移1位。

⑶调整子串右边界:子串右边界继续右移,在新子串符合条件后,记录并进行比较。

重复(2)各调整步骤,直至遍历完整个字符串,获得并输出满足条件的最小长度字符串。

图片_x0020_100011

实现上述功能的VB程序如下,请回答下列问题。

Const n = 300

Dim i As Integer, k As Integer, length As Integer, L As Integer

Dim pos As Integer, s1 As String, res As String

Dim f(1 To 26)As Integer    '数组f记录每个小写英文字母的出现次数

Dim s(1 To n)As Integer    '数组s记录每个输入字符在字母表中的位置

Private Sub Command1_Click()

    res = ""

    s1 = Text1.Text

    For i = 1 To Len(s1)

        s(i)=        ①         

    Next i

    k = 0: pos = 1: length = n

    For i = 1 To 26

        f(i)= 0

    Next i

    For i = 1 To Len(s1)

        If f(s(i))= 0 Then k = k + 1

        f(s(i))= f(s(i))+ 1    '调整右边界,直到达到26个字母

        Do While         ②        

            f(s(pos))= f(s(pos))- 1

            If         ③          Then

                k = k - 1

                If i - pos + 1 < length Then

                    length = i - pos + 1

                    res = Mid(s1, pos, length)

                    L = pos

                End If

            End If

            pos = pos + 1

        Loop

    Next i

    If res <> "" Then

        Text2.Text = res

        Label1.Caption = "最短长度:" + Str(length)+ "开始位置:" + Str(L)

    Else

        Label1.Caption = "无解!"

    End If

End Sub

  1. (1) 对于字符串“qbwcadsgeqbdatcy”,包括字母“abcde”的最短字符串长度为(填数字)。
  2. (2) 请在画线处填入合适的代码。

     ② ③ 

程序代码如下:

m=a(1):s=0

For i= 2 To 5

    If a(i)> m Then m=a(i)

    s=s+m

    If a(i)<m Then m=a(i)

    s=s+m

Next i

数组元素 a(1)到 a(5)的值依次为“1,2,3,1,2”,执行该程序段后变量 s 的值为(    )

A . 9 B . 14 C . 18 D . 19
执行该程序段后,Text1显示的是(      )

a(1) = 1: a(2) = 3: a(3) = 7: a(4) = 5: a(5) = 4

s = "PRE2021reform": t = 0

For i = 1 To 5

    If a(i) >= t Then t = a(i)

    s = Mid(s, 1, t - 1) + Mid(s, t + 1)

Next i

Text1.Text = s

A . RE021rrm B . RE0rform C . PRE202rm D . RE021rform
有如下程序段:

score=int(input(“请输入分数:”))

if score>60:

    score+=20

    score+=10

print(score)

若程序运行后输入20,打印出的 score的值为

下列是一个 Visual Basic 程序:

Sub Command1_Click()

    x=4

    For i=1 To 10 step 3

        If x<i Then x=x+i

        End If

    Next i

    Text1.Text=str(x)

End Sub

该程序运行结束,文本框 Text1 中显示(   )

A . 7 B . 11 C . 21 D . 55
程序运行后,键盘输入8和6,其输出结果为

x=int(input("请输入第1个数:"))

y=int(input("请输入第2个数:"))

if x>y:

    print(x)

else:

    print(y)

一张骨牌由上下两行共四个格子构成,每个格子有一个1到6之间的数字。现在一共有5张骨牌,从左到右排成一排,定义每张骨牌的差值为:骨牌第一行的数字和减去第二行的数字和;5张骨牌的差值为:每张骨牌的差值和的绝对值。

如图a中,5张骨牌的差值为:|(3+3-4-4)+(6+3-2-5)+(2+3-4-5)+(1+5-3-3)+(1+1-1-1)|=4。

每张骨牌都可以顺时针旋转90度,效果如图b所示。现在最多可以选择其中一张骨牌进行旋转,使得旋转后的骨牌差值变小。求一种旋转方案,并输出骨牌差值的最小值。

图a

图b

编写VB程序,实现上述功能。运行程序,在文本框Text1中依次输入5张骨牌上的数字,单击“计算”按钮Command1,在文本框Text2、Text3、Text4中输出结果。程序运行界面如图b所示。

  1. (1) 若图a中第1张骨牌的数字修改为,1、2、6、6,则骨牌差值的最小值为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(1 To 20) As Integer     ‘依次存储5张骨牌上的数字

    Dim d(1 To 5) As Integer       ‘依次存储5张骨牌,上下两行的差值

    Const n = 5

    Private Sub Form_Load()

    '从文本框Text1读取5张骨牌上的数字,依次存入数组a

    'a(1)~a(4)依次存储第一张骨牌从左到右从上到下四个数字

    'a(5)到a(20)依次类推

    '代码略

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer, up As Integer, down As Integer, t As Integer, k As Integer

        Dim id As Integer, times As Integer, x As Integer, ans As Integer

        For i = 1 To n

            up = a(4 * i - 3) + a(4 * i - 2)

            down = a(4 * i - 1) + a(4 * i)

            d(i) = up - down

            t = t + d(i)

        Next i

        id = 0 : times = 0

        ans =

        If ans <> 0 Then

            k = 1

            Do While k <= n

                For x = 1 To 3

                    temp =

                    If temp < ans Then

                        ans = temp

                        id = k

                        

                    End If

                    If temp = 0 Then Exit Do

                Next x

                k = k + 1

            Loop

        End If

        Text2.Text = CStr(id)

        Text3.Text = CStr(times)

        Text4.Text = CStr(ans)

    End Sub

    Function turn(ByVal k As Integer, ByVal x As Integer) As Integer

        ‘求将第k张骨牌,顺时针旋转x次后,上下两行的差值,代码略

    End Function

数据的有损压缩:对多媒体数据进行有损压缩时,以少量数据丢失作为代价的,比如对某8 bit量化缩为6 bit量化,其算法可简单表示为:逐一删除各个字节的后2 bit,将删除后的6 bit数据首尾相连,然后重新按照8 bit一组构建字节,以十六进制显示。

例如,压缩前的原始数据为:

11111100  010111010  10110000可表示为十六进制:FC  5A  B0

删除每字节的后2 bit:

111111  00  010110  10  101100  00

首尾相连构建新的数据:

11  11110101  10101100表示为十六进制:…F5  AC

自此,原数据进行了有损压缩。程序运行界面如下所示,

实现上述算法的VB程序如下,但程序中加框处有误,请改正。

Dim a(1 To 100) As Integer

Const code="0123456789ABCDEF"

Const n=100

Private Sub Form_Load()       '以随机数模拟读取原始数据

    s=""

    Randomize

    For i=1 To n

        a(i)=Int (Rnd()*16)

        Text1.Text=Text1.Text+   '①

    Next i

End sub

Private Sub Command1_Click()

    For i=1 To n

        t=t+HtoB(a(i))

    Next i

    For j=1 To n* 4 Step 8              '每8位一组每8位一组,取前6个字符

        s=s+Mid(t, j, 6)

    Next j

    For i=1 To 4 *(n-1) Step 4        '每4位一组转为十六进制显示

        Text2.Text= Text2.Text +BtoH (Mid(s, 1, 4))

    Next i

End sub

Function HtoB (x As Integer) As String       '十六进十六进制转为二进制函数

    t=""

    m=0

    Do While  '②

        r=x Mod 2

        m=m+1

        t= Trim(r)+t                      'trim()用于删除前导空格

        x=x\2

    Loop

    HtoB=Mid("0000", 1, 4-m)+t

End Function

Function BtoH (y As String) As String      '二进制转为十六进制函数

    t1=Val(Mid(y, 4, 1))

    t2=Val(Mid(y, 3, 1))

    t3=Val(Mid(y, 2, 1))

    t4=Val(Mid(y, 1, 1))

    s=t1+t2*+t3*4+t4*8

    BtoH= Mid(code,s+1,1)

End Function

  1. (1) ①处加框代码应改为
  2. (2) ②处加框代码应改为
listque=[]   #定义列表listque存储订单

x=0

while(x!=4):    #当x=!4时,执行循环

 print('1. 添加订单')

 print('2. 发货')

 print('3. 查看订单列表')

 print('4. 退出')

 x=int(input("输入你的选择:"))    #输入选择项

 if  1 :

 y=input("输入订单编号:")     #输入订单编号

  2     #在列表listque中添加订单号

 elif x==2:

  3  #如果订单列表为空

 print("订单列表为空")

 else:

 print("发货单号:"+listque.pop(0))

 elif x==3:

 print("等待发货:",listque) #查询列表listque中的订单号

 print()

 input("运行完毕,请按回车键退出...")

此列表,定义的是(   )列表。(从“空、非空” 里选填); 补充划线1/2/3处的内容。

A . 空;x=1;listque.append(y) ; if len(listque)=0: B . 非空;x==1;listque.append(x) ; if len(listque)==0: C . 空;x==1;listque.append(y) ; if len(listque)==0: D . 非空;x==1;listque.append(y) ; if len(listque)==0
小张收集了近阶段要学习的英文单词,存储为“data.txt”文件,格式如图所示。

处理“data.txt”文件中英文单词的 Python 程序段如下:

file=“data.txt”

n=0

for word in open(file): #打开文件准备读

    if word[0:1]=='c': #word每次读到第一行信息,word[0:1]则是当前行字符的第1个字符

        n=n+1

        print(n)

运行该程序段后,输出的值为(   )

A . 1 B . 2 C . 3 D . 5
编写一个“数字序列求和”的程序,实现如下功能:从键盘输入一串正整数序列,各数值之间用空格隔开,输出该序列的和。例如输入序列12 520 23 1,运行界面如图所示。

s=input("请输入一串整数,以空格间隔开来:")

t=""

sum=0

for i in    ①   :

    if i!=" ":

            ②  

    else:

        sum=sum+int(t)

            ③   

print("该数据序列的和为:",sum)

  1. (1) 为实现上述功能,请在划线处填入合适代码。

     ② ③ 

  2. (2) 若删除加框处的代码,则图中的数据,输出的结果是
编写VB程序,实现如下功能:在文本框Text1中输入关键词,例如关键词“ok”,单击“查找”按钮Com-mannd1,在左边的列表框List1所列单词中查找包含“ok”的字符串,如果查找成功,将在右边的列表框List2中输出该单词。若该单词多次符合条件,则只显示一次。如果查找失败,则在列表框List2 中显示“查找无结果“。

实现上述功能的VB代码如下,运行效果如图所示。请回答下列问题:

Const n= 5

Dim a(1 To n) As String

Private Sub Form_ Load( )

'将n个字符串分别赋值给数组元素a(1)、a(2)、……、a(n),并在列表list1中显示

'代码略:

End Sub

Private Sub Command1_ Click( )

    Dim s As String, i As Integer, j As Integer

    Dim m As Integer, k As Integer

    Dim flag As Boolean

    s = Text1. Text

    m = Len(s)

    List2. Clear

    flag = False

    For i=1 To n

        k = Len(a(i))

        For j=1 To k- m + 1

            If  = s Then     '①改错

                List2. AddItem a(i)

                flag = True

                Exit For      '退出for 循环

            End If

        Next j

    Next i

    If  Then    '②填空

        List2. AddItem“查找无结果”

    End If

End Sub

  1. (1) 观察运行界面,窗体中一共有个对象。
  2. (2) 程序代码中,加框处①有错,请改正。
  3. (3) 为实现上述功能,请在加框处②填入合适的代码。
  4. (4) 如果删除程序代码中Exit For语句,对程序最终运行结果(选项:有/无)影响。
最近更新