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

下面VB程序段的输出结果是(   )

For n = 1 To 4

 s = n * n

Print s;

Next n

A . 2 3 4 B . 1 2 3 4 C . 4 9 16 D . 1 4 9 16
孪生素数是指间隔为2的相邻素数,它们之间的距离已经近得不能再近了,就像孪生兄弟一样,也称为双生素数。例如,素数11和13,其间隔为2,就是一组孪生素数。请编写程序,输入自然数n(n<1000),判断n和n+2是否为率生素数。(补充说明:素数是指在一个大于1的自然数中,除了1和此数自身外,无法被其他自然数整除的数)

算法描述如图所示,请将程序补充完整。

Private Sub Form_Click()

Dim n As Integer, i As Integer

Dim x As Integer       ‘判断是否为季生素数的变量

 = Val(InputBox("输入自然数 n"))

x=1

If n<=1 Then x = 0

End If

For i = 2 To Sqr(n+2)

  If n Mod i = 0 OrThen

    x = 0

  End If

  Next i

  If x=1 Then

    Print n,n+2 ;"是孪生素数”

  Else

    Print ;"不是孪生素数”

  End If

End Sub

现有n项先后出现的任务,每项任务需要一定的时间完成,且每个时刻只能执行某一项任务。任务的执行规则如下:

每项任务有一个紧急程度,用数字表示,数字越大紧急程度越高。紧急程度最高的任务优先执行,紧急程度相同先出现先执行。若某项任务在执行过程中出现了一个紧急程度更高的任务,则正在执行的任务将被暂停,执行该紧急程度更高的任务。

编写VB程序,功能如下:程序运行时,各项任务数据按出现时刻升序显示在列表框List1中,单击“开始”按钮Command1,按照任务完成的先后顺序,在列表框List2显示每项任务的编号以及完成时刻。程序运行界面如图所示:请回答下列问题:

  1. (1) 若有3个任务需要完成,数据如下:

    1号任务:时刻1出现,完成所需时长4,紧急程度1

    2号任务:时刻2出现,完成所需时长2,紧急程度2

    3号任务:时刻7出现,完成所需时长1,紧急程度3

    则这3个任务的完成的顺序为(单选,填字母:A . 1号、2号、3号 /B . 2号、3号、1号 / C . 2号、1号、3号)。

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

    Dim id(0 To 100) As Integer    '任务编号

    Dim t(0 To 100) As Integer     '出现时刻

    Dim L(0 To 100) As Integer     '完成所需时长

    Dim v(0 To 100) As Integer     '紧急程度

    Dim n As Integer      '总任务数

    Private Sub Form_Load()

     '本过程读取任务编号、出现时刻、完成所需时长和紧急程度的数据分别存储在数组 id,t,L和v中,并在List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

    Dim q(0 To 100) As Integer            'q 数组按优先顺序存储已出现的任务编号

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

    cur = 0: k = 0             'cur 记录当前时刻

    For i = 1 To n

      Do While k > 0 And t(i) >= cur + L(q(k))            '新的任务出现时,计算并输出已经完成的任务编号

        List2.AddItem adj(2, (id(q(k)))) + adj(6, cur + L(q(k)))

        cur = cur + L(q(k))

        k = k - 1

      Loop

      If k > 0 Then L(q(k)) =        '更新正在执行的任务的完成所需时长

        k = k + 1

        j = k

      Do While v(q(j - 1)) >= v(i)

        q(j) = q(j - 1)

        j = j - 1

      Loop

      q(j) = i

       

    Next i

    Do While  

      List2.AddItem adj(2, id(q(k))) + adj(6, cur + L(q(k)))

      cur = cur + L(q(k))

      k = k - 1

    Loop

    End Sub

    Function adj(x As Integer, v As Integer) As String

     'adj可以通过添加前置空格将v转化为x位长度的字符串,便于输出对齐,代码略

    End Function

小明对教材上的冒泡算法进行优化,当数据已经有序时就停止加工,为此他编写了一个VB程序,功能如下:运行程序时,在列表框List1中显示排序前的数据,单击“排序”按钮Command1,在列表框List2中显示这些数据按升序排序后的结果,在标签Label1中显示排序过程的加工遍数,在标签Label2中显示排序过程的数据交换次数。运行效果如图所示。

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

Const n=10

Dim a(1 To n)As Integer

Private Sub Form_Load( )

‘排序前的数据存储在数组a中,并在List1中显示,代码略

