4.4 运用循环结构描述问题求解过程 知识点题库

有如下 VB 程序段:

For i = 1 To 3

   For j = 1 To 6 - i

      If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t

   Next j
Next i

数组元素a(1)到a(6)的数据依次为“55,31,19,42,37,23”,则此程序运行完成后数组元素的数据依次是(  )

A . 19,31,23,37,42,55 B . 19,23,31,55,37,42 C . 19,23,31,37,42,55 D . 55,42,37,31,23,19
奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若为奇数,则校验值为0,否则校验值为1。小明编写了一个计算奇偶校验值的VB程序。

程序功能:在文本框Text1中输入1~255十进制待校验数,单击“计算”按钮后,在文本框Text2中显示该数对应的二进制值,并在标签Label1中显示该数的校验位值。

  1. (1) 如果在文本框Text1中输入22,单击“计算”按钮,则显示的校验位值是
  2. (2) 部分程序代码如下,请完善划线处内容,完成上述功能。

    Private Sub Command1_Click()

    Dim a As Integer, s As String

    Dim n As Integer, t As Integer, v As Integer

    n = Val(Text1.Text)                    ' 输入一个1~255的十进制数

    t = 0

    s = ""

    Do While n > 0

          a = n Mod 2

           n = n \ 2

           t =

           s = Str(a) + s                    ' str(a)将变量a的值转换为字符串

    Loop

    v =  

    Text2.Text = s                                   ' 显示对应的二进制数值

    Label1.Caption = "校验位值:" + Str(v)              ' 显示输出校验位值

    End Sub

小辉设计了一个排序算法:从前往后、从后往前交替处理,同时尽可能减少比较次数,直至所有元素升序排列。算法的VB程序段如下:

'待排序的数据存储在数组a(1)至a(N)中,代码略。

st=1:ed=N:k=1

Do While st <> ed

    last = st

    For i=st To ed-k

        If a(i)*k>a(i+k)*kThen

            t=a(i): a(i)=a(i+k): a(i+k)=t:

        End If

    Next i

    ed = last:

    t=st:st=ed:ed=t

Loop

上述程序段中方框处可选语句为:

①Step 1②Step k③last=i④last=i-1⑤k=-k⑥k=k+1

则⑴⑵⑶处语句依次可为(    )

A . ①③⑤ B . ②③⑤ C . ①④⑥ D . ②④⑥
有如下VB程序段:

Private Sub Command1_Click( )

  Dims As String, i As Integer

  s=Text1.Text

  For i=1 To 8 Step 2

      s=ds(s, i)

  Next i

  Text2.Text=s

End Sub

Function ds(s As String, m As Integer)As String

  Dim n As Integer

  n=Len(s)

  If m<1 0r m>n Then ds= "位置有误"

  If m=1 Then ds=Mid(s, 2, n-1)

  If m=n Then ds=Mid(s, 1, n-1)

  If m <n Then ds=Mid(s, 1, m-1)+Mid(s, m+1, n-m)

End Function

若在文本框Text1中输入“TXHOLLYCLASS”,执行该程序段后,文本框Text2中显示的是(  )

A . THLYLS B . XHLLCLSS C . TXHOLLY D . XOLCLASS
统计不同单词个数,在Text1中输入一行单词,点击“统计”按钮后在Text2中输出不同单词的个数。单词字母有大小写,同一单词的大小字母视为相同,句子以符号结尾, 程序运行界面如图1所示。

图1

图2

  1. (1) 观察以下代码,该代码中 Command1_Click()是(选:A . 对象名 /B . 事件名 /C . 事件处理过程名)
  2. (2) 在设计应用程序界面时,应使用图2所示“控件工具箱”中的添加列表框List1.
  3. (3) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

      Dim a(1 To 100) As String ,s As String, ch As String, word As String

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

      s = Text1.Text : k = 0 : word = ""

      For i = 1 To Len(s)

        ch = Mid(s, i, 1)

        If ch >= "a" And ch <= "z" Or ch >= "A" And ch <= "Z" Then

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

            word = word + ch

          Else

            flag = False

          For j = 1 To k

            If a(j) = word Then flag = True

          Next j

          If Not flag And word <> "" Then

            

            a(k) = word

            numb = numb + 1

          End If

          

        End If

      Next i

     Text2.Text = str(numb)

    End Sub

