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

while循环编程关键点首先考虑,再考虑执行循环的条件,由于while循环的次数,如果需要借用循环次数信息,必须在代码中增加,并通过语句修改计数器的值。
下列程序段运行后,输出“*”的个数是(   )

For i = 2 To 10

  Print  "*"

Next i

A . 7 B . 8 C . 6 D . 9
某数据解密算法描述如下:

1)在输入的数字字符串中依次提取有效的密文,有效的密文的特点:

①是一组连续的,都小于5的三位数字串;②每个位置上的数字不能被重复提取;

2)对有效密文进行解密的过程:

将密文作为一个五进制数转换为对应的十进制数值,根据ASCII字符的十进制编码表,得出对应的明文字符(提示:空格符所对应的ASCII码值为十进制数32,小写字母“z”所对应的ASCII码值为十进制数122).

例如,密文242转换成十进制数为72,对应的明文字符为大写字母“H”。

程序运行界面如下图所示,在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2中输出解密后的明文密码。

  1. (1) 若输入的密文为“841497230235”,则对应的明文是
  2. (2) 实现上述功能的VB代码如下。划线处的语句有错,应改为

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

    Function conv(p As String) As Integer

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

      k = 0: g = ""

      For i = 1 To 3

        q = Mid(p, i, 1)

                ①          

      Next i

      conv = k

    End Function

    Private Sub Command1_Click()

      Dim st As String, p As String, res As String

      Dim c1 As String, c2 As String, c3 As String

      Dim i As Integer, d As Integer, n 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 c1<"5" Or c2 <"5" Or c3 <"5" Then

                  ②          

          d=conv(p)

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

                   ③         

        Else

          i = i + 1

        End If

      Loop

      Text2.Text = res

    End Sub

  3. (3) 请在划线处填入合适的代码.

     ② ③ 

有如下程序段:

a(1)=1:a(2)=2

i=3:flag=True

Do While i<=10 and flag=True

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

    If a(i)>4*i then flag=False

    i=i+1

Loop

Text1.Text=a(i-1)

该程序段运行后,文本框Text1中显示的是(  )

A . 21 B . 32 C . 34 D . 55
有如下VB程序段,该程序段执行后,变量x中存储的是(  )

k=1

For j=2 To 100

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

Next j

x=a(k)

A . a(1)至a(100)中的最小值 B . a(1)至a(100)中的最大值 C . a(2)至a(100)中的最小值 D . a(2)至a(100)中的最大值
抢红包游戏:微信抢红包游戏成为了一代人的经典回忆,游戏将总金额为n的“红包”随机分配给m个玩家,红包的分配需同时满足以下规则:①所有人抢到的金额总和跟总金额n相等;②每个人至少抢到1分钱;③每个人抢到的金额随机;④每个人抢到金额大小的概率平等。

满足以上规则的最简单算法可描述为:假设总金额为n元,为使问题简单化,我们将总金额乘以100,此时的单位为分,使得问题在整数范围内解决。假设分发给m个人,则我们只需在[1,100n- 1]长度的范围内随机生成m-1个不重复的点,这些点将长为100n的线段划分为m个段,每一段长度即可表示红包金额,再将每一段长度数据除以100换算为单位元输出。

