算法与程序设计 知识点题库

【加试题】有如下VB程序:

Private Sub Command1_Click()

Dim a As Integer, b As Integer, c As Integer

a = Val(text1.Text)

b = Val(text2.Text)

c = (a + b + Abs(a - b)) \ 3

Text3.Text = Str(c)

End Sub

运行该程序,分别在文本框Text1、Text2中输入5、9,单击命令按钮Command1后,文本框Text3中显示的内容是(   )

A . 6 B . 5 C . 4 D . 7
关系式X<= - 5或X>= 5所对应的布尔表达式是:
小张编写 VB 程序,实现如下功能:在前 100 个偶自然数中,计算恰好有四位为 1 的二进制数的个数, 如图所示,单击“计算”按钮 Command1,在文本框 Text1 中显示符合条件的个数,在列表框 List1 中显示符合条件的二进制数。VB 程序代码如下:

提示:本题“除 2 取余倒排法”的方法将十进制转化为二进制,算法如下: 例如十进制数“97”转化为二进制的过程如右图所示:

因此“97”二进制值为:1100001

  1. (1) 解决此问题主要采用的算法是      (选填字母)
    A . 解析算法 B . 枚举算法
  2. (2) 为了实现程序的功能,请在划线处填入合适的代码。Private Sub Command1_Click()

      Dim a As Integer, c As Integer, w As Integer, i As Integer

      Dim s As String, k As String

      c = 0

      For m = 1 To 100

        k = ""

        i = 2 * m

        Do While i > 0

           a=i Mod 2 

      

           k = str(a) + k

        Loop

     

    For n = 1 To Len(k)

           s = Mid(k, n, 1)

           If s = "1" Then w = w + 1

        Next n

    If w = 4 Then

       c = c + 1

     End if

     Next m

     Text1.Text = Str(c) End Sub

某算法部分流程图如图所示。执行这部分流程,依次输入 1、-6、11、14、13、0,则输出值依次是(  )

A . 11,13,2 B . 1,11,13,3 C . 11,14,13,3 D . 1,11,14,13,4
“杨辉三角”问题,如图所示,其规律如下:其显著特征是除斜边上的1以外,其余数值均等于其肩部两数之和。编写VB程序,其功能如下:在文本框Text1中输入20以内的整数,点击“打印”按钮,在列表框list1中输出杨辉三角,程序界面如图所示,VB 程序代码如下。

实现上述功能的VB程序如下,请回答下列问题:

Private Sub Command1_Click()

Dim a(20) As Long

Dim i As Integer, j As Integer, s As String List1.Clear

n = Val(Text1.Text)

a(1) = 1

List1.AddItem Str(a(1)) For i = 2 To n

    s = ""

    For j = Step -1  

        a(j) =    ①     

        s = s + Str(a(j))

    Next j

                   Next i

  1. (1) 代码“Private Sub Command1_Click()”中的 Command1_Click()属于 (单选,填字母: A .对象名/B .属性名/C .事件名/D .事件过程)。
  2. (2) 请在划线处填入合适的代码。

     ② 

  3. (3) 若将加框处代码改为“1 To i”,则 (选填:会/不会)影响程序结果。
生成10个不重复的随机整数,保存在数组a中,并升序排列,实现算法的VB程序如下。

Dim a(1 To 10) As Integer, f(1 To 20) As Boolean

    'f数组各元素的初值设为False,代码略

    For i = 1 To 10

       t =int(rnd()*20+1)

       If Not f(t) Then

          a(i) = t:      ⑴     

          For j = i To 2 Step -1

             If    ⑵    Then

                tmp = a(j): a(j) = a(j - 1): a(j - 1) = tmp

             End If

          Next j

       Else

               ⑶    

       End If

    Next i

上述程序中3处下划线应填入的程序代码是(  )

A . ⑴f(t) = True  ⑵a(j) < a(j - 1)  ⑶i=i-1 B . ⑴f(t) = True  ⑵a(j) > a(j - 1)  ⑶i=i-1 C . ⑴f(t) = True  ⑵a(j) < a(j - 1)  ⑶t =int(Rnd()*20+1) D . ⑴f(t) = False  ⑵a(j) > a(j - 1)  ⑶t =int(Rnd()*20+1)
(加试题)小赵对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:

p = 1: q = 10

Do While p < q

    iMin = p: iMax = p

    For i = p + 1 To q

        If a(i) < a(iMin) Then iMin = i

        If a(i) > a(iMax) Then iMax = i

    Next i

    t = a(iMin): a(iMin) = a(p): a(p) = t

   

    t = a(iMax): a(iMax) = a(q): a(q) = t

    p =" p" + 1

    q =" q" - 1

Loop

要使程序实现上述算法思想,则方框中的语句是

