循环结构语句及程序实现 知识点题库

有如下VB程序段:

For i = 4 To 3 Step -1

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

 tmp = a(i)

 For j = i-1 To 1 Step -1

If tmp > a(j) Then Exit For

a(j+1) = a(j)

 Next j

  a(j+1) = tmp

End If

Next i

数组元素 a(1)到 a(6)的值依次为“19,8,96,92,85,88”,经过该程序段“加工”后,数组元素 a(1)到 a(6)的值依次为(  )

A . 8,19,92,96,85,88 B . 8,19,85,88,92,96 C . 19,8,92,96,85,88 D . 19,8,85,92,96,88
小军学习了冒泡排序算法后觉得算法还有优化的余地:假设区间[1,i]内的元素已经有序,接下来对[i+1,n]所有元素进行扫描比较,扫描完后记住最后一次交换的位置last_exchange,这个位置说明了区间[i+1,last_exchange-1]内的元素是有序的。标准冒泡排序算法下一遍的扫描区间是[i+2,n],而有了last_exchange位置信息后,下一遍的扫描区间只要[last_exchange,n]即可。小军用VB实现了该算法,运行的界面如图所示。

Const maxn = 1000

Dim a(0 To maxn) As Long

Private Sub Form_Load()

′产生maxn个不相同的数据,并把他存储在a数组中,代码略

End Sub

Private Sub Command1_Click()

Dim i As Long, j As Long, tmp As Long, cnt As Long

Dim last_exchange As Integer ′记录最后一次交换位置

Dim tmp_pos As Integer  ′本次交换的位置

cnt = 0: i = 1

last_exchange = 0: tmp_pos = 1

Do While        ′改错

  last_exchange = tmp_pos

  For j = maxn To last_exchange + 1 Step -1

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

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

                             

      cnt = cnt + 1

    End If

  Next j

  i = tmp_pos

Loop

′输出,代码略

End Sub

  1. (1) 代码“Private Sub Command1_Click()”中的Click是。(单选,填字母:A . 对象名/B . 属性名/C . 事件名)
  2. (2) 程序代码中,Do While语句加框处有错,请改正。
  3. (3) 程序代码中,将横线处语句补充完整。
  4. (4) 程序代码中,cnt变量的含义是。(单选,填字母:A . 表示一趟加工中交换次数/B . 排序中总共交换次数/C . 排序中总共比较次数)
随机生成n个大于等于1且小于等于n的不重复正整数,采用“数据块交换”方式升序排序。数据块交换方式如下:

在待处理的数据区间中,对相邻且数据个数相等的数据块进行处理。若数字i恰好在第i位置,则不做交换,否则按下列两种情况处理。

情况A.待处理区间中,若数字i之前的数据个数小于等于其余数据个数,做一次交换可将数字i换到第i位置,如数字i=2时:

情况B.待处理区间中,若数字i之前的数据个数大于其余数据个数,操作如下:

◆奇数个数据:先将待处理区间中第1个数据排除,对其余数据整体做数据块交换,再按情况A处理,如数字i=3时:

◆偶数个数据:先将待处理区间整体做数据块交换,再按情况A处理,如数字i=4时:

  1. (1) 若数组a中数据为“4,5, 1,2,3",则第1次数据块交换后数组a中数据依次为:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const Maxn = 30

    Dim a(1 To Maxn) As Integer

    Dim wz(1 To Maxn) As Integer

    '函数功能:数据块[st1… ed1]与后面数据块交换(两数据块相邻且个数相等)

    Function kSwap(st1 As Integer, ed1 As Integer) As String

         Dim i As Integer, t As Integer, n1 As Integer

         n1=ed1-st1+1

         For i=

             t=a(i):a(i)=a(i+n1):a(i+n1)=t

             t = wz(a(i)): wz(a(i)) = wz(a(i + n1)): wz(a(i + n1)) = t

         Next i

         '将处理结果返回,代码略。

    End Function

    Private Sub Cmd1 _Click()

         Dim n As Integer, num As Integer, i As Integer, s As String

         n = Val (Text1. Text)

         '随机生成n个不重复正整数保存到a(1)到a(n)中,并在List1中显示,代码略。

         For i=1 To n

             wz(a(i)) = i

         Next i

         For i=1 To n - 1

             If i <> wz(i) Then

                 num =

                  If wz(i)-i<=num-(wz(i)-i)Then   '按情况A处理

                      s = kSwap(i, wz(i) - 1) : List1. AddItem

                  Else

                  If num Mod 2=0 Then

                      s = kSwap(i, i + num\2 - 1) : List1. AddItem s

                   Else

                      s=: List1. AddItem s

                   End If

                   i=i-1 数字i交换到第i位置的处理尚未完成;

               End If

            End If

        Next i

    End Sub