编程实现:分别在文本框Text1 和Text2中输人总金额n和总人数m,点击“抢红包”按En钮commandl,在列表框Listl中输出抢红包结果,并输出“手气最佳”数据。程序运行界面如下图所示。实现上述算法的VB程序如下,回答以下问题:

  1. (1) 为使程序开始运行时,窗体标题自动更改为“趣味抢红包”,则可在(单选,填字母:(A .Command1_ Click()/ B .Form_ Load()/C .Form1. Load())事件处理过程中添加语句Forml. Caption=“趣味抢红包”。
  2. (2) 请将划线处的代码补充完整。

    Private Sub Command1_ Click()

    Dim n As Integer, m As Integer

        Dim f(1 To 32767) As Boolean

    n= Int(Val(Text1.Text) * 100)

        m= Val(Text2.Text)

        If m> n Then

            List1.AddItem "游戏无法继续,结束!"

        Else

            Randomize

            For i=1 To m- 1

    t= Int(Rnd * (n-1))+1

                

                f(t)= True

            Next i

            

            begin= 1

            Max=0

            For i=1 To n

                If f(i) Then

                    

                    If red > Max Then Max= red

                          '改错

                    List1.AddItem Str(red / 100)

                End If

            Next i

            List1.AddItem "手气最佳:"+Str(Max / 100)

        End If

    End Sub

  3. (3) 方框处的代码有误,请改正。
  4. (4) 虚线框内的代码实现的功能是
某校举办技术学科统测,参加统测的每个学生有班级序号、姓名(字母缩写)和统测的技术成绩。现需整理统测数据,要求是:先按班级序号从小到大排列;然后,同一班级的学生按技术成绩从大到小排列。按上述要求,编写一个VB程序,功能如下:在列表框List中显示整理前的数据,单击“整理”按钮Commandl1,整理结果显示在列表框List2中,程序运行界面如图所示。

  1. (1) 将数组元素d(1)到d(640)分为16段,如果每段恰好包含40个元素,采用选择法排序算法分别对每段中的元素进行排序,整个排序过程中,数组元素之间的比较次数是    (单选,填字母:
    A . 640×639/2次/ B . 16×40×39/2次/ C . 40×16×15/2次)。
  2. (2) 请在划线处填入合适的代码。

    Const n=640   '参加统测总学生数

    Const nc =16  '班级数

    Dim class(1 To n) As Integer, sname(1 To n)As String, score(1 To n) As Integer

    Dim b( To nc) As Integer        '存储每个班级的参加统测人数

    Dim c(1 To nc) As Integer

    Dim d(1 To n)As Integer

    Private Sub Form_Load()

        '本过程读取每个参加统测学生的班级序号、姓名和统测成绩分别存储在数组class,sname和 score中并在List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

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

        For i = 1 To nc

            b(i) = 0

        Next i

        For i = 1 To n           '统计每个班级统测人数

              

        Next i

        k = 1

        For i = 1 To nc

            c(i) = k

            k = k + b(i)

        Next i

        For i = 1 To n

            k = class (i)

            

            c(k) = c(k) + 1

        Next i

        For i = 1 To nc        '对各班级按统测成绩进行排序

            Call px(),c(i)-1))

        Next i

        For i = 1 To n

            List2.AddItem " " & class(d(i)) & " "& sname (d(i)) & " " & score(d(i))

        Next i

    End Sub

    Private Sub px(head As Integer, tail As Integer)

        Dim i As Integer, j As Integer, t As Integer

        For i = head To tail - 1

            For j = tail To i + 1 Step -1

                If Then

                    t = d(j): d(j) = d(j - 1): d(j - 1) = t

                End If

            Next j

        Next i

    End Sub

有如下Python程序段:

a = [2,1,3,4,5]

c = 0

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

if a[i-2] + a[i-1] == a[i]:

c = c + 1

print(c)

该程序段运行后,最后输出的内容是(    )

A . 1 B . 2 C . 3 D . 4
反转字符串,如输入字符串为“abcdefg”,则输出字符串“gfedcba”,实现该功能的部分程序如下所示,划线处的正确语句是(     )

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

'按s中字符顺序从左到右依次存入到数组a中,代码略

i = 1

Do While i <= n - 1

    t =   ①   

    For j = n - 1 To i Step -1

        a(j + 1) = a(j)

    Next j

       ②  

    i = i + 1

Loop

For i = 1 To Len(s)

    Text2.Text = Text2.Text +   ③   

Next i

A . ① a(n)    ② a(j + 1) = t    ③ a(i) B . ① a(n)    ② a(j) = t    ③ a(i) C . ① a(i)    ② a(j + 1) = t    ③ Str(a(i)) D . ① a(i)    ② a(j) = t    ③ Str(a(i))
以下程序要实现十进制转换为十六进制的功能,则划线处的代码为(   )

