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

编写VB程序,实现如下功能:在文本框Text1中输入发放红包的总金额s,在文本框Text2中输入发放红包的个数n,单击“分配”按钮(Command1),为n个红包随机分配金额,并在列表框List1中显示分配后的这些金额。界面如图14题-1图所示。

1图

2图

  1. (1) 在设计应用程序界面时,应使用2图所示“控件工具箱”中的(填写相应编号)添加列表框List1;并设置文本框Text1和Text2的属性的值为空。
  2. (2) 为实现上述功能,请在划线①②③处填入合适代码。

    Private Sub Command1_Click()

    Dim s As Single, x As Single, n As Integer, i As Integer

    Randomize

    List1.Clear

    s =

    n = Val(Text2.Text)

    For i = 1 To n - 1                 '通过循环语句产生n-1个红包的随机值

       x = Int((Rnd() * s / () + 0.005) * 100) / 100 

       List1.AddItem  Str(x)

       s =

    Next i

      x = Int((s + 0.005) * 100) / 100        '产生最后一个红包

    List1.AddItem Str (x)

    End Sub

编写VB程序,实现如下功能:在文本框Text1中输入某一年份,单击“天干地支与生肖”按钮Command1,在列表框List1中输出该年份开始的12个年份及对应的“天干地支”与“生肖”,运行界面如图所示,程序代码如下。2

  1. (1) 代码“Private Sub Command1_Click()”中的Click是       。(单选,填字母)
    A . 对象名 B . 属性名 C . 事件名
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim a As Integer, b As Integer

    Dim i As Integer, n As Integer

    Dim c1 As String, s1 As String

    Dim c2 As String, s2 As String

    Dim c3 As String, s3 As String

    List1.Clear

    s1 = "甲乙丙丁戊己庚辛壬癸"

    s2 = "子丑寅卯辰巳午未申酉戌亥"

    s3 = "鼠牛虎兔龙蛇马羊猴鸡狗猪"

    n = Val(Text1.Text)

    For i = n To

       a = (i + 6) Mod 10

       b = (i + 8) Mod 12

       c1 = Mid(s1, a + 1, 1)

       c2 = Mid(s2, b + 1, 1)

       c3 = Mid(s3, b + 1, 1)

       List1.AddItem + "年" + c1 + c2 + " " + c3

    Next i

    End Sub

  3. (3) 由上述算法可知,2024年对应的“天干地支”为
【根据宁波效实中学2012学年第一学期高一信息技术期末试卷改编】将一个十进制正整数x转换成十六进制数的方法和转换成二进制类似,反复除16取余法,它的算法如下

    第一步:x被除16取余数r1,r1是所求的十六进制数的一个数(第一次就是个位数);

    第二步:r1转换成十六进制数的一个基数并转换成字符,追加到十六进制数S的左边;

    第三步:求出x被除16的商x1;

    第四步:对x1重复(1)、(2)、(3)过程,直至商为0;

    第五步:最后的S即为所求的十六进制数;

下列Visual Basic程序的功能是将一个十进制正整数x转换成十六进制数。界面如图所示,在文本框Text1中输入一个十进制数制,单击“十进制转十六进制按钮”(Command1)后,在文本框Text2中输出转换的结果。 相应的Visual Basic程序如下:

Private Sub Command1_Click()

  Dim s As String, r As Integer

  dec = val(Text1.Text)                  ’dec得到一个十进制整数,例如:255;

  base = 16                               ’base表示16

     s = ""                                ’s变量存放要转换到的十六进制整数;

     Do While dec <> 0

          r =        ①   

          If r >= 10 Then                     ’如果base>10进制,r可能>10;

             s = Chr(65 + (r - 10)) + s   ’Chr (65)="A", 16进制数A对应10;

          Else                            ’Chr(66)="B", 16进制数B对应11;
             s = Str(r) + s      ‘余数r<10时,十进制数和十六进制基数相同;
          End If                   ‘Chr (65 +( r - 10))或str(r)在s左边,实现了反次序输出;
          dec =     ②              
    Loop
   Text2.Text = s
