4.4.3 循环嵌套的应用 知识点题库

小王基于选择排序算法编写了一个 VB 程序,功能如下:数组 a 有 n * n 个元素,按 n 行 n 列进行排列,按列进行升序排序。例如 6 * 6 的数组,第一列将 a(1),a(7),a(13),a(19),a(25) ,a(31) 进行排序。运行程序,在列表框 List1 中显示 n * n 个数列单击“排序”按钮 Command1,在列表框 List2 中显示排序后的结果,程序运行界面如图所示。

请回答下列问题:

  1. (1) n=6时运行结果如图所示,图中1处“47”在数组 a 中下标是(填数字)。
  2. (2) 为了实现上述功能,请在划线处填写合适的代码。

    Const n = 6

    Dim a(1 To n * n) As Integer

    Private Sub Form_Load()             '产生 n * n 个数组元素,每行按n个数显示在 list1 中
      For i = 1 To n * n

        a(i) = Int(Rnd * 90) + 10

        s = s + Str(a(i))

        If   ①    Then  

          List1.AddItem s

          s = “”

        End if
      Next i

    End Sub

    Private Sub Command1_Click()

      Dim i As Integer, j As Integer, w As Integer, s As String

      For i = 1 To n * n

        k = i

          For j = k + n To   ②   

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

         Next j

         If a(k)=a(i)  Then t = a(k): a(k) = a(i): a(i) = t

       Next i

    ‘将排序后数组 a 的元素,按每行 n 个数显示在 list2 中,代码略
    End Sub

     ② 

  3. (3) 程序中加框处代码有错,请改正。
给定正整数 n(1≤n≤26),要得到中间以“A”开始,两边各递增 n-1 个字符的对称字符串s,例如 n=5,则 s=“EDCBABCDE”。实现该功能的 VB 程序段如下:

s = ""

For i = 2 * n - 1 To 1 Step -1

If i <= n Then

  S=

Else

  S=

End If

Next i

上述程序段方框处的语句分别为:(    )

A . Chr(Asc("A") + n - i) + s 和Chr(Asc("A") + i - n) + s B . Chr(Asc("A") + n - i) + s和s + Chr(Asc("A") + i - n) C . Chr(Asc("A") + n – i+1) + s和Chr(Asc("A") + i – n+1) + s D . Chr(Asc("A") + n - i) + s和s + Chr(Asc("A") + i – n+1)
有如下VB程序段:

s=0

For i=1 To 6

  s=s+i

Next i

Label1.Caption=Str(s)

该程序段运行后,标签Label1上显示的内容是(  )

A . 10 B . 15 C . 21 D . 28
生成之形矩阵:在文本框中输入之形矩阵的行数n(3≤n≤10),点击“生成”按钮Command1后,在List1中显示结果,程序运行界面如图所示。

实现程序的代码如下,但加框处代码有误,请改正。

Private Sub Command1_Click( )

  Dim n,t As Integer,s As String

  n=Val(Text1.Text)

  For i=1 To n

      s=""

      If       Then     ‘①

        For j=1 To n

            t=t+1

            s=s+ads(t)

        Next j

      Else

        For j=1 To n-i

            s=s+"  "

        Next j

        t=t+1

              ‘②

      End If

      List1.AddItem s

  Next i

End Sub

Function ads(n As Integer)As String

  Dim a As Integer

  a=Len(CStr(n))    ‘函数CStr( )和Str( )功能类似,但输出字符时没有前导空格

  If a=1 Then

      ads="0"+CStr(n)

  Else

      ads=CStr(n)

  End If

End Function

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

某全英文教材文件"textbook.txt"内容如图所示。编写Python程序,分析该书中的单词使用情况。程序代码如下,请回答下面问题。

 

  1. (1) 图1中单词的间隔有 。
  2. (2) 自定义函数cleantext( )的功能是
  3. (3) 在划线处填入合适代码,完善程序。

    import pandas as pd

    def cleantext( ):

        txt = open("textbook.txt","r"). read( )

        txt=     ①            #将字符串中所有大写字母转为小写

        for ch in '! ( );:''',.? ' :

            txt = txt.replace(ch,"")       #用空格替代ch的值

        return txt

    booktxt = cleantext( )

    words = booktxt. split( )

    #以空格为分隔符分割文本并生成列表

    counts= { }

    for word in words:

        counts[word]=counts. get( word,0)+1

    items= -list(counts. items( ))    #返回所有键值对信息,生成列表

    df= pd.DataFrame(items,columns=['word','times'])

    df1= df.sort _values('word')

    df1.plot( x='word', y='times', kind='line', igsize=(8,3))

    df2=    ②       

    print('文件中出现的不同单词数:',     ③          )

    print(df2[:10])

     ② ③ 

  4. (4) 运行程序,输出结果如图2所示,绘制的图形如图3所示。结合两图分析,该教材中出现次数超过50次的单词有哪些?这些单词有什么特征?

  5. (5) 若将该教材中单词的掌握程度分为“非常熟练”“熟练”“一般”三类输 出,请完善下表。

    掌握程度

    程序末尾须添加的输出语句

    非常熟练(出现10次以上)

    熟练(出现2~10次)

    一般(出现1次)

