第三章 算法的程序实现 知识点题库

在信息加工中,经常要对被处理的数据进行排序,数据的排序有多种方法,冒泡法是一种常用的排序方法,在排序时经常要进行数据的交换。下列四个选项中,(   )能正确地将x和y两个变量中的数据进行交换。  
A .   x=y  y=x B .   x=x-y  u=x+y  x=y-x C .   m=x  x=y  y=m D .   x=x+y  y=x-y x=x-y
关于程序编译,以下说法正确的是(   )。
A . 编译程序的执行方式类似于日常生活中的“同声翻译” B . 解释程序的工作主要包括编译、连接、装入等环节 C . C语言程序是编译执行的 D . BASIC语言程序是编译执行的
运动会田径比赛,记分裁判把各赛道运动员的成绩表交给录入员录入到计算机中,录入人员编制了如下程序。运行程序,按道次顺序依次输入8个成绩,道次号存放在数组a中,相应道次的运动员比赛成绩存放于数组b中,并将原始成绩显示在列表框List1 中。单击“成绩排序”按钮(Command1),将原始成绩从好到差排序,排序结果显示在列表框List2 中。运行效果如图所示。

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

  1. (1) 请在划线处填入合适代码。

    Dim a(1 To 8)As Integer   ‘存储道次编号

    Dim b(1 To 8)As Single   ‘存储运动员成绩

    Dim num As Integer

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, k As Integer, p As Integer

    Dim t As Single

    For i=1 To 7

     k=i

     For j=i+1 To 8

      If    Then

        k=j

      End If

     Next j

    If k<>i Then

        p=a(i):a(i)= a(k):a(k)= p

        t=b(i):b(i)= b(k):b(k)= t

    End If

    Next i

    For i=1 To 8

    List2.AddItem Str(a(i))&“道:”& Str(b(i))

    Next i

    End Sub

    Private Sub Text1_KeyPress(KeyAscii As Integer)    ’按回车键录入比赛成绩

    Dim cj As Single

    If KeyAscii=13 Then  ‘是否为回车键

    num=num+1

    cj=Val(Text1.Text)

    If cj>0 And num<=8 Then

       a(num)= num

      

       List1.AddItem Str(a(num))&“道:”&Str(b(num))

    Else

      MsgBox “输入无效”

    End If

    Text1.Text=“”

    End If

    End Sub

  2. (2) 在Command1_Click( ) 事件过程中使用的排序算法是 (选填:冒泡/选择)排序。
有如下 VB 程序段:

Function fact(n As Integer) As String

If n = 1 Then

    fact = fact & 1

Else

    fact = fact(n \ 2) & n Mod 2

End If

End Function

Private Sub Command1_Click()

Dim x As String, i As Integer, r As Integer

x = Text1.Text

For i = 1 To Len(Text1.Text)

If Mid(x, i, 1) = "." Then Exit For Next i

r = Val(Mid(x, i + 1, Len(Text1.Text) - i)) Text2.Text = fact(r)

End Sub

在文本框Text1中输入2019.70,则执行程序段,在文本框Text2中显示的内容是(  )