End Sub
  1. (1) 在    ①     应填入(   )
    A . base Mod dec B . dec / base C . dec Mod base D . dec \ base
  2. (2) 在   ②     应填入(   )
    A . base Mod dec B . dec / base C . dec Mod base D . dec \ base
某算法流程图如图所示,执行该算法,输出n的结果是(   )

A . 4 B . 8 C . 12 D . 18
利用格里高利公式  求 ,直到最后一项的值小于0.0001为止,输出 的值。

Private Sub Command1_Click()

    Dim Pi As Single, t  As Single

    Dim n As Integer, s As Integer

    Pi = 0

    t = 1: n = 1:s =1

    Do While Abs(t) >= 0.0001

        Pi = Pi + t

        n =

        s=

        t = s *1 / n

    Loop

    Text2.Text =

End Sub

小李父母开了一家农家乐,顾客可以到桔园自摘桔子,收费标准是门票每人20元,采摘的桔子每斤10元,付费时若能完成小游戏则有优惠。

用VB软件设计的自摘收费程序,功能如下:在文本框Textl中输入自摘的人数n,在文本框Text2中输入摘得桔子重量w。界面右上方是小游戏部分,程序在文本框Text3显示随机产生的桔子层数m,根据图中所示的堆桔子方法(第1层1个;第2层4个;第3层9个……),请顾客计算出m层桔子总数s,输入到文本框Text4中,单击“是否优惠计算”按钮Command1,就会在标签Label4中输出最后的费用f,并在标签Label7中给出提示是否“优惠后的费用”。运行效果如图所示: 

             

  1. (1) 自摘收费程序所用的算法是(填:解析算法/枚举算法)。
  2. (2) 为实现上述功能,请在划线①和②处填入合适的代码。

    Dim m As Integer

    Private Sub Command1_Click() 

    Dim n As Integer, s As Integer

    Dim w As Single, f As Single

    n = Val(Text1.Text)              '输入大人人数n

    w = Val(Text2.Text)             '输入重量w

    f = 20 * n + 10 * w              '计算无优惠的费用f

    s = 0

    For i = 1 To m                            '计算桔子总数

     s = s + i * i

    Next i

    If  s=  Then  '判断是否拿到优惠计算费用

         f = f * 0.5 + s * 0.3'计算优惠后的费用

         Label7.Caption = "恭喜你,这是优惠后的费用!"

    Else

         Label7.Caption = "很遗憾,你没有算对哦!"

    End If

    Label4.Caption = Str(f)        '输出最后的费用f

    End Sub

    Private Sub Form_Load()

    Randomize

    m =               '随机产生15层及以内的桔子层数不含0

    Text3.Text = Str(m)

    End Sub

  3. (3) 若3位顾客摘得5斤桔子,游戏中需要计算出3层桔子的总个数,但是他们没有算对桔子个数,在text4中输入了16,那么这3位顾客需付总费用元。
小王编写了一个“学生体能情况分析”程序,其功能是分项计算名次和优秀率(分数90分及以上为优秀)。运行程序时,在列表框List1中显示所有学生的3项体能测试分数,在文本框Text1中输入测试项目代码(1表示游泳,2表示跑步,3表示跳远),单击“计算”按钮Command1后,计算结果分别显示在列表框List2和标签Label2中。程序运行界面如图1所示。

 

程序设计过程中数据的存储和计算方法如下:

⑴学生体能分数的存储:如图2所示,第1位学生的游泳、跑步、跳远分数依次存入数组score的第1、2、3个元素里,第2位学生的游泳、跑步、跳远分数依次存入数组score的第4、5、6个元素里,以此类推。

⑵计算名次的算法:先统计每个分数的个数,存入数组a,如图3中a(96)值为9,表示共有9个96分;然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次存入数组b,分数相同时名次并列,如图3中b(96)值为10,表示96分的名次是(并列)第10名,以此类推。

