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

我国居民身份证号是由18位字符组成,其中前17位是数字,第18位是校验位(校验位字符在“0”~“9”或“X”中选取)。由前17位数字经过一定的规则计算得到校验值,在查验居民身份证号有效性时,如果校验位中的字符与计算所得校验值相等则身份证号有效,否则无效。

校验值计算规则如下:

第一步:将身份证号前17位数字分别乘以不同的系数后相加,对应系数如下表所示。

位数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

系数

7

9

10

5

8

4

2

1

6

3

7

9

10

5

8

4

2

第二步:将第一步的计算结果除以 11,得到余数。 第三步:根据第二步的计算结果从下表获取对应的校验值。

余数

0

1

2

3

4

5

6

7

8

9

10

校验值

1

0

X

9

8

7

6

5

4

3

2

例如:某身份证号为 34052419800101001X。要计算此身份证的校验值步骤如下:第一步:计算 3*7+4*9+0*10+5*5+……+1*2=189

第二步:189除以11得到余数为2

第三步:由余数2获取校验值X。

根据以上规则小王编写了一个验证身份证号是否有效的VB程序,功能如下:在文本框Text1中输入身份证号,单击“验证”按钮Command1后,在列表框List1中显示验证结果。程序运行界面如图1所示。

  1. (1) 设计程序界面时,应使用图2中的(填写相应编号)添加列表框对象 List1。

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

    Private Sub Command1_Click()

    Dim i As Integer, a As Integer, b As Integer, sum As Integer, pos As Integer

    Dim idCode As String, result As String

    Const xs = "0709100508040201060307091005080402"    '存储前17位每位系数

    Const checkCodeStr = "10X98765432"    '存储余数对应的检验值

    sum = 0

    For i = 1 To 17 Step 1

        a = Val(Mid(idCode, i, 1))

        b =

        sum = sum + a * b

    Next i

        pos =

    checkCode = Mid(checkCodeStr, pos, 1)

        If checkCode = Mid(idCode, 18, 1) Then

            result = "有效"

        Else

            result = "无效"

        End if

    List1.AddItem (idCode & "    " & result)

    End Sub

  3. (3) 程序中加框处代码有误,应修改为
VB中工程文件的扩展名为(  )
A . vbp B . frm C . .bas D . .vbw
有如下程序:

Private Sub Command1_Click()

  Dim a(5) as Integer

  Dim n as Integer, i as Integer

  n=Val(Text1.Text)

  i=0

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

  For i=3 To n

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

  Next i

  Label1.Caption=a(i)

End Sub

若在Text1中输入5,则点击按钮后的运行结果为(    )

A . Label11中输出5 B . Label1中输出10 C . 报“下标越界”错误 D . Label11中无内容
下列VB程序段实现求双重数列0,2,1,4,1,6,2,8,3,10,5,12,8,……前n项中的奇数项和。

Dim a(1 To 100)As Integer

n=Val(Text1.Text)

a(1)=0:a(3)=1

s=1

Next i

Text2.Text=Str(s)

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

①a(i)=a(i-2)+a(i-4)
②s=s+a(i)

③For i=5 To n Step 2

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