End Sub

Private Sub Command1_Click( )

  Dim flag As Boolean

  Dim x As Integer, y As Integer

  x=0:y=0

  flag=True:i=1

  Do While i<=n-1 And flag

    flag=False

    For j=n To i+1 Step-1

      If   Then    ‘①

          t=a(j)

          a(j)=a(j-1)

          a(j-1)=t

          flag=True

               ‘②

      End If

  Next j

  y=y+1

        ‘③

Loop

Label1.Caption="经过"+Str(y)+"遍排序数据有序!"

Label2.Caption="数据总共交换"+Str(x)+"次!"

For i=1 To n

  List2.AddItem Str(a(i))

Next i

End Sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②;③

在平面直角坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标(5,10)、(8,12)、(6,17)输入格式如图所示。

  1. (1) Cmd对象属于类(单选,填字母:A .Form/B .Label/C .TextBox/D .CommandButton)。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Cmd_Click( )

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

    Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single

    Dim d As Single, Totald As Single, v As Single, s As String

    s=    ①    

    x1=0:y1=0             ‘出发点为坐标原点

    k=1:i=1:Totald=0

    For i=1 To Len(s)

      If Mid(s,i,1)=","Then

          v=Val(Mid(s,j,i-j))       ‘提取坐标值,保存在变量v中

          j=i+1

          If    ②      Then

              x2=v

          Else

              y2=v

              d=Sqr((x2-x1)-2+(y2-y1)-2)

              Totald=Totald +d

              x1=x2:y1=y2

          End If

          k=k+1

      End If

    Next i

    Label1.Caption=Str(Totald)

    End Sub
     

  3. (3) 运行该程序,输入数据如图所示,程序执行到循环结束时,变量k的值为
有如下Python程序段:

s=0

for i in range(1, 101):

   if i%2== 0:

        s+=i

该程序段被执行后,变量s中存储的是1~100之间的(    )

A . 偶数个数 B . 奇数个数 C . 奇数之和 D . 偶数之和
某算法程序段如下:

Dim s1 As String, s2 As String, ch As String

Const code = "@*()^&#"

s1 = Text1.Text

For i = 1 To Len(s1)

    ch = Mid(s1, i, 1)

    If ch >= "a" And ch <= "z" Then

        t = (Asc(ch) - 65 + i) Mod 7

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

    Else

        s2 = s2 + ch

    End If

Next i

Text2.Text = s2

若 text1 中输入字符“AbCd”,则 text2 中输出的是 (     )