已知字符A的内码为65,a的内码为97,则下列程序执行后,变量t的值为(  )

s="AaBb":t=""

For i=1 To Len(s)

  ch=Mid(s, i, 1)

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

    ch=Chr(Asc(ch)-32)

  End If

  t=ch+t

Next i

A . "AaBb" B . "AABB" C . "BbAa" D . "BBAA"
小明编写了一个VB程序,可实现如下功能:在100至999之间的自然数中,找出能被3整除,且至少有一位数字为5的所有整数,并统计个数。程序运行界面如图a所示。

  1. (1) 在设计程序界面时,应使用图b所示的“控件工具箱”中的(填写相应编号)添加“List1”列表框。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click()

      Dims As Integer,n As Integer

      Dim a As Integer,b As Integer,c As Integer

      n=0

      s=102

      List1.Clear

      Do Whiles<=999

        a=   ①   

        b=s\10 Mod 10

        c=s Mod 10

        If   ②   Then

          List1.Addltem Str(s)

             ③   

        End If

        s=s+3

      Loop

      Label1.Caption="共有"+Str(n)+"个"

    End Sub

    画线处应填入的代码为:①;②;③

正整数n的阶乘,在数学上定义为:n!=1×2×3×…×n,如3!=1×2×3,现在输入一个正整数n(n≤30),计算出1~n中的每一个整数的阶乘的精确结果。小北按照上述要求,设计了一个求前n个正整数的阶乘问题的VB程序具有下述功能。在程序中,他采用加法代替乘法的方法来计算阶乘,如:3!=2!×3=2!+2!+2!。程序启动后在文本框Text1中输入n的值,单击“计算”按钮Command1后,在列表框List1中输出前n个数的阶乘,当n=10时,程序运行界面如图所示。

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

Const maxn=80

Dim i, j, k, n, r As Integer

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

Dims As String

Private Sub Form_Load( )

    List1.Clear

    For i=1 To maxn

        a(i)=0

    Next i

End Sub

Sub array_sum(j As Integer)    ‘该过程用于计算j!,并将j!的精确值按位保存在数组a中

  For k=1 To j-1

    For i=1 To maxn

        r=    ①   

        If r>=10 Then    ②   =a(i+1)+1

        a(i)=r Mod 10

    Next i

  Next k

End Sub

Private Sub Command1_Click( )

  n=Val(Text1.Text)

  a(1)=1

  List1.AddItem"1!="&.Str(a(1))

  For j=2 To n

    For i=1 To maxn

        b(i)=a(i)

    Next i

    s=""

    Call array_sum(j)      ‘该语句用于调用自定义过程

    s=s+Str(j)+"!="

    k=maxn

    Do While a(k)=0

           ③  

    Loop

    For i=k To 1 Step-1

        s=s+Str(a(i))

    Next i

    List1.Addltem s

  Next j

End Sub

以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③

(程序设计题)“三位一体”是高校招生的一种选拔模式,其所依据的成绩是将考生的高考成绩、学考成绩和综合素质测试成绩按比例折算而成的。编写Python程序,实现将考生学考等级折算成相应的分数这一功能。例如,某高校的学考等级与成绩折算如表1所示。若某考生的学考成绩如表2所示,根据上述高校的成绩折算方式,则该考生的折算分数为95分。

表1某高校学考成绩换算表

学业水平考试等级

A

B

C

D

成绩折算(分)

10分

9分

7分

4分

表2某学生学考等级成绩单

考试科目

语文

数学

英语

物理

化学

生物

历史

地理

政治

技术

考试等级

A

A

A

A

A

B

C

A

B

A

程序运行结果如图所示。

根据下面的while语句的运算,计算结果是

s=1

i=1

while i<=5:

    s=s*i

    i=i+1

print(s)

在Python中运行下列程序,输出结果 (    )

for i in range (1,6):

    print(‘*’)

A . ****** B . * * * * * * C . * * * * *  D . *****
程序分析题:阅读程序写结果

s=0

for k in range(1,7,2):

   s =s+k

print (s)

输出s的值是

将以下程序段补充完整。

问题:输入一个正整数n,判断n是否为素数。要判断n是否为素数,最简单的方法是:统计2到n-1之间能整除n的整数个数s,若s大于0,则n不是素数,否则就是素数。根据以上方法,完善以下程序代码。

Dim n, s As Integer

n = Val(InputBox(“n=”))

s=0

For i=2 to

    If n Mod i = 0 then

        s=        ‘统计因数个数

    End If

Next i

IfThen

    Print n &“是素数”

Else

Print n &“不是素数”

End If

LZW编码是一种自适应词典编码,通过建立一个字典,实现字符的编码。假设输入的字符串中仅有小写字母和空格,编码方法如下:

