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

某加密算法对大写字母加密,其加密规则如下:密文的ASCII码值=明文的ASCII码值+密钥,加密后生成的密文仍为大写字母。其密钥是在3*3矩阵中获得,获得密钥的方式为:如字母“A”的ASCII码值为65,将65反复除3,其转换过程如图1所示,得到商为2,密钥在矩阵中所在行;得到余数2,密钥在矩阵中所在列;商或余数为0,密钥在矩阵中最后一行或最后一列。其程序运行界面如图2所示。

  1. (1) 下列对象中没有Caption属性的是(单选,填字母:A .Command1 /B .Form1 /C .Text1和Text2)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(1 To 9) As Integer

    Private Sub Command1_Click()

    Dim column As Integer, row As Integer, t As Integer, tmp As Integer

    Dim s As String, ch As String, result As String

    s = Text1.Text: result = ""

    For i = 1 To Len(s)

      ch = Mid(s, i, 1): t =.

      column = (t - 1) Mod 3 + 1

      Do While t >= 3

        t = t \ 3

      Loop

        row =

        tmp = (Asc(ch) +  - 65) Mod 26 + 65

        result = result + Chr(tmp)

    Next i

    Text2.Text = result

    End Sub

    Private Sub Form_Load()      '用来生成3*3矩阵

    For i = 1 To 9

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

      s = s + Str(a(i))

      If i Mod 3 = 0 Then

        List1.AddItem s

        s = ""

      End If

    Next i

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
  4. (4) 根据程序的功能并结合图2,字母C加密后的密文为
n=1

for i in range(1,5):

  n=n*i

  print(n)

程序运行后,其输出结果为

下列程序段执行后,k的值为(  )

k=0

For i=0 To 6 Step 2

  For j=1 To 8

     If j>5 Then k=k+2:Exit For

     k=k+1

    Next j

Next i

A . 30 B . 28 C . 25 D . 11
如果两个质数的差为2,则这两个质数称为李生质数对。编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框List1中显示100以内的所有孪生质数对。如图所示。

实现上述功能的VB代码如下,但加框处代码有误,请改正。

Dim a(1 To 50)As Integer

Private Sub Command1_Click( )

  Dim i As Integer

  k=0:i=3

  Do While i<=100

      If  Then     ‘①

          k=k+1

          a(k)=i

      End If

      i=i+2

  Loop

  For i=2 To k

      If   Then     ‘②

          List1.Addltem Str(a(i-1))+ "和"+Str(a(i))

      End If

  Next i

End Sub

Function prime(x As Integer) As Boolean

  prime=False

  For i=2 To Int(Sqr(x))

    If x Mod i=0 Then

      prime=True

      Exit For

    End If

  Next i

End Function

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

一小球从100米高度自由落下,与地面碰撞时能量损失一半。假设小球每次与地面碰撞后反弹回到原来一半的高度(小球在运动过程中视为质点,且不计空气阻力),则经过5次落地共经过了287.5米。编写Python程序,实现计算小球从m米高处落下,在n次地面碰撞后经过的总路程。

height = 0

m = float(input("输入起始高度:"))

n = int(input("输入次数: "))

for i in range(1,n):

    if i= 1:

        height+=m

    else:

                       

    m/=2

print("总路程:" +str(height))

  1. (1) height变量的功能是
  2. (2) 程序中划线①处应填入的代码是 。
  3. (3) 程序调试如图所示,计算结果出错,该如何修改程序?

    输入起始高度:100

    输入次数:5

    总高度:275. 0

已知在一直角三角形中,直角边a,b为整数,斜边C为不大于50的整数,输入直边a,输出所有满足条件的直角三角形三边a,b,c。
  1. (1) 解题思路为在斜边C的范围内,检验直角边b是否满足条件。这种算法是(     )
    A .   解析算法 B .   枚举算法 C .   查找算法 D .   排序算法
  2. (2) 斜边C的范围的下列FOR语句表达正确的是:(     )
    A .   for C=0  to  50 B .   for C=0  to   a     C .   for C=a  to 50  D .   for C=a+1 to 50
有如下程序段:

s=0

for i in range(1,11,2):

s=s+i

print(s)

该程序段运行后,s的值为

有百位和十位未知的5位整数“22**6,能被37或67整除。以下VB程序段的功能是:在满足条件的所有数中,将最大一个5位数的百位和十位依次显示在文本框Text1中。

i=100:flag=False

Do While i>0 And Not flag

   

Loop

Text1. Text = Str(i\10)+Str(i Mod 10)

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

①j=22006+i*10    ②i=i-1  ③If(j Mod 37)*(j Mod 67)=0 Then flag = True

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

A . ①②③ B . ①③② C . ②①③ D . ②③①
将某字符串按“V”的形状进行变换,其变换方法描述如下:

1)将字符串中的字母转换为大写字母后按升序进行排序;

2)根据给定的行数,将字符串从上往下、从左到右进行“V”字形排列;

3)从左往右逐行读取字符串并输出;

