相关试卷

  • 1、编写一个VB程序,将一个长度为n的有序序列a(1)、a(2)、……a(n),以整数t(1≤t≤n)将该有序序列划分为两段,并将序列a的前t个数与后n-t个数对调,且保持这两段(t个数和n-t个数)之间的相对位置不变(即t个数和n-t个数各自有序)。例如,长度为6的有序序列38、42、59、61、69、78,当t=2时重排结果为59、61、69、78、38、42。程序运行时产生n个整数存储在数组a中,在文本框Text1中输入t,单击“对调”按钮Command1,在列表框List2输出t个数与n-t个数对调后的数字序列。为了实现上述功能,请在划线处填入合适的代码。

    Const n=10

    Dim a(1 To 10) As Integer

    Private Sub Form_Load()

        '生成n个有序数,显示在List1中,代码略

    End Sub

    Private Sub Command1_Click()

        Dim t As Integer,i As Integer,j As Integer,temp As Integer

          

        For i=t+1 To n

            temp=a(i)

            For j=i To i+1-t Step-1

                  

            Next j

            a(j)=

        Next i

        For i=1 To n

           List2.AddItem Str(a(i))

        Next i

    End Sub

  • 2、利用VB程序将两组成绩数据合并为一组并按成绩从高到低排列输出。成绩相同时,第一批学生优先输出。实现上述功能的VB代码如下,但加框处代码有错,请改正:

    Dim xm(1 to 1000) as string        '存储学生姓名

    Dim cj(1 to 1000) as integer        '存储学生成绩

    Private Sub Form_Load()        '该处具体代码省略

        '从数据库读取两批学生数据第1批学生的人数rs1,按成绩从高到低的顺序将成绩存入cj(1)、cj(2)…cj(rs1)中,姓名存入xm(1)、xm(2)…xm(rs1)中,第2批人数rs2,按成绩从高到低的顺序将成绩存入cj(rs1+1)、cj(rs1+2)…cj(rs1+rs2)中,姓名存入xm(rs1+1)、xm(rs1+2)…xm(rs1+rs2)中

    End Sub

    Private Sub Command1_Click()

        i=1

        j=rs1+1

        '以下程序开始按成绩高低逐个输出,每次输出前后两段中,尚未处理的学生中成绩最高的n=1    '①

        Do While i<=rs1 And j<=rs1+rs2    '两段都有未输出的情况,输出两段中最大值

            n=n+1

            If cj(i)>=cj(j) Then

                k=i:i=i+1

            Else

                k=j: j=j+1

            End If

            List1.AddItem(″第″+Str(n)+″名″+xm(k)+″成绩:″+Str(cj(k)))

        Loop

        Do While i<=rs1     '剩下第一段还有未输出的,逐个输出

            n=n+1

            List1.AddItem(″第″+Str(n)+″名″+xm(i)+″成绩:″+Str(cj(i)))

            i=i+1

        Loop

        Do While j<=rs2     '②若第二段还有未输出的,逐个输出

            n=n+1

            List1.AddItem(″第″+Str(n)+″名″+xm(j)+″成绩:″+Str(cj(j)))

            j=j+1

        Loop

    End Sub
      ②

  • 3、n个人排成一个圆圈,然后把这n个人按逆时针方向分别编号为1、2、…、n。从编号为1的人开始按逆时针计数,当某人计数为m的倍数时,该人出圈;如此循环下去,直到圈中只有一个人留下。

    现用VB6制作一个模拟报数出列的程序,程序界面如下图所示:在文本框Text1中输入人数n,在文本框Text2中输入出列号m,单击按钮模拟报数Command1,在列表框List1中显示出列顺序编号,程序界面如下。

    实现上述功能的VB 代码如下, 请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim n As Integer, m As Integer

        Dim a(1 To 100) As Integer

        n = Val(Text1.Text)

        m = Val(Text2.Text)

        For i = 1 To n

           

        Next i

        s = 0

        j = 0

        Do While s < n

            t = 0

            Do While t <m

               

                t = t + a(j)

            Loop

            a(j) = 0

            List1.AddItem Str(j)

            s = s + 1

        Loop

        Text3.Text = Str(j)

    End Sub

  • 4、插入排序的基本思想是:把待排序的数据按其值的大小逐个插入到一个已经排好序的有序序列中,直到所有的数据插入完为止,得到一个新的有序序列。例如,已知待排序的一组数据是60,71,49,11,24,3,66。

    假设在排序过程中,前3个数据已完成升序排列,构成一个有序序列49,60,71。

    将待排序数据中的第4个数据(即11)插入上述有序序列,以得到一个新的含4个数据的有序序列。首先,应找到11的插入位置,再进行插入。可以将11放入数组的第一个元素r(0)中,这个元素称为监视哨,然后从71起从右到左查找,11小于71,将71右移一个位置,11小于60,又将60右移一个位置,11小于49,又再将49右移一个位置,这时再将11与r(0)的值比较,11≥r(0),它的插入位置就是r(1)。假设11大于第一个值r(1),它的插入位置应该在r(1)和r(2)之间,由于60已经右移了,留出来的位置正好留给11,后面的数据依照同样的方法逐个插入到该有序序列中。若数据有n个,须进行n-1趟排序,才能完成。

    以下VB程序执行后,数组元素a(1)的值是(  )

    a(1)=10:a(2)=18:a(3)=12:a(4)=6:a(5)=9

    for i=2 to 5

        a(0)=a(i)

        j=i-1

        do while a(0)>a(j)

            a(j+1)=a(j)

            j=j-1

        loop

        a(j+1)=a(0)

    next i

    A、10 B、18 C、6 D、9
  • 5、在一升序数组a中插入一个数x,使数组元素仍保持升序。解决该问题的VB程序段如下,在横线处应填入的正确语句以实现功能。

    i=n      'n为数组a中的元素个数

    do while i>0 and a(i)>x

       

        i=i-1

    loop

    a(i+1)=x

  • 6、双向选择排序算法。在经典的选择排序基础上,如果在选择出最小数的同时,也能选择预见最大数并将两数放置合适位置,这样就使排序效率提高一倍。依照上述双向选择排序的算法,小张编写了一个VB程序,功能如下:在列表框List中显示排序前数据,单击“排序”按钮Command1,在列表框List中显示这些数据按升序排序后的结果。运行效果如下图所示。

    实现上述功能的VB程序如下,但加框处代码有错,请改正。

    Const n=10

    Dim b(1 To n)As Integer

    Private Sub command1_Click( )

        Dim i As Integer

        Dim t As Integer

        For i=1 To   

            For j=i To   

                If b(j)<b(i) Then

                    t=b(i):b(i)=b(j):b(j)=t

                End If

                If b(j)>b(n-i+1) Then

                    t=b(j):b(j)=b(n-i+1):b(n-i+1)=t

                End If

            Next j

        Next i

        For i=1 To n

            List2.AddItem Str(b(i))

        Next i

    End Sub

    Private Sub Form_Load( )

        For i=1 To 10

            b(i)=1+Int(Rnd*100)

            List1.AddItem Str(b(i))

        Next i

    End Sub

  • 7、某排序算法的VB程序段如下:

    For i=7 To 5 Step -1

       k=i

       For j=1 To i-1

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

       Next j

       If i<>k Then

          t=a(i):a(i)=a(k):a(k)=t

       End If

    Next i

    数组元素a(1)到a(7)的数据依次为“10,41,75,12,63,11,85”。则排序“加工”后数组元素a(1)到a(7)的数据依次是(  )

    A、85,41,75,63,12,11,10 B、85,75,63,41,12,11,10 C、10,11,12,63,75,41,85 D、10,11,12,41,63,75,85
  • 8、使用VB程序查找单词最大间距:在文本框Text1中输入一段英文,并在文本框Text2中输入英文段落中的某个单词(或字符串),单击“最大间距”按钮(Command1)后,在文本框Text3中显示该单词在文中某两次出现的最大间距,若只出现一次或不出现则显示值为0。程序运行界面如下图所示:

    实现上述功能的VB程序如下,请在划线处填入正确的代码。

    Private Sub Command1_Click()

        Dim a(1 To 1000)As String     '数组a存储文中出现该指定单词(或字符串)的各个位置

        Dim s As String,c As String,ch As String

        Dim n As Integer,max As Integer,i As Integer

        s=Text1.Text

        c=Text2.Text

        n=0∶Max=0

        For i=1 To Len(s)-Len(c)+1

            ch=

            If ch=c Then

                n=n+1

                  

                If n>=2 Then

                    If a(n)-a(n-1)-Len(c)>Max Then Max=a(n)-a(n-1)-Len(c)

                End If

            End If

        Next i

        Text3.Text=str(max)

    End Sub

  • 9、某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录并与待查找项进行比较所花时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为(  )
    A、100万毫秒 B、50万毫秒 C、10毫秒 D、170毫秒
  • 10、采用如下对分查找算法对数组a中7个有序数据“15,38,51,66,77,81,99”进行查找,查找数据为“55”,

    i=1∶j=7∶x=55

    Do While i<=j

        m=(i+j)\2

        If a(m)=x Then Exit Do

        If a(m)>x Then j=m-1 Else i=m+1

    Loop

    经过上述代码查找后,下列表述正确的是(  )

    A、i=m+1 B、i=m-1 C、j>m+1 D、j<m-1
  • 11、数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:

    i=1∶j=10

    Key=Val(Text1.Text)

    Do While i<=j

        m=(i+j)\2

        If a(m)=Key Then Exit Do ′Exit Do表示退出循环

        If Key Mod 2=1 And a(m) Mod 2=0 Then

            

        ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then

            

        Else

            

        End If

    Loop

    If i>j Then s=“没有找到!” Else s=“位置:”+Str(m)

    Text2.Text=s

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

    ①i=m+1

    ②j=m-1

    ③If Key<a(m) Then j=m-1 Else i=m+1

    则方框处语句依次是(  )

    A、①、②、③ B、①、③、② C、②、①、③ D、③、②、①
  • 12、数组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=True

    Do While  And Not flag′

            m=(i+j)\2

            If key=a(m) Then

               flag=True

            ElseIf key<a(m) Then

               j=m-1

            Else

               i=m+1

            End If

         Loop

         If Not flag And j>0 Then

             m=

             If key=a(m) Then flag=True

          End If

          If flag Then

             Text2.Text=Str(m)

          Else

             Text2.Text=“找不到”

          End If

    End Sub

    其中,加框处应改正为

  • 13、某对分查找算法的VB程序段如下:

    i = 1:j = 7:s = ″ ″

    key =Int(Rnd * 100)

    Do While i <= j

        m = (i + j) \ 2

        If key = a(m) Then

            s = s + ″M″:Exit Do        'Exit Do表示退出循环

        ElseIf key < a(m) Then

             j = m-1:s = s + ″L″

        Else

            i = m + 1:s = s + ″R″

        End If

    Loop

    Text1.Text = s

    数组元素a(1)到a(9)的值依次为“24,35,38,41,45,69,78”。若该程序段执行后,文本框Text1中显示的内容可能是(  )

    A、RL B、LMR C、RLR D、LRLM
  • 14、某对分查找算法的VB程序段如下:

    n=0:i=1:j=6

    Key=Val(Text1.Text)

    Do While i<=j

        m=(i+j)\2

        n=n+1

        If Key=d(m) Then Exit Do

        If Key>d(m) Then j=m-1 Else i=m+1

    Loop

    If i<=j Then s=m-n Else s=n

    d(1)到d(6)的值依次为“88,77,53,47,39,28”,输入某个Key值后,运行该程序段后,变量s结果为1,则输入key的值是(  )

    A、89 B、77 C、47 D、39
  • 15、数组a中存放着已排序的n-1个实验数据(a(1)≥a(2)≥……≥a(n-1),a(n)暂未存储数据)。现将文本框Text1中输入的新数据插入到数组a中相应位置,从而使n个数据仍保持有序。完成该功能的VB程序段如下,请在划线处填入正确的语句。

    x=Val(Text1.Text)

    i=1:j=n-1

    Do While i<=j

        m=(i+j)\2

        If x<a(m) Then i=m+1 Else j=m-1

    Loop

    For k=n To  Step-1 

        a(k)=a(k-1)

    Next k

    a(i)=x

  • 16、数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key的程序。实现该功能的VB程序段如下:

    i=1:j=10

    Key=Val(Text1.Text)

    Do While i<=j

        m=(i+j)\2

        If a(m)=Key Then Exit Do       'Exit Do 表示退出循环

        If Key Mod 2=1 And a(m) Mod 2=0 Then

                               

        ElseIf Key Mod 2=0 And a(m) Mod 2=1 Then

                               

        Else

                               

        End If

    Loop

    If i>j Then s=″没有找到!″ Else s=″位置:″+Str(m)

    Text2.Text=s

    上述程序中划线处可选语句为:

    ①i=m+1

    ②j=m-1

    ③If Key<a(m) Then j=m-1 Else i=m+1

    则横线处语句依次是(    )

    A、①、②、③ B、①、③、② C、②、①、③ D、③、②、①
  • 17、某对分查找算法的VB程序段如下:

    i=1:j=8:c=0

    Do While i<=j

        c=c+1

        m=Fix((i+j)/2)

        If key=b(m) Then Exit Do

        If key<b(m) Then j=m-1 Else i=m+1

    Loop

    数组元素b(1)到b(8)的值依次为“22,32,39,48,71,82,96,106”。若该程序段运行结束后,c的值为2,则key的值是(  )

    A、48或32 B、48或96 C、32或82 D、82或96
  • 18、在数组元素a(1)到a(8)中查找键值为key的数,其顺序查找的VB程序段如下,请在划线处填写正确的语句。

    for i=1 to 8

        if  then 

            Text1.text=str(i)

            exit for

        end if

    next i

    if then 

        text1.text=″在数组中没有找到″+str(key)

    end if

  • 19、超市收银系统一般由收银机、条码称及数据服务器组成,收银机通过扫描条形码来录入购物信 息, 打印购物小票进行结算。超市的商品一般分为两种类型:计件商品和计重商品,商品的条形码信息中还需要包含商品类别识别码,用于识别商品类型。某次购物条码图和清单如下:

    (1)、根据以上条码图和购物小票信息,如果客户购买了 1kg 仔排,条码秤打印出来的条码编码是
    (2)、购物结算清单中的下列信息来自数据服务器的是(多选题)      
    A、商品名称 B、商品单价 C、会员积分 D、商品重量 E、商品总金额
    (3)、

    以上是解决这个问题而设计的一种算法,该算法中①处该填写 , 该算法中②处填写

    A.  ty!=‘01’    B. ty==‘01’    C. ty!=01    D. ty==01

    (4)、根据此算法,编写如下代码实现收银机功能(用输入字符串;‘end’模拟“结算”按钮,用键盘输入条形编码模拟扫描输入,把购物清单输出到文本文件list txt模拟打印购物清单):

    sp={}      #商品信息字典

    #此处代码功能从数据服务器中获取商品信息字典 sp,sp 的结构为{'商品货号':'商品名称,商品单价'}

    alljg=0.0 #保存结算总金额

    sn=input('请输入商品条形码:')

    #######################################################

    #完成购物清单文本文件头处理 f=open('list.txt', 'r+')     #打开文本文件

    list.txt f.truncate()     #清空文本文件内容

    f.write('货号\t\t 商品名称\t 数量\t 单价\t 金额\n')

    ########################################################

    while    ▲    

    ty=sn[0:2]    #获取商品类型

    hn=sn[2:7]    #获取商品货号

    if  hn in sp:

    mc=sp[hn].split(', ')[0] #获取商品名称

    dj=float(sp[hn].split(', ')[1])    #获取商品单价 if

    ty!= '01':

    sl=1.0

    jg=dj

    else:

    sl=float(sn[12:14]+'. '+sn[14:17])

         ▲   

    print('{:<10s}{:<20s}{:^10.3f}*{:^10.2f}={:^10.2f}'.format(hn, mc, sl, dj, jg))

    #按格式输出内容,主要目的保持输出的内容上下按类别对齐

    f.write(hn + '\t\t' + mc + '\t' + str(sl) + '*\t' + str(dj) + '=\t' + str(jg) + '\n')

    #往文本文件中写入购物记录信息

    alljg+=jg

    else:

    print('商品货号有误,请核对后重新输入')

       ▲   

    print('小计:{:.2f}'.format(alljg))

    f.write('---------------------------------------\n') #文本文件输出分割线

    f.write('小计:'+str(alljg))     #往文本文件中写入总计信息

    f.close#关闭 list.txt 文件

    横线处代码应填

  • 20、 图像的存储和处理在计算机内部的是采用二进制的形式,一幅图像常常由分辨率、颜色深度的方式来存储,Python的PIL模块能够直接读取图像中每个像素点的颜色信息,一般采用 RGB(红:0~255,绿:0~255,蓝:0~255)的方式表示颜色。现有一幅红字白底图像1.bmp,基本信息如下:

    1 bmp

    1 bmp属性截图

    #程序段 1:

    from PIL import Image

    import numpy as np

    import matplotlib.pyplot as plt

    img=np.array(Image.open('1.bmp').convert("L"))

    rows,cols=img.shape#获取图像的行数和列数

    for i in range(rows):

    for j in range(cols):

    if img[i,j]>128:

    img[i,j]=0 #设置为黑色

    else:

    img[i,j]=1 #设置为白色

    plt.figure("1.bmp")

    plt.imshow(img,cmap="gray") #以灰度模式显示

    plt.axis("off")

    plt.show()

    说明:以上程序段1实现将1.bmp 以黑底白字显示

    请根据以上信息回答下列问题:

    (1)、程序段1运行过程中,变量j的值范围是
    (2)、程序段2调试时出现“IndexError: index 128 is out of bounds for axis 1 with size 128”的提示,则上述程序出现这个错误的语句是

    A. rows,cols=img.shape                        B. for i in range(rows)

    C. img[i,j],img[i,cols-j]=img[i,cols-j],img[i,j]       D. plt.imshow(img,cmap="gray")

    应该修改为:

    (3)、将第(2)题表述的错误修改正确后,程序段2运行后图片呈现的内容:

    #程序段 2:

    from PIL import Image

    import numpy as np

    import matplotlib.pyplot as plt img=np.array(Image.open('1.bmp').convert("L"))

    rows,cols=img.shape

    for i in range(rows):

    for j in range(cols//2):

    img[i,j],img[i,cols-j]=img[i,cols-j],img[i,j]

    plt.figure("hh")

    plt.imshow(img,cmap="gray")

    plt.axis("off")

    plt.show()

上一页 435 436 437 438 439 下一页 跳转