2.3 周而复始的循环 知识点题库

小丁想买几张6+1彩票,选号时,他希望前4位用自己的生日:11月8日,即1108,特别号码他选了买彩票日子的个位数5,并且他希望前六个数字组成的数能被他的幸运数字9整除。他的好朋友小杰帮他设计了一个VB程序,可以提供一份符合这些要求的号码清单供他挑选。相应的界面如图1所示。阅读程序并完成后面的问题。

图1

 

  1. (1) 设计应用程序界面时,为添加a所指向的对象,应使用2图所示的“控件工具箱”中的 (填写相应编号);在图3所示的“属性窗口”中,将 属性值设置为“开始”,可使图2中b所指向的对象显示“开始”。
  2. (2) 请根据题意将下列程序补充完整。

    Private Sub Command1_Click()

    Dim i as integer, j as integer, c As Integer

    Dim n As Long

    c = 0

    For i = 0 To 99

          n = 110800 + i

                  If        ①         Then

              List1.AddItem Str(n) + " " + "5"

                    ②     

         End If

    Next i

    Label2.Caption = "满足条件的数有:" + Str(c) + "组"

    End Sub
         ②

【加试题】德国数学家哥德巴赫曾猜测:任何大于6的素数都可以分解成两个素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如:10=3+7,10=5+5,即10可以分解成两种不同的素数对的和。

小敏编写了一个VB程序,用来求一个偶数(6到100之间)可能存在多少这样是素数岁(注:A+B与B+A认为是相同素数对,不重复统计),并把这些结果输出到一个列表框中,通过逻辑推理,小敏发现这些素数对都是奇数,所以她只需要验证奇数的素数对即可,运行界面如图所示,程序代码如下。但加框处代码有错误,请改正。

Dim IsPrime(100)As B00lean  ‘用来存储是否素数,True为素数,False为非素数

privatw Suh Command1_Click()

Dim x As Integer,y As Integer,i As Integer,num As Integer

Call Init              ‘调用Init函数

x=Val(Text1.Text)

y=x\2

num==0

For i==3 To y Step 2

If  Then                  ‘①

    num=num+1

    List1.AddItem Str(x)+“=”+Str(i)+“+”+Str(x-i)

End If

 Next i

Label2.Caption=“偶数”+Str(x)+“共有”+Str(num)+“个素数对。”

End Sub

Sub Init()           ‘初始化IsPrime数组的值

  Dim i As Integer.j As Integer,X As Integer

  For i=3 To 100 Step 2

    X=Int(Sqr(i))

    For  Step 2                ‘②

    If i Mod j=0 Then Exit For

    Next j

    If i>x Then IsPrime(i)-True Else IsPrime(i)=False

  Next i

End Sub

①处加框代码应该为

②处加框代码应该为

下列VB程序运行时,在文本框Text1中输入字符串“while”,在文本框Text2和Text3中分别输入2和5,单击命令按钮Command1后,在文本框Text4中显示的内容是

Private   Sub  Command1_click ( )

Dim  n  As  Integer , m  As  Integer  , k  As  Integer

n  = Len ( Text1.Text )

m  = Val ( Text2.Text )

k  = Val ( Text3.Text )

If  m + k -1 > n   Then

Text4.Text = Mid ( Text1.Text , 1 , m – 1 )

      Else

       Text4.Text = Mid ( Text1.Text , 1 , m–1 ) + Mid ( Text1.Text , m+k , n–m–k +1 )

      End  If

End  Sub

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

For i = 1 To 10             ‘i控制*的行数

    For j = 1 To i            ‘j控制每行*的个数

        Print "*";              ‘输出*

    Next j

Print                      ‘输出换行

Next i

运行结果是:(    )

A . B . C . D .
统计不同单词个数:在Text1中输入一行单词,单词和单词之间用1个空格或标点符号隔开,单击“统计”按钮,在Text2中输出单词的个数,单词区分大小写,句子以符号结尾,程序运行界面如下图所示,部分程序代码如下:

k=0:s = Text1.Text For i = 0 To Len(s)-1

     ①  

  If ch >= "a" And ch <= "z" Or ch >= "A" And ch <= "Z" Then

    word = word + ch

  Else

    For j = 1 To k

      If     ②     Then Exit For

    Next j

    If      ③    Then

      k = k + 1

      a(k) = word

    End If

    word = ""

  End If

Next i

Text2.text=str(k)

则①②③处的代码为(   )

A . ①ch = Mid(s, i, 1) ②a(i) = word            ③ j <= k B . ①ch = Mid(s, i, 1) ②a(j) = word            ③ j <= k C . ①ch = Mid(s, i+1, 1) ②a(i) = word             ③ j > k D . ①ch = Mid(s, i+1, 1) ②a(j) = word             ③ j > k
编写VB程序,实现如下功能:单击对象“生成”,随机生成n*n(n<10)个不重复的随机二位整数,并以n行n列矩阵的形式显示在列表框List1中,单击“排序”按钮,将矩阵中每一行中的数据按照奇数在前,偶数在后,奇数偶数分别升序排序的方式进行排序,并将排序后的结果显示在List2中,程序运行界面如下图所示。

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

  1. (1) 在运行界面中,具有 Caption 属性的对象有个。(填数字)
  2. (2) 请在下划线处填上合适的代码。

    Const n = 6

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

    Dim a(1 To n * n) As Integer
    Private Sub Command1_Click()
    For i = 1 To n * n

    Randomize

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

      For j = 1 To i - 1

        If a(j) = a(i) Then

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

          

        End If

      Next j

      s = s + Str(a(i))

      IfThen

        List1.AddItem s

        s = ""

      End If

      Next i

    End Sub

    Private Sub Command2_Click()

      For i = 1 To n * n

        k = i

        For j = i + 1 To

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

          ElseIf a(k) Mod 2 = 0 and a(j) Mod 2 = 1 Then k = j

          End If

        Next j

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

      Next i

    End Sub

    ‘将有序的数据输出在 List2 中,代码略

  3. (3) 程序加框处代码有误,请改正。
编写Python程序进行成绩分析,学号为1~ 10号同学的信息技术学科成绩依次存储在列表xx中,部分程序代码如下,请回答下列问题:

xx=[35,29,28,42,21,38,17,44,18,19]

sum=0

for i in           

sum=sum+i

          

