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

有如下VB程序段:

f(10)=a(10):ans=-100

For i=9 To 1 Step-1

    f(i)=f(i+1)+a(i)

    If f(i) > ans Then ans=f(i)

Next i

数组元素a(1)到a(10)的值依次为“6,-2,4,-8,2,5,0,9,-1,2”,执行该程序段后,变量ans的值为(    )

A . -8 B . 17 C . 18 D . 28
运行下列VB程序,在文本框Text1中输入十进制数22,单击按钮后,在标签Label1输出转换后的五进制数。

Private Sub Command1_Click()

 Dim y As Integer

 Dim s As String, Dim r As Integer

 y = Val(Text1.Text)

 s = “ ”

 Do While y <> 0

Loop

Label1.Caption = s

End Sub

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

①s=Str(r)+s ②r=y Mod 5 ③y = y \5

代码顺序正确的选项是(  )

A . ①②③ B . ③②① C . ②①③ D . ③①②
下列 VB 程序段的功能:生成n个不重复的随机整数,保存在数组a中,并升序排序。f数组各元素的初值置为False,代码略 。

i = 1

Do While 图片_x0020_100005

    t = Int(1 + Rnd * 10)

    If Not f(t) Then

        a(i) = t

        f(t) = True

        For j = 图片_x0020_100006  

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

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

            End If

        Next j

    Else

        图片_x0020_100007

    End If

    i =i + 1

Loop

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

A . ⑴i <= n - 1      ⑵2 To i                ⑶i = i - 1 B . ⑴i <= n          ⑵i To 2 Step -1        ⑶i = i - 1 C . ⑴i <= n - 1       ⑵2 To i               ⑶t = Int(1 + Rnd * 10) D . ⑴i <= n          ⑵i To 2 Step -1        ⑶t = Int(1 + Rnd * 10)
给定n个不同的正整数(小于等于100),将它们分组,使得每组中任意两个数互质(它们的公约数为1)。按照以下算法对n个数进行分组:

n个正整数由文本框Text1输入,依次存储到a数组中,b(1 to 25)中存储100内的素数,c数组存储每一组的数字个数及对应数字,d数组存储每一组内所含的质因子,相同质因子只存储一次,最后分组情况显示在列表框List1中。

c数组初始状态:

组别

第一组

第二组

位置

0

1

2

3

4

5

6

7

8

9

10

11

12

13

0

0

0

0

0

0

0

0

0

0

0

0

0

0

d数组初始状态:

组别

第一组

第二组

位置

1

2

3

4

5

6

25

26

27

28

29

30

50

0

0

0

0

0

0

0

0

0

0

0

0

0

若第一个数据为70,确定分组的过程为:先查找第一组内所含的质因子中是否含有70的质因子,未找到,则c数组中表示第一组数据个数的值加1,并将70添加到c数组的第一组内,同时在d数组第一组中依次添加70所含的各个质因子。

c数组变化情况:

组别

第一组

第二组

位置

0

1

2

3

4

5

6

7

8

9

10

11

12

13

1

70

0

0

0

0

0

0

0

0

0

0

0

0

d数组变化情况:

组别

第一组

第二组

位置

1

2

3

4

5

6

25

26

27

28

29

30

50

2

5

7

0

0

0

0

0

0

0

0

0

0

尝试将第2~n个整数分组。在确定某数分组的过程中,若已有的组内不存在该数所含的质因子,则将其分到第一个符合条件的组;否则,将其分到新生成的组中。

分组完毕后数组存储情况如下表。

c数组:

组别

第一组

第二组

位置

0

1

2

3

4

5

6

7

8

9

10

11

12

13

2

70

99

0

0

0

0

3

25

54

11

0

0

0

d数组:

组别

第一组

第二组

位置

1

2

3

4

5

6

25

26

27

28

29

30

50

2

5

7

3

11

0

0

5

2

3

11

0

0

