第4单元 计算与问题解决 知识点题库

编写VB程序,实现如下功能:程序运行时,在文本框Text1中输入任意字符串,单击按钮Command1,删除字符串中的非字母后,新字符串显示在Text2中,并找出ASCII码最小的字母,将其ASCII码显示在Text3中。程序运行界面如下图所示。

  1. (1) 将命令按钮Command1中显示的文本“Command1”修改为“查找”,可在其属性窗口中将属性的属性值改为“查找”。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim result As String, s As String, c As String

    Dim n As Integer, i As Integer, j As Integer

    s = Text1.Text

    Text2.Text = ""

    For i = 1 To Len(s)

       If n >= 65 And n <= 90 Or n >= 97 And n <= 122 Then

       End If

    Next i

    Text2.Text = result

    j = 2

    c = Mid(result, 1, 1)

    Do While j <= Len(result)

    If Mid(result, j, 1) < c Then c = Mid(result, j, 1)

    Loop

    Text3.Text =

  3. (3) 如图所示,在文本框Text3中的ASCII码是Text2中第个字符的ASCII码。
对称字符串的特征是从左到右读和从右到左读是完全一样的。如“abba”是对称的,“abcba”也是对称的。判断字符串是否对称的VB程序段如下:

n=Len(s)          's是待判断的字符串

k=0:j=n

For i=1 to n/2

   

Next i

If  k=0  Then Label1.Caption="对称"  Else  Label1.Caption="不对称"

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

①j=j-1

②If c1 <> c2 Then k = k+1

③c1=Mid(s,i,1) : c2=Mid(s,j,1)

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

A . ①②③ B . ②③① C . ③②① D . ②①③
用计算机无法解决"打印所有偶数"的问题,其原因是解决该问题的算法违背了算法特征中的(  )
A . 唯一性 B . 有穷性 C . 能行性 D . 有输出
多数高次方程不存在求根公式,求精确根非常困难,因此寻找方程的近似根就显得特别重要。由于数轴上的点是有序的,所以我们可以用对分查找法找出高次方程在某一区间的实根,即:不断地将区间对分,使得区间中点的值不断逼近方程的根,当区间小于精度的时候我们就停止对分,并用此时区间的中点值作为方程的根。

现有三次方程y=5x^3-55x^2+170x-130,其函数图象如图所示:

观察该函数图象发现函数有一实根在区域(1.2)之间,因此我们取两者的中点m=(1+2)/2代入方程进行检测发现f(1.5)=18.125。因为f(1.5)>0,因此区间应该往左移动,得下一个区间(1,1.5)然后继续进行检测。如果区间差值≤误差率,则认为该中点是方程的根。根据上述方法描述设计一个VB求解程序的根,要求单击求解按钮Command1,在文本框Text1中显示方程的根,部分程序如下。

  1. (1) 代码“PrivateSubCommand1_Click()”中的Command1_Click()是(单选,填字母:A.对象名/B.事件名/C.事件处理过程)
  2. (2) 将划线处的代码补充完整。

    PrivateSubCommand1_Click()

    DimiAsDouble,jAsDouble,mAsDoubleDimrAsDouble,yAsDouble

    i=1:j=2:y=1:r=j-iDoWhiley<>0Andr>0.00001

    m=(i+j)/2

    y=

    Ify>0Then

    j=m

    ElseIfy<0Then

    i=m

    EndIf

    Loop

    Text1.Text=m

    EndSub

如果数组a(下标1到n)满足a(1)≤a(2)≤…≤a(i-1)≤a(i)≥a(i+1)≥…≥a(n),则称数组a是单峰的,并称a(i)是数组a的“峰顶”。下列程序段用于查找数组a中的“峰顶”,并返回该“峰顶”值。

Dim a(1 To 10) As Integer

Function Search(L As Integer, R As Integer) As Integer

 M = (L + R) \ 2

 If a(M) < a(M - 1) And a(M) > a(M + 1) Then

     ⑴  

 ElseIf a(M) > a(M - 1) And a(M) > a(M + 1) Then

     ⑵  

 ElseIf a(M) > a(M - 1) And a(M) < a(M + 1) Then

    ⑶  

 End If

End Function

Private Sub Command1_Click()

 Label1.Caption = "“峰顶”值是:" + Str(Search(1, 10))

End Sub

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

①Search = Search(M + 1 , R)

②Search = Search(L , M - 1)

③Search = a(M)

则(1)(2)(3)处的语句依次是(  )

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

key = Val(Text 1.Text)

i = 1: j = 10

Text2.Text =""

Do While i<=j

  m = Int((i+j)/2 + 0.5)

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

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

  Text2.Text =Text2.Text + Str(a(m))

Loop

数组元素a(1)到a(10)的值依次为“8,17,24,30,36,40,55,58,61,66”,文本框 Textl中输入的值是30,执行该程序段,文本框Text2中显示的是 (  )