1)初始时,建立一个空字典,把26个小写字母加入字典中。26个小写英文字母编码为1-26,字母“a”的编码为1,字母“b”的编码为2,其它字母的编码依次增加。

2)从字符串第一个位置开始扫描,若遇到空格(空格用“*”表示),则得到一个单词,截取该单词并存入变量中。

3)若该单词在字典中,则取出该单词在字典中的编码值;否则,依次取出该单词中各字母在字典中的编码值,(编码值之间用一个空格分隔),同时产生该单词的编码(编码为字典中的最大编码值加1),加入字典中。

4)继续扫描字符串,截取单词,并按照步骤(3)的方法进行处理,直至整个字符串编码完毕。字符串“abab”LZW编码过程如图所示。

  1. (1) 如果字符串为“ab bb bb”,则其LZW编码为
  2. (2) 请在划线处填入合适的代码。

    Dim pos As Integer, a(1 To 100)As String

    Private Sub Form_Load( )

        '将字母“a”至“z”依次存入数组元素a(1)到a(26)

    End Sub

    Function judge(ss As String) As Integer     '判断字典中是否有ss这个单词

        Dim i As Integer judge = 0

        For i = 27 To pos

            If a(i) =Then judge = i

            Exit For

            End If

        Next i

    End Function

    Private Sub Command1_Click( )

        Dim s As String, i As Integer, j As Integer, k As Integer, ch As String, word As String, result As String, Dim id As Integer, idletter As Integer

        s = Text1.Text pos = 26: i = 1

        Do While i <= Len(s)

            j = i

            Do While Mid(s, j, 1) <> " " j = j + 1

                If j > Len(s) Then Exit Do

            Loop

            word = Mid(s, i, j - i)

            If Len(word) = 1 Then    '单个字母的单词

                result = result + Str(Asc(word) -Asc("a") + 1)

            Else

                id = judge(word)

                If id = 0 Then      '新的单词

                    For k = 1 To Len(word)     '依次处理该单词中的各个字母编码

                        ch = Mid(word, k, 1)

                        

                    Next k

                    pos = pos + 1     '对该单词编码

                    a(pos) = word

                Else         '词典中存在该单词

                    result = result + Str(id) End If

            End If

            If j < Len(s) Then result = result + " *"

           

        Loop

        Text2.Text = result

    End Sub

在数组a中按顺序找出一组升序子序列,可以不连续,但要求长度最长。例如:数组a的值分别为2,11,4,13,5,7。升序子序列分别有[2,11]、[2,4]、[2,11,13]、[2,4,13]、[2,4,5]、[2,4,5,7]、[11,13]、[4,13]、[4,5]、[4,5,7]、[5,7],其中最长升序子序列的数据是2,4,5,7。

算法思路如下:

1)求以a(i)为结尾元素的最长升序子序列时,找到所有序号j(j=1,2……i-1),且a(j)<a(i)。

如果这样的元素存在,且d(j) >= d(i)(d(i)记录i位置的最长升序子序列长度),那么就增加i 位置的最长升序子序列长度,并记录该升序子序列倒数第二个位置。

2)在d 数组中找出最大值,即最长升序子序列长度。

3)例如,2、11、4、13、5、7,d(1)=1,d(2)=2,d(3)=2,d(4)=3,d(5)=3,d(6)=4,所以最长升序子序列长度为4,是以a(6)为结尾元素。

现设计了如下VB 程序,界面如图所示,请回答下列问题:

  1. (1) 观察上图,最长升序子序列的数据是
  2. (2) 请在划线处填入合适的代码。

    Const n = 9

    Dim a(1 To n) As Integer

    Private Sub Form_Load()

        '生成n个[1,10]范围的随机数,存储在a 数组,并显示在列表框List1。代码略

    End Sub

    Private Sub Command1_Click()

        Dim d(1 To n) As Integer      '记录i位置的最长升序子序列长度

        Dim pre(1 To n) As Integer    '记录i结尾的最长升序子序列前一数据的位置

        Dim st As String, i As Integer, k As Integer, maxlen As Integer

        For i = 1 To n

            d(i) = 1

        Next i

        For i = 2 To n

            For j = 1 To i - 1

                If a(j) < a(i) And d(j) >= d(i) Then

                    d(i) =

                    pre(i) = j

                End If

            Next j

        Next i

        maxlen = 0 : k = 0

        For i = 1 To n

            If  Then maxlen = d(i) : k = i

        Next i

        Do While k <> 0

            st = a(k) & "," & st

           

        Loop

        Text1.Text = Mid(st, 1, Len(st) - 1)

    End Sub

有如下程序片段:

S = 0

For i = 2 to 100 step 2

    S = S + i

Next i

Print i

该段程序代码执行完毕后,i的值是(   )

