4.4.2 while循环的应用 知识点题库

循环重复次数一定时,我们通常称为计数循环。Python中用语句来创建这类循环。语句格式为。Python对循环体约定格式是,循环体必须相对关键词for有
以下程序段运行后,s的值是(  )。

n=0

s=0

Do While  s<=10

    n=n+3

    s=s+n

loop

A . 30 B . 18 C . 0 D . 3
由数组a生成数组b的方法描述如下:

⑴将数组a中的n个元素依次分割出若干个数据块,每个数据块有2m个元素,分割时,按尽可能大的数据块进行分割。

⑵对每个分割出的数据块进行求和,将和依次存储在数组b中。

例如:n=13,可将a(1)~a(13)依次分割成3个数据块,元素的个数分别为8、4、1。将3个数据块的和依次存储在b(1)、b(2)、b(3)中。

小明依据上述描述设计了如下VB程序,运行界面如图所示。请回答下列问题:

Const n = 13

Dim a(1 To n)  As  Integer Dim b(1 To n) As Integer Private Sub Command1_Click()

  Dim start As Integer                 ‘当前未分割数据的第1个元素下标

  Dim i As Integer, k As Integer, pb As Integer, left As Integer, m As Integer

  '读取n个数据,依次存储到a(1)、a(2)、……a(n)中,并对数组b赋初值为 0,代码略

  start = 1: left = n: m = 0

  Do While 2 ^ m <= left             ‘寻找第1个数据块

         ①       

  Loop

  m = m - 1

  pb = 1

  Do While left > 0

    For i = start To start + 2 ^ m - 1

            ②         

    Next i

    List1.AddItem Str(2^m) + " " + Str(b(pb)) pb = pb + 1

            ‘改错

    left = left - 2 ^ m

    Do While left < 2 ^ m

      m = m - 1

    Loop

  Loop

End Sub

  1. (1) 当 n=110时,分割出的数据块有 个。
  2. (2) 程序代码中,将划线处语句补充完整。

     ② 

  3. (3) 程序代码中,加框处语句有错,请改正。
(聪明的猪)某屠宰厂每天决定宰杀若干头猪(1<=n<=100),把每天待宰杀的猪按顺序编号后排成一排,每次将排在单号位置的猪杀掉;然后把剩下的猪按上一次相对的位置排好,重新编号,再次将排在单号位置的猪杀掉;以后每次重复前面的过程,直到仅剩下一头猪时停止宰杀,将这头幸运的猪放回;有一头猪聪明的猪,每天都能躲避被屠宰。利用VB编写一个程序,根据每天杀猪的数量,求出当天这头聪明的猪的原始编号。VB程序界面设计如下:

控件属性设置如下:

对象

属性

属性值

说明

Form1

Caption

幸运的猪

窗体的标题

Label1

Caption

当天要杀猪的数量

标签显示 文字

Label2

Caption

幸运猪的原始编号

标签显示的文字

Text1

Text

空白

文本框的文本

Text2

Text

空白

文本框的文本

Image1

Picture

Pig.gif

显示的图片

Command1

Caption

计算

按钮显示的文字

  1. (1) 完成以上功能的程序代码如下,请在划线处填入正确的语句。

    Private Sub Command1_Click()

      Dim sum, i, pos, last, count As Integer

      Dim a(1 To 100) As Integer

     

      For i = 1 To sum

        a(i) = 1                            '初始状态为1表示还没被杀掉

      Next i

      count=0

      Do while                '要杀掉sum-1头猪

        Pos=0

        For i = 1 To sum

            If a(i) <>0  Then

                pos = pos + 1                    'pos表示报数

                If   Then            '报到奇数的猪被屠宰

                    count = count + 1 

                    a(i) = 0

                End If

            End If

        Next i

      Loop

      For i = 1 To sum

        If a(i) = 1 Then

            Text2.Text = Str(i)

        End If

      Next i

    End Sub

  2. (2) 屠宰场每天有100头猪被屠宰,这头聪明的猪,需要初始排在号位置上才能避免被屠宰掉。
  3. (3) 还是这100头猪,如果屠宰场改变杀猪规则,第一次杀奇数,第二次杀偶数,第三次杀奇数,第四次杀偶数……,依次轮流,100头猪中幸运的猪的原始编号是