A . 40 24 B . 40 24 36 C . 36 24 D . 36 17 24
以下程序生成10个整数,并且完成从小到大排序

Dim a(1 To 10) As Integer

Randomize

a(1) = Int(100 * Rnd)   ‘先生成第1个数

For i = 2 To 10        ‘然后生成2到第10个

  temp = Int(100 * Rnd)

  Low = 1

  high = i - 1

    Do While Low <= high

      m = (Low + high) \ 2

      If temp >a(m) Then

              ①      

      Else

        high = m - 1

      End If

   Loop

   For j = i - 1 To Low Step -1   ‘从原来有数据的最后位置开始逐个数据后移

     a(j + 1) = a(j)

   Next j

      ②      

Next i

则空缺处代码为(     )

A . ①Low = m + 1  ② a(Low) = temp B . ① Low = m  ② a(Low) = temp C . ①Low = m + 1  ② a(high) = temp D . ① Low = m  ② a(high) = temp
   二分查找又叫,该方法主要将数列排列,采用的方式查找数据。二分查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。
迭代算法与递归算法都需要重复执行某些代码,两者基本相同。
   Pygame.display的功能是访问;Pygame.event的功能是;Pygame.font的功能是使用;Pygame.image的功能是
查找并删除重复数据的算法是基于顺序查找的优化,主要思路是把待查数据的起点元素设置成查找关键字,然后从后往前查找,通过结束时所停留的数据位置来判断查找结果(即结束时若停留在数据序列的起点,则表示数据序列中无重复数据;否则,存在重复数据,删除该数据后继续查找)。

编写VB程序,实现上述算法。程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据,并在列表框List2中输出去重后的数组a中的数据,即相同的数据仅保留一个。同时在标签Label1中显示删除的数据总个数,运行效果如图所示,程序代码如下:

Const maxn=10

Dim a(1 To maxn)As Integer

Private Sub Form_Load( )

´maxn个数据在数组a中,并在列表框List1中显示

End Sub

Private Sub Command1_Click( )

  Dim i As Integer, n As Integer       ‘n用于存储当前查找的数字长度

  Dim j As Integer, key As Integer       ‘key用于存储本次查找的关键字的数据位置

    key=1:n=maxn

    Do While key<=n

    i=n-1

    Do While       ‘①

        i=i-1

    Loop

    If i=key Then        ‘找到重复数据,删除;未找到,设定下一查找关键字

       key=key+1

    Else

      For j=i To n-1

          a(j)=a(j+1)

      Next j

      n=n-1

    End If

  Loop

  For i= 1To n

      List2.AddItem a(i)

  Next i

  Labell.Caption="共删除重复数据:"&___________&"个"

End Sub

  1. (1) 程序代码“Sub Form_Load( )”中,Load是(单选,填字母:A .属性名/B .事件名/C .方法名/D .类名)。
  2. (2) 程序代码中,加框处循环条件有误,请改正。
  3. (3) 请将程序代码中的画线处赋值语句补充完整。
  4. (4) 如图所示的原始数据中,重复数是“1,7,10”,该程序运行时,最先删除的重复数是
用对分查找法和顺序查找法在数字序列“1,2,3,5,8,13,21,34,55”中查找数字13,两种方法都能访问到的数字是(  )
A . 3 B . 5 C . 8 D . 34
对一组正整数进行升序排序,要求排序后奇数在前,偶数在后。程序界面如图所示。回答下列问题:

  1. (1) 实现上述排序功能的某VB程序如下,观察程序代码,将排序前原始数据在列表框中显示的事件处理过程名为                (单选,填字母)。
    A . Load() B . Form_Load() C . Command1 D . Command1_ Click()
  2. (2) 请在程序划线处填入适当的代码。

    Const n = 10

    Dim a(1 To 10) As Integer

    Private Sub Form _Load()

        '读取一组正整数,存储在数组a中,并在列表框list1中显示。代码略

    End Sub

    Private Sub Command1_Click()

        Dimi As Integer,m As Integer,low As Integer,high As Integer,temp As Integer

        low=1:high=n

        Do While

            If a(low) Mod 2 = 1 Then

                m =low

                For i=low+1 To high

                    If a(i)Mod2=1 And a(i)<a(m) Then m=i

                Next i

                temp = a(m): a(m) = a(low): a(low) = temp

                low= low + 1

            Else

                m =low

                For i=low To high

                    If  Then m=i

                Next i

                temp = a(m): a(m) = a(high): a(high) = temp

                

            End If

        Loop

        For i=1 To n

            List2.AddItem Str(a(i))

        Next i

    End Sub

对线性表进行二分查找时,要求线性表必须(    )
A . 以顺序方式存储 B . 以顺序方式存储,且数据元素有序 C . 以链接方式存储 D . 以链接方式存储,且数据元素有序
某班级学生为毕业晚会的一个节目设计一个仿“V”字的造型,先筛选出班级里所有男生,然后将参演的n 名男生按照身高,摆出中间低两边高(先右后左)的造型,如图所示。

