第二章 算法与问题解决 知识点题库

有如下VB程序段

p=a(1)

For I=2  to  30

  If  a(I) < p  then  p=a(I)

Next I

该程序段执行后,变量I的值是(   )

A . 30 B . 2 C . 31 D . 0
模拟一个简单计算器,输入两个数和一个运算符(加、减、乘、除),进行算术运算,并输出运算结果。程序界面如第14题图所示,在文本框Text1输入第一个数a,在文本框Text2输入第二个数b,在文本框Text3输入运算符ch,在文本框Text4中输出结果。

当输入的运算符不是加、减、乘、除四种运算符时,则输出“运算符不正确”;当进行除法运算时,如果除数为0,提示输出“除数不能为零”。相应的Visual Basic程序如下,在①和②划线处,填入合适的语句或表达式,把程序补充完整。

Private Sub Command1_Click()

    Dim a As Single, b As Single, ch As String

    a = Val(Text1.Text)

    b = Val(Text2.Text)

             ①      

    If ch = "+" Then

        Text4.Text = Str(a + b)

    ElseIf ch = "*" Then

        Text4.Text = Str(a * b)

    ElseIf ch = "-" Then

        Text4.Text = Str(a - b)

    ElseIf ch = "/" Then

        If  ②  Then Text4.Text = Str(a / b) Else Text4.Text = "除数不能是零"

    Else

                 ③     

    End If

End Sub

  1. (1) 解决此问题采用的算法是。(填:解析算法/枚举算法/查找算法)
  2. (2) 程序中划线处①应填入

    程序中划线处②应填入

    程序中划线处③应填入

某算法的部分流程图如下图所示,执行这部分流程,则“s≤100?”被执行的次数是(  )

A . 2 B . 3 C . 4 D . 5
如图所示,该流程图所表示的算法违背了算法的有穷性特征,下列修改方法中,可以改正该错误的是(  )

A . 将①处改为 i←0 B . 将②处改为 s≥0? C . 将③处改为 i←i-2 D . 将④处改为 s←s-i
下列四种流程图样式中,能用于表示循环结构的是(  )。
A . B . C . D .
编写VB程序,实现如下功能:在文本框Text1输入一个字符串,单击命令按钮Command1,判断这个字符串是不是回文字符串(回文字符串就是一个对称的字符串,如“abcba”和“abccba”都是回文字符串,“abc”不是回文字符串)。在文本框Text2中显示结果,是回文字符串显示“yes”,否则显示“no”。程序运行效果如图所示。

  1. (1) 要使命令按钮 Command1的标题变为“判断”,则应该修改该对象的属性。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click( )

    Dim st As String

    Dim i As Integer, j As Integer

    Dim flag As Boolean

       ①  

    J= Len (st)

    i=1

    flag=True

    Do While flag And (i < = j)

        If Mid(st,i,1)= mid (st,j,1) Then

            i=i+1

               ②   

        Else

            flag=False

        End If

    Loop

    If   ③   then

        Text2. Text = “yes”

    Else

        Text2. Text = “no”

    End If

    End Sub

     ② ③ 

某算法的部分流程图如图所示。执行这部分流程,输入变量n的值为5,则下列说法正确的是(    )

A . 语句“c<=n?”共执行了4次 B . 循环结束后,变量a的值为3 C . 循环结束后,变量b的值为5 D . 循环结束后,程序输出的值为6
  小明编写了一个字符串加密程序,功能如下:在文本框Text1中输入明文,单击“加密”按钮Command1后,在文本框Text2中显示加密后的密文,运行界面如图所示。加密算法如下:

1)将明文中每个字符用8位二进制ASCII码(不足八位的左端补0,凑足八位)表示;如“A”的二进制ASCII码值为01000001;

2)对8位二进制编码进行取反码(0变1,1变0)操作,如01000001的反码是10111110;

3)将8位二进制反码用2位十六进制表示,得到该字符的密文;