按照上述要求编写一个VB程序,其运行界面如图所示。

  1. (1) 按照上述算法,若有“35、40、26、18、63、77 ”6个整数,至少分成组(填具体数字)。
  2. (2) 请在划线处填入合适的代码。

    Const n = 6          '数据个数

    Dim a(1 To n) As Integer     '存储原始数据

    Dim b(1 To 25) As Integer    '存储100以内的素数

    Dim c(0 To (n + 1) * n) As Integer   '存储每一组的数字个数及对应数字

    Dim d(1 To 25 * n) As Integer        'd数组存储每一组内含有的质因子

    Private Sub Command1_Click()

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

        Dim k As Integer, m As Integer, p As Integer

        Dim y As Integer, zu As Integer

        Dim st As String

        For t = 1 To n

            k = 1

            i = 1

            Do While d((k - 1) * 25 + i) <> 0

                If a(t) Mod d((k - 1) * 25 + i) = 0 Then

                    

                    i = 0

                End If

                i = i + 1

            Loop

            m = (k - 1) * (n + 1)  '每一组存储数字个数的所在位置

            c(m) = c(m) + 1

            

            For j = 1 To 25

                If a(t) Mod b(j) = 0 Then

                    

                    i = i + 1

                End If

            Next j

        Next t

        p = 0

        Do While c(p) > 0

            st = ""

            For i = 1 To c(p)

                st = st + Str(c(p + i))

            Next i

            zu = p \ (n + 1) + 1

            List1.AddItem "第" + CStr(zu) + "组为:" + st

            'Cstr的功能:将数值型转为字符串型

            p = p + n + 1

            y = y + 1

        Loop

        List1.AddItem "至少分:" + CStr(y) + "组"

    End Sub

    Private Sub Form_Load()

    '读取文本框Text1中的各个数据依次存储到数组a中,存储100以内的素数到数组b中,代码略

    End Sub

如下程序段执行后,i的值和y的值分别是(  )

Dim y as Integer, i as integer

y=0

For i=1 To 10 Step 2

    y=y+1

Next i

A . 10、25 B . 10、36 C . 11、16 D . 11、25
由大写字母组成的长度相同的两个字符串s1和s2,若所含各字母数量相等则可以归为一类。如“ABDAC”与“AABCD”归为一类,与“AABBC”不可以归为一类。实现该功能的VB程序段如下:

Dim s1 As String, s2 As String, a As Integer, i As Integer, b(1 To 26) As Integer    'b数组初值均为0

s1 = Text1.Text: s2 = Text2.Text

For i= 1 To Len(s1)

    a= Asc(Mid(s1, i, 1))-65+ 1

      ⑴  

Next i

For i= 1 To Len(s2)

    a= Asc(Mid(s2, i, 1))-65+ 1

      ⑵  

Next i

For i= 1 To 26

    If   ⑶   Then Exit For

Next i

If   ⑷   Then Label1.Caption = "能归为一类" Else Labl1.Caption= "不能归为一类"

填空处的代码可以由以下部分组成:

①b(a)=b(a)+1  ②b(a)=b(a)-1  ③b(i)<>0  ④b(i)=0  ⑤i<=26  ⑥i>26

代码顺序正确的是(    )

A . ①②③⑤ B . ①②④⑥ C . ②①③⑥ D . ②①④⑤
哥德巴赫在1742年提出了以下猜想:任何一个大于2的偶数都可以写成两个质数之和,请完善代码帮助哥德巴赫验证他的猜想。

import math

def ss(n):

    Flag=True

    i=2

    while i <= int(math.sqrt(n))and Flag:

        if

            Flag = False

       

    return Flag

n=int(input(“输入一个大于2的偶数”))

