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

小红打算用VB程序来查找数组a中下降数列的方法,其算法思想描述如下:

1)用数组b存储最小下降数列中最小的元素(查找过程中的最小值)b(1)开始为数组a第1个元素;

2)加入方法:将a(i)与数组b中的每个元素依次逐个比较:若a(i)比b(j)小就用a(i)替换b(j)中的值;将a(i)添加到第j个下降数列中,并存储在c数组的c(j)中;

3)若数组a各元素的值为:34,54,3,76,2,3时,则3个下降数列分别为:

“34,3,2”,“54,3”,“76”。

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

依据上述描述设计了如下VB程序。请回答下列问题:

  1. (1) 若数组a的值是:“145,34,2,134,12”,数组b(1)的值是
  2. (2) 请在划线处填入合适的代码。

    Const n = 20

    Dim a(1 To n) As Integer

    Private Sub Form_Load()

        '读取n个数据,依次存储到a(1)、a(2)、……a(n)中,代码略

    End Sub

    Private Sub Command1_Click()

    Dim b(1 To n) As Integer   '存储数列最小的值

    Dim c(1 To n) As String    '存储下降数列

    Dim i As Integer

    Dim j As Integer

    Dim bn As Integer          '存储下降数列个数

      b(1) = a(1)

      bn = 1

      c(1) = Str(a(1))

      For i =

         For j = 1 To bn

           If a(i) < b(j) Then

              b(j) = a(i)

            

              Exit For

           End If

        Next j

        If j > bn Then

           bn = bn + 1

          

           c(bn) = Str(a(i))

        End If

      Next i

    For i = 1 To bn

         List1.AddItem c(i)

    Next i

    Text2.Text = "数列中共有" + Str(bn) + "个下降序列"

    End Sub

某班级学生为毕业晚会的一个节目设计一个仿“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) 在程序下划线处填入适当的语句或表达式。将程序补充完整:

一个n×n矩阵的主对角线(从左上到右下的对角线)上各个元素的总和称为这个矩阵的迹。一个矩阵转置后,新矩阵的迹和原矩阵的相等。

以3×3数据块为例,原矩阵和转置矩阵的结果如图所示。

小明发现对这个矩阵进行转置后,主对角线上的数字没有发生变化,所以决定编写VB程序随机生成一个n×n的矩降再试一下。程序实现的功能如下:在文本框Text1中输入整数n(2≤n≤10),单击“生成矩阵”按钮Command1,生成n2个10到99之间(包含10和99)的随机整数,并以n行、n列矩阵的形式显示在列表框List1中,将转置后的矩阵也显示在List1中。再单击“主对角线”按钮Command2,则在标签Label1中输出两矩阵主对角线上的元素,运行界面如图所示,程序代码如下,请在画线处填入合适的代码。

Const max=100

Dim n As Integer

Dim a(1 To max)As Integer

Dim b(1 To max)As Integer

Private Sub Command1_Click( )

  n=Val(Text1.Text)

  For i=1 To n*n

    a(i)=    ①   

  Next i

  p=1

  For i=1 To n*n

    b(i)=a(p)

    If i Mod n=0 Then

      p=p-n*(n-1)+1

    Else

         ②  

    End If

  Next i

  List1.Clear

  List1. AddItem Str(n)+"*"+Str(n)+"方阵”

  Call Output(a( ))

  List1.AddItem"转置矩阵"

  Call Output(b( ))

End Sub

Private Sub Command2_Click( )

  Label1.Caption="原矩阵":L.abel2.Caption="转置矩阵"

  For i=1 To n

    Label1.Caption=Label1.Caption & Str(a(i+(i-1)*n))

    Label2.Caption=label2.Caption & Str(b(i+(i-1)*n))

  Next i

End Sub

Sub Output(a()As Integer)

Dim line As String

line=""

For i=1 To n*n

    If i>1 And i Mod n=1 Then

      List1. AddItem line

      line=Str(a(i))

    Else

         ③  

    End If

  Next i

  List1. AddItem line

End Sub

以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③

有如下VB程序段:

Dim x As String, s As String

x = Text1.Text: s=""

For i = 1 To Len(x)

    c = Mid(x, i, 1)

    If c = "a" Then

        s = s + "z"

    Else

        s = s + Chr(Asc(c) - 1)

    End If

Next i

在文本框Text1中输入“dream”,执行该程序段后,变量s的值是(    )