四则混合运算是指加法、减法、乘法和除法四种混合运算。现有一程序可计算不带括号的“+”、“-”、“*”三则混合运算。在文本框Text 1中输入表达式(保证符合数学规范),单击“=”按钮Command 1后,在标签Label l中输出运算结果,程序界面如图所示。

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

    Private Sub Command1_Click( )

        Dims As String,ch As String

        Dim i As Integer,t As Integer

        Dim ans As Long,px As Long

        s=Text1.Text

        ans=0:t=0:px= 1

        For i=1 To Len(s)

            ch=Mid(s,i,1)

            IfThen

                t=t*10+Val(ch)

            Else

                px=px*t

               

                If ch= "_" Then

                   

                    px=-1

                End If

                t=0

            End If

        Next i

        Label 1.Caption=Str(ans+

    End Sub

  2. (2) 若删除加框处代码,在文本框Text1中输入表达式“3-2+2*3”,程序运行结束时标签Label1中显示的内容为
利用 VB 设计一个十进制转换为二进制的程序,界面如下图所示:

在文本框 Text1 中输入十进制数,单击转换按钮 Command1,在文本框Text2中显示对应的二进制数。

程序采用“除二取余”法进行转换,即对十进制数除以2,余数作为二进制数的一位数字,商则重复上述步骤继续除2,直到商为0结束转换。

  1. (1) 设置程序界面的时候,把Text1中的内容清空,通过修改其属性来实现的。(填字母:A . Caption/ B . Text/ C . Name)
  2. (2) 程序中共有个对象;窗体上共有个对象。
  3. (3) 程序如下所示,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim s2 As String                          's2存放二进制数

        Dim s10 As Integer                      's10存放十进制数

        Dim x As Integer                          'x存储余数

        s10 = Val(Text1.Text)

        s2 = " "

        Do While

            x =

            s2 = Str(x) + s2 s10 = s10 \ 2

        Loop

                              '输出运行结果

    End Sub

  4. (4) 执行该程序,在文本框Text1中输20,则Text2中输出
  5. (5) 程序调试完成,通过“工程另存为”保存文件,其中窗体文件为。(填字母:A . /B . /C .
下列程序执行后的结果是(       )。

s=0

for i in range (1,6):

    if i%2!=0:

        s=s+i

print("i=",i,"s=",s)

A . i=4  s=10 B . i=5  s=9 C . i=6  s=9 D . i=6  s=8
在某区间内有若干个障碍物,现需找出一个最大的空正方形用于建设方形场地。如图所示,将该区间用网格表示(区间范围m*n,m、n的值均在1-1000之间),障碍物(黑色圆点)位于若干个网点上,障碍物个数及位置随机生成。

对w*h(10*8)网格数据进行存储,无障碍物的位置对应数组元素数值为0,有障碍物的位置对应数组元素数值为1。数组d中数据初始化后,对应数组元素数值d(2)=1:d(27)=1 :d(33)=1:d(45)=1:d(52)=1:d(57)=1,其他数组元素数值为0。对应最大空正方形的起始位置为3,边长为4。

找最大空正方形的方法如下:①从当前位置右下角开始逐渐扩大正方形边长,直到有障碍物出现,不能再扩展为止;②取下一个位置,按照步骤①继续查找,最后1列为边界,该位置上无需查找。

  1. (1) 给定7*8网格,有障碍物的位置为d(8)=1:d(18)=1:d(27)=1:d(36)=1:d(52)=1,则对应最大空正方形的起始位置和边长分别为。(注:两个数字之间请用逗号“”,隔开)
  2. (2) 小李根据上述描述,设计了一个查找最大的空正方形起始位置和边长的算法。算法的VB程序如下请在划线处填入合适的代码。

    Const W=10

    Const h=8

    Dim d(1 To w*h)As Integer

    Private Sub Form_Load( )

        ‘数组初始化,无障碍物的位置对应数组元素值为0,有障碍物的位置对应数组元素数值为1

    End Sub

    Private Sub Command l_Click()

        Dim i As Integer,length As Integer,maxw As Integer

        Dim max As Integer

        max=0

        For i=1 To w*h

        If i Mod w <> 0 Then ‘判断该位置是否需要查找

            If length>max Then max =length:maxw=i

        End If

         ‘输出最大空正方形的起始位置和边长,代码略。

    End Sub

    Function scan(k As Integer)As Integer

        Dim j As Integer

        Dim t As Integer,s As Integer

        Dim dw As Integer

        t=1

        Do While k\w+1+t<h And

            s=0

            dw=k+w+1

            For j=1 To t^2

                s=s+d(dw+w*((j-1)\t)+(j-1)Mod t)

            Next j

            If Then

                Exit Do     ‘退出循环

            Else

                t=t+1

            End If

        Loop

        scan=t

    End Function

有如下VB程序段:

Dim i As Integer,c As String,s As String,t As String

s=“China2014IT”:t=“”

For i=1 To Len(s)

    c=Mid(s,i,1)

    If c>=“a” And c<=“z” Then t=t+c

Next i

Label1.Caption=t

该程序段运行后,标签Label1中显示的内容是(    )

A . 2014 B . ChinaIT C . hina D . CIT
某市实施交通管制,早晚高峰根据车牌号单双号限行。车牌尾号为单号的双号日限行,车牌尾号为双号的单号日限行。若车牌尾号不是数字,则从车牌号中取最后一位数字。

实现上述功能的Python 程序代码如下:

chepai = input('请输入您的车牌:浙A')

for i in range( __________________,-1):

  if '0' <= chepai[i] <='9':

    lastnum = int(chepai[i])

    if lastnum % 2 == 0:

      print('车牌尾号双号,单号日限行!')

    else:

      print('车牌尾号为单号,双号日限行!')

break

划线处应填入代码是(   )

A . len(chepai)-1,-1 B . len(chepai),0 C . len(chepai)-1,0 D . 1,len(chepai)+1
有如下VB 程序段:

s1 = "PROGRAM": s2 = ""

For i = 1 To 4

    t = Int(Rnd * 4) * 2 + 1

    Do While f(t)

        t = Int(Rnd * 4) * 2 + 1

    Loop

    f(t) = True

    s2 = s2 + Mid(s1, t, 1)

Next i

Label1.Caption = s2

数组f 各元素的初值为False,执行该程序段后,标签Label1上显示的内容可能是(    )

A . PPOM B . MROR C . PROM D . RPAM
Base64编码是计算机常见的一种编码方式,规则是把3个字节(24位)的数据按6位一组分成4组(24÷6=4),然后将每组数据分别转换为十进制,根据表15.1将这些十进制数所对应的字符连接,即为Base64编码。

表 15.1 Base64 编码表

索引

0

1

24

25

26

27

50

51

52

61

62

63

字符

A

B

Y

Z

a

b

y

Z

0

9

+

-

以编码字符“Web”为例,如表15.2所示,字符“Web”对应的ASCII编码分别是87,101,98,分别转换为8位二进制数,按6位二进制数分组后再转换成十进制,查找它们对应的字符,得到“Web”得Base64编码为“V2Vi”。

表15.2 Base编码方法

  1. (1) 编码字符“Wea”的Base64编码为:
  2. (2) 实现上述功能的 Python 代码如下,请在划线处填入合适的代码

    s1=input('请输入编码字符:')

    s=''

    tmp=0

    ans=''

    txt='ABCDEFGHIJKLMNOPQRSTUVWSXYabcdefghijklmnopqrstuvwxyz012345678+/'

    for c in s1:

      n=

      t=''

      for i in range(8):       # 将十进制 n 转换为 8 位二进制

        r=n%2

        t=+t

        n=n//2

      s=s+t

    for i in range(len(s)):       # 6 位二进制一组分组再转换成十进制,查找它们对应的字符

     

      if i%6==5:

        ans=ans+txt[tmp]

        tmp=0

    print('Base64 编码:',ans)

某会务组根据参会者提交的入住宾馆和到达指定上车点时间的信息,安排车辆接送参会者去宾馆。不同宾馆的参会者分开接送,同一宾馆的参会者可同乘一辆车,每辆车最多接送v人,每个参会者的等待时间都不超过w分钟。参会者人住的宾馆和到达上车点的时间用长度为7的字符串表示,例如“A-09:15”表示参会者当天入住A宾馆,9点15分到达上车点,如果w为10,那么该参会者最晚9点25分出发:去宾馆。

编写VB程序,统计接送n个参会者所需的最少车辆数。运行程序,列表框List1中按入住宾馆分组显示所有参会者提交的信息,同一宾馆的按时间先后排列。单击“统计”按钮Command1,在文本框Text1中显示所需的最少车辆数。程序运行界面如图所示。

  1. (1) 如图所示,如果每辆车最多接送4人,每个参会者的等待时间不超过10分钟,接送所有到A宾馆的参会者最少需要辆车。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    'n、v、w是常量

    'n为参会人数,v为每辆车最多接送人数,w为参会者最长的等待时间,代码略

    Private Sub Form_ Load()

        '读取n个参会者提交的信息,依次存入a(1)~a(n)

        '将a(1)~a(n)接入住宾馆分组,同一宾馆参会者按时间先后排序

        '并在List1中显示,代码略

    End Sub

    Private Sub Commandl_Click()

        Dim i As Integerj As Integer, sum As Integer

        a(n+1)=" "

        j=1: sum = 0

        For i-2 To n+ 1

            If Mid(a(i), 1, 1)< Mid(a(j),1,1)Then

               

                j=i

            End If

        Next i

        Text1. Text = Str(sum)

    End Sub

    Function getDif(tsl As String, ts2 As String) As Integer

        '返回ts1到ts2的时长(单位:分钟),代码略

        '例如ts1为"08:30",ts2 为"08:35",则返回的函数值为5

    End Function

    Function getCnt(first As Integer, last As Integer) As Integer   

         Dim s1 As String, s2 As String

         Dim iAs Integer, p As Integer, k As Integer,t As Integer

         p= first:k= 1

         s1 = Mid(a(first), 3, 5)

         For i= first+1 To last

             s2 = Mid(a(i), 3, 5)

             t= getDif(s1, s2)

             If  Then

                 k=k+1

                p=i

                

            End If

        Next i

        getCnt= k

    End Function

S=0

FOR A=5 TO 1

    S=S+A

NEXT A

PRINT S  

该程序的运行结果是(     )

A . 0 B . 15 C . 6 D . 无结果
有N个人围成一个圈,从1到k报数,报到k的人出列,剩下的同学继续围成一个圈,由出列位置的下一个同学再从1开始报数,输出出列的顺序,则①②划下线处填空选项为(    )

Private Sub Command1 Click)

    Const n=9 '总人数

    Dim b(1 Ton) As Integer

    Dim k As Integer, i As Integer, p As Integer, cnt As Integer, pre. p As Integer

    k =Val(Text1. Text)

    For i= 1 Ton

        b(i)=iModn+1

    Next i

    p = n:i = 0:cnt=0

    Do While i<n

        pre_p = p

        p=   ①   

    cnt=cnt+1

    If cnt=k Then

       List1. AddItem Str(p)

       b(pre_p)    ②    

       cnt=0

       i= i+1

    End If

  Loop

End Sub

A . ①b(p)   ②b(p) B . ①p mod n+1   ②b(p+1) C . ①b(p)   ②b(p+1) D . ①(p-2+n) mod n    ②b(p)
编写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语句,对程序最终运行结果(选项:有/无)影响。
在BXY中编辑有这样一段程序:

from microbit import *

while True:

    if button_a.is_pressed():

        display.show(Image.HAPPY)

    elif button_b.is_pressed():

        break

    else:

        display.show(Image.SAD)

sleep(1000)

在micro:bit硬件支持下,以下说法正确的是 (    )

A . 开始运行,不按开发板上的任何按钮,开发板显示“笑脸” B . 开始运行,按开发板上的B按钮后,开发板上的LED灯全部关闭 C . 开始运行,不按开发板上的任何按钮,开发板进入死循环,无法正常运行 D . 开始运行,按开发板上的A按钮后,开发板显示“笑脸”,一秒钟后显示“哭脸”
男性最适宜运动心率=(220-年龄-安静心率)×(60%~80%)+安静心率,女性最适宜运动心率=(210-年龄-安静心率)×(60%~80%)+安静心率。

age=float(input('请输入age='))

HRrest=float(input('请输入HRrest='))

gender=input("请输入male or female :")

if gender=='    ③    ':

        ④     

else:

       ⑤      

HRrest

high=(n-age-HRrest)*0.8+HRrest

print('最适宜的心率是:',low,'~',high)

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

以上计算最适宜运动心率的公示是有性别差异的,那么如何修改程序可以实现根据性别输出结果呢?

水仙花数是指一个三位正整数,它的每个位上的数字的3次方之和就等于它本身,例如:1*+5*+3*=153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。研究“水仙花数”

编程问题是用编程解决“哥德巴赫猜想”的寻根和延伸。从寻找“水仙花数”的编程到验证哥德巴赫猜想的编程,其重心是编程的思考方法,对基础编程的学习有一定的实用价值,对编程思维乃至计算思维的训练有一定的启示。以下Python程序功能是找出三位数中的所有水仙花数。请从下面备选代码中选出一个合适的将程序补充完整。

for x in   ①  1:

  g=  ②         #分离个位上的数字并赋给变量g

  s=  ③          #分离十位上的数字并赋给变量s

  b=  ④         #分离百位上的数字并赋给变量b

if   ⑤            #判断个、十、百位上数字的立方之和是否等于这个数
print(x,"是水仙花数")

  1. (1) 第①处应填写的合适代码为(     )。
    A . range (100, 999) B . range (101, 1000) C . range (100, 1000) D . range (999)
  2. (2) 第②处应填写的合适代码为(     )。
    A . x%10 B . x//100 C . x/10
  3. (3) 第③处应填写的合适代码为(     )。
    A . (x%10)//10 B . (x//10)%10 C . (x%10)%10 D . (x//10)//10
  4. (4) 第④处应填写的合适代码为(     )。
    A . x%100 B . x%10 C . x//100 D . x**100
  5. (5) 第⑤处应填写的合适代码为(     )。
    A . g**3+s**3+b**3==x B . g*g*g+s*s*s+b*b*b=x C . g^3 +s^3+b^3==x D . g^ 3 +s'^3+b^3=x