试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

浙江省名校协作体2019届高三上学期信息技术9月联考试卷

编写一个VB程序,实现如下功能:在文本框Text1中输入一个偶数n,判断该数在10步之内通过以下计算过程后能否回到初始值。计算步骤如下:

⑴将n乘以3后加1产生一个新的数

⑵对产生的新数循环执行如下操作:新数是偶数时,用新数除以2;新数是奇数时,用新数乘以3后加1

譬如,以2为初始值,则计算过程如下。2→7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2。数字2不能在10步之内回到初始值。

界面如图所示,回答下列问题:

(1)、若要把窗体的标题名称由“Form1”改为“数值猜想”,应改变窗体的属性。
(2)、完成上述功能的程序代码如下,请在划线处填入合适的代码

Private Sub Command1_Click()

Dim n As Integer,t as Integer ,m as Integer ,s as String

t = n * 3 + 1

m = 1

s = ""

Do While

        s = s + Str(t)

        If t Mod 2 = 0 Then

            t = t \ 2

        Else

            t = t * 3 + 1

        End If

        m = m + 1

Loop

If n = t Then

        Label1.Caption = s + Str(n)

Else

        Label1.Caption = "该数10步之内无法实现!"

End If

End Sub

(3)、按照以上VB程序的计算方法,若在文本框Text1中输入4,能否在10步之内回到初始数 。(选填:能/否)
举一反三
【加试题】数据的有损压缩:对多媒体数据进行有损压缩时,通常是以少量数据丢失作为代价的,比如对某8 bit量化的数据压缩为6bit量化,其算法可简单表示为:逐一删除各个字节的后2 bit,将删除除后的6 bit数据首尾相连,然后重新按照8bit一组构建字节,以十六进制显示。

例如,压缩前的原始数据为:

1111 1100 0101 1010 1011 0000  可表示为十六进制:FC 5A B0

  删除每字节的后2 bit:

1111 1100 0101 1010 1011 0000

  首尾相连构建新的数据:

11 1111 0101 1010 1100 表示为十六进制:... F5 AC

 自此,原数据进行了有损压缩。程序运行界面如下所示:

实现上述算法的VB程序如下,但程序中加框处有误,请改正。

Dim a(1 To 100) As Integer

Const code = "0123456789ABCDEF"

Const n = 100

Private Sub FormLoad()‘ 以随机数模拟读取原始数据

  s = ""

  Randomize

  For i = 1 To n

  a(i) = Int(Rnd * 16)

    Text1.Text = Text1.Text +  ①

  Next i

End Sub

Private Sub Command1Click()

For i = 1 To n

   t = t + HtoB(a(i))

Next i

For j = 1 To n * 4 Step 8'每8位一组,取前6个字符

   s = s + Mid(t, j, 6)

Next j

For i = 1 To 4 * (n - 1) Step 4'每4位一组转为十六进制显示

    Text2.Text = Text2.Text + BtoH(Mid(s, i, 4))

Next i

End Sub

Function HtoB(x As Integer) As String'十六进制转为二进制函数

 t = ""

 m = 0

Do While   ②

   r = x Mod 2

   m = m + 1

   t = Trim(r) + t'trim()用于删除前导空格

   x = x \ 2

 Loop

 HtoB = Mid("0000", 1, 4 - m) + t

End Function

Function BtoH(y As String) As String'二进制转为十六进制函数

 t1 = Val(Mid(y, 4, 1))

 t2 = Val(Mid(y, 3, 1))

 t3 = Val(Mid(y, 2, 1))

 t4 = Val(Mid(y, 1, 1))

 s = t1 + t2 * 2 + t3 * 4 + t4 * 8

 BtoH = Mid(code, s + 1, 1)

End Function
①  {#blank#}1{#/blank#}② {#blank#}2{#/blank#}

【根据宁波效实中学2012学年第一学期高一信息技术期末试卷改编】将一个十进制正整数x转换成十六进制数的方法和转换成二进制类似,反复除16取余法,它的算法如下

    第一步:x被除16取余数r1,r1是所求的十六进制数的一个数(第一次就是个位数);

    第二步:r1转换成十六进制数的一个基数并转换成字符,追加到十六进制数S的左边;

    第三步:求出x被除16的商x1;

    第四步:对x1重复(1)、(2)、(3)过程,直至商为0;

    第五步:最后的S即为所求的十六进制数;

下列Visual Basic程序的功能是将一个十进制正整数x转换成十六进制数。界面如图所示,在文本框Text1中输入一个十进制数制,单击“十进制转十六进制按钮”(Command1)后,在文本框Text2中输出转换的结果。 相应的Visual Basic程序如下:

Private Sub Command1_Click()

  Dim s As String, r As Integer

  dec = val(Text1.Text)                  ’dec得到一个十进制整数,例如:255;

  base = 16                               ’base表示16

     s = ""                                ’s变量存放要转换到的十六进制整数;

     Do While dec <> 0

          r =        ①   

          If r >= 10 Then                     ’如果base>10进制,r可能>10;

             s = Chr(65 + (r - 10)) + s   ’Chr (65)="A", 16进制数A对应10;

          Else                            ’Chr(66)="B", 16进制数B对应11;
             s = Str(r) + s      ‘余数r<10时,十进制数和十六进制基数相同;
          End If                   ‘Chr (65 +( r - 10))或str(r)在s左边,实现了反次序输出;
          dec =     ②              
    Loop
   Text2.Text = s
End Sub
返回首页

试题篮