请回答下列问题:

  1. (1) 根据图1中列表框List1中的信息和图2所示的数据存储方法可知,数组元素score(23)的值为(填数字)。
  2. (2) 实现上述功能的VB程序如下,请在①、②、③的划线处填入合适的代码。

    Dim m As Integer   ' 学生人数

    Dim score(1 To 3000) As Integer  ' 存放学生分数

    Dim xm(1 To 1000) As String  ' 存放学生姓名

    Private Sub Command1_Click()

    Dim i As Integer, t As Integer, code As Integer, mc As Integer

    Dim a(0 To 100) As Integer  '存放每个分数的个数

    Dim b(0 To 100) As Integer  '存放每个分数的名次

    Dim code_n(1 To 3) As String

    code_n(1) = "游泳" : code_n(2) = "跑步" : code_n(3) = "跳远"

    code = Val(Text1.Text) 

    For i = 0 To 100

      a(i) = 0

    Next i

    sum = 0

    For i = 1 To m  '计算每个分数的个数及体能测试优秀的人数

      t =      ①       

      a(score(t)) = a(score(t)) + 1

      If score(t) >= 90 Then sum = sum + 1

    Next i

    mc = 1

    For i = 100 To 0 Step -1  '计算每个分数的名次

      If a(i) <> 0 Then

        b(i) = mc

        mc =       ②          

      End If

    Next i

    List2.Clear

    List2.AddItem " 姓名  " +        ③          + "  名次"

    For i = 1 To m

      '在List2中输出m个学生的姓名、指定项目的分数及名次,代码略

    Next i

    sum = Int(sum / m * 10000 + 0.5) / 100

    Label2.Caption = "优秀率是:" + Str(sum) +"%"

    End Sub

    Private Sub Form_Load()

    ’从数据库读取姓名存入数组xm,体能测试数据存入数组score,总人数存入变量m。

    ’代码略

    End Sub

两个10进制大整数相加可以用数组的方法逐位相加来实现,小王同学制作了如图的VB程序,以实现求2个50位以内的10进制整数的和。

  1. (1) 根据程序代码,该事件过程名为
  2. (2) 把代码补充完整。

    Private Sub Command1_Click()

    Dim a(1 To 51) As Integer, b(1 To 51) As Integer, c(1 To 51) As Integer Dim lens1 As String, lens2 As String

    lens1 = Len(Text1.Text) :lens2 = Len(Text2.Text)

    For i = Len(Text1.Text) To 1 Step -1    ‘读取数据,逐位保存在数组中

        a(i) = Mid(Text1.Text, lens1 - i + 1, 1) Next i

    For i = Len(Text2.Text) To 1 Step -1

        b(i) = Mid(Text2.Text, lens2 - i + 1, 1) Next i

    For i = 1 To 51     ‘从个位到高位逐位求和

        c(i) = 

        If c(i) > 9 Then

            c(i) = c(i) - 10

            c(i + 1)= 

        End If Next i

    f = False  '从左到右输出第一个不为 0 的元素开始从高位到低位输出和

    For i = 51 To 1 Step -1

        If c(i) <> 0 Then f = True

        If f Then Text3.Text = Text3.Text & c(i) Next i

    End Sub

  3. (3) 图中,为了使Text1和Text2文本框在Form1界面上能够左对齐,需要更改Text1的Left属性,则可以在Form_Load()中添加代码Text1.Left= 
简化的VB词频统计程序。程序功能为:在文本框Text1中输入一篇英文文章,在文本框Text2中输入一个英文单词,单机“统计”按钮Command1后,在文本框Text3中显示这个英文单词出现的次数。程序运行界面如图所示。

查找的英文单词由连续的ASCII英文字符(a~z或A~Z)组成。组合词程序会进行分解,如river-small可拆分为2个单词river和small,查找的英文单词不区分大小写。程序代码如下,但加框处代码有错,请改正:

Private Sub Command1_Click()

Dim article As String,f As String,count As Integer