原1-7号男生身高

171 172 180 174 176 179 178

筛选排序后序列

171 172 174 176 178 179 180

“造型设计”后序列

180 178 174 171 172 176 179

王林同学用VB编写模拟“节目造型”程序,功能如下:从数据库中导出所有学生编号、性别和身高数据;单击“筛选排序”按钮Command1,选出“男生”且按身高升序排列显示在文本框Text1中;单击“设计造型”按钮Command2,根据身高仿“V”字的造型进行有序排列,并将结果显示在文本框Text2 中。程序运行界面如图所示。举例说明如下:

Const n = 7

Dim h2(1 To n) As Integer

Dim height1(1 To n) As Integer, height 2 (1 To n) As Integer

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

Dim sex(1 To n) As Boolean ' 男生sex=true

Private Sub Form_Load()

    'n名学生的身高和性别由数据库导出,分别存储在数组height1和sex中,代码略!

End Sub

Private Sub Command1_Click()

    For i = 1 To n - 1

        For j = n To i + 1 Step -1

            IfThen

                temp = height1(j): height1(j) = height1(j - 1): height1(j - 1) = temp

            End If

        Next j

    Next i

    For i = 1 To n

        Text1.Text = Text1.Text + " " + Str(height1(i))

    Next i

End Sub

Private Sub Command2_Click()

    Dim left, right As Integer, i As Integer, mid As Integer

    mid = Int((1 + n) / 2)

    left = 0: right = 0

   

    For i = 2 To n Step 2

        right = right + 1

        height2(mid + right) = height1(i)

        left = left + 1

        

    Next i

    For i = 1 To n

        Text2.Text = Text2.Text +“ “ + Str(height2(i))

    Next i

End Sub

为实现以上功能,请在画线处填写正确代码。

完善以下程序代码完成下题。

程序描述:2公里(包括2公里)内,起步价为5元,超过2公里部分(不足整公里的,向上取整),每公里1.6元。

代码如下:

Import   ①    #引用math库

s=  ②  (input("请输入你要去目的地距离出发点的公里数:))

If  ③  :  #2公里(包括2公里)内

   cost =5

else:

  cost = 5+math.ceil(s-2) *1.6

print("你的打的费用是", cost,“元)

①处的语句是,②处的语句是,③处的语句是

①A.math    B.Numpy    C.time    D.Matplotlib

②A.Float    B.Int    C.str    D.Math

③A.s≤2    B.s<=2    C.s>2    D.s≥2

matplotlib模块是一个。matplotlib中的子库所提供的函数可以快速绘图和设置图表的坐标轴、坐标轴刻度、图例等。
下列VB程序所表示的算法,违反的算法特点是(      )。

Dim i As Integer

i=10

Do While i <= 20

    Print i*9

Loop

A . 可行性 B . 确定性 C . 有穷性 D . 至少有一个数据输出
“轮转后有序数组(RotatedSortedArray)”是将有序数组取其中某一个数为分割点,将其之前的所有数都轮转到数组的末尾所得。比如{7,11,13,17,2,3,5}就是一个轮转后的有序数组,原有序数组中的子串{2,3,5}被轮转到了数组的末尾处。对于一个轮转后有序数组arr也可以进行二分查找,算法思路如下(以升序为例):每次根据查找的左侧位置L和右侧位置R求出中间位置M后,M左边[L, M]和右边[M+1,R]这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判断)。

arr[M]和待查找数据Key比较

①arr[M]=Key,返回M的值

②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找

③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找

  1. (1) 对于轮转后有序数组{ 7,11,13,17,2,3,5}使用以上函数search( )查找key值3,所需要的查找次数为
  2. (2) 以下VB函数Search()实现了对轮转后有序数组arr进行二分查找的过程,如果查询成功,返回m值,查询失败则返回- 1。请补充程序中划线处的代码:

    Function Search (key As Integer, L As Integer, R As Integer) As Integer

        

        Do While L <=R And Search=- 1

            M=(L+ R)\2

            If arr(M)= key Then

                Search= M

            Else

                If Then

                    If arr(L)<=key And key <arr(M) Then

                        R=M-1

                    Else

                        L=M+1

                    End If

                Else

                    If  Then

                        L=M+1

                    Else

                        R=M- 1

                    End If

                End If

            End If

        Loop

    End Function

下面这段程序是绘制函数图象的,其中plot函数可以绘制线形图

1

2

3

4

5

6

7

8

9

import numpy as np

import matplotlip.pyplot as plt

x=np.linspace(0,10, 100)

y=np.sin(x)

plt.title("sin(x)")

plt.plot(x,y,color="r",linewindth="2")

plt.show( )

以下图形哪一个是该程序绘制出来的(    )

A . B . C . D .
最近更新