例如:输入字符串为:“NoThingIsImpossible”,

经过排序得到字符串:“BEGHIIIILMNNOOPSSST”,行数输入为3时,排列如下:

经过变换后得到新字符串为:“BILOSEHIIMNOSSGINPT”。

编写VB程序,实现如下功能:在文本框Text1中输入行数,在文本框Text2中输入字符串(限定字母),单击“变换”按钮Command1,在标签Label3中输出变换结果。程序运行效果如图所示。

  1. (1) 若小明在文本框Text1中输入3,在文本框Text2中输入的的字符串为“NOTHING”,则在标签框Label3中输出的结果为
  2. (2) 实现该功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click( )

        Dim n As Integer, i As Integer, j As Integer Dim s As String, result As String

        Dim a(1 To 26) As Integer, res(1 To 100) As String

        Dim flag As Integer     '变量flag用于上下换方向

        n = Val(Text1.Text) s = conv(Text2.Text)

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

           

        Next i

        s = ""

        For i = 1 To 26

            For j = 1 To a(i)

                s = s + Chr(i + 64)

            Next j

        Next i

        j = 1: flag = -1

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

            res(j) = res(j) + c

            If Then flag = -flag

            End If

           

        Next i

        For i = 1 To n

            result = result + res(i)

        Next i

        Label3.Caption = result

    End Sub

    '小写字母转大写

    Function conv(word As String) As String Dim i As Integer, c As String, s As String

        For i = 1 To Len(word)

            c = Mid(word, i, 1)

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

            s = s + c

        Next i

        conv = s

    End Function

用VB编写“提取字符串”的程序,实现如下功能:在文本框Text1中输入字符串,单击“提取”按钮Command1,程序将字符串中连续最长的大写字母提取出来,并显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 程序运行时,要使按钮Command1标题显示“提取”,可在Form_Load()事件处理过程中添加语句(单选,填字母:A . Command1 ="提取"/B . Command1.Text="提取"/C . Command1.Caption = "提取")。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim s As String, d As Integer, i As Integer

        Dim max As Integer, c As String, ans As String

        s = Text1.Text

        d = 0 : max =0

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

            If c >= "A" And c <= "Z" Then

                d = d + 1

            Else

                If d > max Then

                    ans= Mid(s, i - d, d)

                   

                End If

                d = 0

            End If

        Next i

        Text2.Text=

    End Sub

  3. (3) 若文本框Text1中输入内容为:“Is it JUNE or JULY?”,单击“提取”按钮后,文本框Text2中显示的内容是
排序的稳定性。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j], 且r[订]在r[j]之前, 而在排序后的序列中,r[i]仍在r[j]之前,则称这种撸序算法是稳定的:否则称为不稳定的。现编写一个VB程序,实现功能如下:随机生成n-1个不重复的[10, 99]之间的正整数,在这n-1正整数中随机选取一个位置i,将其值r[i]作为第n个数插入到某一位置j处,然后对数据序列进行排序,验证排序前和排序后这两个相同数相对次序的变化,著均不变,则排序稳定,若有改变,则排序不稳定。实现该功能的VB程序及界面如下,请回答以下问题。

Const n = 10

Dim a(1 To 10) As Integer, b(1 To 10) As Integer

Dim k1 As Integer, k2 As Integer     'k1,k2为相同数据的前、后次序

Private Sub Command1_Click ()

    Dim i As Integer, tmp As Integer, t As Integer

    Randomize

    List1.Clear

    For i = 1 To 9    '随机生成9个不重复数

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

        Do While    ①   

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

        Loop

    Next i

    '以下代码为随机选取数组中的1个数作为第10个数字再随机的插入到原数组的1-9位置

    K1 = Int(Rnd *9 + 1)

    tmp = b(k1)

    k2 = Int(Rnd* 9 + 1)

    For i=10 To k2+1 Step -1

        b(i)=b(i-1)

    Next i

    b(k2) = tup

    For i =1 To n

        a(i) = i

        List1. AddItem Str(a(i)) +””+ Str(b(i))

    Next i

    If k1 >= k2 Then

           ②   

        t =k1: k1=k2: k2=t

    End If

    Text1. Text = Str(k1) + Str (k2)

End Sub

Private Sub Command2 _Click ()

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

    List2. Clear

    For i=1 To n-1

        k=i

        For j=i +1 To n

            If b(j) < b(k) Then k= j

        Next j

        If k<>i Then

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

            t=b(l): b(k)=b(i): b(i)=t

        End If

    Next i

    For i= 1 To n

        List2.AddItem Str (a(i)) +"" + Str (b(i))

    Next i

    i=1

    Do While i<=n-1 And b(i)< b(i+1)

        i=i+1

    Loop

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

    If    ③    Then Label1. Caption="稳定" Else Label1. Caption ="非稳定"

End Sub

Function check(x As Integer, y As Integer) As Boolean

    Dim j As Integer

    check = False

    For j= 1 To y-1

        If b(j)=x Then

            check = True

            Exit For

        End If

    Next j