Private Sub Command1_Click()

    Const jz = "0123456789ABCDEF"

    Dim d As Integer, r As Integer, s As String

    d = Val(Text1.Text)

    s = ""

    Do While d > 0

                             

                             

                             

    Loop

    Label1.Caption = "十六进制结果是" + s

End Sub

①d=d\16     ② s=Mid(jz,r+1,1)+s    ③ s=s + Mid(jz,r,1)      ④ r=d Mod 16

A . ④①③ B . ①②④ C . ④①② D . ①②③
FOR I= 3 TO 19 STEP 4,循环体执行次。
输入45人的VB成绩,求出均分。

PRIVATE SUB FORM_CLICK( )

    S=0

    FOR I= 1 TO

        X=VAL(INPUTBOX(“请输入成绩”))

        

    NEXT I

    PRINT

END SUB

num=[0]*10

n=36

s=0

for i in range(n):

  j=9

  num[j]+=1

  while num[j]==2:

    num[j]=0

    j-=1

    num[j]+=1

    for i in range(10):

      s+=num[i]

print(s)

执行此代码后,变量s的值为(    )

A . 2 B . 3 C . 4 D . 5
阅读下列程序,写出运行结果。

def fib(m):n1=1

n2=1

for i in range(3,m +1):

t = n1 + n2

n1 = n2

n2 = t

return t

Print(fib(5))

运行结果是:

有如下VB程序段:

s=1

a(1) = 1

For i=2 To 6

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

    If I Mod 2=0 Then

      a(i)=a(i)+1

    End If

    s= s+ a(i)

Next i

Text. Text = Str(s)

程序运行时,单击按钮Command1后,文本框Text1中显示的内容是(    )

A . 72 B . 41 C . 106 D . 115
下列循环结束后,s的值为(    )

s=0

for i in range(9):

  if i%3==0:

    s+=i

print(s)

A . 9 B . 18 C . 6 D . 15
阅读下处程序写出运行结果

有四个嫌疑人甲乙丙丁涉嫌偷盗,其中一人是小偷。甲说“不是我”,乙说“是丙”,丙说“是丁”,丁说“丙在冤枉我”。若他们中只有一人说了假话,请编程判断谁是小偷。(注:在Python运算中,True的值为1,Fa1se的值为0)

运行输出结果是 

下列能计算Sum= 的Visual Basic程序段是(    )
A . Sum = 1

For i=1 To 49

    Sum = Sum+i/(2 * i- 1)

Next i

B . Sum=0

For i=1 To 99

    Sum=i/(2*i-1)

Next i

C . Sum=0

i=1

Do While i<= 50

    Sum = Sum+i/(2*i- 1)

    i=i+1

Loop

D . Sum=0

i=1

Do While i<= 50

    Sum= Sum+i/(2 * i- 1)

Loop

下面是“打印矩形.py”,正确答案是(   )。

请填空完善该程序,实现功能:按程序提示依次输入行和列的数字,则按行列打印由“*”组成的矩形。例如,按提示输入:

请输入行数:3

请输入列数:5

屏幕将打印以下图形:

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

b=  ①  

for i in range(  ②  ):

    for j   ③  

        print(  ④  , end=' ')    #end=' '表示接上一个输出项后输出,不换行

print( )

A . ① int(input("请输入列数:"))  ② a+1  ③in range(b)      ④‘*’ B . ① int(input("请输入行数:"))  ② a+1  ③in range(b+1)    ④‘**’ C . ① int(input("请输入列数:"))  ② a     ③in range(b)      ④‘*’ D . ① int(input("请输入列数:"))  ② a     ③in range(b+1)    ④‘**’
有如下 Python 程序。

from random import randint

a=[0]*6

for i in range(6):

  a[i]=randint(1, 10)

  for i in range(6):

    if a[i]%2==0 and i%2== 0:

      a[i] += 1

    elif i%2==1:

      a[i]=a[i]+a[i- 1]

print(a)

程序运行后,输出结果可能是 (    )

A . [8, 11, 7, 3, 11, 14] B .   [9, 13, 7, 13, 11, 14] C . [9, 8, 11, 13, 7, 15] D .   [9, 13, 7, 13, 10, 8]
最近更新