print("信息学科平均分为:"+str(ave))

  1. (1) 程序中划线处应填入的代码是什么?
  2. (2) 学号为1~ 10号同学的通用技术学科成绩依次存储在列表ty中,若要实现统计技术学科分数(技术学科分数为信息技术与通用技术两学科分数之和)大于等于80分的人数,则程序中划线处应填代码是什么?

    xx=[35,29,28,42,21 ,38,17,44,18,19]

    ty=[29,31,26,38,40,41,26,41,21,33]

    c=0

    for i in :

         if :

         c=c+1

    print("技术学科分数大于等于80分的学生有:"str(c)+"个"

数学中阶乘是用n!来表示,同时定义了n!=n*(n-1)!,例如:5的阶乘可以表示为5!=5*4*3*2*1。下列Python程序是通过for循环求解一个正整数的阶乘。

图片_x0020_100007

图片_x0020_100008

  1. (1) 以上程序第4行横线处应该填入:
  2. (2) 以上程序中变量a的数据类型是:
  3. (3) 运行后的结果是4!=24,则for循环中第4行的语句共执行了次。
某加密程序的Python程序段如下:

def encrypt(code,key):

    code_ new = " "

    for s in code:

        s1= 97 +((ord(s)-97)+key) % 26

        code_ new + = chr(s1)

    return code_ new

c = input('code=')

b = encrypt(c, 3)

print(b)

  1. (1) 函数encrypt中所用的加密算法是
  2. (2) 如果从键盘输入的字符串c为“student”,那么输出的字符串为
  3. (3) 你认为该程序段存在哪些不足之处?该如何改进?
小李编写了一个程序,用以实现下列功能:在文本框Text1中一个十进制数,在文本框Text2中输入需转换数的进制(小于等于16),点击转换按钮,在文本框Text3中输出转换后的数字;点击“退出”按钮,关闭程序。程序运行界面如下图所示:

  1. (1) 根据题目意思,应该在编辑界面将对象“command2”的属性改为“退出”。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim x As Long

        Dim y As Integer

        x = Val(Text1.Text)

        y =

        Text3.Text =

    End Sub

    Function trans(n As Long, b As Integer) As String

        Dim hex As String

        hex = "0123456789ABCDEF"

        Do while n<>0

            r = n Mod b

            n = n \ b

            trans = + trans

        Loop

    End Function

    Private Sub Command2_Click()

    End Sub

有如下VB程序段:

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

conn.ConnectionString="provider=Microsoft.ACE.OLEDB.12.0;data sourc="

+App.Path+"\socre.accdb"

Conn.Open

Set rs.ActiveConnection=conn

Rs. Open"Selec*from cj"

n=1

Do While Not rs.EOF

Score(n)=rs.fields("成绩"):Name(n)=rs.fields("姓名")

n=n+1:rs.MoveNext

Loop

下列说法中不正确的是(   )

A . 定义的ADO的Connection对象实例名称是“conn” B . 连接的数据库文件名是“\socre.accdb” C . 查询的数据表名是“cj” D . 该程序段运行后,可知所查询的数据表共有n-1条记录
编写程序,实现从键盘输入数据,数据前三位的ASCII值加2,从第四位开始ASCII值加3.
有如下VB程序段:

Dims As String, c As String, st As String

Dim n As Integer, i As Integer

s ="20zj20sx7":n=0:st=""

For i=1 To Len(s)

    c=Mid(s,i,1)

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

        st=Chr(Asc("a") *2+25-Asc(c))+st

    Else

        n=n*10+ Val(c)

    End If

Next i

st =st+str(n)

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

A . chqa 20207 B . cgpz 47 C . zpgc 20207 D . zjsx 47
“百鸡百钱”问题是一个有名的数学问题,出自《张丘建算经》。其内容是:公鸡5文钱1只,母鸡3文钱1只,小鸡3只1文钱,用100文钱买100只鸡,其中公鸡、母鸡和小鸡都必须要有,问公鸡、母鸡和小鸡各多少只?

打开文件“考生文件夹\644\百鸡百钱.py”,完善程序实现以下功能并保存。

⑴请不要更改源程序的结构,删除原题里的①、②、③。填写正确的代码,使程序完善。

⑵运行程序,运行结果如图所示。

# 请不要更改源程序的结构,删除原题里的①、②、③。填写正确的代码,使程序完善

money=100                #一共100文钱

num=100                  #一共100只鸡

cock_price=5             #公鸡价格5文

hen_price=3              #母鸡价格3文

threechick_price=1       #3只小鸡1文

for cock_num in range(1,money//cock_price+1):          #公鸡只数可能为1-20

    for hen_num in range(1, ①):           #母鸡只数可能为1-33

        for chick_num in range(1, ②):       #(3小鸡)只数可能为1-100

            money1=cock_num*cock_price+hen_num*hen_price+chick_num*threechick_price

            num1=cock_num+hen_num+chick_num*3

            if money1==money and num1==num:

                print (cock_num,hen_num,③)             #(③小鸡数)

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

在树形结构中,没有的是(     )?
A . 根的父节点 B . 父节点 C . D . 子树
用VB编写的英文单词字频统计程序如图所示,在文本框Text1中输入文章,单击“统计”按钮Command1,在列表框List1输出单词与频次,在标签Label2中输出频次最高的单词,如频次最高的单词有多个,则输出时用逗号分隔。算法如下:

1)将文本框Text1中的文章保存到字符串变量s中。

2)从左往右扫描字符串s,用字符串word存储文章中依次出现的单词,将新出现的单词自动加入单词队列dic(i)中,单词出现的频次记录到对应的num(i)中。

