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

编写VB程序代码,实现如下功能:在文本框Text1中输入金额(整数)后,点击“转换”按钮Command1,则在文本框Text2中显示该金额的大写,程序运行界面如下图所示:

  1. (1) 要使窗体标题上显示的文本改为“人民币大小写”,可在其属性窗口中将属性的属性值改为“人民币大小写”。
  2. (2) 为了实现以上程序功能,使程序正常运行,请完善以下两处代码。

    Private Sub Command1_Click()

    Dim dx As String, dw As String

    Dim s As String, c As String

    Dim ch As String

    Dim i As Integer

    dx = "零壹贰叁肆伍陆柒捌玖拾"

    dw = "亿仟佰拾萬仟佰拾元"

    s = Text1.Text                        

    If  Len(s) > 9

        Text2.Text = "输入的数据超出所能转换的范围"

    Else

        For i = 1 To Len(s)          

           ch =  

           c = c + Mid(dx, Val(ch) + 1, 1) + Mid(dw, 9 - Len(s) + i, 1)

        Next i

        Text2.Text = c + "整"

    End If

    End Sub

  3. (3) 由上述算法可知,若在文本框Text1中输入“20”,则文本框Text2显示的结果为
【加试题】某数据存储算法如下:使用长度为n的一维数组h来存储m个不同整数型数据(m<n),数据的存储位置t根据存储数据的值除n取余计算得到。例如使用长度为11的数组来存储67,45,1 275,119,145,269,64共7个数据,先存储第1个数据67,67 Mod 11=1,在第1位置上没有数据,则存放在第1位置。第2个数据45,45 Mod 11=1,而在第1位置上已存有数据,那么查找下一位置有没有数据,现第2位置上没有数据,则存放在第2位置。在查找空位时如果到了数组最后一个位置还没有空位,则从头继续查找,以此类推……,举例数据存储结果如表所示。

位置

0

1

2

3

4

5

6

7

8

9

10

数据

64

67

45

145

269

119

1275

  1. (1) 若按上述规则,再存储一个数据79,则存储在第 位置。

     

  2. (2) 当n=97时,实现上述数据存储及相应数据查找的VB程序如下,运行结果如图所示,请在画线处填入合适的代码。

    Const n=97

    Dim d(0 To 96)As Integer,h(0 To 96)As Integer

    Dim m As Integer      ‘变量m为数据个数

    Private Sub Command1_Click()    ‘数据存储

        Dim i As Integer,t As Integer

        ‘从数据库读取数据先存储在数组d中,代码略

        List1.Clear

        For i=0 To n-1

             h(i)=-1    ‘数组元素初始化

        Next i

        For i=0 To m

        ① 

            Do While h(t)<>-1

                 t=(t+1)Mod l2

            Loop

            h(t)=d(i)

      Next i

      For i=0 To n-1

        List1.AddItem Str(i)&“:”&Str(h(i))

      Next i

    End Sub

    Private Sub Command2_Click()    ‘数据查找

        Dim x As Integer,Y As Integer,z As Integer

        x=Val(Text1.Text)

        y=x Mod n

        z=1

        Do While   ②  

            z=z+1

            y=(y+1)Mod n

        Loop

        If h(y)=x Then

            Label2.Caption=“共查找了”&Str(z)&“次,在第”&,Str(y)&“位置找到”

        Else

            Label2.Caption=“共查找了”&Str(z)&“次,没有找到”

        End If

    End Sub

     ② 

  3. (3) 数组h中的元素值初始化为-1表示含义是

     

有如下VB程序段:

i = 1: j = 6: c = 0: f = False

key = Val(Text1.Text)

Do While i<= j And Not f

  c = c + 1

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

  If key = a(m) Then f = True

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

Loop

数组元素a(1)到a(6)依次为“8,23,25,32,46,57”,文本框Text1的内容为“32”。执行程序后,下列说法不正确的是(   )

A . 变量c的值为3 B . 变量i的值为4 C . 变量j的值为4 D . 变量m的值为4
有 VB 程序段如下:

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

Key = 2

i = 1: j = 5: flag = False Do While i <= j And Not flag

m = (i + j) \ 2 If Key = a(m) Then

s = "找到第" + Str(m) + "个" flag = True: Exit Do

ElseIf Key < a(m) Then j = m - 1

Else

i = m + 1 End If

s = Str(m) + s Loop Label1.Caption = s

执行该程序段后,在标签 Label1 中显示的内容是(   )

A . 1  3 B . 3  1 C . 找到第 1 个 D . 找到第 2 个
某对分查找算法的VB程序段如下:

i = 1: j = 9: n = 0

key = val (Text1.text)

Do While i < = j

n=n+1