下面代码的输出结果是(     )

s=0

while s<=29:

    s=s+10    #循环体

print(s)

A . B . C . 30 D . 40
城堡问题。有一个城堡的地形图,城堡被分割成若干个方块,每个方块可以有 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

有如下VB程序段:

Dim a(1 To 10) As Integer

s = "8+9+10=": n = 1

For i = 1 To Len(s)

    ch = Mid(s, i, 1)

    If ch >= "0" And ch <= "9" Then

        a(n) = a(n) * 10 + Val(ch)

    Else

        If a(n) > 0 Then n = n + 1

    End If

Next i

Text1.Text = Str(n)

数组a各元素的初始值都为0,若执行该程序后,在文本框Text1中显示的值为(    )

A . 2 B . 3 C . 4 D . 5
现需要对字符串中的字符进行重排顺序,具体方法如下:

原字符串8个字符为一段,分成若干段进行重排处理,尾段剩余字符(个数小于8)为独立段不做处理。

重排规则:从起始段第1个字符开始,从1开始数数,数到m时取出该位置上的字符,拼接到新字符串。然后,从下一个位置继续从1开始数数,数到m时再次取出相应位置上的字符,拼接到新字符串。当数到每段的最后一个字符时,重新从该段首第一个没有取掉的字符继续数数。重复上述操作,直至段内8个字符被取完。注:当某段中的7个字符被取出后,该段最后一个字符不需要数数,直接取出拼接到新字符串即可。

用以上方法逐段取字符,直至除独立段之外的其他字符取完。

独立段字符个数小于8,不需要重排,直接拼接到新字符串的尾部即可。

实现该功能的VB程序功能如下:程序运行时从文本框Text1中输入一段字符串,在文本框Text2输入正整数m,单击“确定”按钮Command1,对字符串按上述方法重排后在文本框Text3中显示(每段以逗号分隔)。程序运行界面如下:

  1. (1) 运行上述程序,若在文本框中输入“1010110010”,在Text2中输入5,单击“确定”按钮,则文本框Text3中显示的内容是
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_lick( )

        Dim s1 As String, s2 As String

        Dim i As Integer, sum As Integer, ed As Integer, n As Integer

        Dim m As Integer

       

        s1 = Mid(Text1. Text, 1, Len(Text1. Text)- n)

        m = Val(Text2. Text)

        s2 = " "

        ' 字符重排顺序

        sum = 0 : i = 1 : ed = 8

        Do While Len(s1)< > 0

            sum = sum + 1

            If sum = m Then

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

                s1 = Mid(s1, 1, i-1)+ Mid(s1, i+1, Len(s1)-i)

                ed = ed – 1

                sum = 0

            Else

                i = i + 1

            End If

            If ed = 1 Then

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

               

                ed = 8

                i = 1

            ElseIf  Then

                i = 1

            End If

        Loop

        ' 处理独立段

        If n < > 0 Then s2 = s2 + Mid(Text1. Text, Len(Text1. Text)- n + 1, n)+ ", "

        Text3. Text = s2

    End Sub

利用Python求100以内所有能被3整除的正整数,代码如下:

图片_x0020_100004

则下列程序第3行的横线应该填(    )

A . i=i*3 B . i=i%3 C . i%3==0 D . i/3==1
在美国国家信息交换码中,ASCII值从32到127是可以打印并显示的字符,把这96个字符随机调整次序,生成密码本。根据输入的密钥和明文,单击“加密”按钮Command1,输出密文。基本算法如下:

1)用数组mab分别记录1~96个字符的ASCII值,用数组zm记录对应字符在密码本中位置,如mab(9)=65,表示密码本中第9个字符是“A”,则对应的zm(65)=9;

2)把密钥中每个字符的ASCII值的各个数字进行累加(如Hi分别为(7+2)+(1+0+5)),将累加的和除以9取余数后加7,作为将密码本转换成二维表的列数;