如下方法扫描:

①从左往右扫描,当扫描到第i个字符时,如果是字母,继续扫描,否则,跳转到②,直至扫描结束;

②将b到i-1组成一个单词word,查询单词字典dic判断是否存在,如果不存在,将新单词插入单词字字典尾部dic(k),并且记录单词频次num(k)为1,如果dic字典中存在单词word,那么该单词对应频次增加1,再跳转到①。

  1. (1) 在列表框List1中依次输出单词与频次,在标签Label2中输出频次最高的单词。实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim dic(1 To 10000) As String    '存储自建单词字典

        Dim num(1 To 10000) As Integer    '存储单词出现的频率

        Dim word As String, c As String, s As String, slen As Integer

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

        Dim nummax As Integer     '记录最高的单词频率

        Dim result As String     '存储出现频率最高的单词串

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

        j = 0    '存储每个单词的长度

        k = 1    'k-1 为当前单词字典长度

        nummax = 0

        For i = 1 To 10000    '初始化单词字典频次

            num(i) = 0

        Next i

        i = 1

        Do While i <= slen

            

            If c >= "a" And c <= "z" Or c >= "A" And c <= "Z" Then j = j + 1

            Else

                If j <> 0 Then

                    word = LCase(Mid(s, i - j, j))    'LCase()函数功能:单词统一为小写

                    di = 1

                Do While word <> dic(di) And di < k

                    di = di + 1

                Loop

                If di = k Then    '单词字典插入新单词

                    dic(k) = word

                    num(k) = 1

                     

                Else

                     

                End If

                '单词在单词字典中已存在,对应频次加1

                If num(di) > nummax Then nummax = num(di)

                j = 0

                End If

            End If

            i = i + 1

        Loop

        result = ""

        For j = 1 To k - 1

            List1.AddItem dic(j) + "" + Str(num(j))

            If  Then

                If result = "" Then

                    result = result + dic(j) Else

                    result = result + "," + dic(j)    '如出现频率最高的单词有多个,则用逗号分隔

                End If

            End If

        Next j

    Label2.Caption = "出现频率最高的单词是:" + result

    End Sub

  2. (2) 根据本题算法如图所示,若在Text1中将文章最后一行“so you must know how to use it.” 改为“so you must know how to use it3.”,单词统计结果(选填:会/不会)产生变化。

有如下程序段

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

i =2:s=""; n= 100

Do While i< = n

    If  Then s =s + Str(i)

    i=i+1

Loop

用下列表达式替换方框处表达式后,不能实现原程序功能的是(    )

A . iMod10<1 B . i/10=int(i/10) C . i/10=i\10 D . imod2=0orimod5=0
小张收集了近阶段要学习的英文单词,存储为“data.txt”文件,格式如图所示。

处理“data.txt”文件中英文单词的 Python 程序段如下:

file=“data.txt”

n=0

for word in open(file): #打开文件准备读

    if word[0:1]=='c': #word每次读到第一行信息,word[0:1]则是当前行字符的第1个字符

        n=n+1

        print(n)

运行该程序段后,输出的值为(   )

A . 1 B . 2 C . 3 D . 5
有如下Python程序段

import random

s='abcdefghijklmnopq'

for i in range(4):

  k=random.randint(0,4)+random.randint(0,1)*10

  print(s[k],end='')

执行该程序后,输出的结果不可能是( )

A . ddaa B . eaeo C . dfam D . nemc
运行如下程序,输出结果为(    )

s=['apple','banana','peach']

for i in range(3):

  print(s[i%2],end='')

A . apple banana peach apple B . apple banana apple banana C . apple banana peach D . apple banana apple