A . ①②③ B . ③②①  C . ②①③ D . ③①②
树的递归定义如下:树是由n个节点组成的集合。若n,则称为。任何一个非空树均满足以下二个条件:(1)仅有一个。(2)当n>0时,其余节点可分为m(m>=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 . 5 B . 8 C . 12 D . 15
数组a中存储的是左右交替上升的n个正整数,如下表所示:

a(1)

a(2)

a(3)

a(n-2)

a(n-1)

a(n)

3

25

38

55

31

12

依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有误,请改正。

Private Sub Command1_Click( )

  Const n=6

  Dim a(1 To n)As Integer,flag As Boolean

  Dim i As Integer, j As Integer, m As Integer, key As Integer

  ‘读取一组正整数,按上述规则存入数组a中,代码略

  key=Val(Text1.Text)

  i=1

  j=(n+1)\2

  flag=False

  Do While  And Not flag    ‘①

      m=(i+j)\2

      If key=a(m)then

          flag=True

      Elself key <a(m)then

          j=m-1

      Else

          i=m+1

      End If

  Loop

  If Not flag And j>0 Then

                          ‘②

      If key=a(m)Then flag=True

  End If

  If flag Then

      Text2.Text=Str(m)

  Else

      Text2.Text= "找不到"

  End If

End Sub

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

某VB程序界面如图所示,功能为:在文本框Text1中输入字符串,单击按钮Comand1后,依次输出该字符串中每个字符及其相应的ASCII码,代码如下所示:

Private Sub Command1_ Click ()

    Dim i As Integer

    Dim s As String, s2 As String

    s =Text1. Text

    For i=1ToLen(s)

        s2 = Mid(s,i,1)

       List1.AddItem s2 & ":”& Str (Asc (s2))

    Next i

End Sub

则程序界面上用于输出的控件的图标为(    )

A . B . C . D .
小金同学学完了进制转换后,对课后的不同进制的加减法很是头疼,爱动脑筋的小金突发奇想,能不能用python程序来完成这些作业呢?请帮小金完成代码编程.

def convert(s):

    m=0

    le=len(s)

    key=s[le-1]

    if key=="B":

        n=2

    elif key=="D":

            ①   

    else:

        n=16

    i=0

    while i<=le-2:

        c=s[le-1-i]

        if c>="0"and c<="9":

            a=ord(c)-ord("0")

        elif c>="A"and c<="F":

            a=ord(c)-ord("A")+10

           ②    

        i+=1

    return m

s=input("请输入算式")

result=0;suanfu1="";suanfu2="";s1=""

for i in range(len(s)):

    c=s[i]

    if c=="+" or c=="-" or c=="=":

            ③  

        suanfu1=suanfu2

        suanfu2=c

        if suanfu1=="":

            result=t

        if suanfu1=="+":

            result=result+t

        if suanfu1=="-":

            result=result-t

        s1=""

    else:

        s1=s1+c

print("计算结果为"+str(result)+"D")

  1. (1) 将程序横线处补充完整

     ② ③ 

  2. (2) 如输入“1110B+10D-30H=”则输出结果为
网店接受了大量的订单,如何安排发货呢?实际上,网店在处理订单时,一般采取“先下单,先发货”的原则,阅读下面的Python程序,下列选择中正确的是(      )

listque=[]               #定义列表listque存储订单

x=0

while(x!=4):

    print('1. 添加订单')

    print('2. 发货')

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

    print('4. 退出')

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

    if x==1:

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

        listque.append(y)

    elif x==2:

        if len(listque)==0:

            print("订单列表为空")

        else:

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

    elif x==3:

        print("等待发货:",listque)

    print( )

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

A . listque.append(y)增加订单编号,listque.pop(0)出货,删除订单编号 B . listque.append(y)增加订单编号,listque.pop()出货,删除订单编号 C . 此程序的数据结构是先进先出的栈 D . 如此程序的数据结构是先进先出的“队列”,可以用listque.insert(y)代替listque.append(y)插入添加订单
有如下程序段:

m = Text1.Text

For i= 1 To Len(m)

    c= Mid(m,i, 1)

    If c>= "0" And c<= "9" And i Mod 2 = 0 Then k=1 Else k= 2

    a(k)= a(k)+ 1

Next i

数组a各元素的初始值都为0,文本框Text1上输入内容为“9+ ILM2019IT”(不包含双引号)。该程序段运行后,a(2)的值为(     )

A . 6 B . 2 C . 9 D . 5
有如下VB程序段:

Dim a(1 To 6) As Integer

Sum =0

For i= 1 To 6

    For j = i+1 To 6

        If j Mod i =0 Then a(j)=1 – a(j)

    Next j

Next i

For i=1 To 6

    Sum Sum+ Str(a(i))

Next i

Text1. Text = Str(Sum)

该程序段运行后,文本框Text1中显示的内容是(    )

A . 3 B . 4 C . 5 D . 6
随机生成正整数数组a,并将数组中各元素以金字塔显示,要求对金字塔每层中的数据排序处理,奇数行升序排列,偶数行降序排列,效果见下图。请为划线处选择合适的代码。(    )

 

Dim a(1 To 15) As Integer, num As Integer, s As String

'生成数组a,a(1)=73,a(2)=58, a(3)=62, a(4)=36…代码略

Private Sub Command1_Click()’对数组进行排序

    num = 5: k = 1: f = 1

    For i = 1 To num

        k = k + i

        For m = k - i To  ①         

            For n = k - i To 2 * k - 2 - i - m

                If     ②     Then t = a(n): a(n) = a(n + 1): a(n + 1) = t

            Next n

        Next m

        f = f * (-1)

    Next i

    '将处理后的数组,以金字塔形显示,代码略

End Sub

A . k-1   f * a(n) < f * a(n + 1) B . k-1   f * a(n) > f * a(n + 1) C . k-2   f * a(n) > f * a(n + 1) D . k-2   f * a(n) < f * a(n + 1)
有VB程序段如下:

s = "United by Emotion": s1 = "”

For i=1 To Len(s) Step 4

    c = Mid(s, i,1)

    If Asc(c) >= Asc("a") Then

        c = Chr(Asc(c) - Asc("a") + Asc("A"))

        s1=c+s1

    End If

Next i

程序运行后,s1的值是(     )

A . "UEYON" B . "NOYE" C . "EYON" D . "UEEI"
现有一个只包含字符"A"、"B"的字符串s,并且两类字符的总数量刚好相等。将其尽可能多地分割成多段,使得每一段中都包含相同数量的"A"、"B",输出每一段的范围。例如,当s="ABAABABBAB"时,根据要求最多可以分割成3段,分别为[1,2],[3,8],[9,10]。如下VB程序段实现该功能。

s="ABAABABBAB"

x=0: pos=1

For i= 1 To Len(s)

    If Mid(s, i,1)="A" Then x=x+1

    If  Then

        List1.AddItem Str(pos) + ":" + Str(i)

       

    End If

Next i

上述程序段中方框处的可选语句为:

①i-pos=x    ②i-x=x    ③pos=i    ④pos=i+1

则(1)(2)处的语句依次可为(    )

A . ①③ B . ①④ C . ②③ D . ②④
大数据是当今最热门的领域之一,小王同学利用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) 在程序划线处填入合适代码,使程序完整。
下述vb程序段用以实现:在数组a的指定位置k (1-n范围)插入数据m。