若k为整型,下列while循环执行的次数为 (   )

k = 1000

while k > 1:

    print(k)

    k = k /2

A . 9 B . 10 C . 11 D . 100
编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。
有如下VB程序段:

b=0

For a=1 to 10

    b=a+b

Next a

c=a+b

执行该程序段后,变量c的值为(    )

A . 55 B . 66 C . 65 D . 20
某仓库管理员希望使用计算机来帮助他管理仓库物品。会有不同的人到仓库取物品,每人希望取走不同数量的物品,物品库存总量事先已知。

计算机的管理规则如下:

·对于某人需要的物品数量,若仓库有足够的物品,将直接分配给该人。

·若某人需要的物品数量超过了当前的库存量,仓库会拒绝该人的请求。

管理员希望知道有多少人没有顺利取到物品。

现编写VB程序实现对物品的管理,在文本框Text 1中输入物品库存总量,在文本框Text 2中输入每人所需要物品的数量(以逗号分隔),单击“统计”按钮count,在Label 4中显示一天中没有取到物品的人数。程序设计界面如图所示。

图片_x0020_100009

  1. (1) 根据题意,“统计”按钮的对象名为
  2. (2) VB程序代码如下,请在划线处填入合适的代码。

    Private Sub count_Click()

        Dim sum As Integer,num As Integer

        Dim cnt As Integer

        Dims As String,chAs String,tmp As String

        cnt= 0

        sum=Val(Text 1.Text)

        s=Text 2.Text

        For i=1 To Len(s)

            ch=Mid(s,i,1)

            If ch=","Then

                num=Val(tmp)

                If num>sum Then

                    cnt=cnt+ 1

                Else

                   

                End If

                tmp=""

            Else

               

            End If

        Next i

        Label 4.Caption=Str(cnt)

    End Sub

  3. (3) 若在文本框Text 1中输入“30”,文本框Text 2中输入“10,5,20,6,78”,则程序运行结束时标签Label 4中显示的内容为
计算机在0~1000中随机产生一个数,试试看你要多少次才能猜中,阅读下列程序.

import random

num=random.randint(1,  ①  )

mynum=int(input('请输入mynum='))

n=1

while not(  ②  ):

    n= n+1

    if mynum<num:

        print("输入的数小了")

    elif mynum>num:

        print("输入的数大了")

    print("输入不正确,请再次输入")

    mynum=int(input('请输入mynum='))

print("你猜对了!","一共用了",n,"次") 

input("运行完毕,请按回车键退出...")

下列说法正确的是(    )

A . ①填写999 B . ①填写1000 C . ①填写1001,②填写mynum== num D . ②填写mynum!= num
小王计划使用VB制作一个扫雷小游戏,他首先需要生成一个“雷区”:

①生成n*n的矩阵,其中计划埋雷m个,n和m的数据分别从text1和text2中获取(n<=10,m<=n)

②随机位置埋好地雷后(埋雷位置用X表示且埋雷位置不重复),未埋雷的位置显示该位置周围一圈地雷的数量。

程序代码如下:

Dim flag(0 To 200) As Boolean, a(0 To 200) As String

Dim n As Integer, m As Integer

Private Sub Command1_Click( )

    Dim s As String, x As Integer, k As Integer

    Dim i As Integer, j As Integer

    Randomize

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

    ‘初始化数组flag中各元素均为False,数组a中各元素值为字符"0",代码略

    For i = 1 To m

        x = Int(Rnd * (n ^ 2)) + 1

        If flag(x) = True Then i = i - 1 Else flag(x) = True

    Next i

    For k = 1 To n * n

        If flag(k) = True Then

            a(k) = "X"

        Else

            For i = (k - 1) \ n To (k - 1) \ n + 2

                For j =    ①  

                    If i = 0 Then Exit For

                    If flag((i - 1) * n + j) = True And j >= 1 And j <= n Then

                        a(k) =    ②  

                    End If

                Next j

            Next i

        End If

    Next k

    For i = 1 To n * n           ‘在列表框list1中输出矩阵

        s = s + "   " + a(i)

        If    ③    Then

            List1.AddItem s

            s = ""

        End If

    Next i

End Sub

根据上述代码,完成下列问题:

  1. (1) 上图框中位置未埋雷,且数字被遮挡,请问该位置中应填写的数字是
  2. (2) 请在划线处填上合适的代码。

     ② ③ 

编写一个VB程序,实现如下功能:输入s位数字构成的数字字符串(第1位数字不为0),移除k(0<k<s)个数字后,在保证原数字相对位置不变的情况下,使剩余数字组成的新数为最小(注:新数第1位不能为0)。例如8个数字构成的数字字符串“71803296”,移除3个数字,得到5位数字构成的最小数是“10296”,具体算法如图a所示。

算法分析:要使得到的5位数字最小,首先需保证能取到5个数字,且首位应尽量小,那么取首位数的范围应保证余下有4个数字,即在前4位中选最小非0的数字。