4)将每个字符的密文按照明文的倒序连接。

实现上述功能的VB程序如下:

Private Sub Command1_Click()

Dim i As Integer, j As Integer, m As Integer, k As Integer

Dim c As String, x As Integer, y As Integer

Dim d(1 To 8) As Integer  '数组d存储字符ASCII码二进制从左到右的各位数码

Dim mw As String          'mw存储密文

mw = ""

For i = 1 To Len(Text1.Text)

  c = Mid(Text1.Text, i, 1)

  For j = 1 To 8

             ‘I处

  Next j

  m = Asc(c)

  k = 8

  Do While   ‘II处

 d(k)=     ①      

     m = m \ 2

     k = k - 1

  Loop

  mw = btoh(d) + mw

Next i

Text2.Text = mw

End Sub

Function btoh(m() As Integer) As String

 ′自定义函数是将m数组中的二进制数转换成对应的十六进制数

Dim s As Integer, i As Integer

Dim str As String, ch As String

str = "0123456789ABCDEF"

s = 0: ch = ""

For i = 1 To 8

  s = s * 2 + m(i)

  If      ②       Then

     btoh =btoh+ Mid(str, s + 1, 1)

     s = 0

  End If

Next i

End Function

阅读分析程序代码,请回答下列问题:

  1. (1) 按照加密算法,字符“Z”的密文是
  2. (2) 请在划线处填入合适代码。

     ② 

  3. (3) 若I处方框内代码改成d(j)=0,则II处的方框内代码应改为:
小李基于选择排序算法编写了一个VB程序,功能如下:在文本框Text1中显示排序前的数据,单击“排序”按钮Command1,在文本框Text2中显示剔除重复数据后的升序排序结果。程序运行界面如下图所示。算法的思路:第i趟排序从a(i)….a(bottom)中查找最小值并记录其下标k,同时将后面的每个元素与a(i)比较是否重复,若发现重复数据,进行剔除处理;找到最小值与a(i)交换。

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

Const n = 10

Dim a(1 To n) As Integer

Private Sub Command1_Click()

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

  Dim k As Integer, bottom As Integer

  '获取排序前数据,依次存储在数组 a 中,并在文本框 Text1 中显示。代码略

  bottom = n: i = 1

  Do While i <= bottom - 1

    k = i: j = bottom

    Do While j > i

      If a(j) < a(k) Then

        k = j

      ElseIf a(j) = a(i) Then '若发现重复数据,进行剔除处理

        a(j) = a(bottom)

      IfThen k = j

        bottom = bottom - 1

      End If

      j = j - 1

    Loop

    If k <> i Then

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

    Else

     

    End If

  Loop

  For i = 1 To

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

  Next i

End Sub

在数据加密过程中,为了防止加密方法外泄,往往使用密钥,只有掌握了密钥才能正确加密、解密。某信息加密VB程序,对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文。该程序使用的密钥是一个2位十进制数。数据加密方法对明文中的每个字符进行如下处理:

①将该字符的ASCII码加密钥后,转换成对应的8位二进制;

②将对应的8位二进制数进行按位取反(1变0,0变1);

③将最后产生的8位二进制数转换成对应的十六进制数;

④将得到的十六进制数码交换顺序后连接,即为该明文的密文。

例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。

小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 如果输入的明文为大写字母“F",密钥为16,则生成的密文是
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Function btoh(m As String)As String     ‘将4位二进制数转换成对应的十六进制数

      Dim s As Integer, i As Integer

      Dim st As String

      st="0123456789ABCDEF"

      s=0

      For i=1 To 4

          s=s*2 +Val(Mid(m,i,1))

      Next i

         ①   

    End Function

    Private Sub Command1_Click( )

      Dim ans,ch,s,ret,s1,s2 As String

      Dim a,b,c As Integer

      s= Text1.Text

      c= Val(Text2.Text)

      For i = 1 To Len(s)

          ch=Mid(s,i,1)   ‘取出第i个字符存入变量ch

          a=Asc(ch)

          b=a+c

          ret = " "

          For m=1 To 8             ‘完成加密步骤①和步骤②

              n=(b+1)Mod 2

              ret =str(n)+ ret

                 ②   

          Next m

          s1 = btoh(Mid(ret,1,4))    ‘完成加密步骤③和步骤④

          s2 = btoh(Mid(ret,5,4))

          ans=ans +s2+s1

      Next i

      Text3.Text=ans

    End Sub

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②