3)每个明文在转换后二维表中位置作为密文,该位置是用十六进制表示的行号和列号。

程序运行的界面如下图所示:

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

  1. (1) 若输入密钥为“AB”,则根据算法及密码本,字母“A”加密后的密文是
  2. (2) 请在划线处填入合适的代码。

    Dim Mab(96) As Integer        '存储密码本中每个字符的ASCII值

    Dim zm(127) As Integer         '存储ASCII值32至127的字符在密码本数组mab中的下标

    Private Sub Form_Load()

        '产生密码本及96个字符在密码本中位置,代码略。

    End Sub

    Function p(s As String) As Integer

        Dim i As Integer, t1 As Long

        Dim sum As Integer, s1 As String

        t1=0

        i=1

        Do While i<=Len(s)

            s1=Mid(s, i, 1)

            t1=Asc(s1)

           

            i=i+1

        Loop

        p=sum Mod 9+7

    End Function

    Private Sub Command1_Click()

        Dim i As Integer, t As Integer, hang As Integer

        Dim s As String, s1 As String, Lie As Integer

        List1.Clear

        s1=Text1.Text

        t=p(s1)

        Label5.Caption= “将密码本换成一张”+Str(t)+ “列的二维表”

        i=1

        Do While i<=96

            s=s+Chr(Mab(i))+ “”

            If i Mod t=0 Or i=96 Then

                List1.AddItem s

                s= “”

            End If

            i=i+1

        Loop

        wz= “123456789ABCDEF”

        s=Text2.Text

        For i =1 To Len(s)

            s1=Mid(s, i, 1)

           

            hang=(t1-1)\t+1

            lie=(t1-1) Mod t+1

            s2=

        Next i

        Text3.Text=s2

    End Sub

