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

均分红包。当前有n堆红包,编号为1,2, 3, 。。 n,每堆有若干个红包,红包总数sum是n的倍数。可以在任一堆上取若干个红包,然后移动,最终使每堆上的红包个数相同。

移红包规则:

①编号为1的堆上的红包,只能移到编号为2的堆上;

②编号为n的堆上的红包,只能移到编号为n-1的堆上;

③其它堆上的红包,可以移到相邻左边或右边的堆上。

现要求找出最少的移动次数使每堆的红包数-样多。如图所示,在文本框Text1中输入红包堆数n,在文本框Text2中依次输入每堆红包的红包个数(以“,”为分隔符和结束符),单击“移红包次数统计”按钮Command1后,在标签Labe13中显示最少的移动次数。

  1. (1) 代码“Private Sub Command1_ Click() ”中的Click是(单选,填字母: A . 对象名;B . 事件名;C . 事件处理过程名;D . 方法名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const Sum = 40    ‘红包总个数

    Private Sub Command1_Click()

      Dim n As Integer       ‘红包的堆数

      Dim s As String, k As Integer

      Dim avg As Integer    '最终每堆的红包个数

      Dim ml As Integer, m2 As Integer

      Dim tmp As Integer, count As Integer, ans As Integer

      n= 

      s = Text2. Text

      avg=Sum/n

      tmp=0:count=0:ans=0

      For k=1 To Len(s)

        c = Mid(s, k, 1)

        If c <>”,”Then

          tmp =

        Else

          count = count + 1

          If count = 1 Then

            m1 =tmp

          Else

            m2 = tmp

            If m1 <> avg Then

              m2=m2-(avg-m1)

              ans=ans+1

            End If

              

          End If

          tmp=0

        End If

    Next k

    Labe13. Caption = Str (ans)

    End Sub

有如下VB程序段,已知字符“A”的ASCII码值为65,则在文本框Text1中输入"abXY",s1的值最终是(    )

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

For i = 1 To n

  c = Mid(s, i, 1)

If c >= "a" And c <= "z" Then t = Asc(c) - 32 Else t = Asc(c)

  s1 = s1 + Chr(65 + (t - 63) Mod 26)

Next i

A . CDZA B . cdZA C . ZACD D . ZAcd
对文本框输入的字符串进行去重, 并保持原顺序不变,例如,在文本框Text1中输入"aldajbnjndalldfjj",执行程序后文本框Text2中输出“aldjbnf”。实现该算法的 VB 程序如下:

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

For i = 1 To n

  a(i) = Mid(s1, i, 1)

Next i

For i = 1 To n

  j = i + 1

  Do While j <= n

    If a(i) = a(j) Then

      For k =

     

      Next k

      n = n - 1: j = j – 1

    End If

    j = j + 1

  Loop

Next i

For i = 1 To n

  s = s + a(i)

Next i

Text2.Text = s

上述程序中方框处应填入的程序代码是(    )

A . j + 1 To n  和 a(k + 1) = a(k) B . j + 1 To n 和 a(k) = a(k - 1) C . j To n - 1 和 a(k - 1) = a(k) D . j To n - 1 和 a(k) = a(k + 1)
有如下VB程序段:

For i=2 to 5

  For j=i to 5

    If j mod i=0 then a(j)=a(j)+1

  Next j

Next i

For i=1 to 5

  If a (i)<>1 then s=str(i)+s

Next i

若数组a 的初始值都为0,则运行该程序段后,s的值为(    )

A . 2 3 5 B . 1 4 C . 5 3 2 D . 4 1
小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前的数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。

实现上述功能的VB程序如下。

Dim a(1 To 8)As Integer

Dim n As Integer

Private Sub Form_Load( )

  a(1)=30:a(2)=47:a(3)=30:a(4)=72

  a(5)=70:a(6)=23:a(7)=99:a(8)=24

  n=8

  For i=1 To 8

      List1.AddItem a(i)

  Next i

End Sub

Private Sub Command1_Click( )

  Dim i,j,k,pos As Integer

  Dims As String

  s=Text1.Text

  pos=Val(Text1.Text)

  For i=1 To n-1

      For j=n

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

          k=a(j-1):a(j-1)=a(j):a(j)=k

          ‘如果pos位置的数据参与交换,则更新pos值,记录pos变化位置

            If pos=j Then

                pos=j-1

                s=s+"→"+Str(pos)

            

                pos=j

                s=s+"→"+Str(pos)

            End If

          End If

      Next j

  Next i

  Label1.Caption=“位置变化情况:"+s

  For i=1 To n

      List2.AddItem Str(a(i))

  Next i

End Sub

  1. (1) 程序中语句“List2.AddItem Str(a(i))”用于将数组元素在List2中显示出来。类似的,可以使用“List2.Removeltem2”删除List2中的第2项(项号从0开始),则Removeltem是(单选,填字母:A .事件名/B .属性名/C .方法名/D .对象名)。
  2. (2) 请将程序代码中的画线处语句补充完整。
  3. (3) 程序代码中加框处有误,请改正。
  4. (4) 程序代码“pos=j-1”表明该元素是和它的一项发生了位置交换(单选,填字母:A .前/B .后/C .没有)。
来种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制数转换为十进制数的值。具体功能如下:在文本框Text1中连续输入多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。程序运行界面如图所示。

  1. (1) 要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句(单选,填字母:A .Width=2018/B .Text1.Width=2018/C .Width.Textl=2018)。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

    Dims As String, c As String,d As String

    Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integer

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

    Do While i<=n

        c=Mid(s,i,2)

        If c="00"Then

          d="东"

        ElseIfc="01"Then

          d=“南"

        ElseIf c="10" Then

          d="西(vi)"

        Else

          d="北"

        End If

        b1=Val(Mid(s, i+2, 1))

        b2=Val(Mid(s ,i+3, 1))

        v=   ①  

        List1.AddItemd+""+Str(v)

           ②  

    Loop

    End Sub

     ② 

  3. (3) 若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是
下列VB程序段功能为:在文本框Text1中输入由一串字母和数字构成的字符,在文本框Text2显示字符串去重以后的结果,其中字母不区分大小写,即“a”和“A”判定为相同。

例如:字符串“2021xuankao", 去重为“201xuanko".

Dim c(0 To 35) As Integer

s = Text1.Text: res =

For i=1 To Len(s)

    ch=Mid(s,i,1)

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

k = Val(ch) + 26

    Else

        

        

    End If

        

    If c(k)=1 Then res=res+ch

Next i

Text2.Text = res

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

①k = Asc(ch) - Asc("a")   ②k = Ase(ch) - Ase("A")  ③e(k) = c(k) + 1  ④c(k) = 1  ⑤If k =0 Thenk=k+ 32  ⑥If k>= 32 Then k=k-32

则①②③处语句依次可为(    )

A . ②⑥③ B . ②⑥④ C . ①⑤③ D . ①⑤④
将一段只含大小写字母与空格,不含其它字符的字符串加密,加密算法描述如下

1)将明文中的字母E替换为A,F替换为B,G替换为C,…A替换为W,B替换为X,C替换为Y,…,小写字符的替换方法同理。