A .  AC^@ B .  ^@AC C .  ^(@& D . A^C@
使用for循环输出1 2 3 4 5 6   8 9 10。(注意:数字6和数字8之间,跳过了数字7。)
要求编写一个“统计直角三角形的个数”的程序,功能如下:在文本框Text1中依次输入3*N个数表示三角形的边长(用逗号分隔并以逗号结尾),单击“计算”按钮Command1后,程序统计直角三角形个数,并在标签Label1中显示。程序运行界面如图所示。

Private Sub Command1_Click()

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

    Dim x1 As Single, x2 As Single, x3 As Single, t As Single Dim Totald As Integer, v As Single, s As String

    s = Text1.Text

    k = 0: j = 1: Totald = 0

    For i = 1 To Len(s)

        If Mid(s, i, 1) = "," Then

            v = Val(Mid(s, j, i - j))       '提取三角形边长,保存在变量v中

               ①    

            If k Mod 3 = 1 Then

                x1 = v

            ElseIf k Mod 3 = 2 Then x2 = v

            If x1 < x2 Then t = x1: x1 = x2: x2 = t

            Else

                x3 = v

                If x1 < x3 Then t = x1: x1 = x3: x3 = t

                If   ②    Then Totald = Totald + 1

            End If

           

        End If

    Next i

    Label1.Caption = "一共构成" + Str(Totald) + " 个直角三角形"

End Sub

  1. (1) 请在划线处补充合适的代码。

     ② 

  2. (2) 加框处代码有误,请改正。
  3. (3) 观察程序代码,若正确完成(1)、(2)后,调试过程中出现如下错误提示,可能是程序代码执行到第行报错。

小李编写了一个程序,用以实现下列功能:在文本框Text1中一个十进制数,在文本框Text2中输入需转换数的进制(小于等于16),点击转换按钮,在文本框Text3中输出转换后的数字;点击“退出”按钮,关闭程序。程序运行界面如下图所示:

  1. (1) 根据题目意思,应该在编辑界面将对象“command2”的属性改为“退出”。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim x As Long

        Dim y As Integer

        x = Val(Text1.Text)

        y =

        Text3.Text =

    End Sub

    Function trans(n As Long, b As Integer) As String

        Dim hex As String

        hex = "0123456789ABCDEF"

        Do while n<>0

            r = n Mod b

            n = n \ b

            trans = + trans

        Loop

    End Function

    Private Sub Command2_Click()

    End Sub

下面的代码段可以实现统计某种递增序列的功能:

a=[3,7,2,5,8,9,4,6,1]

m, c=1, 1

for i in range(1,len(a)):

    if a[i]>=a[i-1]:

        c+=1

        m=max(m, c)

    else:

        c=1

程序执行后,c和m的值分别是(      )

A . 1和1 B . 1和4 C . 2和4 D . 3和4
s=0

For i=1 to 5 step 2

    s=s+i*i

Next i

Print s

该程序段运行后的输出结果为

在一条宽度度为L的直线小河中,一只青蛙想沿着直线从河的左侧跳到右侧。小河中有n片位置互不相同的荷叶,青蛙必须跳到荷叶上过河,否则会掉入水中。开始时青蛙站在河的左侧(坐标为0),接着不停地向右侧跳跃,每次跳跃的距离不超过W,当青蛙跳到或跳过河的右侧(坐标为L)时,青蛙完成过河。例如当L=20,n=4,W=5,开始时4片荷叶的坐标为3,9,11,17,则至少需要增加2片荷叶,即在坐标8和16分别增加一个荷叶,得到过河的可行方案是0→3→8→9→11→16→17→20。

图a

图b

编写程序找出青蛙成功过河至少需要增加的荷叶数,界面如图b。请回答以下问题:

  1. (1)   若要将列表框List1顶端与窗体顶端的距离设置为100,能实现该功能的语句是(A . List1.Height = 100 / B . List1.Top = 100 / C . List1.Width = 100)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Form_Load()

    '读取荷叶的位置,并保存到数组a中

    '荷叶的数量保存在n中

    '荷叶坐标和数量分别显示在list1和Text2中

    End Sub

    Private Sub Command1_Click()

        Dim a(0 To 100) As Integer

        Dim n As Integer, L As Integer, W As Integer, tot As Integer

        Dim i As Integer, j As Integer, p As Integer, d As Integer

        L = Val(Text1.Text) : n = Val(Text2.Text) : W = Val(Text3.Text)

        a(0) = 0 : a(n + 1) =

        For i = 1 To n - 1

            k = i

            For j = i + 1 To n

                If a(k) > a(j) Then

            Next j

            If k <> i Then

                tmp = a(k): a(k) = a(i): a(i) = tmp

            End If

        Next i

        For i = 1 To n

            List1.AddItem a(i)

        Next i

        p = 1: d = 0

        Do While d < L

            If p <= n + 1 And  Then

                d = a(p)

                p = p + 1

            Else

                tot = tot + 1

                

            End If

        Loop

        Label4.Caption = "至少需要增加的荷叶数为:" + Str(tot)

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
小明编写VB程序,实现从某一字符串删除指定的连续字符串,并将处理后的字符串重新输出,在文本框Text1中输入原始字符串,在文本框Text2中输入需要删除的连续字符串,单击Command1后,在文本框Text3中输出处理后的结果。实现该功能的VB程序段如下:

Dim x As Integer, result As String,p As String, k As String result = "":p = Text1.Text:k = Text2.Text

For x = 1 To Len(p) -Len(k) + 1

    If    ⑴    Then

        result = result + Mid(p, x, 1)

    Else

            ⑵    

    End If

Next x

Text3.Text =    ⑶    

上述程序段中横线处可选语句为:

① Mid(s, x, Len(k)) = k

② Mid(s, x, Len(k)) <>k

③ x = x +Len(k) – 1

④ x = x + Len(k)

⑤ result + Mid(p, x)

⑥ result

则(1)(2)(3)处填入的语句依次为(     )

A . ①③⑤ B . ②④⑥ C . ②③⑤ D . ①④⑥
在Python中,ord( )函数的作用是将字符转换为对应的ASCII码值,chr()函数的作用是将ASCII码值转换为对应的字符。阅读下列程序,写出运行结果。

def encrypt(st1):

st2=""

for s in stl:

st2 += chr(ord(s)+5)

return st2

print(encrypt("ktocji"))

运行结果是

小明是班级里的生活委员,运动会期间他将班级支出明细记录在记事本文件中,现在想将各项支出的结果做一个统计。他编写了一个实现该功能的Python程序。程序运行时,输出记事本文件中的原文内容,并提取其中的数值进行计算。程序运行结果如下图所示:

请在划线处填入合适的代码

f=open("支出.txt","r")

mx=f.read()

print(mx)

t="";s=0

for i in mx:

    if :

        t=t+i

        flag=True

    elif flag:

        s=s+int(t)

        t=""

        flag=False

if flag:

print("一共支出:",str(s),"元")

在文本框Text1中输入十进制数x,将其转换为十六进制数后在标签Label1上输出。VB程序段如下:

Dim x As Integer Dim s As String

Dim st As String

Dim t As Integer

st=“0123456789ABCDEF”

x = Val(Text1.Text)

Do While x > 0

   

Loop

Label1.Caption=s

方框中的代码由以下三部分组成:

① x = x \ 16 ② s = Mid(st,t+1,1)+ s  ③ t = x Mod 16

下列选项中代码顺序正确的是(     )

A . ③②① B . ①③② C . ②③① D . ②①③
从文本框Text1输入一个序列,如果出现连续升序的几个数(或字符),称为一个升序段。如字符串“1231223”中存在3个升序段,分别是“123”、“12”和“23”,下列VB程序的功能是统计序列中升序段的个数。

s= Text1. Text

i=2 :k=0 :t=0

Do While i <= Len(s)   

    If  Then

        

    Else

        k=0

    End If

    If k=1 Then t=t+1

    i=i+ 1

Loop

Label1.Caption= Str(t)

为实现上述功能,程序中加框①②处应该填入的代码是(    )

A . ①Mid(s,i-1,1)<= Mid(s,i,1) ②k=1 B . ①Mid(s,i-1,1)<= Mid(s,i,1) ②k=k+1 C . ①Mid(s,i-1,1)< Mid(s,i,1)②k=1 D . ①Mid(s,i-1,1)< Mid(s,i,1)②k=k+1
有如下VB程序段:

s = 0: i = 1

Do While i <= 10

    If i Mod 3 = 0 Then a(i) = a(i) + 1 Else a(i) = i

    List1.AddItem Str(a(i))

    i = i + 1

Loop

i = 10

Do While i >= 1

    If a(i) = 1 Then s = s + 1

    i = i - 1

Loop

该程序段运行后,变量s值是(  )

A . 3 B . C . 5 D . 9
已知数组a有n个元素,现编写VB程序,实现从第1个元素开始分割出m×m个元素组成方阵(约定n≥m×m),并随机对该方阵进行顺时针90度或逆时针90度旋转。例如:数组元素a(1)到a(18)的值依次为“5,2,3,1,9,4,7,6,0,8,5,3,8,3,7,0,5,1”,在文本框Text1中输入方阵规模4,单击“生成”按钮Command1,生成4×4个元素组成的方阵,并在列表框List1中显示。单击“旋转”按钮Command2,该方阵进行顺时针90度或逆时针90度旋转,并在列表框List2中显示。程序运行界面如图所示。

  1. (1) 对于如图所示的程序运行界面,将方阵规模改为3,单击“生成”按钮后再单击“旋转”按钮,若方阵进行逆时针旋转,则旋转后方阵的第1行数据为(数据之间用“,”隔开)。
  2. (2) 请在划线处填入合适的代码。

    Const n= 100

    Dim a(1 To n) As Integer

    Dim b(1 To n) As Integer

    Private Sub Command1_Click( )

    '根据方阵规模,分割元素组成方阵,并在列表框List1中显示,代码略

    End Sub

    Private Sub Command2_Click( )

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

      Dim s As String

      m= Val(Text1. Text)

      List2. Clear

      k= Int(Rnd * 2)

      If k=0 Then

        For i=1 To m

          For j=1 To m

             b((i- 1) * m+j)=

          Next j

        Next i

      Else

        For i=1 To m

          For j=1 To m

             b((i-1) * m+j)=a((j-1) * m+m-i+1)

          Next j

        Next i

      End If

      s=" "

      For i=1 To m * m

       

        If  Then

          List2. AddItem s

          s=""

        End If

      Next i

    End Sub

最近更新