试题

试题 试卷

logo

题型:填空题 题类:常考题 难易度:困难

浙江省名校协作体2018届高三下学期信息技术3月选考试题

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

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

 

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

Private Sub 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

                 '①

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))

                            '②

            If i Mod j = 0 Then Exit For

        Next j

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

    Next i

End Sub

 ② 
举一反三
条形码是按照一定编码规则排列的图形标识符。如图所示,条形码下方数字左边12位代表信息,最右边一位是校验码。校验码产生方法如下:

①把条形码下方数字从右往左依次编序号为“1,2,3,4……”;

②从序号2开始把所有偶数序号位上的数相加求和,并乘以3;

③从序号3开始把所有奇数序号上的数相加求和;

④把第②和第③步结果相加求和;

⑤10减去第④步结果的个位数,得出校验码(如果差值为10,则校验码为0);

如条形码的数字为:977167121601X(X为校验码),则校验码主要产生步骤如下:

1)   (1+6+2+7+1+7)×3=72

2)   0+1+1+6+7+9=24

3)   72+24=96

4)   10-6=4

所以最后校验码X=4,此条形码数字为9771671216014。

小何为此编写了VB程序,用以验证条形码输入正确与否。程序运行时,从文本框Text1获取条形码数字部分,单击按钮Command1后,在标签Label1中输出结果。实现上述功能的VB代码如下,请补全代码。

Private Sub Command1_Click()

Dim i As Integer, b As String, Lb As Integer

Dim s1 As Integer, s2 As Integer, tmp As Integer

Dim c As String

Dim d(1 To 13) As Integer     '存储数据

Dim res As String             '存储结果

  b = Text1.Text              '输入条形码

  Lb = Len(b)

  s1 = 0 : s2 = 0

  flag = True

  res = "输入错误!"

  listt1.Clear

  If  Lb = 13 Then

    For i = 1 To 13

      c = Mid(b, Lb - i + 1, 1)

      If c >= "0" And c <= "9" Then

      {#blank#}1{#/blank#}          '输入转换

      Else

        flag = False : Exit For

      End If

    Next i

    If flag Then

      For i = 2 To Lb Step 2

        s1 =  s1 + d(i)                 '参数计算1

        s2 =  {#blank#}2{#/blank#}       '参数计算2    

Next i

tmp = s1 * 3 + s2

If  {#blank#}3{#/blank#} Then res = "输入正确!" 

    End If

  End If

  Label1.Caption = res

End Sub

在文本框Text1中输入待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),输入后单击加密按钮,在文本框Text2中产生密文。加密方式如下:

①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);

②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;

③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;

⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;

⑥在文本框Text2中输出sc。

例如:

①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);

②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;

③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;

⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;

⑥输出sc。

注:(asc(“0”)=48,asc(“A”)=65,asc(“a”)=97)

Private Sub command1_Click()

    Dim a(1 To 961) As Integer

    Dim sr, sc As String

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

    Dim b(1 To 961) As Integer

    Randomize

    k = Int(Rnd * 4 + 3)

    sr = text1.Text

    For i = 1 To 961

        a(i) = -1

    Next i

    a(961) = k + 64

    t = 960 / k

    For i = 1 To Len(sr)

        m = i Mod k - 1

        n = i \ k + 1

        If i Mod k = 0 then n = n - 1: m = m + k

           ①     = 127 - Asc(Mid(sr, i, 1))      ‘将密文存储到数组a中

    Next i

    For i = 1 To Len(sr) + 1

        j = j + 1

        Do While a(j) = -1

            j = j + 1

        Loop

        b(Len(sr) + 2 - i) = a(j)      ‘将有密文值的a数组元素存储到数组b中

    Next i

    For i = 1 To Len(sr) + 1

        sc =   ②         ‘连接密文并保存到sc中

    Next i

    text2.Text = sc

End Sub

Function space(x As Integer) As String

    For i = 1 To    ③  

        space = space & "0"

    Next i

End Function

返回首页

试题篮