for i in rang(2,n//2+1):

    if

        print(str(n)+"="+str(i)+"+"+str(n-i))

如果输入“8”则结果显示

有如下VB程序段:

S=""

For i = 1 To 3

    j=i+1:k=0

    Do while j<=10

        if a(j)<a(i) and a(j)>a(k) then k=j

        j=j+1

    Loop

    s=s+str(a(k))

next i

数组元素a(0)到a(10)的值依次为“0,8,18,15,4,6,11,12,2,19,10”执行该程序段运行后,变量s的值是(    )

A . “6 15 12 ” B . “10 19 15” C . “6 12 11” D . “6 12 12”
listque=[] #定义列表listque存储订单

x=0

while(x!=4):             #当x=!4时,执行循环

    print('1. 添加订单')

    print('2. 发货')

    print('3. 查看订单列表')

    print('4. 退出')

    x=int(input("输入你的选择:"))     #输入选择项

    if      ①     

        y=input("输入订单编号:")         #输入订单编号

            ②                 #在列表listque中添加订单号

    elif x==2:

             ③                 #如果订单列表为空

        print("订单列表为空")

    else:

        print("发货单号:"+listque.pop(0))

    elif x==3:

        print("等待发货:",listque)     #查询列表listque中的订单号

    print( )

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

此列表,定义的是(     )列表。(从“空、非空” 里选填); 补充划线1/2/3处的内容。

A . 空;x=1;listque.append(y) ; if len(listque)=0: B . 非空;x==1;listque.append(x) ; if len(listque)==0: C . 空;x==1;listque.append(y) ; if len(listque)==0: D . 非空;x==1;listque.append(y) ; if len(listque)==0
星星设计了10*10的矩阵,如下图所示:

实现此功能的VB程序段如下,已知程序中两处标记①的位置表达式相同,程序中①、②两处表达式为(  )
Dim a(1 To 100) As Sting

For i= 1 To 10

    For j=1 To 10

        If i=j Or i Mod 10=0 Or i Mod 10= 1

        Then

            a(  ①  )="●"

        Else

            a(  ①  )="○"

        EndIf

    Next j

Next i

For i= 1 To 100

    s=s+ a(i)

    If   ②   Then

        List1.Addltem s

    End If

Next i

A . ①(j-1)*10+i                     ②i mod 10=1 B . ①(i-1)*10+ j                    ②i mod 10=1 C . ①(j-1)*10+ i                   ②i mod 10=0 D . ①(i- 1)*10+j                    ②i mod 10=0
有如下VB 程序段:

a(1) = 1: a(2) = 1: b(1) = 1: b(2) = 2

For i = 3 To 5

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

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

Next i

执行该程序段后,数组元素b(5)的值为(    )

A . 4 B . 5 C . 8 D . 12
波波同学一直梦想买彩票中500万大奖,他收集了最近100期“双色球”开奖信息,存储于data. accdb文件中,并使用VB软件编写了“双色球投注建议”程序,程序根据最近100期开奖信息,统计出现概率最低的6个红色球号码和1个蓝色球号码,给出投注建议。如果蓝色球有多个概率最低的号码,则输出多个,红色球不考虑并列概率量低情况。

注:福彩“双色球”玩法;在1-33个红色球影申随机生成6个号码,在1~16个蓝色球号码中随机生成个号码,共计6+1个号码开奖。

程序运行界面如图所示。

  1. (1) 实现上述功能的VB程序如下,请完善画线处的代码。

    Dim red(1 To 600) As Integer        '用于存储100*6红色球信息

    Dim blue(1 To 100) As Integer       '用于存储100*1蓝色球信息

    Private Sub Form_Load()

    '本过程用于从数据库data. accdb中读取最近100期双色球开奖信息

    '将100*6个红色球开奖信息依次存储在数组red()中

    '将100*1个蓝色球开奖信息依次存储在数组blue()中

    '将最近100期开奖信息格式化后显示在列表框List1中

    '本过程代码略

    End Sub

    Private Sub Command1_Click()

        Dim min As Integer

        Dim s As string

        Dim f(1 To 33)As Integer

        '——以下开始处理蓝色球部分——

        For b= 1 To 100

            f(blue(b))= f(blue(b))+1

        Next b

        min= 100

        For i= 1 To 16

            If f(i)< min Then min f(i)

        Next i

        For i=1 To 16

            If f(i)= min then s=

            f(i)=0

        Next i

        List2. Additem"蓝色球重点买人:"十s

        '——以下开始处理红色球部分——

        For r=1 To 600

            

        Next r

       

  2. (2) 在某次红球部分处理时,若数组f中的,f(1)至f(33)的值依次为:

    f(1)-f(11):

    6

    8

    20

    25

    16

    21

    14

    20

    24

    28

    26

    f(12)-f(22):

    1

    30

    8

    1

    10

    10

    33

    28

    32

    20

    6

    f(23)-f(33):

    4

    34

    29

    18

    25

    30

    4

    13

    30

    20

    6

    结合加虚线框处代码的算法,输出的内容是:

    红色球重点买入:(按输出顺序写出6个红球号码)。

有下面一段程序:

a = [9,5,2,3,0,-9,5,0,7,-10]

s,i = 0,0

while a[i] != 0 and i < len(a):

    s += 1

    i += 1

运行该程序后 s 的值为(        )

A . 4 B . 5 C . 8 D . 10
下面代码运行结果是(       )。

a, b=2,1

while a>=b:

    b=a*b

    a=2*a

print(a, b)

A . 4 2 B . 16 64 C . 8 8 D . 2 1
在FOR----NEXT中,步长为正,超过的含义是循环变量的值大于终值 ;步长为负,超过的含义是
num=[0]*10

n=36

s=0

for i in range(n):

  j=9

  num[j]+=1

  while num[j]==2:

    num[j]=0

    j-=1

    num[j]+=1

    for i in range(10):

      s+=num[i]

print(s)

执行此代码后,变量s的值为(    )

A . 2 B . 3 C . 4 D . 5
阅读下列程序,写出运行结果。

def fib(m):n1=1

n2=1

for i in range(3,m +1):

t = n1 + n2

n1 = n2

n2 = t

return t

Print(fib(5))

运行结果是:

下列关于for循环结构的说法错误的是(    )
A . for循环中的in后面的数据集合可以是列表、字符串、元组等数据类型 B . for循环中的数据集合后面的冒号可有可无 C . for循环的同级别语句需要缩进对齐 D . for循环中可以继续嵌套for循环
有如下代码:

s="1p23y4t"

sum=0; t=0

flag=False

for ch in s:

    if "0"<=ch<="9":

        t=t*10+int(ch)

    else:

        if flag:

            sum+=t

        t=0

        flag=not flag

print(sum)

该程序段运行后,最后输出的内容是(   )

A . 9 B . 23 C . 28 D . 34
某手机APP程序为了增加程序热度,采用“签到换积分得奖品”的形式来吸引用户使用。签到积分的规则为:第1天签到得1分,第2天签到得2分,第3天签到得3分,…第7天及7天以上签到得7分;一旦中途漏签,签到积分从1分开始计算。如下图所示,签到获得的总积分为14分。

现利用“0”、“1”记录签到情况,其中“1”表示正常签到,“0”表示断签,输出获得的总积分数。例如,上图输入可以表示为“101111011”,输出结果为 14 分。

实现上述功能的程序如下,请回答下列问题:

  1. (1) 若签到记录为“100111110111”,则获得的总积分为
  2. (2) 根据题意和程序,本题主要使用的算法控制结构为(   )。(单选,填字母)
    A . 顺序结构 B . 分支结构 C . 循环结构
  3. (3) 为实现上述功能,请在划线处填入合适的代码。

    s=input("输入签到情况:")

    x=0

    c=1

    for i in range(len(s)):

      if s[i]=="0":

       

      elif :

        x=x+c

        c=c+1

      else:

        x=x+7

    print(x)