4.4.4 循环控制的应用 知识点题库

在计算过程中,有时候数据会特别大,超过系统允许的范围,这时候我们会采用一种特殊的方法来处理,将数字当做字符,然后逐个处理。以下程序用来处理超级大的正整数乘以一个个位数的情况:每输入一个乘数和被乘数,按一下计算,会在列表框中输出运算结果。(保证输入的被乘数是个位正整数,乘数可以是200位以内的正整数),完成填空。

算法思路:从乘数的最后一位开始逐个取出来与被乘数相乘,例如635的最后一位5,取出来与被乘数5相乘,得到25,个位数5作为结果存入s字符串,十位数2作为进位,留着加入下一次的乘积中,然后取出3,与5相乘,得到15,但是要加上刚才的进位,所以应该是17,个位数7作为结果存入s(此时结果是75),十位数作为进位1,留着加入下一次乘积…… 。

  1. (1) 程序中additem 是(选填:属性/属性值/对象名/方法/过程)
  2. (2) 根据算法完成程序填空:

    Private Sub Command1_Click()

    dim s as string,s1 as string,s2 as string

    dim i as integer,jinwei as integer,d as integer,t as integer

    s1 = Text1.Text

    s2 = Text2.Text

    s = ""

    jinwei = 0

    For i = Len(s1) To 1 Step -1

        d = Val(Mid(s1, i, 1))

        t =

        s =

        jinwei = t \ 10

    Next

    If jinwei<> 0 Then s =

    List1.AddItem s1 &"*"& s2 &"="& s

    End Sub

下列VB程序段的功能为;根据文本框Text1中各字符的大小关系,计算各字符按升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~y(4)各元素的值分别为“4,1,2,3”。

s=Text1.Text

n=Len(s)

For i=1 To n

    y(i)=1

Next i

For i=1 To

    For j=  To n

      If  Then

          y(j)=y(j)+1

      Else

          y(i)=y(i)+1

      End If

    Next j

Next i

上述程序段3个方框处的表达式分别为(  )

A . ⑴n         ⑵1         ⑶Mid(s,j,1)>=Mid(s,i,1) B . ⑴n         ⑵1         ⑶Mid(s,j,1)>Mid(s,i,1) C . ⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>=Mid(s,i,1) D . ⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>Mid(s,i,1)
将一段只含大小写字母与空格,不含其它字符的字符串加密,加密算法描述如下

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

有如下VB程序段:

Dim i As Integer, sum As Integer, a(0 To 7) As Integer

Dim s As String , ch As String , num As String

s="2-3-4-5-6-7-0"

sum=1:num=""

For i=1 To Len(s)

    ch=Mid(s,i,1)

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

        num=num+ch

    Else

        sum=sum*Val(num)

        a(Val(num))=Val(num)

    End If

Next i

Text1.Text=Str(sum)

执行该程序段后,下列说法正确的是(  )

A . 文本框Text1中显示“0” B . 文本框Text1中显示“5040” C . 程序报错,提示“溢出” D . 程序报错,提示“下标越界”
有 Visual basic程序段如下:

s=0

For i=1 To 3

    s=s+i

Next i

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

A . 321 B . 123 C . 6 D . 3
一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数称为质数又称素数,下列程序用来判断文本框1中输入的数是否素数,请完善以下三处代码。

Dim i As Integer, m As Integer, flag as Boolean

m =

flag=

For i = 2 To int(sqr(m))

    If Then

        flag=false

        Exit For

    End if

Next i

If flag=true Then

    Text2.Text = str(m) +"是素数"

Else

    Text2.Text = str(m) +"不是素数"

End if

有如下VB程序段:

s=Text1.Text

ans=0

             Text2.Text=Str(ans)

若在Text1中输入110,则Text2中输出内容是6,划线处代码不正确是(    )

A . For i = 1 To Len(s)

    t = Val(Mid(s, i, 1)) ans = ans * 2 + t

Next i

B . For i = 1 To Len(s)

    t = Val(Mid(s, i, 1))

    ans = ans + t * 2 ^ (Len(s) - i)