Dim i As Intege,,begin As Integer,s As String

article=Text1.Text : f=Text2.Text : count=0

begin = 1

For i=1 To Len(article)

   t = Mid(article,i,1)

   If Not(t>="A"And t<="Z" Or t>="a" And t<="z") Then

     If i > begin Then

        s =      '①

        If LowerCase(f)=LowerCase(s) Then

            count = count+1

        End If

      End If

          begin = i + 1

     End If  

  Next i

    Text3.Text=Str(count)

End Sub

Function LowerCase(word As String) As String    '单词转化为全小写的形式

Dim i As Integer,c As String

For i=1 To Len(word)

   c = Mid(word,i,1)

   '小写英文字母的ASCII码值比大写字母的值大32

   If c>="A" And c<="Z" Then c =    '②

   LowerCase = LowerCase + c

Next i

End Function

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

;②

目前部分手机的短信具有“提取详情”的功能,即针对一条短信,可以提取出短信中一些关 键的信息。现编写 VB.程序实现如下功能:在文本框 Text1 中输入短信内容,点击“提取”按钮, 将短信中的数字以“,”间隔输出到文本框 Text2 中。程序运行界面如图1所示。

  1. (1) 在设计程序界面时,图2中控件(填数字)未在程序窗体中使用。
  2. (2) 请根据题意将下列程序补充完整

    Private Sub Command1_Click()

    Dim msg As String, c As String, tmp As String, s As String, flag As Boolean msg = Text1.Text

    msg = msg + "/" '标记字符串结束符

    tmp = "" s = ""

    flag = True

    For i = 1 To Len(msg)

        c = Mid(msg, i, 1)

            If ① Then flag = False

            tmp = tmp + c

            ElseIf flag = False Then s = s + tmp + ","

            tmp = ""

            ②

        End If

      Next i

      Text2.Text = s

    End Sub

  3. (3) 若程序未加“msg = msg + "/"”语句,则示例图1中提取后的数字信息为
将一个十进制正整数转化为二进制数可以采用“除二取余法”,主要方法就是将十进制数用2除,保存所得余数,然后将商的整数部分作为下次运算的被除数,重复上述“除二取余”操作,直到商的整数部分为零时停止。

程序界面如图所示,在文本框Text1中输入一个正整数,单击“转换”按钮(Command1)后,对应的二进制数在文本框Text2中显示出来。

解决此问题的Visual Basic程序如下,在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。

Private Sub Command1_Click()

 Dim x As Integer,s As String,r As Integer,t As Integer

x=Val(Text1.text)

s=“”

Do While ①      

 r=x Mod 2

s=Str(r)+s

x=②   

 Loop

 Text2.text=s

End Sub

  1. (1) 解决此问题所用的算法是。(选填:解析算法或枚举算法)
  2. (2) 程序中划线处①应填入
  3. (3) 程序中划线处②应填入
小明编写了一个简单算式计算器程序,功能如下:在文本框Text1中输入一个加法的算式,形式为a+b,a和b都为正整数,单击按钮 Command1后,在标签 Label1上显示算式的计算结果。程序运行界面如图所示。

  1. (1) 在设计程序界面时,应使用图b所示“控件工具箱”中的(填数字编号)添加标签对象。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1 _Click( )

    Dim key As String

    Dim a As Integer, b As Integer, ans As Integer, ch As String

    key =Text1.Text

    i=1

    Do While i <= Len (key)

        ch Mid(key, i, 1)

        If ch>= “0” And ch < = “9” Then

               ①   

        Else

            Exit Do   ‘退出循环

        End If

    Loop

    a=   ②  

    b= Val (Mid(key,+1, Len (key)-i))

    ans =a +b

    Label1. Caption= “算式计算结果为: “+str(ans)

    End Sub

     ② 

  3. (3) 程序运行时,在文本框中输入“123+10”,单击“计算”按钮后,对语句ch=Mid(key, i, 1)执行的次数是
