解析算法及程序实现 知识点题库

小张设计了一个“加减运算练习”VB程序。界面如下图所示。单击“出题”Command1按钮显示两个运算数和运算符号,并计数。在文本框Text1中输入计算结果后单击“判断”按钮Command2,如果计算结果正确,则得分加10分,直至完成10题测试。VB程序如下,但加下划线处代码有错,请改正。

Dim n,s As Integer    'n为试题计数器,s为得分

Dim a, b As Integer  'a,b 为两个运算数

Dim c As String 'c为运算符:"+ "表示加法,"-"表示减法

Private Sub Form_Load()

n = 0:

s = 0

End Sub

Private Sub Command1_Click()   ‘出题按钮

Randomize

n = n + 1

If n < 11 Then

      Label1.Caption = "No:" + Str(n)

      a = Int(Rnd * 100)  'a,b为运算数,且要求a不小于b

      b = Int(Rnd * 100)

      If   Then t = a: a = b: b = t                '(1)

      If  Rnd > 0.5  Then c = "+" Else        '(2)

      Label5.Caption = Str(a) + c + Str(b) + "="

      Text1.Text = ""

Else

   Command1.Caption = "完成测试"

End If

End Sub

Private Sub Command2_Click()   ‘判断按钮

If c = "+" Then

             If   a + b = Val(Text1.Text) Then  s = s + 10

           Else

             If  Then  s = s + 10    '(3)

End If

Label3.Caption = "得分:" + Str(s)

End Sub

国内特快专递每200克为一个计费单位,200克以内22元,200克以上每续重200克(不足200克以200克计算)8元,现在要编写一个程序输入包裹重量自动计算出价格。解决上述问题,最合适的算法是(   )
A . 解析算法 B . 枚举算法 C . 排序算法 D . 递归算法
【加试题】小明编写了一个统计字符串中数字字符串之和的VB程序(如字符串“ab12.3cd34ef9”,中数字字符串之和为58:12+3+34+9),运行界面如图所示。在文本框Text1中输入字符串s,单击“统计”按钮Command1,在Label3中输出统计结果。

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

Private Sub Command1_Click()

  Dim s As String, ch As String

  Dim ch2 As String, sum As Double

  Dim n As Integer, i As Integer

  s = Text1.Text

  n = Len(s)

  i = 1: sum = 0

  Do While                                    '①

    ch = Mid(s, i, 1)

    If ch >= "0" And ch <= "9" Then

      j = i

      ch2 = Mid(s, j, 1)

      Do While ch2 >= "0" And ch2 <= "9"

        j = j + 1

        ch2 = Mid(s, j, 1)

      Loop

      sum = sum + Val( )     '②

      i = j

    End If

    i = i + 1

  Loop

  Label3.Caption = Str(sum)

End Sub

 ② 

小王和小李在学习二进制数时发明了一种“二进制骰子”的游戏:游戏双方轮流掷骰子,每人按顺序掷4次,点数是奇数时代表0,偶数时代表1,四次骰子点数依次从低位到高位组成一个4位的二进制数,其十进制的值就是最后的成绩,成绩高的胜出,相等则平局。如图a所示,四次掷出的骰子点数依次是3-1-4-2,则代表二进制数1100,最后的成绩就是12。

图a

图b

程序运行界面如图b所示,请回答以下问题。

  1. (1) 要想程序运行时自行清空文本框Text1中的内容,需要将语句“Text1.Text=″ ″”添加在过程(单选,填字母:A .Form_load()/B .Command1_Click()/C .Text1_Change())中。
  2. (2) 实现上述程序的VB代码如下,请在划线处填入合适的代码:

    Private Sub Command1_Click()

    Dim a(1 To 4) As Integer, b(1 To 4) As Integer

    '数组a存储骰子的点数,数组b存储对应的二进制数值

    Dim s As Integer

    Randomize

    List1.Clear

    c=0

    For i=1 To 4

    a=Int(Rnd*6)+1

    Ifthen b=1 Else b=0

    c=c+

    List1.AddItem ″第″+Str(i)+″次:″+Str(a)+″点″

    Next i

    Text1.Text=Str(c)

    End Sub

  3. (3) 若小王掷的点数依次是4-5-6-2,小李掷的点数依次是6-4-3-2,结果是(选填:小王胜/小李胜/平局)。