世界上有很多国家向我国申购新冠疫苗。我国共有n个仓库存储疫苗,第i个仓库有疫苗a(i)(单位:万支,(单位:万支,下同)。现有m(n>=m)个国家向我国提出疫苗购买申请。我国计划将n个仓库中的疫苗全部分配给这m个国家。分配规则如下:①每个仓库中的疫苗只能作为一个整体分配给一个国家;②一个国家可以获得任意多个仓库的疫苗;③要求获得最多疫苗的国家与获得最少疫苗的国家之间疫苗数量差值最小;④若存在多个满足条件的分配方式,则输出最先找到的分配方式。

例如:若n=4,4个仓库中的疫苗数分别为50、13、80、27。若m=2,最小差值为10;若m=3,最小差值为40。

编写VB程序模拟上述功能,在文本框Text1中输入n(n≤15),在文本框Text2中输入m(m≤4),随机生成n个两位正整数,在列表框List1中输出。单击“计算”按钮Command1,在文本框Text3中输出最小差值,在列表框List2中输出每个国家获得疫苗的方案。程序运行界面如图所示。

  1. (1) 语句 List1.Clear 中的“Clear”属于(单选,填字母:A .对象名/B .属性名/C .方法名)。
  2. (2) 实现疫苗分配的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Const maxn = 15

        Dim n As Integer, i As Long, j As Long, k As Long, p As Integer, m As Integer

        Dim a(1 To maxn) As Long, f(1 To maxn) As Long

        Dim s(1 To maxn) As String, max As Long, min As Long, ans As Long, ansi As Long

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

        List1.Clear: List2.Clear: Randomize

        For i = 1 To n

              ① 

            List1.AddItem Str(a(i))

        Next i

        ans = 10000

        For i = 1 To m ^ n     '枚举所有的分配方案

            For j = 1 To m

                f(j) = 0

            Next j

            j = i: max = 0: min = 10000

            For k = 1 To n

                

                f(p) = f(p) + a(k)

                j = j \ m

            Next k

            For k = 1 To m

                If f(k) > max Then max = f(k)

                If f(k) < min Then min = f(k)

            Next k

            If    ②   Then

                ans = max - min

                   ③    

            End If

        Next i

        Text3.Text = Str(ans)

        For i = 1 To n

            j = ansi Mod m

            s(j + 1) = s(j + 1) + Str(a(i))

            ansi = ansi \ m

        Next i

        For i = 1 To m

            List2.AddItem s(i)

        Next i

    End Sub

     ② ③ 

  3. (3) 程序中加框处代码有错,请改正。
有如下VB程序段:

Dim a(1 To 6) As Integer

For i=1 To 6

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

    If a(i) Mod 2=0 And i Mod 2=0 Then

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

    End If

    s=s+Str(a(i))

Next i

执行该程序段后,变量s的值可能是(    )

A . 242221 B . 333126 C . 043513 D . 323117
有如下Python程序段

a=[]

for i in range(100):

    if i%10==0:

        a.append(i)

则程序执行后,a[1]和a[-1]的值分别是(   )

A . 0和100 B . 10和100 C . 0和90 D . 10和90
下列FOR语句格式正确的是(      )
A . FOR A= 1 TO 3

    ……

NEXT B

B . FOR A= 1 TO 3

    ……

NEXT

C . FOR A = 9

    ……

NEXT A

D . FOR A= 6 TO 20
有如下Python程序段:

for i in range(50 , 1 , -1 ):

    print(i)

则输出的最后一个元素值是(     )

A . 2 B . -49 C . 1 D . 49
在字符串s中找连续数字(仅限1位数)之和为n的子串,如字符串“142176”中,和为10的子串为“217”。假设所给字符串中必存在满足条件的子串,实现该功能的VB程序段如下:

i=1:sum==0

For j=1 To Len(s)

   

    sum= sum+ Val(chl)   

    Do While sum > n

        ch2= Mid(s,i,1)

        

        i=i+1

    Loop

    If sum=n Then List1. AddItem (3)

Next j

上述程序段3个方框处的表达式分别为(    )

A . (1)ch1= Mid(s, i, 1)    (2)sum=sum- Va1(ch2)(3)Mid(s, i, j) B . (1)ch2= Mid(s, i, 1)    (2)sum= sum+ Va1(ch2)(3)Mid(s, i, j- i) C . (1)ch1= Mid(s, j, 1)    (2)sum=sum- Va1(ch2)(3)Mid(s, i, j-i+1) D . (1)ch2= Mid(s, j, 1)    (2)sum= sum+ Va1(ch2)(3)Mid(s, i, j - i计1)
有如下VB程序段:

s ="wantsfood"

t = Mid(s, Len(s), 1)

max=0

For i=Len(s)-1 To 1 Step-1

    If Mid(s, i + 1, 1) >= Mid(s,i, 1) Then

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

        If Len(t) >= max Then max = Len(t): ans= t

    Else

        t = Mid(s, i, 1)

    End If

Next i

执行该程序段后,变量ans和max的值分别是(    )

A . "ant", 3 B . "foo",3 C . "stna", 4 D . "doof", 4
用python编辑器打开“T:\120”下的文件“求pi的近似值. py”,进行以下操作并保存结果。

①填空完善该程序,实现功能:尝试求解Z的近似值(求解关系式为:

②编写完成后原名保存并关闭应用软件。

(π\4=1-1\3+1\5−1\7+⋯)

sum,a,b,t=0.0,1,1.0,1.0              #给各参数依次赋值

while b<1000:

    sum=sum+

    b=

    a=

    t=a/b

pi =

print("pi的值是{:.20f}".format(pi))    # 输出20位浮点型数值

有如下VB程序:

Dim a(5) As Integer

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

For i=0 To 5

    a(i) = (Int(Rnd()*5)+1)*2+(iMod 2)

Next i

For i=2 To 5

    j=i

    k = a(j)

    Do While a(j-1)<k And j>1

        a(j)=a(j-1)

        j=j-1

    Loop

    a(j) = k

Next i

执行以上程序后,数组a可能的值是(    )

A . 10,9,8,7,7,5 B . 9,10,9,9,7,4 C . 9,9,8,7,4,2 D . 8,11,8,5,4, 3
求和:S=1+3+5+7+……+99.

LET S=0

FOR I=1 TO 99 STEP 2

  S=S+I

NEXT I

PRINT "S=";

END

最近更新