“四环八数”幻圆指的是将1~32的自然数不重复地排列至4个同心圆环,实现各圆环上的数字之和均为132,8条半径上数字之和也均为66。

编写“幻圆求解”VB程序,实现如下功能:

单击“随机出题”按钮Command 1,按照圆环从外向里,每个圆环从12点位置开始按顺时针方向,将32个位置上的数字依次存入a数组,若某位置上的数字空缺则其值为0,空缺的数字最多不超过10个,并确保随机生成的数据有解,在列表框List 1中按4行8列的形式输出a(1) ~a(32)的值,若值为0则显示[]。

单击“显示结果”按钮Command 2,从第1个空缺位置开始,验证该位置是否为本行上的唯一空缺或是本列上的唯一空缺,如果不是则验证下一位置;否则输入其值并回到第1个空缺位置重新开始验证,直至所填满所有的空缺。最后,将结果按规定格式输出在列表框List 2中,程序运行界面如图所示:

  1. (1) 根据题意,结合图中给出的数据,第1个填入值的数组元素是     
    A . a(5) B . a(8) C . a(10) D . a(29)
  2. (2) 请在划线上填入合适的代码

    Dim a(1 To 32) As Integer

    Dim b( 1 To 10) As Integer

    Private SubCommand1_Click()

        '随机生成有解的数据,并在列表框

    List1中输出,代码略

    End Sub

    Private Sub Command2_Click()

        Dim n As Integer, i As Integer, x As Integer

    n=0

        For i= 1 To 32

            If a(i) = 0 Then

               n=n+1:b(n)=i

            End If

        Next i

        x=1

        Do While x<=n

            If a(b(x) ) = 0 Then

              If   ①   Then x= 0

            End If

            x=x+1

        Loop

        '将结果按规定格式在列表框List2中输出,代码略

    End Sub

    Function R check(x As Integer) As Boolean

        Dim count As Integer, sum As Integer, y As Integer, i As Integer

        check=False

        If a(x) <>0ThenExit Function

        count=0:sum=0:y=  ② 

        For i= 1 To 8

           If a(y*8+i) = 0 Then count =count+ 1

            sum=sum+a(y*8+i)

        Next i

        If count = 1 Then

            a(x)=   ③   :R check=True

        End If

    EndFunction

    Function C check(x As Integer) As Boolean

        '用于验证是否为本列唯一空缺, 如果是则填入值并返回True, 否则返回False

        '实现上述功能的代码略

    EndFunction

编写VB程序,实现如下功能:在文本框Text1中输入一个十进制整数,单击命令按钮Command1,在标签Label2上显示转换成十六进制数的结果,运行效果如图所示。

  1. (1) 在设计程序界面时,要使按钮Command1上的文字显示为“转化成十六进制”,应修改按钮Command1的属性。
  2. (2) 为实现上述功能,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim y As Integer, r As Integer

    Dim s As String, t As String

    t = "0123456789ABCDEF"

    s = ""

    y = ①

    Do While y > 0

     r = y Mod 16

     s = ②

     y = ③

    Loop

    Label2.Caption = Text1.Text + "转化成十六进制数为:" + str(s)

    End Sub

补全程序。

已知包含25项的数列:1,2/3,3/5,……,24/47,25/49

问题1:写出该数列的通项公式f(n)=

问题2:以下是计算s=1+2/3+3/5+……+24/47+25/49的程序,请补全代码。

Dim i As Integer

Dim s As Single

s = 0

For i = 1 To 25

s = s +

Next i

Print s

在日常生活中,我们常常会碰到许多可以用算法解决的问题,以下描述中适合用解析法来解决的有(     )。

① 已知5个电阻阻值,求它们并联后的阻值

② 求某个同学期中考试各科成绩总分

③ 求某个班级期中考试某门科目的最高成绩

④ 根据三个系数a、b、c的值,求一元二次方程ax2+bx+c=0的解