语句If x=1 那么 y=1,下列说法正确的是(    )。
A . x=1和 y=1 均为赋值语句 B . x=1和 y=1均为关系表达式 C . x=1为关系表达式,y=1为赋值语句 D . x=1为赋值语句,y=1为关系表达
有如下Visual basic程序段:

a=2

b=5

If a<b Then

    m=a

Else

    m=b

End If

该程序段运行后,变量m的值为(   )。

A . “a” B . “b” C . 2 D . 5
求y=|x|的值,算法如图所示,该算法的描述方式是(   )。

A . 伪代码 B . 流程图 C . 自然语言 D . 高级语言
某学校拟开展“建党百年”系列活动,该学校学生会策划举办“建党100周年”演讲比赛,由该学生会的宣传部、文艺部和组织部同学共同筹备,为提高工作效率,明确工作职责,三个部门进行了分工。宣传部负责:①制作并发布演讲比赛的宣传海报②制定比赛规则及评分标准③邀请评委;文艺部负责:①组织选手报名②选定主持人③准备配乐和背景(PPT);组织部负责:①所需物品采买②比赛场地布置③设备调试。请用组织结构图将本次演讲比赛的筹备工作分工呈现出来。


有如下程序片段:

S = 0

For i = 2 to 100 step 2

    S = S + i

Next i

Print i

该段程序代码执行完毕后,i的值是(   )

A . 101 B . 102 C . 103 D . 104
某Python程序段如下:

m= 153

a=m// 100

b=m//10%10

c=m%10

n=a**3+b**3+c*3

print (n)

运行该程序段,输出结果是

下列程序的运行结果是(    )

PRIVATE SUB FORM_CLICK( )

  X=3 : Y=12

  IF X>2 THEN Y=3

  Y=5

  PRINT Y

END SUB

A . 2 B . 3 C . 5 D . 无结果
输入两个数,交换后在窗体上输出这两个数.

PRIVATE SUB FORM_CLICK( )

    A=VAL(INPUTBOX(“请输入第一个数”))

    B=VAL(INPUTBOX(“请输入第二个数”))

    T=A

   

   

   

END SUB

有如下Python程序段:

ma=a[0];mb=a[0];pa=0;pb=0

for i in range(1,10):

    if ma < a[i]:ma = a[i];pa=i

    if mb > a[i]:mb = a[i];pb=i

下列关于该程序段功能描述正确的是(     )

A . 变量pa存储a[0]至a[9]中的最大值 B . 变量ma存储a[0]至a[9]中的最小值 C . 变量pb存储a[0]至a[9]中的最大值 D . 变量mb存储a[0]至a[9]中的最小值
用python编辑器打开“”Y:\119“”下的文件“求最小公倍数.py,”,进行以下操作并保存结果。

算法描述:最小公倍数初始值设为较大数,如果能整除,则较大数就是最小公倍数;如果不能整除,让较大数乘以2,3,4...递增1的自然数,直到能整除为止。如输入“11,5”,输出结果为“55”,输入“8,12”,输出结果为“ 24″。

请填空完善该程序,实现功能:键盘上输入两个自然数m和 n(1≤n≤m≤1000),输出这两个数的最小公倍数。编写完成后原名保存并关闭应用软件。

m=int(input("请输入自然数m:"))

n=int(input("请输入自然数n:"))

i=1

if m<n:

    m,n= #两数交换(用大数翻倍)

s=m            #s的初始值较大数

while :

    i = i+1

    s =

print()