A . Cqdal B . sdzn C . Esfzn D . cqdzl
猜年龄游戏。要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y,就继续让其猜3次,以此往复,如果回答N或n,就退出程序,如果猜对了,就直接退出。
有如下VB程序段:

For i = 1 To 2

    For j = 6 To 2 * (i + 1) Step -2

        If a(j) < a(j - 2) Then

            t = a(j): a(j) = a(j - 2): a(j - 2) = t

        End If

    Next j

Next i

假定数组元素a(1)~a(6)的值依次为“happy,sky,change,sk,bellow,hello”。执行该程序段后,a(4)~a(6)的值依次是(    )

A . sk,bellow,sky B . sky,bellow,sk C . sk,happy,sky D . happy,sk,sky
求相邻两个元素的最大差值。随机生成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) 加框处代码有误,请改正。
小明用VB编写了一个程序如下,运行后的结果是(  )

Dim S, i As Integer

S=0

For i=1 To 100

    S=S+i

Next i

Print "S="&S

A . S=5050 B . 5050 C . S=101 D . 101
 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
求解a到b内(包含a和b)所有的质数,并对每个质数的每一位数字求和。请完善程序。程序如下:

import math

def IsPrime(i):

    if i==1:

        return False

        for j in range(2,int(math.sqrt(i))+1):

            if:

                return False

        return True

    a=int(input("请输入a:"))

    b=int(input("请输入b:"))

    summ=0

    for i in range(a,b+1):

        if IsPrime(i):

           

            while t>0:

                summ=summ+t%10

       

    print("数字和为:",summ)

有一组正整数,要求对其中的奇偶数进行交换。交换后奇数在前,偶数在后,并保持相对顺序不变。

Const n = 10

Private Sub Command1_Click()

    num = 0: k = 0

    Do While k < n

        k = k + 1

        If   ①   Then

            num = num + 1

            b(num) = a(k)

        Else

              ② 

        End If

    Loop

    For j =③

        a(j) = b(j - n + num)

    Next j

End Sub

下列选项中,①②③中的代码顺序正确的是(      )

A . ①a(k) Mod 2 = 1 ②b(k - num) = a(k)          ③n - num To n B . ①a(k) Mod 2 = 0         ②a(k - num) = a(k)          ③n - num + 1 To n C . ①a(k) Mod 2 = 1         ②a(k - num) = a(k)          ③n - num To n D . ①a(k) Mod 2 = 0 ②b(k - num) = a(k)          ③n - num + 1 To n
某VB 程序代码如下:

Function arr(x As Integer) As Boolean

    Dim s As Integer, i As Integer

    s = 1

    For i = 2 To x \ 2

        If x Mod i = 0 Then s = s * i

    Next i

    If s = x Then

        arr = True

    Else

        arr = False

    End If

End Function

Private Sub Command1_Click()

    Dim i As Integer

    For i = 2 To 10

        If arr(i) Then List1.AddItem str(i)

    Next i

End Sub

单击Command1按钮后,List1中显示的结果是(   )

A . 2、3、4、5、6 B . 2、4、6 C . 4、6、8 D . 6、8、10
某数据解密算法描述如下:1)在输入的数字字串中依次提取有效的密文,有效的密文是一组连续的,都小于5的三位数字串; 2) 数字不能重复被提取:3)对有效密文进行解密:

①将密文进行转换为一个十进制数值:例如密文242转换的表达式为:2*53+4*5*+2*5*=72 对应的明文字符为大写“H":

②得到的数值就是对应明文的ASCII 字符的十进制编码(提示:空格所对应的ASCII值为十进制32,小写字母“z”所对应的ASCII值为十进制数122);

程序运行界面如下图所示。在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2 中输出解密后的明文密码。实现上述功能的VB代码如下:

Private Sub Convnand1_Click()

    Dim st, p, c1, c2, c3 As String

    Dim i, d, res As Integer

    st = Text1.Text: n = Len(st)

    i=1:res=””

    Do While i <=n- 2      '提取有效密文,并进行转换

        c1 = Mid(st, i, 1): c2 = Mid(st, i + 1, 1): c3= Mid(st, i +2, 1)

        If  Then    ‘①

            p = Mid(st, i, 3)

            d = conv(p)

            If d>=32 And d<=122 Then res= res + Chr(d)

                   ②      

        Else

            i =i+1

        End If

    Loop

    Text2 Text =    ③       

End Sub

‘以下代码是将有效密文数字转换为十进制数的函数

Function conv(p As String) As Integer

    Dim k As Integer, q As String, i As Integer

    k=0:q=””

    For i =ITo 3

        q = Mid(p, i, 1)

              ④      

    Next i

    conv=k