Next i

C . i = Len(s)

Do While i > 0

    t = Val(Mid(s, Len(s) - i + 1, 1)) ans = ans + t * 2 ^ (i - 1)

i = i - 1 Loop

D . i = Len(s)

Do While i >= 1

    If Val(Mid(s, i, 1)) = 0 Then

        ans = ans * 2 Else

        ans = ans * 2 + 1

    End If

    i = i - 1

Loop

现有如下Visual Basic程序段:

S = 0

For i = _____ to 3 step -1

    S = S + i

Next i

该程序段运行后,语句S = S + i共执行了4次,则下划线处应是(   )

A . 0 B . 1 C . 5 D . 6
小张想要了解自己体育锻炼情况,他以数字的形式记录了自己每天进行的运动项目,如“1,1,2,3,2,3,2,3,3,1,1,4,3”。其中数字1代表篮球;2代表乒乓球;3代表慢跑,…。在记录了一段时间后,小张想知道自己在一段连续时间内最“喜爱”的两项体育运动是什么,以及连续进行的次数。对于这两项体育运动的要求是:

1)这两项运动在记录中必须连续出现,不能被其他运动打断,如“1,2,2,1,2”是一种可能的结果;“1,2,2,1,2,3”则不是可能的结果;

2)这两项运动在记录中出现的次数必须是最多的一种组合。

运动记录

1,1,2,3,2,3,2,3,3,1,1,4,3

序号

两项运动

1,1,2

2,3,2,3,2,3,3

3,3,1,1

1,1,4

4,3

从上表分析可知,小张在一段时间内连续进行的两项运动有5种不同组合,其中组合②中的两项运动持续时间最长,所以最“喜爱”的两项运动为2和3,共连续进行了7次。

根据算法思想,编写VB程序实现如下功能:程序初始化时读取小张记录的一段时间内的所有运动项目,以逗号间隔显示在文本框Text1中,单击“寻找运动项目”按钮Command1,在标签Label4上显示最喜爱的两项运动编号,在文本框Text2中显示这两项运动最长持续的次数。程序运行界面如图所示。

  1. (1) 若输入序列为“3,5,5,4,3,5,5,5,3,3,2,6”,最喜爱的两项运动连续进行的次数为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(1 To 100) As Integer, n As Integer

    Private Sub Form_Load( )

        '读取已有记录项目总数n

        '读取记录的每次运动项目存入数组 a,并在文本框Text1中显示,代码略

    End Sub

    Private Sub Command1_Click()

        Dim x As Integer, y As Integer    'x, y分别表示当前记录中两个不同项目

        Dim c1 As Integer, c2 As Integer 'c1,c2 分别表示两个项目在当前统计过程中出现的次数

        Dim i As Integer, j As Integer, m1 As Integer, m2 As Integer, ans As Integer

        i = 1: j = 1 

        Do While j <= n And a(i) = a(j)

            j = j + 1

        Loop

        x = a(i): y = a(j)

        c1 =   

        c2 = 1

        ans = j - i + 1

        Do While j < n

            j = j + 1

            If a(j) = x Then

                c1 = c1 + 1

            ElseIf a(j) = y Then

                c2 = c2 + 1

            Else

                Do While

                    If a(i) = x Then c1 = c1 – 1 Else c2 = c2 - 1

                    i = i + 1

                Loop

                If Then

                    y = a(j)

                    c2 = 1

                Else

                    x = a(j)

                    c1 = 1

                End If

            End If

            If ans < j - i + 1 Then

                ans = j - i + 1

                m1 = x

                m2 = y

            End If

        Loop

        Label4.Caption = Str(m1) + "和" + Str(m2)

        Text2.Text = Str(ans)

    End Sub

循环结构的算法只能通过for语句来实现。
水仙花数是指一个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:
有如下VB程序段:

result = ""

s1 = Text1.Text

s2 = Text2.Text

i = 1

Do While i <= Len(s1)

    If Mid(s1,i,Len(s2)) <> s2 Then

        result = result + Mid(s1, i, 1)

        i = i + 1

    Else

        i = i + Len(s2)

    End If