A . If iMax =" p" Then iMax = iMin B . If iMin =" p" Then iMin = iMax C . If iMax =" p" Then iMin = iMax D . If iMin =" p" Then iMax = iMin
编写VB程序,实现如下功能:在文本框Text1和Text2中分别输入一个整数,单击命令按钮Command1,在列表框List1中显示结果,运行效果如1图所示。结果包含两列数据,第1列为两数之间的摄氏温度值(间隔1度、升序),第2列为对应的华氏温度值。

  1. (1) 要使命令按钮Command1上显示的文本改为“转换”,可在其属性窗口(2图)中将属性的属性值修改为“转换”。
  2. (2) 为实现上述功能,请在划线处填入合适代码或选项。

    Private Sub Command1_Click()

    Dim t1 As Integer, t2 As Integer

    Dim i As Integer, t As Integer

    Dim f As Single

    List1.Clear

    t1 = Val(Text1.Text)

    t2 = Val(Text2.Text)

    If  Then  '(选填字母,从下列A、B、C、D四个选项中选取一项)

      t = t1: t1 = t2: t2 = t

    End If

    i = t1

    Do While  '(选填字母,从下列A、B、C、D四个选项中选取一项)

    f = i * 9 / 5 + 32    '摄氏温度转换为华氏温度

    List1.AddItem Str(i) + "          " + Str(f)

     '(填程序代码)

    Loop

    End Sub

    划线①、②处的选项:

    A .i <= t2      B .f <= t2      C .t1 > t2      D . i < f

下面的程序段,执行后,变量S的值为(  )

a=5

b=10

S=2*(a+b)

A . 10 B . 20 C . 30 D . 40
现有一个长为n,宽为1的水池,其截面如图a所示。水池截面可以看作是由行和列组成的矩阵,中间部分是由宽度为1且高低不一的墙分割的池底,左右两端黑色部分是无限高的墙,设最底端是水池的第一层,编号为1,依此向上编号。

往池中倒入一定的水量V (每1单位水量刚好填充一个格子, 格子大小为1×1),现要求倒入水后,每一列水位高度一致。

如图b所示,往池中倒入V=11的水量,则水位高度为3.5(解释:第一层没有空白单位,首先填满第2层的3个单位,然后填满第3层的5个单位,此时还剩氽11-3-5-3个单位的水量,第4层有6个单位的空白,不足以填满,此时3/6=0.5,故总填充高度为3+0.5=3.5)。

为了解决该问题,小吴设计了二分算法:通过枚举水位高度,计算所儒的水量与实际输入水量比较,如果所需水量大于实际水量(精确到0.01),则需降低水位高度,否则增加水位高度,直到得到正确结果。程序功能:运行程序时,在文本框Text1中输入倒入的水量V,在文本框Text2中输出能达到的水位高度(保留1位小数输出)。程序运行界面如图c所示。

  1. (1) 假设池底如图a所示,若倒入的水量为4,则输出为 。
  2. (2) 请在横线处填入合适的代码,以实现算法功能。

    程序代码如下:

    Dim V As Double

    Dim a(1 To 100)As Integer, n As Integer

    Private Sub Form_Load()     ‘初始化池底

      n=8

      a(1) = 2:a(2) = 1: a(3) = 4: a(4) = 2

      a(5)= 1:a(6) = 3: a(7) = 1: a(8) = 4

    End Sub

    Function check(g As Double) As Boolean

      Dim sum As Double    ‘变量sum用于计算水位高度为g时所儒水量

      Sum = 0

      For i = 1 To n

        If g > a(i) Then 【sum = sum + g】

      Next i

      If sum < V Then check = True Else check = False

    End Function

    Private Sub Command1_ Click()

      Dim L AS Double, R As Double, mid As Double

      L= 0:R = 32767

      V = Val(Text1.Text)

      Do While L + 0.001 < R

          mid=(L + R)/ 2

        If Then

          R= mid

        Else

          L =  

        End If

      Loop

      Text2.Text = “高度为:”+ Str(Int(R * 100 + 0.5) / 100)

    End Sub

  3. (3) 程序加框处代码有错误,请改正。
下列选项中,能作为VB程序变量名的是(  )。
A . dim B . 3ab C . a*b D . xy
由数组a生成数组b的方法描述如下:

⑴将数组a中的n个元素依次分割出若干个数据块,每个数据块有2m个元素,分割时,按尽可能大的数据块进行分割。

⑵对每个分割出的数据块进行求和,将和依次存储在数组b中。

例如:n=13,可将a(1)~a(13)依次分割成3个数据块,元素的个数分别为8、4、1。将3个数据块的和依次存储在b(1)、b(2)、b(3)中。

小明依据上述描述设计了如下VB程序,运行界面如图所示。请回答下列问题:

Const n = 13

Dim a(1 To n)  As  Integer Dim b(1 To n) As Integer Private Sub Command1_Click()

  Dim start As Integer                 ‘当前未分割数据的第1个元素下标

  Dim i As Integer, k As Integer, pb As Integer, left As Integer, m As Integer

  '读取n个数据,依次存储到a(1)、a(2)、……a(n)中,并对数组b赋初值为 0,代码略

  start = 1: left = n: m = 0

  Do While 2 ^ m <= left             ‘寻找第1个数据块

         ①       

  Loop

  m = m - 1

  pb = 1

  Do While left > 0

    For i = start To start + 2 ^ m - 1

            ②         

    Next i

    List1.AddItem Str(2^m) + " " + Str(b(pb)) pb = pb + 1

            ‘改错

    left = left - 2 ^ m

    Do While left < 2 ^ m

      m = m - 1

    Loop

  Loop

End Sub

  1. (1) 当 n=110时,分割出的数据块有 个。
  2. (2) 程序代码中,将划线处语句补充完整。

     ② 

  3. (3) 程序代码中,加框处语句有错,请改正。
以下问题中,最适合用程序设计的方式解决的是(    )
A . 求三元一次方程组的解 B . 一组调查数据的图表表示 C . 编辑文稿 D . 家庭装修设计
老师让学生思考在生活、学习中能通过条件判断来解决的问题。同学们思维活跃,列举了如下实例。请仔细阅读,用Python表达式进行实现。
  1. (1) 现有day(True表示白天,False表示晚上)、voice( True表示有声,False表示无声)两个逻辑变量,用于表示楼道照明灯白天不亮晚上有声音才亮的条件表达式为: 。
  2. (2) 若三条线段的长度分别用变量a,b,c表示,则a,b,c可以构成三角形的条件表达式为:
  3. (3) 判断闰年的条件是年份能被400整除或同时满足被4和100整除,现有year变量用于存储某一年份,写出判断闰年的条件表达式:
高级语言更接近自然语言,并不特指某种语言;也不依赖特定的计算机系统,因而更容易掌握和使用,通用性也更好。以下不属于高级语言的是(   )
A . Java语言 B . Python语言 C . 汇编语言 D . VB语言
变量s中存储一个字符,若有一个Python表达式表示该字符为大写字母时值为True,否则为False,下列不符合条件的表达式为(    )
A . "A"<=s<="Z" B . s in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" C . "a"<=s <="z" D . s>="A" and s<="Z"
检测输入的四位整数abcd是否满足下述关系:(ab+cd)×(ab+cd)=abcd。实现上述功能的Python程序代码如下,请在程序划线处填入合适的代码。

k=int(input("输入一个四位数:"))

x=

y=k%100

if :

    print("符合")

else:

    print("不符合")

阅读下列程序,写出运行结果。

m = int(input("请输入一个正整数:"))

x = m

y = m

for i in range (9):n = int(input("请输入一个正整数:"))

if n<x :

x = n

if n<y :

y = n

print(x, y)

程序运行后,依次输入:12   35   9   11   23   88   13   19   29   55

运行结果是:

哥德巴赫猜想:任意一个大于等于4的偶数,都可以用两个素数之和表示。如:4=2+2,6=3+3,8=3+5,10=5+5,12=5+7,98=17+79。

编写一个验证哥德巴赫猜想的VB程序:程序运行时,在文本框Text1中输入一个大于等于4的偶数,单击“验证”按钮Command1后,如果哥德巴赫猜想验证成功,则在文本框Text2中显示“Yes”,并在列表框List1中显示用两个素数表示该偶数的等式,否则显示“No”。程序运行结果如图所示。

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

′函数pp(x)的功能是判断整数x是否为素数,若是素数则返回True,否则返回False

Function pp(x As Integer) As Boolean

    Dim j As Integer

    pp = True

    j = 2

    Do While j <= Int(Sqr(x)) And pp=True

        If x Mod j = 0 Then pp = False Else

             '①

    Loop

End Function

Private Sub Command1_Click()

    Dim n As Integer, p As Integer, q As Integer, pd As Boolean

    n = Val(Text1.Text)

    p = 1              

    pd = False

    Do While Not pd And p < n

        p = p + 1

                    '②

        If pp(p) And pp(q) Then

            Text2.Text = “Yes”

            pd = True

            List1.AddItem Str(n) + “=” + Str(p) + “+” + Str(q)

        End If

    Loop

    If pd = False Then Text2.Text = “No”

End Sub

程序中加框①处应改正为

加框②处应改正为

使用冒泡排序算法将10个数字进行降序排列,需要进行比较的次数是(   )。
A . 10 B . 45 C . 55 D . 100