A . ①②③ B . ②③④ C . ①②④ D . ①②③④
铁路托运行李是根据行李的质量收费的,标准如下:若不超过50千克,按每千克0.35元收费;若超过50千克,超过部分则按每千克0.5元收费,但行李质量不得超过150千克。

设计一个VB程序,通过在文本框Text1输入托运行李的质量,计算并输出托运行李的费用,行李质量超过150千克,则显示“行李超重!”。结果在文本框Label1中显示。程序运行界面如图a所示。

  1. (1) 在设计程序界面时,应使用图b所示的“控件工具箱”中的(填写相应编号)添加“Label1”对象。
  2. (2) 解决铁路托运行李费用计算问题采用的算法是(填字母:A .解析算法/B .枚举算法)。
  3. (3) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim x As Double,y As Double

          ①    

      If x>150 Then

        Label1l.Caption="行李超重!"

      Else

        If   ②   Then

          y=0.35*50+0.5*(x-50)

        Else

          y=0.35*x

           ③   

        Label1.Caption="行李收费"+   ④   十"元"

      End If

    End Sub

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

模拟一个简易计算器,其功能是:输入两个数和一个运算符(加、减、乘、除),进行算术运算并输出运算结果。
  1. (1) 用Python语言编写的程序如下,请在划线处填入合适的语句或表达式,实现程序功能。

    a=flat(input("输入第一个数:")

    ch=

    b=float(input("输入第二个数:"))

    if ch== "+":

        print(a,ch,b,"=",a+b)

    elifch=="-":

        print(a,ch,b,"=",a-b)

    elif ch == *":

        print(a,ch,b,"=",a*b)

    elif ch == "/":

        if

            print(a,ch,b,"=",a/b)

        else:

            print("除数不能为0")

    else:

    print("运算符不正确")

  2. (2) 当输入的第一个数为4,输入的运算符为“\”,输入的第二个数为0,则程序输出的运算结果是(    )
    A . 0 B . 4 C . 除数不能为0 D . 运算符不正确
编写一个Python程序,实现功能:输入一个三位数,将该三位数各位上的数字重新排列得到一个新的三位数,求这些三位数中最大的三位数和最小的三位数。如输入123 ,输出最大数321、最小数123。
某股于3月21日起停牌进入配股缴款期,配股缴款截止日期为3月27日。由于配股后股价将除权,忘记或者不参与配股者或不是全额参与配股者,复牌后将面临损失。根据安排,该股本次配股价格为7.02元/股,按照每10股配售1.9股的比例向全体股东配售,其中:

配股除权价=(除权登记日收盘价+配股价×每股配股比例)/( 1+每股配股比例)

全额参与配股的最大配售量计算规则如下:

1)该股的配售比例是0.19。也就是说,假如你有10000股该股股份,最大配售量即为10000×0.19=1900(股)。

2)如果所获配股份额不足1股,那么0.65股及以上的为1股,0.65股以下的为0股。

回答下列问题:

  1. (1) 若该股的除权登记日收盘价为16.05元,则此次该股的配股除权价为元。
  2. (2) 假如你有15000股该股股份,最大配售量为股。
  3. (3) 如果不参与配股,该股配股除权后,将直接损失%。
  4. (4) 编写程序。用变量spj、pgj、bili、num、cqj、maxps分别存储除权登记日收盘价、配股价、每股配股比例持有的该股股份数、配股除权价和最大配售量。计算此次该股的配股除权价和最大参与配股配售量的Python程序如下,请在划线处添加合适的代码,完善程序,实现程序功能。

    flag=False

    pgj=7.02    #配股价

    bili=0.19    #每股配股比例

    spi-flatinput("请输入除权登记日收盘价:")

    num =floatinput("请输入持有的股份数:")

    cqj =     ①            #配股除权价

    maxps= num*bili      #最大配售量

    if      ②       :

        flag=True

    if flag :

        print("配股除权价", cqj,"最大配售量:" ,int(maxps)+1)

    else:

        print("配股除权价:", cq,"最大配售量:" ,nt(maxps))

     ② 

最近更新