如:明文:I Love China 加密为:E Hkra Ydejw

2)将加密后的英文字母,按顺序依次放入每个字符串段落中,第1个加密字母E放在第1个段落,第2个字母H放在第2个段落,依次类推(如下图),段落间用逗号分隔并以逗号结尾。当遇到空格,在段落末尾“,”前,插入“+”号作为标记。

第1段

第2段

第3段

第4段

第5段

第6段

第7段

第8段

第9段

第10段

E+,

H,

k,

r,

a+,

Y,

d,

e,

j,

w+,

3)每个段落中,随机插入字母形成新的字母序列段,当段号小于8时加密字母在字母序列

中存放位置刚好是该段落号,位置以8为周期,第9段时,加密字母存放位置回到字母序列的第1位,第10段加密字母存放位置回到第2位,依次类推。(位置号<=8)

第1段

第2段

第3段

第4段

第5段

Etc+,

mHfryh,

oTkrestf,

rfir,

Ccfta+,

第6段

第7段

第8段

第9段

第10段

iynhyYf,

tqswjyd,

nrtesiueh,

jnytq,

Uwccdb+,

4)在每一段中随机插入除英文字母之外的ASCII字符码,形成一串密文。如图所示:

  1. (1) 若密文字符串为:“!@8G+*y/$#r~!s,f?[:a34c33!<e=w,123#r@/{t++*%&M2s7s,+h@f$5/j+*^e.? i*,/6*+e$(c3~/: p-)h->w%&3@w!@,4/*i#$@+m!j65&*(kr+^$k++k#l,”

    则根据加密算法,解密后的明文为

  2. (2) 为了寻找密文中隐藏的信息,小明编写了一段VB解密程序,代码如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i As Integer, k As Integer

        Dim s As String, c As String, ch As String

        Dim letter As String, ret As String        'letter 用于存放字母序列s = Text1.Text

        k = 1

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

            If c >= "A" And c <= "Z" Or c >= "a" And c <= "z" Then letter = letter + c

            ElseIf

                c = ","

            Then

                 

                ch = Chr(Asc(ch) + 4)

                If Not (ch >= "A" And ch <= "Z" Or ch >= "a" And ch <= "z") Then ch = Chr(Asc(ch) - 26)

                End If

                IfThen ret = ret + ch + " "

                Else

                    ret = ret + ch

                End If

                 

                k = k + 1

            End If

        Next i

        Text 2.Text = ret

    End Sub