m = Fix((+j)/2)

If key=d(m) Then Exit Do     ‘Exit Do表示退出循环

If key < d (m) Then

  j = m-1

Else

  i=m+1

  End If

Loop

数组元素d(1)到d(9)的值依次为“7,12,18,2,39,58,61,72,86”。若该程序段运行结束后,n的值为2,则key的值是(  )

A . 39 B . 18或61 C . 18或72 D . 12或61
若数组元素d(1)到d(8)的值依次为“86,75,58,46,20,18,12,5”,查找某Key值的VB程序段如下:

n=0:i=1:j=8

Key=Val(Text 1.Text)

Do While i<=j

     m=(i+j)\2

     If Key=d(m) Then Exit Do     ‘Exit Do表示退出循环

     If Key>d(m) Then

       j=m-1:n=n-1

     Else

       i=m+1:n=n+1

     End If

Loop

Label 1.Caption=Str(n)

当输入不同的Key值, 运行该程序段后, 在标签Label1中显示的不同结果共有(  )

A . 5种 B . 6种 C . 7种 D . 8种
已知一无序数组a(下标1到n),通过引入数组b(下标1到n),使得a(b(1))≤a(b(2))≤a(b(3))≤……≤a(b(n))(示例如图所示),对这些有序数据可进行对分查找。则第一次查找时,中点位置m与中点值分别是(  )

A . m的值是Fix((1+n)/2),中点值是a(m) B . m的值是Fix((1+n)/2),中点值是a(b(m)) C . m的值是Fix((b(1))+b(n))/2),中点值是a(m) D . m的值是Fix((b(1))+b(n))/2),中点值是a(b(m))
当现有的软件无法解决问题时,我们可以利用编程语言自己编制程序解决问题。下列选项中用编程来解决比较合适的是(  )
A . 将一组统计数据转换成图表显示 B . 制作二维动画 C . 用计算机修复发黄的旧照片 D . 找出所有的4位水仙花数
已知数组元素a(1)到a(8)的值依次为89,78,57,56,45,34,23,12,若在Text1中输入12,然后执行以下程序段:

Key=Val(Text1.text)

Text2.Text= ""

i=1: j=8: f=False

Do While i <=j And Not f

m=(i+j)\2

If a(m)\10+a(m) mod 10 =Key Then

search =m: f=True

ElseIf a(m)\10+a(m) mod 10> Key Then

i=m+1

Else

j=m+1

End If

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

Loop

则在执行该程序段后,Text2中显示的内容是(  )

A . 56 78 67 B . 4 6 5 C . 4 2 3 D . 56 34 45
有如下 VB 程序段:

Function t(x As Integer) As Long

  If x = 1  Then t = 1

    ElseIf x = 2  Then

      t = 2

    Else

    t = t(x - 1) + t(x - 2)

  End If

End Function

Text1.Text = Str(t(8))

执行该程序段后,文本框 Text1 中显示的内容是(   )。

A . 21 B . 34 C . 55 D . 89
下列关于算法的描述正确的是(     )
A . 算法必须有输入 B . 算法必须有输出 C . 算法就是程序 D . 算法的步骤可以是无穷的
数列1,4,7,10,13,…的递推公式为(  )
A . f(1)=1:f(n)=n+3 B . f(1)=1:f(n)=n*2-1 C . f(1)=1:f(n)=n*2+1 D . f(1)=1:f(n)=f(n-1)+3
用Python编写程序,实现一元二次方程式ax2+bx+c=0(a≠0)的求解。输入系数a、b、c的值,输出方程可能的解。
  1. (1) 编写函数f实现一元二次方程根的判别式的求解。
  2. (2) 将下面程序划线①处的代码补充完整。

    import math

    a=int(input("a:"))

    b-int(input("b:"))

    c=int(input("c:"))

    if

        x1=((-1)*+s<+(:,),)))/(2*a)

        x2=((-1)*b-<+(f(),))/(2*a)

        print("x1=",x1,"x2=",x2)

    else:

    print("该方程式无解!")

  3. (3) (多选题)小明在调试程序时发现错误提示“NameError: name 'sqrt' is not defined" ,上述程序错误的语句是(     )

    A.a=int(input("a:"))

    B.x1=((-1)*b+sqrt(f(a,b,c)))/(2*a)

    C.x2=((-1)*b-sprt(f(a,b,c)))/(2*a)

    D.print("x1=",x1,"x2=",x2)

    应如何修改:

采集某市某辆出租车2007年2月20日全天行驶轨迹的数据集,如图所示。该数据集特征包括:出租车ID、时间、经度、纬度、夹角角度、出租车的瞬时速度和出租车载客状态。

  1. (1) 图所示数据集文件名为,出租车ID、时间、经度、纬度、夹角角度、出租车的瞬时速度和出租车载客状态数据的间隔符为,经度、纬度的数据类型为
  2. (2) 绘制该数据集中出租车行驶轨迹的Python程序如下,请在方框中填写合适的代码,完善程序。

    import matplotib. pyplot as plt

    def track(file):     #绘制GPS坐标轨迹

         jd=[ ]      #经度

         wd=[ ]       #纬度

         for line in open(file):

             #切分行数据生成列表

             line_data=line. split(',')

             #取轨迹坐标

            

             jd. append(x)

             wd. append(y)

         plt. plot(jd, wd)

    filename='Taxi_ 105. txt'

    track(filename)

    plt. show( )

  3. (3) 运行程序,绘制的图形如图所示。说说你从图中发现了什么。

  4. (4) 尝试编写Python程序,从该数据集中挖掘其他你感兴趣的信息。
下列问题适合使用枚举算法解决的是(   )
A . 计算已知半径的圆面积 B . 计程车计费 C . 校园歌曲大赛的成绩排名 D . 找出1000以内的所有素数
阅读下列用二分法查找输入的1000以内的整数次数的程序

x=int(input("请输入要查找的1000以内的整数:"))

step=0

flag1=1

flag2=1000

while(flag1<=flag2):

    mid=① 

    step=step+1

    if mid>x:

        flag2=②     

    elif mid<x:

        flag1=③   

    else:      

        break

print("查找次数为:",step)

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

下列说法正确的是(    )

A . ①处填(flag1+flag2)/2,②处填mid-1,③处填mid+1 B . ①处填(flag1+flag2)//2,②处填mid-1,③处填mid+1 C . ①处填(flag1+flag2)//2,②处填mid+1,③处填 mid-1 D . 以上都不对
下列有关算法的描述,错误的是(    )
A . 算法指的是解决问题或完成任务的一系列步骤 B . 算法的确定性是指算法中对于每个步骤的执行描述必须是明确的 C . 一个算法必须有一个或多个输入 D . 算法的三个要素是数据、运算和控制转移
某对分查找算法的VB程序段如下:

key = Val(Text1.Text)

s="" :i=1;j= 10

Do While i<=j

    m=(i+j)\2

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

    If key < a(m) Then

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

    Else

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

    End If

Loop

按非降序排序的整型数组a(1)到a( 10)的值依次为“11,23,31,39,44,52,60,x,69,89”。在文本框Text1中输入66,执行该程序段后s值为“RRL”,则x的可能值的个数为(    )

A . 3 B . 4 C . 5 D . 6
小明编写了一个查找替换的VB程序,其功能为:在一串由汉字、空格和标点符号组成的文本中,把文本中的某个字符串用另一个字符串替换。

程序界面如下图所示,程序运行时,在文本框Text1中输入一段文本,在文本框Text2中输入查找的字符串,在文本框Text3中输入替换为的字符串,单击“查找替换”按钮Command1,则在文本框Text4中输出替换后的文本,在标签Label6中显示替换的次数。

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

Private Sub Command1_Click()

    Dim st1 As String, st2 As String

    Dim i As Integer, n As Integer, count As Integer

    Dim st3 As String, ch As String, result As String

    result = “ ”

    st1 = Text1.Text

    st2 = Text2.Text

    st3 = Text3.Text

    len1 = Len(Text2.Text)

   

    result = “ ”

    i = 1

    Do While i <= n

       

        If ch = st2 Then

            result = result + st3

            count = count + 1

            i = i + len1

        Else

            

            i = i + 1

        End If

    Loop

    Text4.Text = result

    Label6.Caption = Str(count)

End Sub

某投资者将一段时间内的证券操作记录保存在文件“table.xlsx”中,部分界面如图a所示。

图 a

图 b

该投资者为了总结投资经验,编写如下程序, 对数据进行分析。请在划线处填入合适代码。

import pandas as pd

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']    #使图形中的中文正常编码显示

df = pd.read_excel ("table.xlsx")

print( ) print( )

#筛选出所有盈利的证券操作记录。

#输出表格中所有操作的总盈亏。

#以下代码功能为找出盈利最大的 10 只证券, 并呈现如图 b 所示的图表。

g = df.groupby("证券名称",as_index = False)

df1 = g.盈亏.sum()

df1 = 

print(df1[:10])

plt.figure(figsize = (8,4))

plt.title('盈利前十的证券对比分析图')

plt. (df1[:10].证券名称,df1[:10].盈亏,label = "盈亏")

plt.xlabel('证券名称')

plt.ylabel("盈亏金额")

plt.legend()  #显示图例

plt.show ()