进制和约瑟夫环
1(2020年12月慈溪模拟15)二进制数据在传输过程中可能发生被篡改或者出错的情况,为了能发现出错的位置和数量,可以在每个字节(总共不超过1000个字节)数据后面增加一位二进制校验位来检测。加入二进制校验位后,若该字节中“1”的个数(含校验位)为偶数,则说明该字节信息出现了错误,若为奇数,则说明是正确的。如下表所示。
编写VB程序,功能如下:在文本框Text1输入待检测二进制数据串,单击“开始校验”按钮,在列表框List1中输出出错的数量及位置(所在字节的编号,字节从1开始编号),程序运行界面如图所示。
请回答下列问题:
(1)要使窗体标题文字显示为“信息校验”,则应设置窗体的 (单选:A.Form/B.Caption/C.Text)属性。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
2、(2019新力量联盟16)Base64编码是常见的一种编码方式,规则是把3个字节(24位)的数据按6位1组分成4组,然后将每组数据分别转换为十进制,根据第16题1图将这些十进制数所对应的字符连接,即为Base64码。
以编码字符“Web”为例,字符“Web”对应的ASCII编码分别是87,101,98,分别转换为8位二进制数,按6位二进制数分组后再转换成十进制,查找他们的对应字符,得到“Web”的Base64编码为“V2Vi”。
(1)若某字符串的Base64编码为“QWEw”,则其原文是
(2)小高根据上述描述,设计了一个如下的将n(n是3的整数倍)个ASCII编码字符转换Base64
编码的VB程序,请在划线处填入合适的代码。
3、(2019年11月绍兴一模16)16.对n位二进制数进行编码(n是8的倍数),以8位二进制数为一段,每段插入4位二进制数,构成12位二进制数,依次处理,完成各段数据编码。每段编码方法如下:
插入二进制位:在第1、2、4、8位置上插入4个二进制位r1、r2、r3、r4,初值为0。
把原8位二进制数dl~d8从左往右依次填入剩余位置中,原数据位和插入的二进制位如图a所示:
计算插入数据位的值:把每个位置号转换成4位二进制数,选出形如“***1”(“*”表示一位0或1)的位置号,则统计这些位置号对应数据位中的“1”的个数,若是奇数,则r1为1,否则为0;再选出形如“**1*”的位置号,则统计这些位置号对应数据位中的“1”的个数,若是奇数,则r2为1,否则为0;以此类推……如8位二进制数“10101101”的编码过程如下:
1.插入4个二进制位,初值为0,剩余位置依次填入原数据位,如图b所示。
2.计算插入数据位的值,选出形如“***1”的位置号,即1、3、5、7、9、11,统计这些位置号对应数据位中“1”的个数为2,故rl=0,同理可得:r2=1,r3=0,r4=1,如图c所示。
3.按位置号从小到大依次拼接各数据位得到最后编码“011001011101”。
(1)若原始二进制数据是“01101110”,则插入的数据位r1、r2、r3、r4的最终值依次为:
(填数据,用逗号分隔)
(2)编写VB程序实现对文本框Text1中输入的二进制数进行编码,并在文本框Text2中显示编码结果。代码如下,请在划线处填入合适的代码。
4、(2021衢州高二期末16)高一年级开展“7选3”选科调查,现要求每位学生在预选卡上填写个人信息(班级、学号、姓名)并选涂三门选考科目(少于或多于三门的预选卡作废)。如小王预选组合是“物生技”其三门选考科目填涂情况如第16题图a所示。预选卡回收后,通过读卡机将相关信息读入数据库中,其中选科信息存储规则:按照“政治、历史、地理、物理、化学、生物、技术”顺序存储为一个7位二进制字符串。因此小王的选科信息二进制编号存储为“0001011”。
为了了解选科预选情况,统计选科组合种类及每种组合人数。小王设计并制作了VB程序。运行该程序,单击“读取”按钮,从数据库中读取信息并显示在列表框Listl中;单击“统计”按钮,在列表框List2中显示每种选科组合人数(无人选择的组合不显示)及选科组合种类。程序运行界面如第16题图b所示。
(1)若某个学生“7选3”的预选选科组合为“政史生”,则该选科组合对应的十进制编号为 。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
5、(2020年11月温州一模15)小温编写了一个有关环形数据排序的VB程序,实现如下功能:排序前的原始数据在窗体左边环形显示,单击“排序”按钮Command1后,原始数据中最小元素的位置固定不变,从该位置开始数据按逆时针升序,排序后的数据在右边环形显示。例如,排序前a(1)到a(10)的数据依次为“1,11,19,18,0,16,8,9,17,4”,按顺时针顺序在窗体左边环形显示,则排序后a(1)到a(10)的数据依次为“9,8,4,1,0,19,18,17,16,11”,在窗体右边环形显示。
程序运行界面如图所示。
请回答下列问题。
(1)该环形数据排序的VB程序主要采用 (选填:冒泡排序/选择排序)算法。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
(3)程序中加框处代码有错,请改正。
6、(2020浙江三校15)在文本框Text1中输入n个整数,按“逗号”分隔,编程实现n个数进行循环升序排序。步骤:
①首先找到最小数,保持最小数位置不变,
②接着找出第二小的数,并将它放在最小数的后面位置(若最小数已经在第n个位置,则将该数放在第1个位置),
依次类推,直到所有数据排序成环,并输出在文本框Text2中。程序的运行界如题15图。
(1)程序启动后,窗体(对象名是paixu)的标题显示“循环升序”,可在 (单选,填字母:A.Forml_load()B.Form_load)C.paixu_Load())事件过程中添加语句paixu.caption=”循环升序”。
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码
(3)若在文本框Text1中输入的数据是“9,8,7,6,5,1,2,3,4,10”,文本框Text2中第1个数据是 (加框处的位置)
Private Sub Command1_Click()
Dim n as integer‘变量n存储整数的个数
Dim a(1 To 100)As Integer,b(1 To 100)As Boolean
数组a存储文本框Text1中按“,”分割的整数;
变量pos保存数组a中最小值所对应的位置;代码略。
b(pos)=True
pos=pos+1
If pos=n+1 Then pos=1
For i=1 To n-1
k= ①
For j=1 To n
If ② Then k=j
Nextj
If k < > pos Then
t=a(k):a(k)=a(pos):a(pos)=t
End If
b(pos)=True
pos= ③
Next i
将循环升序后的数据显示在文本框Text2中,代码略
End Sub
7、(绍兴柯桥模拟)对一个二进制数的各位数字重新编排,具体方法如下:每次取连续的8位二进制数,按以下方法进行转换:从第1个位置开始,从1开始数数,数到m时取出该位数字(取出位置的数字不参与下次数数),从下一个位置开始,继续从1开始数数,数到m时取出该位数字(当数到这8位二进制数的第8个位置后回到第1个位置继续数数),重复上述操作,直至这8位二进制数的各个数字被取完。然后,依次把取出的8位数字拼接成新的二进制数。用以上方法把整个二进制数转换完毕。编写一个VB程序,实现功能如下:程序运行时从文本框Text1中读入一个二进制数(长度为8的倍数),从文本框Text2中读入整数m,单击“转换”按钮Command1,对输入的二进制数按上述方法转换后在文本框Text3中显示。程序运行界面如图所示。
(1)运行上述程序,若在文本框Textl中输入“11001100”,Text2中输入“3”,单击“确定”按钮,则文本框Text3中显示的内容是 。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Const n=100
Private Sub Command1_Click0
Dim a(1To 8*n)As Integer,b(1 To 8*n)As Integer
Dim f(1 To 8)As Integer,c(1 To 8)As Integer
Dim m As Integer,s As String,res As String
Dim iAs Integer,j As Integer,p As Integer
s=Textl.Text
m=Val(Text2.Text)
For i=1To8
f(i)= ①
Next i
“以下代码功能:根据整数m确定每一个字节二进制数各位数字的出列顺序
p=0
For i=1 To 7
j=1
Do While j<=m
②
If f(p)=1 Then j=j+1
Loop
f(p)=0
c(i)=p
Next i
For j=1To 8
If f(j)=1Then c(i)=j:Exit For
Next j
For i=1To Len(s)
a(i)=Val(Mid(s,i,1))
Next i
i=1: start=-8
Do While i<=Len(s)
If i Mod 8=1Then ③
b(i)=a(start+c((i-1) Mod 8+1))
i=i+1
Loop
res=""
For i=1To Len(s)
res=res+Chr(Asc("0”)+b(i))
Next i
Text3.Text=res
End Sub
8、(浙江五校联考)小明编写了一个数据加密的VB程序功能如下:在文本框Text1中输入明文,单击“加 密”按钮Command1后在文本框Text2中显示加密后的密文,运行界面如下图所示。
其中加密算法如下:
①将明文中的ASCII码每3个字节为一组(该明文字符串均为ASCII码,且字节数为3的倍数),顺次连接 后得到24位二进制数
②将①中的24位二进制数每8位进行一次翻转操作,比如原来的“0101 0001”变为“1000 1010”
③将②所得24位二进制数逐位取反,比如原来的“1110”变为“0001”
④将③中所得的24位二进制数每6位一组转换为相应的十进制数,即得到对应的密文
⑤将所有密文顺序连接并输出 实现上述功能的VB程序如下,请回答下列问题:
(1)按照上述加密算法进行加密,则“ABC”的密文是
(2)请在划线处填入合适代码:
Dim a(1 To 24) As Integer, k As Integer
Private Sub Command1_Click()
Dim mw As String, ch1,ch2, ch3 As String, s As String
Dim m As Integer, i As Integer, j As Integer
s = ""
mw = Text1.Text ‘mw存储明文字符串
For i = 1 To Len(mw) Step 3
For j = 1 To 24 ‘初始化数组,用于存储三个字节的二进制数
a(j) = 0
Next j
k=1
ch1 = Asc(Mid(mw, i, 1))
ch2 = Asc(Mid(mw, i + 1, 1))
ch3 = Asc(Mid(mw, i + 2, 1))
Convert (ch1)‘调用自定义过程Convert
Convert (ch2)
Convert (ch3)
For j = 1 To 24 ‘逐位取反
①
Next j
For j = 1 To 4 m = 0
For p = ② to j * 6 ‘每6位一组进行权值相加
m = m * 2 + a(p)
Next p
s = s & m ‘&连接运算符,连接数字和字符串时,会将数字自动转换为字符串
Next j
Next i
Text2.Text = s
End Sub
Sub Convert(x As Integer)
Dim i As Integer, j As Integer
Do While x > 0
a(k) = x Mod 2
x = x \ 2
k = k + 1
Loop
j = ③ ‘8位二进制数,高位补“0”
k = k + j
End Sub
9、(2020年余姚模拟16)某8位日期加密授权码生成方法描述如下:
①授权码由9位字符组成,前8位为日期的密文,最后1位为验证码。
②日期的最后1位数字k(若k的值为0,令k=10),加密成26个大写英语字母表中该位置对应的字母。
③将26个大写英文字母向左移k(日期的最后1位数字)个位置,并将移出的k个字母依次连接到最后。例如当k=3时,形成如图所示新的字母排列顺序。
④日期的第1个数字至第7个数字的加密方法:计算第i个位置上的数字与第i+1个位置的数字及位置i三者相加的和,在新的字母表中取出该数字和对应的字母,作为第i个位置上数字加密字符。
⑤计算日期的各个位置上数字之和sum,若和sum的值大于26,则在新的英文字母表中,sum Mod26对应字母转换成小写字母,作为验证码,否则验证码为新的英文字母表中对应字母。
(1)根据上述加密算法,若输人日期为“20000101”,则生成的注册码为
(2)小张根据上述的加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码。
10、(2020年8月Z20联盟16)大写字母分段加密。输入n(n≤50)个大写字母组成的原文字符串,以规模m为一段进行加密。加密方法为:(1)找出每段中最长的连续递增子串长度max;(2)将该段每个字符后移max位进行加密,如果后移后的字母ASCII码值超过90(Asc("Z")=90),则从小写字母“a”(ASCII码值为97)开始表示;(3)规模不足m部分不做处理。
例如:n=10,原文字符串为“ABCXYEFDOK”,m=4时,处理过程如下:
其中,第1段中字母“X”后移4位后超过字母“Z”的ASCII码值,用“b”表示,第2段中字母“Y”后移2位用“a”表示。用VB编写程序,程序运行时,在文本框Text1中输入原文字符串,在文本框Text2中输入每段个数,单击“加密”按钮Command1后,在文本框Text3.中显示加密结果。桂序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)已知加密结果是“RaVJON”,m=4,根据上述加密规则,推得原文是
(2)请在划线处填入合适的代码