某仓库对货物的编码规则为:货物类型(4-8位英文字母)货物编码(4-8位数字)货物校验码。货物编码的每一位数除以2产生的余数,倒序输出即是货物正确的校验码,现编写如下VB程序,如图在Text1中输入货物完整编码后,判定校验码是否符合标准,并在Label1中输出结果。

  1. (1) 由程序可知,此程序中按钮的名称为
  2. (2) 请在划线处填入合适的代码。

    Private Sub check_Click()

        Dim s as string, ss as string, s1 as string, s2 as string

        Dim i as integer, bz as integer

       

        bz = 0

        For i = 1 To Len(s)

            ss = Mid(s, i, 1)

            If ss = "-" Then

                bz = bz + 1

            ElseIf bz = 1 Then

                s1 = CStr() + s1      ‘Cstr函数是在str的基础上去除前导空格

            ElseIf bz = 2 Then

                s2 = s2 + ss

            End If

        Next i

        If  Then

            Label1.Caption = "符合标准"

        Else

            Label1.Caption = "不符合标准"

        End If

    End Sub

有 Visual basic程序段如下:

s=0

For i=1 To 3

    s=s+i

Next i

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

A . 321 B . 123 C . 6 D . 3
在python中,运行下列程序,正确的结果是(     )

s=0

for i in range (1,6):

    s=s+i

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

A . i=4  s=10 B . i=5  s=10 C . i=5  s=15 D . i=6  s=15
小敏有10万元本金,想要购买银行保证收益型理财产品。每年到期后连本带利仍购买此种理财。请你帮助小敏分析,在年收益率不变的情况下,多少年后小敏的累计收益能超过本金,请完成程序填空。(例如输人:5.15%,输出:14年后收益超过本金。)

1    s=input("请输入年利率:")

2    rate=float(s[:-1])*0.01

3   money=100000

4   year=0

5   while money<=200000:

6        money=round( ),2)

7        year=year+1