Loop

在文本框Text1和Text2中分别输入“Pyyesthon”和“yes”,执行该程序段后,变量result的值是(   )

A . "Pythonyes " B . "yesPython " C . "Pyyesthon " D . "Python "
某Python程序段如下:

def isprime (x):

    for i in range(2, x):

        if x % i= 0:

            return False

    return True

prime = []

for i in range(2, 21):

    if isprime(i):

        prime.append(i) #将 i添加到列表

print (len(prime))

运行该程序段,输出结果是

下列程序段运行后,输出结果是(     )。

a=1

Do Until a>7

    a=a*(a+1)

Loop

Print a

A . 7 B . 39 C . 42 D . 1
水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:1**3+5**3+3**3=153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。

[问题求解]设这个数存放于变量x中,变量g、s、b分别存放个位、十位、百位上的数。需得分离数字得到每位上的数,即将变量g、s、b表示为x的形式。请阅读如下python程序,在横线处填写适当的表达式或语句,使程序完整。

print ("三位数之内的水仙花是:")

for x in(100,1000):

    b=x//100

    s=(x//10)

    g=

    If x=(b**3 +s**3+g**3):

        print(

下列算法流程图描述的算法运行结果是(      )。

Din i As Integer, j As Integer

For i=1 To 5

    For j=1 To 5-i

        Print "";     '输出一个空格

    Next j

    For j=1 To i

        Print **;

    Next j

    Print

Next i

A . B . C . D .
小王基于选择排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如图所示。

实现上述功能的VB代码如下,请回答下列问题:

Const n= 10

Dim a(1 To n) As Integer

Private Sub Form_ load( )

'数组初始化,生成1~20之间的随机整数并赋值给数组a,代码略

End Sub

Private Sub Cmd1_Click()

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

    Dim bottom As Integer

    bottom= n

    For i=1 To bottom-1

        For j= bottom To i+1 Step -1

            If  Then    '①改错

                t=a(j) : a(j)=a(i) : a(i)=t

            ElselIf a(j)=a(i) Then

                      '②填空

                bottom= bottom- 1

            End If

        Next j

    Next i

    Text2. Text=" "

    For i=1 To bottom

        Text2. Text= Text2. Text+Str(a(i))

    Next i

End Sub

  1. (1) 程序窗体中“排序”按钮的对象名是
  2. (2) 程序代码中,加框处①有错,请改正;
  3. (3) 为实现上述功能,请在加框处②填入合适的代码:
  4. (4) 要想生成范围是1~20的随机整数,VB表达式是
有VB程序段如下:

Dim a(1 To 26) As Integer

s= "2020 Artificial Intelligence!” : n=0

For i=1 To Len(s)

    ch= Mid(s, I, 1)

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

        m = Asc(ch) - Asc("a") + 1

        a(m)=a(m)+1

    End If

Next i

For i=1 To 10

    If a(i)>1 Then n=n+1

Next i

已知数组a各元素的初始值都为0,执行该程序段后,变量n的值为(     )

A . 2 B . 3 C . 6 D . 10
“完数”是指一个自然数恰好等于它的因子(不好含本身)之和,如6的因子为1,2,3,而6=1+2+3,因而6就是完数,再如28的因子为1,2,4,7,14,因而28也是完数。输入一个正整数,判断该正整数是否是完数,要判断一个整数n是否为完数,最简单的方法是:求出1到n-1的所有的因子和为s,如果s的值和n的值相同,则n就是完数。

n=int(input("n="))

s=0

for i in range(1, n):

  if n%i==0:

    s=

  if :

    print(n, "是完数")

  else:

    print(n, "不是完数")

用Python编辑器打开"y:\113"下的文件“打印矩形.py",进行以下操作并保存结果。

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

例如,按提示输入:

请输入行数:3

请输入列数:5

屏幕将打印以下图形:

②编写完成后原名保存并关闭应用软件。

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

b=

for i in range():

    for j

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

    print( )

最近更新