End Function

  1. (1) 分析程序代码,若某次运行显示“稳定”,则是否能确定选择排序是稳定排序?(填:是/否)
  2. (2) 补充横线处完整代码

     ② ③ 

分析完善程序

以下是计算s=1*2*3*……10的程序代码,请补全程序。

s=   

for i in range(1,11):

  s=

Print (s)

有如下Python 程序段:

n=input("输入若干个非负整数,以逗号分隔:").split(",")

a=list(map(int,n)) ; s=0

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

  if i%2==0:

    s+=a[i]*2

  else:

    s-=a[i]

print(s)

执行该程序段时,输入“2,0,1,8,1,1,1,6”,则输出结果是(     )

A . -2 B . 0 C . -5 D . 7
以下程序运行后输出结果为(     )

DIM Y AS INTEGER,A AS INTEGER

Y=3 :K=3

DO UNTIL K<9

    K=K-2

Y=Y+K

LOOP

PRINT Y; K

A . 1  2 B . 2  2 C . 3  3 D . 2  1
S=0: M=0: N=0

FOR I=1 TO 20

    IF I MOD 2=0 THEN

        S=S+1

    ELSEIF I MOD 3 =0 THEN

        M=M+1

    ELSEIF I MOD 5 =0 THEN

        N=N+1

    END IF

NEXT I

PRINT S, M, N

这段程序的执行结果是(        )

A . 10   4    1 B . 10   3   1 C . 10   5    2 D . 10   3   3
关于循环结构,下列说法中错误的是(     )。
A . 当循环可能循环体一次都执行不到 B . 当循环是先执行循环体再判断 C . 循环结构适合用来解决在条件限定下某些步骤需要重复执行的问题 D . 不是所有的循环结构都能用For语句来实现的
某张单据上有一个5位数的编号n,如图所示 ,其百位数和十位数模糊不清,但是知道 这个5位数是23的倍数。现要设计一个算法,找出所有满足这些条件的5位数,并统计个数。

现有Python程序段如下:

c=0

for i in range(10):

    for j in range(10):

                                         

        m=25006+s

        if m%23==0:

            print(m)

            c=c+1

print(“满足这些条件的5位数总共有:”,c,“个” )

画线处应填的代码是(    )

A . s=i*10+j B . s=i*100+j C . s=i+j*10 D . s=(i*10+j)*10
有如下python程序段:

n="p4y2t3h1o9n4";p=""

for i in n:

    if "0"<=i<="9":

        if p=="":

            p+=i

        elif i>=p[-1]:

            p+=i

        elif i<p[0]:

            p=i

执行该程序段后,则p的值是(     )

A . "239" B . "14" C . "19" D . "4"
有如下python程序段:

from random import randint

n=input("请输入一串数字:")

k=randint(0,len(n))       #randint用于随机生成[0,len(n)]之间的整数

for i in range(k):

    for j in range(len(n)-1):

        if n[j]>n[j+1]:

            break

    else:

        n=n[:len(n)-1]

        continue      #continue跳过当前循环的剩余语句,直接进行下一轮循环

    n=n[:j]+n[j+1:]

执行该程序段后,输入“1529”,则变量n可能是(     )

A . "9" B . "12" C . "152" D . "1259"
有n个从小到大排列的正整数依次存储在数组a中,另有m(m<n)个正整数存储在数组b中。现要求只保留上述n+m个数据中从小到大排列的前n个数据,并依次存入数组a中,其余数据被剔除。

小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:

n=10,数组a:2,4,6,8,10,12,14,16,18,20

m=5,数组b:41 , 11,17 , 29,9

处理后的数组a:2,4,6,8,9 , 10,11 , 12,14,16

  1. (1) 若n=8,m=4,数组a的元素依次为“3,4,6,10,13,14,21,25”,数组b的元素依次为“3,18,7,15”,按上述要求剔除m个数据后,数组b中保留的数据个数为个。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    Const n=1000,m=50

    Dim a(1 To n)As Integer, b(1 To m)As Integer

    Function getImax(k As Integer)As Integer

        ‘在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略

    End Function

    Private Sub Commandl_Click( )

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

        Dim na As Integer, nb As Integer, imax As Integer, mean As Integer

         ‘读取数据分别存入数组a、b,代码略

        na=n : nb=m

        imax=getImax(nb)

        For i=1 To m

            If a(na)<= Then

                b(imax)=b(nb)

                nb=nb-1

                If nb>0 Then imax=getImax(nb)

            Else

                na=na-1

            End If

        Next i

        Do While nb>0

            i=1 : j=na

            imax= getImax(nb)

        Do While i<=j

            mean =(i+j)\2

            If a(mean)<b(imax) Then i= mean +1 Else j=mean-1

        Loop

            For k=na To 1 Step-1

                

            Next k

            a(i+nb-1)=b(imax)

            b(imax)=b(nb)

            

            nb=nb-1

        Loop

        '输出数组a,代码略

    End Sub

最近更新