填空题
  1. (1) 使用二分法从数据1,3,6,9,15,16,45中查找数据16,共经过次查找就可以找到。
  2. (2) 定义一个数组如下:

    Dim a(10 to 20) as integer

    则此数组中元素的个数为

  3. (3) 法就是在分析具体问题的基础上,抽取出一个数学模型,这个数学模型能用若干个解析式表示出来,解决了这些表达式,问题也就得以解决。
  4. (4) 表达式Abs(-5)的值是
  5. (5) 将数学表达式gt2改写为VB表达式
小宇为选定班级参赛作品编写了一个VB程序,设计如下:在文本框 Text内输入5位评委对3个作品的评分数据(评委对作品的评分数据由3位十进制数组成,第1位对应作品编号,第2、3位对应作品得分,分值范围[60,99]。如“275”表示2号作品得分75)。单击“计分”按钮后,在标签 Labell中输出3个作品的平均分,在标签Label2中输出参赛的作品(选择最高平均分作品参赛,若最高平均分存在并列,则从并列作品中随机抽取)。程序运行界面如图所示。

  1. (1) “计分”按钮的对象名为
  2. (2) 程序部分代码如下,请在划线处填入合适代码。

    Private Sub jf click()

    Dim s As String, d As string, i As Integer

    Dim f1 As Single, f2 As Single, f3 As Single

    s= Text1. Text

    i=1

    Do while

    d= Mid(s,i,3)

    If Mid(d,1,1)="1"Then

    f1= f1+ Val(Mid(d.2.2))

    Else lf mid(d,1.1)="2 Then

    f2= f2+ Val(Mid(d,2,2)

    Else

    f3=f3+val(Mid(d. 2.2)

    End If

    Loop

    Labell. Caption=”作品1平均分为:"+Str(/5)+”作品2平均分为:" Str(2/5)+″作品3平均分为:"+Str(f3/5)

    ‘以下省略“处理并列最高平均分,并在 Label2中输出选取的参赛作品”的代码End Sub

  3. (3) 运行该程序时,在文本框Text1中以不同的顺序输入原评分数据:

    380/295/283/170/180/385/372/285/190/180/390/384/272/170/276,单击“计分”按钮,则Label1中显示的结果 (选填:会/不会)发生改变。

某计算机系统中,只采用ASCII码与GB2312两种编码,现在要统计某句话中有多少个ASCII字符,多少个GB2312字符。为了解决这个问题,某同学设计了一个VB程序,功能如下:在文本框Text1中输入待统计的句子,单击“统计”按钮Command1,则计算机会在标签Label2中输出统计结果。界面如第11题图所示:程序代码如下:

  1. (1) 若要将窗体中的“Form1”改为“字符串统计”,则应该修改窗体的 属性。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i As Integer, x As String, t As String

        Dim n As Integer, m As Integer

        x = Text1.Text

        For i = 1 To    

            t =

            If Asc(t) <= 127 And Asc(t) >= 0 Then

                n = n + 1

            Else

                m = m + 1

            End If

        Next i

        Label2.Caption = "共有ASCII字符" & n & "个,GB2312字符" & m & "个"

    End Sub

  3. (3) 若在文本框Text1中输入“学考Fighting^_^”,统计后GB2312字符有个。
【加试题】输入一个表达式(运算符号只有加减乘除和小括号,表达式是正确的,不需要检查),求表达式中最后一次运算的运算符号位置。比如表达式a*(b+c)-4+d最后一次运算的运算符号是在第10个位置的“+”,输出10。算法的思想是:从表达式右边开始往左边查找,对碰到的字符分四种情况考虑:

1)若是运算符“+”或“-”保存该位置并结束查找。

2)若是第一次碰到“*”或“/”,保存该位置,若不是第一次碰到“*”或“/”,继续往左边查找。

3)若是“)”,调用函数找到和它对应的“(”位置,跳过该括号,继续往左查找。

4)若是非运算符,继续往左查找。

运行界面如下图:

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

Function find(y As String , x As Integer ) As Integer