A . 101 B . 102 C . 103 D . 104
回文素数:

⑴素数:指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。例如11,它只能被1和11整数,所以11是素数。

⑵回文数:正读和反读都是一样的数字,例如12321,它的正反都是一样,是回文数字。

编写Python程序,实现如下功能,找出100~n中的所有的回文素数(n为>=100的正整数)。

程序代码如下,请回答下面问题:

  1. (1) 如果n=1000在最后添加print(151 in L),该语句的输出的结果是
  2. (2) 请在横线处填入合适的代码。

    import math

    def prime(n):        # 判断 n 是否是素数

      i=2

      k=int(math.sqrt(n))

      while i<=k:

        if :

          break

        i=i+1

      return i>k

    def rev(n):# 倒转数字

      t=0

      while :

        t=t*10+n%10

        n=n//10

      return t

    n=int(input('请输入整数 n:'))

    L=[]

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

      if :

        if prime(i)==True:

          L=L+[i]

    print('100 到 n 中的回文素数:',L)

水仙花数是指一个三位数,它的每个位上的数字的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(

大数据是当今最热门的领域之一,小王同学利用VB设计了一个模拟大数据应用的程序。有10种商品,数组a存储用户是否购买了各种商品;某个用户购买时,商品两两之间是否一起购买用另一个数组dsj来记录;各数组元素的解释如下表所示。

数组元素

数组元素的含义

a(i)

a(1)到a(10)依次存储1号顾客购买商品1~商品10的记录;

a(11)至a(20)依次存储号2顾客购买商品1~商品10的记录;依次类推。

数组a的某个元素的值为1,则表示某位顾客购买了某种商品,若为0则表示没有购买该种商品。如a(6)=1表示1号顾客购买了商品6,a(6)=0表示未购买。

b(i)

dsj(1)~dsj(9)依次存储商品1与商品2~商品10的关联次数;

dsj(10)~dsj(17)依次存储商品2与商品3~商品10的关联次数:依次类推。

如dsj(5)=2表示商品1与商品6被同时购买过2次;

如dsj(45)=4表示商品9与商品10被同时购买过4次。

数组dsj中,若dsj(45)的值最大,则表示商品9和商品10的关联次数最多。

小王按照上述算法设计了VB程序,统计了20个用户购买10种商品之间的关联性,VB程序如下,部分界面如图所示。

Private Sub Cmd1_Click( )

Dim a(1To200) As Integer       '各个用户原始的购买记录

Dim dsj (1To45) As Integer       '统计商品之间的关联次数

Dim i As Integer, t As Integer, nc As Integer, j As Integer, max As Integer

'数组a读入数据并在列表框分行输出,代码略

For i=1 To 20'20个用户

   t=1

   For j=1 To 9'10个商品,共45种组合

      For k=j+1 To 10

         m=(i-1)*10

        

      If Then dsj(t)=dsj(t)+1

                     

      Next k

   Next j

Next i

max=0

For i=1 To 45

   If               Then

      max=dsj(i)

      maxi=i

   End If

Next i

t=9:nc=1

Do While maxi>t

                 

   t=t-1

   nc=nc+1

Loop

Text1.Text="关联最多的是商品"+Str(nc)+Str(maxi+nc)+":"+Str(max)+"次"

End Sub

  1. (1) 将按钮上的文字“统计”修改为“计算”,可在Form_Load过程中使用              (单选,填字母)语句实现;
    A . Cmd1.Caption=“计算” B . Cmd1_Click=“计算” C . Command1.Text=“计算”
  2. (2) 加框处代码有错,请改正;
  3. (3) 在程序划线处填入合适代码,使程序完整。
S=0

FOR I= 1 TO 100

    IF I MOD 2 =0 THEN S=S+I 

NEXT I

PRINT S

这段程序的功能是(    )

A . 求1——100间的奇数和。 B . 求1——100间的偶数和。 C . 求1——100间的偶数个数。 D . 求1——100间的奇数个数。
“猜数游戏”要求如下:系统自动生成一个100以内随机的正整数,用户有5次猜数机会,如果猜中提示“恭喜你,猜对了!”;提示“偏大”或“偏小”,然后继续猜数。如果5次都未猜中,计算机公布答案,并提示“5次都没有猜中,游戏结束!”。

补全以下程序代码:

import random

num=random.randint(1,100)

n=5

flag=True

while:

    guess=int(input("请输入猜测的数:"))

if guess<num:

        print("偏小")

        n=n-1

elif guess>num:

        print("偏大")

        n=n-1

else:

        print("恭喜你,猜对了!")

        flag=False

        break #跳出当前循环,执行循环后的语句

if flag:

    print("答案是:"+str(num)+"5次都没有猜中,游戏结束!")

请补全程序。

有如下程序段:

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