A . 1000110 B . 70 C . 350 D . 100011
VB表达式Len(mid(“VBis Very Good”,5,4)的计算结果是(  )
A . “Very” B . ”sVery” C . 4 D . 5
编写一个删除数字字符串s中的最大和次大数字字符的程序。具体功能如下:在文本框Text1中输入一个数字字符串,单击“删数”按钮Command1,将删除后的结果显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 要使程序运行时,按钮Command1上显示的标题为“删数”,可在Form_Load事件处理过程中添加语句(单选,填字母:A .Caption.Commandl="删数"/ B .Command1.Caption ="删数"/C .Caption="删数")。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command 1_Click()

      Dim s As String,ch As String

      Dim i As Integer,n As Integer

      Dim max1 As Integer,max2 As Integer

      s=Text1.Text:n=Len(Text1.Text)

      If Mid(s,1,1)>Mid(s,2,1)Then

        max 1=1:max2=2

      Else

        max1=2:max2=1

      End If

      For i=3 To n

      ch=Mid(s,i,1)

        If ch>Mid(s,max1,1)Then

            ①   

          max1=i

        ElseIf ch>=Mid(s,max2,1)Then

          max2=i

        End If

      Next i

      For i=1To n

        If   ②  Then Text2.Text=Text2.Text&Mid(s,i,1)

      Next i

    End Sub

     ②

  3. (3) 若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是
某医院接受捐赠物资,各项物资数据包含编号、品名和收支数量。编号构成规则是:急需等级(单个大写字母,由高到低划分为A、B、C三个等级)+物资种别(单个大写字母,至多有A~Z共26种)。为提高库存管理效率,现需要整理物资库存,要求:先对同种物资数量进行合并统计;然后按各种物资库存量,更新其急需等级,并依等级由高到低分类显示。等级划分规则为:当库存量低于3天所需,设置为A级;当库存量低于7天所需,设置为B级;否则设置为C级。

按上述要求,编写一个VB程序,功能如下:在列表框List1中显示整理前的所有物资相关数据,单击“库存合并统计”按钮Command1,在列表框List2中显示整理结果,程序运行界面如图所示。

  1. (1) 由图中示例可知,急需等级发生变化的物资有种(填数字)。
  2. (2) 请在划线处填入合适的代码。

    Const n= 2000    ‘物资总项数

    Const nc = 26    ‘物资种别数,最多不会超过26

    Dim items(1 To n) As String, supplies(1 To n) As String, totals(1 To n) As Long

    Dim g(1 To2 * nc) As Long    ‘存储各种物资3天、7天的需求数量

    Dim b(1 To nc) As Long    ‘存储各种物资的库存量

    Dim c(1 To nc) As Long

    Dim q(1 To nc) As Integer

    Private Sub Form_Load()

    ‘本过程读取编号、品名、收支、需求的数据分别存储在数组items、supplies、totals、g数组中,并在List1中显示有关数据:g数组中g(1)、g(2)存储物资A的3天、7天的需求数量;g(3)、g(4)存储物资B的3天、7天的需求数……代码略

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, k As Integer, top As Integer, bottom As Integer

        Dim r As Long, s As String, t As Integer, m As Integer

        For i=1 To nc.

            b(i)=0:c(i)=0

        Next i

        For i=1 To n    ‘统计每种物资的库存量

        k = Asc(Mid(items(i), 2, 1))- Asc("A")+1

          ①  

        c(k)=i

    Next i

    j=0

    For i=1 To nc

        If c(i)<>0 Then j=j+1: q(j)=i

    Next i

    top = 0: bottom=j+ 1

    j=1: k=bottom-1

    Do While j<bottom    ‘按各种物资的需求量进行等级分类

        m=q(j)

          ② 

        If r<g(2*m-1) Then

            top=top+1

            If top<>j Then t= q(top): q(top)=q(j): q(j)=t

            j=j+1

        ElseIf r>= g(2*m) Then

            bottom=bottom-1

            t= q(j): q(j)=q(bottom): q(bottom)=t

        Else

            j=j+1

        End If

    Loop

    List2.AddItem "编号  品名  库存"

        List2. AddItem "------------------------------"

        For i= 1 To k

            s= fp(i, top, bottom)

            List2.AddItem" " & s & " " & supplies(c(q(i))) & " " & b(q(i))

        Next i

    End Sub

    Function fp(pos As Integer, head As Integer, tail As Integer) As String

        If   ③   Then

            fp= "A"

        ElseIf pos < tail Then

            fp= "B"

        Else

            fp="C"

        End If

        fp = fp & Mid(items(c(q(pos))), 2, 1)

    End Function

     ② ③ 

表达式16/4-2^5*8/4 MOD 5\2的值为值是 (   )。 
A . 14 B . 4 C . 20 D . 2
阅读下列程序,写出运行结果

Dim a(10) as Integer

Dim i As Integer

Dim s As Integer

For i=1 to 5

  a(i)=i*1

Next i

s=a(3)+a(4)

Print s

上述程序运行后,变量s的值是 。

小温编写了一个有关环形数据排序的VB程序,实现如下功能:排序前的原始数据在窗体左边环形显示,单击“排序”按钮Command1后,原始数据中最小元素的位置固定不变,从该位置开始数据按逆时针升序,排序后的数据在右边环形显示。例如,排序前a(1)到a(10)的数据依次为“1,11,19,18,016,8,9,17,4",按顺时针顺序在窗体左边环形显示,则排序后a(1)到a(10)的数据依次为9,4,1,19,18,17,16,11",在窗体右边环形显示。程序运行界面如图所示。

请回答下列问题。

  1. (1) 该环形数据排序的VB程序主要采用(选填:冒泡排序/选择排序)算法。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Constn= 10

    Dim a(1 To n) As Integer

    Private Sub Command1_ Click()

         Dim Left As Integer, Right As Integer, Lstart As Integer, Rstart As Integer

         Dim i As Integer, j As Integer, t As Integer, s As String

         '随机生成n个不重复元素的数组a,并在左边环形显示,代码略

         k= 1

         For i= 2 Ton

             If a(i) < a(k) Thenk=i

         Next i

         Lstart = (k+n- 2) Mod n+ 1: Rstart= k Mod n+ 1

         i= 1

         Do Whilei<= (n-1)\2

             Left = Lstart

             For j= 1 To

                 p= (Left+ n-2) Mod n+ 1

                 If a(Left) > a(p) Then

                     t= a(Left): a(Left) = a(p): a(p)= t

                 End If

                 Left= p

             Next j

             Rstart= Rstart Mod n + 1

             Right = Rstart

             Do While

                 p=RightModn+1

                 If  Then

                     t= a(Right): a(Right) = a(p): a(p)=t

                 End If

                 Right= p

             Loop

             Lstart =

              i=i+ 1

         Loop

         排序后的数据在右边环形显示,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
平面上有n(3≤n≤100)个房间围成一圈,编号分别为1~n,相邻的两个房间之间均有一扇门,第i个房间最多居住的人数为a(i)。初始时选择一个房间,将所有人都聚集在该房间,接着每个人都可以按顺时针方向走到相邻的房间,直到找到居住的房间。最后各个房间刚好都住满。一个人每经过一扇门花费1个单位的能量,请确定初始房间及每个人找房间的方案,使得所有人花费的能量的和最小。例如:n=5,a(1)=4,a(2)=7,a(3)=8,a(4)=6,a(5)=4。

最佳方案为初始时所有人聚集在2号房间,此时花费的最小能量为7×0+8×1+6×2+4×3+4×4=48。

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

Dim a(1 To 100)As Integer       ‘依次存储编号为1到100的房间的最多居住人数

Private Sub Form_Load( )

    ‘产生n的值

    ‘本过程从数据库中依次读取编号为1到n的房间的最多居住人数,并存储在数组a中

    ‘代码略

End Sub

Private Sub Command1_Click( )

  Dim i As Integer,j As Integer,w As Integer

  Dim t As Long,ans As Long

  ans=32767

  For i=1To n

    t=0

    For j=0 To n-1

                      ‘①

      If w=0 Then w=n

                    ‘②

    Next j

    If t<ans Then ans=t

  Next i

  Text2.Text=Str(ans)

End Sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

小明经常将数学运算符与Python运算符相混淆导致程序出错,请你帮他将下列错误的表达式改写成正确的Python表达式。

数学问题

错误的表达式

正确的表达式

⑴判断a是否能被b整除

a//b=0

⑵求二进制数1011的十进制数值

1×23+0×22+1×21+1×20

程序设计题:身份证的编码问题。中国大陆居民身份证号码由18位数字组成:第1至6位的数字为地址代码,表示某省某市某区或县;第7至14位的数字代表居民的出生年月日;第15至17位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示。

校验码的计算方法如下:

①将身份证号码的前17位数字分别乘以对应的系数。对应关系如下:

号码位

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

系数

7

9

10

5

8

4

2

1

6

3

7

9

10

5

8

4

2

②将17位数字和系数相乘的结果累计求和;

③用所求的和除以11得到余数;

④用余数与身份证号码的最后一位校验码进行对应,对应关系如下:

余数

0

1

2

3

4

5

6

7

8

9

10

校验码

1

0

X

9

8

7

6

5

4

3

2

  1. (1) 小明身份证号码的前17位为33900520020808621,则他的第18位校验码为 。
  2. (2) 小明想设计一个Python程序用于身份证号码验证,实现如下功能:输入身份证号码,输出出生日期、性别,实现判断最后一位校验码是否正确。部分程序代码如下所示,请补全代码并上机调试。

    ID=input("请输入十八位身份证号码: ")#输入身份证号码

    sex={0:"女",1:"男",2:"女",3:"男",4:女,5:"男": 6:"女",7:"男"."8:"女",9:"男"}

    ID_ birth=ID[6:14]

    ID_ sex=ID[16]

    ID_ check=ID[17]

    #求出year,month,day

         ①  

    print("出生日期: "+year+"年"+ month+"月"+day+"日")

    print("性别:",   ②    )

    ID=list(ID)                    #把字符串转成列表

    ID=list(map(int, ID[0:17]))   #把前17个元素转成整型

    ID_ CHECK=["1","0'","X'","9“,"8","7”,"6“,"5”,"4","3","2"]

        ③    

    #用列表存储每一位权值

    #17位数字和系数相乘的结果累计求和

    #求余数

    #求验证码

    print("验证码是否正确:", check-= =ID_check)

编写Python程序进行成绩分析,学号为1~ 10号同学的信息技术学科成绩依次存储在列表xx中,部分程序代码如下,请回答下列问题:

xx=[35,29,28,42,21,38,17,44,18,19]

sum=0

for i in           

sum=sum+i

          

print("信息学科平均分为:"+str(ave))

  1. (1) 程序中划线处应填入的代码是什么?
  2. (2) 学号为1~ 10号同学的通用技术学科成绩依次存储在列表ty中,若要实现统计技术学科分数(技术学科分数为信息技术与通用技术两学科分数之和)大于等于80分的人数,则程序中划线处应填代码是什么?

    xx=[35,29,28,42,21 ,38,17,44,18,19]

    ty=[29,31,26,38,40,41,26,41,21,33]

    c=0

    for i in :

         if :

         c=c+1

    print("技术学科分数大于等于80分的学生有:"str(c)+"个"

现实生活中有许多工作可以通过编程来解决。下列描述中,不宜使用编程来处理的是(   )
A . 灭火比赛机器人驱动系统 B . 学籍管理系统 C . 编辑一份《调查报告》 D . “神舟八号”发射管理系统
有如下ⅤB程序段:

a(1)=68:a(2)=88:a(3)=76:a(4)=60:a(5)=98

a(6)=100:a(7)=64:a(8)=85:a(9)=99:a(10)=59

For i=1 to 9

    b(i)=Abs(a(i +1)-a(i))

    c(b(i)\10)=c(b(i)\10)+1

Next i

For i = 0 To 10

    If c(i)> 0 Then Label1. Caption = Label1. Caption + " "+Str(c(i))

Next i

数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是(   )

A . 2 3 2 1 1 B . 1 3 2 2 1 C . 2 3 2 2 1 D . 1 3 2 1 2
若用整数型变量K表示某天是星期几(例如:k=1表示该天是星期一,k=2表示该天是星期二,……,k=7表示该天是星期日),则下列能正确表示k的下一天是星期几的VB表达式是(   )
A . k+1 B . k mod 7+1 C . (k+1) mod 7 D . (k+1) mod 7-1
在python中,运行下列程序,正确的结果是(   )

x=1

while x>0:

    x=x+1

print( x)

A . 1 B . 1 2 3 4 5 6 7 8 9…… C . 无输出 D . 100
已知海伦公式,其中,a、b、c分别为三角形的三条边长。利用海伦公式求三角形面积的算法属于(     )
A . 穷举法 B . 排序法 C . 解析法 D . 查找法
级差又称范围误差及一组数据中,最大值减最小值后所得数据。用Python编辑器打开“Y:\87”下的文件”极差.PY“,请完善程序并保存结果。
  1. (1) 请填空,完善该程序。实现功能:求出一组数据的极差并输出。

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

    m=int(input("请输入一组数据的第一个数:"))

    =m

    max=m 

    for i in range(1,n):

        t=int(input("请输入后续的数:"))

        if  t<:

             min=t 

        if  t>max:

             

    print()  #输出极差的值

    input("运行完毕,请按回车键退出...")

    编写完成后原名保存并关闭应用软件。

最近更新