’该函数的功能是:返回表达式 y 中和位于第 x 位置的“)”配对的“(”的位置,代码略

End Function

Private Sub Commandl _ Click ()

Dim s As String ,  t As Integer ,  temp As Integer ,  p As Integer

s = Text1.  Text ‘输入表达式

t = Len (s):p = 0

Do While t>0

    If Mid ( s, t , 1) =“*” Or Mid ( s, t , 1) =“-” Then    ‘处理+、-

        temp=t

        Exit Do

    End If

    If ①  Then  处理 *、/

        temp = t

P=1 ‘用来标记乘号或除号已经出现了

    End If

    If Mid(s, t, 1)= ")"  Then     ‘处理括号

       

    End If

    t=t -1

Loop

Text 2.Text = Str (temp)

End Sub

 ② 

设有n盏灯,放在一排。从1 到 n依次顺序编号。有 n个人也从1到n依次编号。第1个人(1号)将灯全部关闭,第2个人(2号)将凡是2的倍数的灯打开,第3个人(3号)将凡是3的倍数的灯做相反处理(该灯如果为打开的,则将它关闭,如关闭的将它打开),以后的人和3号一样,将凡是自己号数倍数的灯做相反处理。问当n个人操作后,哪几盏灯是亮的。(亮灯为0,关闭为1)

为了实现这一目标,完善下列程序,使之能完成该功能。

Private Sub command1_click()

   Const n=20

   Dim i as integer,j as integer

   Dim a(1 to n) as integer

   For j=1 to n

      a(j)=0

   next j

   for i=1 to n

      for j=1 to n

         if j mod i=0 then

            

         End if

       Next j

    Next i

    For j=1 to n

       If  then list1.additem str(j)

    Next j

End Sub

编写VB程序, 实现如下功能:在文本框Text 1中输入二进制数, 单击“转换”命令按钮Command 1,在文本框Text 2中输出对应的十六进制数。程序界面如图所示, 请回答下列问题:

  1. (1) 如果输入的二进制数为“1101010”,则得到的结果为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Function bw(x As Integer, y As String) As String 

       '函数bw功能:若二进制位数不足,通过在前面添”0”使得位数为4的倍数

         Dim rAs Integer, i As Integer

         r=x Mod 4

         If r< 0 Then

           For i= 1 To 4-r

             y=”0”+y

           Next i

          x=Len(y)

        EndIf

        bw=

       End Function

       Private SubCommand 1 Click()

          Dim m As String, n As Integer, i As Integer, a As Integer

          Dim s As Integer, s1 As String, j As Integer

         m=Text 1.Text

         n=Len(m)

         Text 2.Text=””

         m=   ‘调整m的位数为4的倍数

         For i=1Ton-3Step 4

        s=0

        For j=i To i+ 3

           a=Val(Mid(m, j, 1) )

          s=

        Next j

        If s>= 10 Then

           s 1=Chr(Asc(”A”) +s-10)

        Else

           s 1=CStr(s)'函数CStr类似于Str,但无前导空格

        End If

        Text 2.Text=Text 2.Text+s1

      Next i

    End Sub

     ② ③ 

算法设计与程序实现

判断车牌的单双号

【背景知识】

为了保障空气质量,减少雾霾,某市决定当空气污染严重时,实行汽车单双号限行,违反规定的车辆将予以处罚。

如何让高清摄像头自动判断车牌的单双号,交警犯了愁,他需要编程高手的你帮忙,完善下面的程序。(提示:(1)所有车牌号中都含有数字,并且车牌号的长度都是6;(2)以车牌中最后一位阿拉伯数字的奇、偶来决定单双号。)

⑴输入:AD2367

⑵输入:A8888A

⑶输入:A8963C

输出:单号

输出:双号

输出:单号

【算法描述】

⑴自然语言

第1步:输入车牌号

第2步:取车牌号的最后一位x;

第3步:判断x是否为数字,如果是,转第4步;如果不是,则依次取得倒数第二、三……位判断,直到找到数字为止;

第4步:判断x 是奇数还是偶数,然后输出相应的结果。

⑵流程图

请根据上述算法描述补全代码

Dim n As Integer

Dim s As String       ‘定义s 为字符串类型

Dim x As String

s=InputBox(“s=”,s)     ‘将输入的车牌号赋值给s

n=6                 ‘车牌号的长度为6

x=Mid(s,n,1)     ‘取车牌号s的第n位

Do While x<“0” Or x>“9”  ‘x不是数字字符,则取x的前一位

        ①       

  x=Mid(s,n,1)          ‘取车牌号s的第n位

Loop

If        ②        then

    Print “双号”

Else

    Print “单号”

End If

(提示:Mid(s,m,n)的功能:从字符串s的第m位开始,截取长度为n的子串。例如:Mid(“A8963C”,5,1)的返回值是“3”。)

  1. (1) 根据题意,程序中横线①处应填写:
  2. (2) 根据题意,程序中空白②处应填写:______(填写字母:A/B/C/D)。
    A . Val(x)\ 2= 0 B . Val(x)Mod 2 = 1 C . Val(x) Mod 2=0 D . Val(x) Mod 2 <> 0
分析完善程序。

假设银行的年存储利率为3%,如果现在存储10000元钱,问多少年后连本带利超过12000元。设定:连本带利=本金*(1+利率)年数。

假设n年后连本带息超过12000,根据题意得出数学关系式:10000*(1+3%)n>12000,求最小的n。

Dim s as single

Dim r as single

Dim n as integer

s=10000

r=0.03

n=0

Do while            

   n=n+1

s=s*(1+r)

Loop

Print n;”年后”:”连本带利超过”;s

根据上述回答下列问题

  1. (1) 本题采用的算法是(填写:解析法/穷举法/排序法/递归法)
  2. (2) 写出参考程序中空白处表达式
小明在高中数学中学到了离散型随机变量的数学期望概念,即离散型随机变量的一切可能的取值Xi与对应的概率pi乘积之和称为该离散型随机变量的数学期望。公式为:

在程序设计课上,小明设计了一个程序用来计算离散型随机变量的数学期望,Text1中交替输入随机变量和相应概率,并以逗号“,”为分隔符,具体界面如下图所示。

  1. (1) 上图窗体标题“数学期望计算”是通过设置窗体的属性实现的。
  2. (2) 程序代码如下,下划线处填上合适代码。

    Private Sub Cmd_Click()

        Dim s As String, t As String, c As String,X As Single, p As Single, EX As Single

        Dim n As Integer, k As Integer

        s = Text1.Text

        n = Len(s)

        k = 0: EX = 0: t = ""

        For i = 1 To n

            c = Mid(s, i, 1)

            If c = "," Then

                k = k + 1

                If  Then

                    X = Val(t)

                Else

                    p = Val(t)

                    EX =

                End If

               

            Else

                t = t + c

            End If

        Next i

        Text2.Text =  

    End Sub

  3. (3) 若Text1中输入:“1,0.3,2,0.3,3,0.4,”,则单击“计算”按钮后,Text2中显示
小明编写了一个进制转换程序。程序运行时在文本框Text1中输入十进制数,单击“计算”按钮Command1后,结果在文本框Label1中显示。程序运行界面如图a所示。

  1. (1) 要使命令按钮上显示的“计算”改为“转换”,可在其属性窗口(图b)中将属性的属性值修改为“转换”。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim ch As String

      Dim n As Integer, x As Integer

      Dim ans As String

      ch="0123456789ABCDEF"

      n=    ①    

      Do While n>0

        x=n Mod 16

           ②   

        ans=   ③   

      Loop

      Label2.Caption="16进制:"+ans

    End Sub

    画线处应填入的代码为:①;②;③

程序分析题:算法设计与程序实现(每空4分,共8分)

已知a、b、c分别为三角形的三条边长,利用海伦公式求三角形面积 ,其中 编程实现:输入边长a,b,c,如果能构成三角形,输出面积,否则输出“No Answer !”

def cal():

a=int(txtl.get())

b=int(txt2.get())

c=int(txt3.get())

if:              :

  p= (atb+c)/2

  s=math. sqrt (p*(p-a)*(p-b)*(p-c))

  txt4.insert (0,str(s))

else:

  txt4.insert (0."No Answer!")

  1. (1) 利用海伦公式求三角形面积的算法是(填写:解析法/查找法/穷举法/排序法)。
  2. (2) 填写出参考程序中空白处的表达式              (填写字母: A/B/C/D)。
    A . a+b>c or  a+c>b  and  b+c>a B . a+b>c or  a+c>b  or   b+c>a C . a+b>c  and  a+c>b  or  b+c>a D . a+b>c  and  a+c>b  and  b+c>a
阅读程序,回答问题。
  1. (1) 将程序中的空白处补充完整。

    Private Sub Form_Click()

        Dim y, s, n As Integer

        n = InputBox("输入n")

        y = 0:

        Do While n \ 10 <> 0

            y = n Mod 10

            s = s + y

            n = n \ 10

        Loop

       

        Print s

    End Sub

  2. (2) 将流程图中的空白处补充完整。

    ①处应填写:;②处应填写:

  3. (3) 若输入n的值为62,程序执行完毕,s的值是,该程序采用类型的算法。(解析法/穷举法)
在平面坐标系中,给定任意个点,求出这些点中与点(1,1)距离最远的点。小李编写出了相应功能的程序:在文本框Text1中输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这些点到(1,1)的距离后,结果显示在列表框List1中,并且输出最大距离的点。程序运行界面如图所示。

  1. (1) 由图可知,窗体中的对象共有类;
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i, k As Integer

        Dim x1, y1, x2, y2 As Single

        Dim v As Single, maxd As Single

        Dim s As String, pos zb As String

        List1.Clear

        s=Text1.Text

        x1=1:y1=1

        t="": k=1: j=1

        List1.AddItem"坐标点"&"距离"

        For i=1 To Len(s)

            If Mid(s,i,1)="," Then

                v=Val(Mid(s, j, i-j))

                j=

                If k Mod 2=1 Then

                    x2=v

                Else

                    y2=v

                    d=Sqr((x2-x1)^2+(y2-y1)^2)

                    If Then

                        maxd=d

                        pos="(" & Str(x2)& "," & Str(y2)& ")"

                    End If

                    List1.AddItem"(" & Str(x2)& "," & Str(y2)& ")" & Str(d)

                End If

                k=k+1

            End If

        Next i

        Label1.Caption="距离(1, 1)最远的点为"& pos &"距离为"& Str(maxd)

    End Sub

  3. (3) 若文本框Text1中输入的内容为“31,41,26,51,1,56”,程序运行结束后,距离(1,1)最远的坐标点是
程序分析题:算法设计与程序实现

已知a、b、c分别为三角形的三条边长,利用海伦公式求三角形面积 , 其中编程实现:输入边长a,b,c,如果能构成三角形,输出面积,否则输出“No Answer !”

def cal( ):

a=int(txtl.get())

b=int(txt2.get())

c=int(txt3.get())

if:                  :

  p= (atb+c)/2

  s=math. sqrt (p*(p-a)*(p-b)*(p-c))

  txt4.insert (0,str(s))

else:

  txt4.insert (0."No Answer!")

  1. (1) 利用海伦公式求三角形面积的算法是(填写:解析法/查找法/穷举法/排序法)。
  2. (2) 填写出参考程序中空白处的表达式                 (填写字母: A/B/C/D)。
    A . a+b>c or  a+c>b  and  b+c>a B . a+b>c or  a+c>b  or   b+c>a C . a+b>c  and  a+c>b  or  b+c>a D . a+b>c  and  a+c>b  and  b+c>a
用VB程序解答百鸡问题

我国古代数学家张丘建在“算经”里提出一个数学史上有名的百鸡问题。题曰:鸡翁一,他钱五;鸡母一,值钱三;鸡雏三,值钱一:百钱买百鸡,问鸡翁、母、雏各几何?

请把以下算法选项填入到程序语句相对应的位置:

设i,j,k分别代表鸡翁、鸡母、鸡雏的只数。首先确定i,j,k的取值范围:

A 、若100个钱全买鸡母,则最多可买33只,即j的取值范围是0~33。

B 、若100个钱全买鸡翁,则最多可买20只,即i的取值范围是0~20。

C 、当i,j在各自的取值范围内确定某个值后,则鸡雏的只数,k=100-i-j也确定了。

D 、让i从0变化到20,当i取某值时再让j从0变化到33,当j取某个值时,k的值也定了。如果i*5+j*3+k/3=100成立则i,j,k当前的值就是答案。

先在窗体上绘制一个命令按钮,名称为Command1,编写命令按钮的单击事件。实现以上算法的程序如下:

Private Sub Command1_Click( )

    For i = 0 To 20

        For j= 0 To 33

            k=100-i-j(

            If i*5+j*3 + k/ 3 = 100 Then

            Print “鸡翁、鸡母、鸡雏分别为"& i & " " & j & " " & k & "只"

            End if

        Next j,

    Next i

End Sub

请计算出任意一种答案。鸡翁、鸡母、鸡雏分别有只。

以下问题中最适合用解析算法解决的问题是(    )
A . 将各班篮球比赛的成绩按从高到低的顺序进行排序 B . 居民电费的阶梯电价计算方法 C . 求三位正整数中的“水仙花数” D . 找出家中常备药中的过期药
最近更新