程序运行时,在文本框Text1中输入一个数字字符串,在文本框Text2中输入要移除的数字个数,单击“运行”按钮CmdRun后,在标签Label1显示得到的最小新数,程序运行界面如图b所示。

  1. (1) 程序运行时,若要在名为Form1的窗体标题上显示“删数”,可以在Form_Load事件处理过程中添加语句为(单选,填字母:A.Form1. Text =“删数”\B.Form1. Caption =“删数”\C.Form1. AddItem“删数”)
  2. (2) 实现上述功能的VB程序代码如下,请在划线处填入合适的代码。

    Private Sub CmdRun_Click( )

        Dim Num As String,New_num As String     ' Num为输入的数字字符串

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

        Dim As Integer, s As Integer, k As Integer

        Dim a(30) As String, b(30) As Integer

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

        k = Val (Text2. Text)      'k为删除数字个数

        For i=1 To s

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

        Next

        j =1

        m=1

        n=

        For i=m+1 To n      '取第一个非零最小数字

            If  Then m=I     '加框处程序代码有误,请改正

        Next i

        b(j)= m

        Do While       '取其他最小数字

            m=m+1

            n=n+1

            For i=m+1 To n

                If a(i) < a(m) Then m= i

            Next i

                j =j+1:b(j)=m

        Loop

        For i= m+1 To s     '最后直接取的数字

            j =j+1:b(j)=i

        Next i

        For j=1 To s- k       '输出最小数

            New_num =

        Next j

        Label1.Caption = New_num

    End Sub

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

For i= 1 to 3

    List1. AddItem b(a(i))

Next i

数组元素a(1)到a(6)的值依次为“4,2,3,6,1,5”,数组元素b(1)到b(6)的值依次为“Ella”“Sally”“Lily”“Tom”“Anna”“Jack”,则执行上述程序段,List1中显示的内容是(    )

A . Ella sally Lily B . Tom Sally Lily C . Ella lily Anna D . Tom Lily Sally
水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身(例如:13+53+ 33=153)。通过Python编程可以得到所有的3位水仙花数并打印出来。
  1. (1) 实现上述功能的部分程序代码如下,请在划线处填入合适的代码。

    for i in range():

    a=i// 100                #取出百位数字

    b=          #取出十位数字

    c=i%10                    #取出个位数字

    if

    print(“水仙花数是:”, i)

  2. (2) 加框处的代码有误,以下可以代替此代码的正确代码有(       
    A . a**3+b**3+c**3== i: B . not i!=a**3+b**3+c**3: C . a**3+b**3+c**3!=I D . i== a**3+b**3+c**3 E . (a+b+c)**3= =i:
下列程序段中,赋值语句s+=i被重复执行的次数、s最后的值为(     )

s=0

for i in range(3,14,4):

    s+=i

A . 2次  21 B . 3次  21 C . 4次  21 D . 4次  35
某品牌手机第一年销量为20000台,假设平均每年的销量比上一年增加68%,请问几年后能使总销量达到60000台。下面的程序能实现上述的功能,请将缺失的代码补充完整。

total= every_year=20000

year=1

while :

    every_year + =

    total + = every_year

    year + = 1

print(year)

有一个加密/解密程序,其加密的算法是:将原文中每个字符的ASCII码加上该字符在原文中的位置数(设字符在原文中是第n个字符,则其位置数是n被10除的余数,当余数为0时,其位置数为10.例如,原文字符串为“meet me at sunset”,第一个字符“m”,其位置数为1,而“s”为第12个字符,其位置数是被10除的余数2,其余依次类推)作为密文字符的代码,再将密码字符逆序排列(例如ABCD,逆序排列为DCBA)即为密文。解密算法是加密算法的逆运算,运行效果如下图所示。

  1. (1) 如图所示,如果原文中字母“g”后面添加字母“h”,按“加密”按钮后,字母“h”对应的密文为:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_ Click( )    '加密

        Dim enc As String, dec As String, i As Integer

        Dim s As String,n As Integer

        dec = Text1. Text

        For i=1 To Len(dec)

            s=

        n=i Mod 10

            If n=0 Then n=10

            enc =Chr(Asc(s)+n) & en

        Next i

        Text2. Text =enc

    End Sub

    Private Sub Command2_Click( )    '解密

        Dim enc As String, dec As String, i As Integer

        Dim n As Integer, s As String, p As Integer

        enc = Text2. Text

        n = Len( enc)

        For i =1To n

            s = Mid(enc, i, 1)

            P=

            If p =0 Then

            dec = Chr(Asc(s) -p) & dec .

        Next i

        Text1. Text = dec

    End sub

阅读下列程序,写出运行结果。

程序运行后,输入:8

运行输出结果是:

有如下VB程序段:

sl = "1324":s2="abcdefgh"

j = 1 : m=0 : c=" "

For i= 1 To Len (s2)

    k =Val(Mid(sl, j, 1))

    c= c +Mid(s2,m +k,1)

    j=j+1

    If j>4 Then j= 1 : m =m+ 4

Next i

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

A . "acbdegth" B . "acbdacbd" C . "acbdefgh" D . "abcdefgh"
运行下面的程序段后得到的结果为(    )

A . 12 B . 14 C . 28 D . 36
最近更新