8   print(year,"年后收益超过本金。”)

  1. (1) 程序第6行下划线处应填入
  2. (2) 程序第2行的作用是,并赋值给变量 rate。
  3. (3) 该程序主要是通过while实现结构。
在一个数字字符串中,求最长连续递增序列的长度。例如,字符串“123423416789”,最长的递增序列为“16789”,长度为5。编写一个程序,功能如下:在文本框Text1中输入数字字符串,单击“计算”按钮Command1,在标签Label3中显示最长连续递增序列的长度。程序设计界面与运行界面如图所示。

  1. (1) 要使程序运行时,按钮Command1 上的文字显示为“计算”,可在事件过程中添加语句Command1.Caption="计算"。

    (单选,填字母:A . Command1_Click / B . Form_Load / C . Command1_DblCkick)。

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

    Private Sub Command1_Click()

        Dim s As String, max As Integer

        Dim t As Integer, i As Integer

        max = 0: t = 1

        s = Text1.Text

        i = 1

        Do While i <= Len(s) - 1

            If Val(Mid(s, i, 1)) <  Then

                t = t + 1

            Else

                If t > max Then max = t

               

            End If

            i = i + 1

        Loop

       

        Label3.Caption = Str(max)

    End Sub

  3. (3) 如果删除加框处代码,并运行程序,在文本框Text1 中输入“123423416789”,单击“计算”按钮,则标签框Label3中显示的内容为
下列程序段执行后,变量s的值是

s =0

for i in range(1,4):

    for j in range(1,6):

        s=s+i

print(s)

下列选项中,不能实现表达式1-1/3+1/5-1/7+1/9- 1/11计算的是(    )

A

Sum=0

For i=1 To 12 Step 2

Sum =Sum+1/i

Sum =-Sum

Next i

B

Sum=1:t=1

For i=3 To 11 Step 2

Sum= Sum+t/i

t =-t

Next i

C

Sum=0

For i=1 To 11 Step 4

Sum =Sum+1/i

Sum =Sum-1/(i + 2)

Next i

D

Sum=1

For i=3 To 11 Step 2

t=(-1)^ (i\2)

Sum= Sum+t/i

Next i

A . A B . B C . C D . D
如下Python程序段,运行后输出的值是(       )

def factorial(n):

    s=1

    for i in range(2,n+1):

        s=s*i

        return s

total=factorial(4)

print(total)

A . 24 B . 4 C . 44 D . 16
编写“输出所有子串”程序,实现如下功能:在文本框Text1中输入一串不重复的字符串,单击命令按钮“生成子串”,在列表框List1中输出该字符串的所有子串并输出子串的总数。程序运行界面以及工程资源窗口如下图所示,VB程序代码如下

  1. (1) 在程序运行后,发现文本框Text1中已经有内容显示,若要做到程序运行后文本框中内容默认为空,则应在下列事件过程中添加代码Text1. Text=“”。(单选,填字母:A .Command1_ Click/ B .Text1_ Click/C .Form_ Load / D .List1_Click )。
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim s As String,sum As Integer

        Dim i As Integer,j as Integer

        s= Text1. Text

        n= 0

        For i=1 To Len(s)

            For j=1 To Len(s)-i+1

                List1. AddItem

                n=n+1

            Next j

        Next i

        List1. AddItem "总共有" + Str(n)+"个子串"

    End Sub

  3. (3) 如果输入的字符串是“desk”,则输出中有个子串。
若要使语句s=s+i执行6次,则程序画线处的语句为(    )

s=1

for i in_______:

  s+=i

A . range(1,6) B . range(10,5,-1) C . range(6) D . range(1,9,2)
有如下VB程序段:

Dim a(1 To 5) As Integer .

a(1)= 1

For i=2 To 5

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

    If a(i) Mod 2=1 Then

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

    ElseIf i mod 2=0 then

        a(i)=a(i) /2

    End If

Next i

执行程序后,a数组各元素不可能是(     )

A . 1,8,11,20,2 B . 1,4,2,11,4 C . 1,1,8,17,6 D . 1,4,7,6,8
圆周率π的近似值可以通过如下公式计算获得:

通过前 50 项计算近似值 pi 的 VB 程序段如下:

x = Sqr(2):pi = 2 / x

For i = 2 To 50

Next i

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

①x=Sqr(2+x)           ②pi=2*pi/x     ③x=Sqr(x)     ④pi=2*pi/(2+x)

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

A . ①② B . ③② C . ④③ D . ①④
最近更新