End Function

  1. (1) 若输入密文为“841497230235",则明文是
  2. (2) 程序代码中①加框处的语句有错,请改正:
  3. (3) 程序代码中②下划线请补充完整:
  4. (4) 程序代码中③下划线请补充完整:
  5. (5) 程序代码中④下划线请补充完整:
某 VB 程序段如下:

Dim a(1 To 3) As Single,i As Integer

Randomize

a(1) = 1

For i =2 To 3

    a(i) = (Int(Rnd() * 3)) *2- 2

    a(i) = Abs(a(i - 1)) / Sqr(a(i))

Next i

List1.AddItem Str(a(i))

运行该程序段,下列错误提示不可能会出现的是(   )

A . 下标越界 B . 无效的过程调用或参数 C . 类型不匹配 D . 除数为零
有如下Python程序段:

import jieba

str="热烈庆祝建党100周年"

fc=jieba.lcut(str)

print(fc)

for i in fc[::1]:

    print(i)

已知分词之后的文本输出fc为:['热烈庆祝', '建党', '100', '周年'],则程序运行结束后的结果是(        )

A . 周年100建党热烈庆祝 B . 热烈庆祝

建党

100

周年

C . 热烈庆祝建党100周年 D . 年周001党建祝庆烈热
有如下VB程序段:

s ="ATCGCGCTACTGA"

s1 =" ACGT"

n= Len(s)

i=1:j=1:c=0

Do While i <= n and j <=4

    If Mid(s, i, 1)=Mid(s1, j,1) Then

        j=j+1

    End If

    i=i+1

Loop

s= Mid(s, 1, i-1)

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

A . ATCCCG B . ATCC C . ATCGCGCT D . ATCCCGC
单车道胡同路边停车,先进去的车只能从另一出口出来,阅读程序代码(break表示退出循环):

listque=[]        #定义列表listque存储停车状况

max=8         #停车位最大容量

while(True): 

    print('1.停车')

    print('2.开车离开')

    print('3.查看停车库')

    print('其他. 退出')

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

    if x=='1':

        if len(listque)< :

            print("还有",max-len(listque),"个停车位。")      

            listque.append(input("请输入停车车牌:"))       

        else:

            print("对不起,停车位已满。")

        elif x=='2':

            if len(listque)==0:                           

                print("停车库为空。")

            else:

                print (,"开出。")    

        elif x=='3':

             print(listque)

        else:

            break

在横线中填入代码中

下列VB程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是,文本框Text2中显示的内容是

Private Sub Command1_Click()

    Dim a(1 To 3) As Integer, k As Integer, t As Integer, s As Integer

    a(1) = 12: a(2) = 41: a(3) = 2

    s = 0

    For k = 2 To 3

        If a(k) > a(1) Then

            t = a(1): a(1) = a(k): a(k) = t

            s = s + 1

        End If

    Next k

    Text1.Text = Str(a(1))

    Text2.Text = Str(s)

End Sub

有如下Python程序段:

n=int(input(“请输入:”))

s = x = 0

while n != 0:

    x = n % 10

    s = x + s

    n = n //10

print(s)

执行该程序段后,依据程序提示,输入“20220412”,则程序输出结果是(    )

A . 13 B . 1119 C . 2022 D . 9
输入一个字符串S1S2S3…Sn,按如下过程操作:取出第一个字符S1,将第二个字符S2放到字符串的末尾Sn后面,得到字符串S3…SnS2;接着将S3取出,S4放到字符串的末尾S2后面……直到最后一个字符Sn被取出。这些字符按取出的顺序形成一个新的字符串,

输出该新字符串,实现相应功能的Python程序段如下:

s=input("请输入字符串:")

que = [""] * 100                  #该空队列可以满足需要

head = 0

tail = 0

for i in range(   ①   ):          #原字符串全部字符依次入队

  que[tail] = s[i]

  tail+=1

  print("加密后的串为: ")

while head < tail:               #队列非空时

print(que[head], end="")

  ②  

if head < tail:                      #队列非空时,出队的元素加入队尾

    ③  

  tail+=1

head+=1

上述程序段3个方框处的代码分别为(    )

A . ①len(s) + 1 ②head+=1 ③que[tail] = que[head] B . ①len(s) + 1 ②tail+=1 ③que[head] = que[tail] C . ①len(s) ②head+=1 ③que[tail] = que[head] D . ①len(s) ②tail+=1 ③que[head] = que[tail]
最近更新