i=n+1

Do While i>k

      ① 

      ② 

Loop

  ③ 

横线处的语句由以下三部分组成

①a(i)=m

②i=i-1

③a(i) = a(i-1)

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

A . ①②③ B . ②③① C . ②①③ D . ③②①
有如下程序段:

import random

a = [0] * 6

for i in range(0,6):  

    a[i] = random.randint(1,5) * 2 + 1

    i = 0

    while i < 5:

        if a[i] > a[i+1]:

            a[i],a[i+1] = a[i+1],a[i]

        else:

            a[i] += 1

            i += 1

print(a)

执行以上程序后,列表变量a可能的是 (    )

A . [1, 6, 10, 10, 10, 9] B . [3, 8, 7, 13, 3, 9] C . [5, 10, 7, 7, 12, 11] D . [5, 10, 10, 7, 10, 8]
若要使语句s=s+i执行6次,则程序画线处的语句为(    )

s=1

for i in_______:

  s+=i

A . range(1,6) B . range(10,5,-1) C . range(6) D . range(1,9,2)
有如下 Python 程序段:

s=”我爱 13aPP14LE!”

ans=res=""

for x in s:

  if "a"<=x<="z":

    ans=ans+chr(ord(x)-32)

    if "A"<=x<="Z":

      ans=ans+chr(ord(x)+32)

      if "0"<=x<="9":

        res=res+x t=ans+res

print(t)

A . 我爱 13aPP14LE B . Apple1314 C . 我爱 Apple1314 D . aPPLE1314