4.3 运用选择结构描述问题求解过程 知识点题库

某地区中考录取采用“平行志愿”的投档录取方式,该录取方式的具体规则为:

①根据考生的考试总分从高到低依次对考生的填报志愿进行投档;

②每位考生可填三个志愿学校,轮到该考生投档时依次对其三个志愿进行投档,若第一志愿学校还有剩余招生名额,就被第一志愿学校录取,结束该考生的投档,否则需对其后续志愿学校进行同样的投档操作,若该考生所填的所有志愿学校都没有剩余招生名额,则该考生无法被任何学校录取,该考生的投档结束。

③当所有学校都已完成计划招生数时,停止投档,录取结束。

编写 VB 程序,实现上述“平行志愿”投档录取的功能,单击“读取考生数据”按钮 Command1, 则从数据库中获取所有考生的成绩、志愿信息以及每个学校的计划招生数,单击“投档录取”按钮 Command2,开始进行投档录取, 并在列表框 List1 中输出每个学校的计划招生数、实际招生数、录取分数线和最低录取名次信息,程序运行界面如图所示。请回答下列问题:

  1. (1) 若A校计划招生520人,B校计划招生480人,C校计划招生540人,某同学的考分名次为490名,其三个志愿学校依次为B校、A校、C校,且已知同名次的人数最多有30人,则该同学不可能被哪所学校录取:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const schCnt = 5                     '学校数量

    Const stuMaxCnt = 10000             '最多考生人数

    Dim zsCnt(1 To schCnt) As Integer      '存储每个学校的计划招生人数

    Dim zsCnt2(1 To schCnt) As Integer     '存储每个学校的实际招生人数

    Dim a(1 To stuMaxCnt) As Single       '存储考生总分成绩

    Dim b(1 To stuMaxCnt * 3) As Integer    '存储考试志愿,每个考生有3个志愿,每个志愿为学校编号

    Dim stuCnt As Integer                  '实际考生总人数

    Private Sub Command1_Click()

    '从数据库中读取所有考生的总分和志愿信息存储到数组a和数组b中(第1个考生总分存储到a(1),第1个考生的3个志愿分别存储到b(1)、b(2)、b(3)中, …),然后按总分对数组a和数组b进行降序排序,总分相同时,需根据各科成绩决定排序先后,但名次相同,考生总人数存储到stuCnt变量中;

    '读取每个学校的计划招生数,存储到数组zsCnt中;

    '以上功能代码略

    End Sub

    Private Sub Command2_Click()

      Dim sch As Integer         '学校代码,用1~5中的一个数字表示某学校代码

      Dim i As Integer, j As Integer, finished As Integer, prevScore As Single

      Dim stuMc(1 To stuMaxCnt) As Integer

      Dim MinScore(1 To schCnt) As Single

      Dim MinMc(1 To schCnt) As Integer

      finished = 0: i = 1

      prevScore = -1

      Do While

        If a(i) = prevScore Then

          stuMc(i) = stuMc(i - 1)

        Else

          

        End If

        prevScore = a(i)

        For j = 1 To 3

          

          If zsCnt2(sch) < zsCnt(sch) Then

            zsCnt2(sch) = zsCnt2(sch) + 1

            MinScore(sch) = a(i)

            MinMc(sch) = stuMc(i)

            Exit For

          End If

        Next j

        finished = 0

        For j = 1 To schCnt

          If zsCnt2(j) = zsCnt(j) Then

            finished = finished + 1

          End If

        Next j

        i = i + 1

      Loop

    '在List1中输出每所学校的代码、计划招生数、实际招生数、录取分数线、最低录取名次,代码略

    End Sub

小王基于选择排序算法编写了一个VB程序,功能如下:数组a有n*n个元素,按n行n列进行排列,按列进行升序排序。例如6*6的数组,第一列将a(1),a(7),a(13),a(19),a(25),a(31)进行排序。运行程序,在列表框List1中显示n*n个数列单击“排序”按钮Command1,在列表框List2中显示排序后的结果,程序运行界面如图所示。请回答下列问题:

  1. (1) n=6时运行结果如图所示,图中1处“47”在数组a中下标是(填数字)。
  2. (2) 为了实现上述功能,请在划线处填写合适的代码。

    Const n =6

    Dim a(1 To n * n) As Integer

    Private Sub Form_Load()      '产生n*n个数组元素,每行按n个数显示在list1中

      For i = 1 To n * n

        a(i) = Int(Rnd * 90) + 10

        s = s + Str(a(i))

        IfThen

          List1.AddItem s

          s = ""

        End If

      Next i

    End Sub

    Private Sub Command1_Click()

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

      For i = 1 To n * n

        k = i

        For j = k + n To

          If a(k) > a(j) Then k = j

        Next j

        If _x0000_i1031 Then t = a(k): a(k) = a(i): a(i) = t

      Next i

    '将排序后数组a的元素,按每行n个数显示在list2中,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
查找并删除重复数据的算法是基于顺序查找的优化,主要思路是把待查数据的起点元素设置成查找关键字,然后从后往前查找,通过结束时所停留的数据位置来判断查找结果(即结束时若停留在数据序列的起点,则表示数据序列中无重复数据;否则,存在重复数据,删除该数据后继续查找)。

编写VB程序,实现上述算法。程序功能如下:运行程序时,在列表框List1中显示数组a中的原始数据,并在列表框List2中输出去重后的数组a中的数据,即相同的数据仅保留一个。同时在标签Label1中显示删除的数据总个数,运行效果如图所示,程序代码如下:

Const maxn=10

Dim a(1 To maxn)As Integer

Private Sub Form_Load( )

´maxn个数据在数组a中,并在列表框List1中显示

End Sub

Private Sub Command1_Click( )

  Dim i As Integer, n As Integer       ‘n用于存储当前查找的数字长度

  Dim j As Integer, key As Integer       ‘key用于存储本次查找的关键字的数据位置

    key=1:n=maxn

    Do While key<=n

    i=n-1

    Do While       ‘①

        i=i-1

    Loop

    If i=key Then        ‘找到重复数据,删除;未找到,设定下一查找关键字

       key=key+1

    Else

      For j=i To n-1

          a(j)=a(j+1)

      Next j

      n=n-1

    End If

  Loop

  For i= 1To n

      List2.AddItem a(i)

  Next i

  Labell.Caption="共删除重复数据:"&___________&"个"

End Sub

  1. (1) 程序代码“Sub Form_Load( )”中,Load是(单选,填字母:A .属性名/B .事件名/C .方法名/D .类名)。
  2. (2) 程序代码中,加框处循环条件有误,请改正。
  3. (3) 请将程序代码中的画线处赋值语句补充完整。
  4. (4) 如图所示的原始数据中,重复数是“1,7,10”,该程序运行时,最先删除的重复数是
在数据加密过程中,为了防止加密方法外泄,往往使用密钥,只有掌握了密钥才能正确加密、解密。某信息加密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

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

某股于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))

     ② 

下列程序用来判断一个单词是否是素单词:设定小写字母a-z对应的数字为1-26,大写字母A-Z对应的数字为27-52,将某个单词的所有字母按照其对应的数字求和,判断其和是否是素数,如果是输出“It is a prime word.”,反之则输出“It is not a prime word.”。如单词“Hello”,字母分别对应的数字为:34、5、12、12、15,其和为34+5+12+12+15=78,不是素数,因此单词“Hello”并不是素单词,在Label1中输出“It is not a prime word.”。(已知字母A的ASCII码值为65,a的ASCII码值为97)。程序运行界面如下图所示:

Private Sub Command1_Click( )

    Dim s As String, t As String, n As Integer

    Dim i As Integer, m As Integer

    s = Text1.Text

    n = Len(s)

    For i = 1 To n

        t = Mid(s,i,1)

        If t >= "A" And t <= "Z" Then

            m =        ①          

        ElseIf t >= "a" And t <= "z" Then

            m= m + Asc(t)- 96       ‘Asc(t)用于返回字符t的ASCII 码值

        End If

    Next i

    For i = 2 To m - 1

        If  Then Exit For

    Next i

    If       ②      Then

        Label1.Caption = "It is a prime word."

    Else

        Label1.Caption = "It is not a prime word."

    End If

End Sub

  1. (1) 请在划线处补充合适的代码。

     ② 

  2. (2) 加框处代码有误,请改正。
  3. (3) 若在Text1中输入单词Make,在label1中输出的结果是
从键盘上输入一个字符,当输入的是英文字母时,输出“输入的是英文字母”;当输入的是数字时,输出“输入的数字”;当输入的是其他字符时,输出“输入的是其他字符”。
四则混合运算是指加法、减法、乘法和除法四种混合运算。现有一程序可计算不带括号的“+”、“-”、“*”三则混合运算。在文本框Text 1中输入表达式(保证符合数学规范),单击“=”按钮Command 1后,在标签Label l中输出运算结果,程序界面如图所示。

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

    Private Sub Command1_Click( )

        Dims As String,ch As String

        Dim i As Integer,t As Integer

        Dim ans As Long,px As Long

        s=Text1.Text

        ans=0:t=0:px= 1

        For i=1 To Len(s)

            ch=Mid(s,i,1)

            IfThen

                t=t*10+Val(ch)

            Else

                px=px*t

               

                If ch= "_" Then

                   

                    px=-1

                End If

                t=0

            End If

        Next i

        Label 1.Caption=Str(ans+

    End Sub

  2. (2) 若删除加框处代码,在文本框Text1中输入表达式“3-2+2*3”,程序运行结束时标签Label1中显示的内容为
将以下程序段补充完整。

问题:输入一个正整数n,判断n是否为素数。要判断n是否为素数,最简单的方法是:统计2到n-1之间能整除n的整数个数s,若s大于0,则n不是素数,否则就是素数。根据以上方法,完善以下程序代码。

Dim n, s As Integer

n = Val(InputBox(“n=”))

s=0

For i=2 to

    If n Mod i = 0 then

        s=        ‘统计因数个数

    End If

Next i

IfThen

    Print n &“是素数”

Else

Print n &“不是素数”

End If

有如下VB程序段:

'给a(1)到a(6)各元素赋初值,代码略

For i= 1 To 6

    If i Mod 2<>0 Then

      If a(i) Mod 10> 5 Then

          a(i)= a(i)\ 10

      Else

         a(i)= a(i) Mod 10

      End If

    Else

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

    End If

Next i

程序运行后a(1)到a(6)的值分别是2,3,4,5,0,1,则a(1)到a(6)各元素的初始值可能是(      )

A . 26,1,4,2,8,3 B . 12,1,14,2,11,3 C . 15,1,2,3,4,5 D . 29,1,40,2,3,30
下面VB程序的功能是求100~999间被3除多2,被5除多3的所有整数,并统计符合条件的数的个数。

Private Sub Command1_Click( )

    Dim i As Integer, p As Integer

    p=0

    For i=100 To 999

        If  Then

            List1.AddItem Str(i)

           

        End If

    Next i

    List1.AddItem Str(p)

End Sub

为实现上述功能,请在程序划线处填入合适的语句。

如图1文本文件“score.txt”中保存着若干个学生某次测试的成绩,编写一个计算机程序,从该文件中读取每个学生分数,统计并输出各等级的学生人数,程序运行界面如图2所示。

根据分数判断其所属等级的标准如下:

分数段

90~100

80~89

70~79

60~69

60以下

等级

A

B

C

D

E

实现该功能的程序段如下,请完善程序:

def check(a):

    if     

        level[0]+=1

    elif int(a)>=80:

        level[1]+=1

    elif int(a)>=70:

        level[2]+=1

    elif int(a)>=60:

        level[3]+=1

    else:

f=open("score.txt","r")

score=f.readline( )

level=[0]*5

while score:

   

    score=f.readline()

f.close()

for i in range(0,5):

        print("等级"++"的人数为:",level[i])

世界上有很多国家向我国申购新冠疫苗。我国共有n个仓库存储疫苗,第i个仓库有疫苗a(i)(单位:万支,(单位:万支,下同)。现有m(n>=m)个国家向我国提出疫苗购买申请。我国计划将n个仓库中的疫苗全部分配给这m个国家。分配规则如下:①每个仓库中的疫苗只能作为一个整体分配给一个国家;②一个国家可以获得任意多个仓库的疫苗;③要求获得最多疫苗的国家与获得最少疫苗的国家之间疫苗数量差值最小;④若存在多个满足条件的分配方式,则输出最先找到的分配方式。

例如:若n=4,4个仓库中的疫苗数分别为50、13、80、27。若m=2,最小差值为10;若m=3,最小差值为40。

编写VB程序模拟上述功能,在文本框Text1中输入n(n≤15),在文本框Text2中输入m(m≤4),随机生成n个两位正整数,在列表框List1中输出。单击“计算”按钮Command1,在文本框Text3中输出最小差值,在列表框List2中输出每个国家获得疫苗的方案。程序运行界面如图所示。

  1. (1) 语句 List1.Clear 中的“Clear”属于(单选,填字母:A .对象名/B .属性名/C .方法名)。
  2. (2) 实现疫苗分配的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Const maxn = 15

        Dim n As Integer, i As Long, j As Long, k As Long, p As Integer, m As Integer

        Dim a(1 To maxn) As Long, f(1 To maxn) As Long

        Dim s(1 To maxn) As String, max As Long, min As Long, ans As Long, ansi As Long

        n = Val(Text1.Text): m = Val(Text2.Text)

        List1.Clear: List2.Clear: Randomize

        For i = 1 To n

              ① 

            List1.AddItem Str(a(i))

        Next i

        ans = 10000

        For i = 1 To m ^ n     '枚举所有的分配方案

            For j = 1 To m

                f(j) = 0

            Next j

            j = i: max = 0: min = 10000

            For k = 1 To n

                

                f(p) = f(p) + a(k)

                j = j \ m

            Next k

            For k = 1 To m

                If f(k) > max Then max = f(k)

                If f(k) < min Then min = f(k)

            Next k

            If    ②   Then

                ans = max - min

                   ③    

            End If

        Next i

        Text3.Text = Str(ans)

        For i = 1 To n

            j = ansi Mod m

            s(j + 1) = s(j + 1) + Str(a(i))

            ansi = ansi \ m

        Next i

        For i = 1 To m

            List2.AddItem s(i)

        Next i

    End Sub

     ② ③ 

  3. (3) 程序中加框处代码有错,请改正。
有如下VB程序段:

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

Dim s2 As String,pwd As String

s=Text1.Text:pwd="71zhYEAR":s2="":t=0

For i = 1 To Len(s)

    c=Mid(s,i,1)

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

        t=t*10+Val(c)

    Else

        s2=s2+Mid(pwd,t Mod 8+1,1)

    End If

Next i

Text2.Text=s2

运行该程序段,在文本框Text1中输入“20B13A8”,文本框Text2输出的是(   )

A . hY B . YE C . YE7 D . Hya
有如下VB 程序段:

s = Text1.Text: k = 1: maxlen = 1

For i = 2 To Len(s)

    If Mid(s, i - 1, 1) < Mid(s, i, 1) Then

        k = k + 1

    If k > maxlen Then maxlen = k

    Else

        k = 1

     End If

Next i

Label1.Caption = Str(maxlen)

在文本框Text1 中输入字符串“B3b8defhADot”,执行该程序段后,则标签Label1 中显示的内容为(    )

A . 1 B . 5 C . 8 D . 13
PRIVATE SUB FORM_CLICK( )

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

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

    C=VAL(INPUTBOX(“请输入第三个数”))

    M=A

    IF M>B THEN M=B

    IF M>C THEN M=C

    PRINT M

END SUB

A . 给出三个数中的大数 B . 给出三个数中的小数 C . 给出三个数中的某个数 D . 出错
哥德巴赫猜想是近代三大数学难题之一,即任一大于2的偶数,都可表示成两个素数之和。采用Python验证100以内哥德巴赫猜想的正确性,则划线处的代码为:(     )

import math

def isprime(num):

i=2

while i<=int(math.sqrt(num)):

  if num % i==0:

    return False

    i+=1

  return True

  n=6

  while n<=100:

    for j in range(3,int(n/2)):

      if                     :

        print (n,‘=’, j,‘+’, n-j)

n+=2

A . isprime(j) and isprime(n-j) B . isprime(j) and isprime(j+1) C . isprime(n) and isprime(j) D . isprime(j) and isprime(j-1)
下面是Python编写的练习本促销计价小程序,如果顾客购买62本练习本,程序会提示付款多少(       ) 

 

A . 93.00 B . 99.20 C . 99.80 D . 111.60
有如下代码:

x=int(input("请输入正整数x:"))

y=int(input("请输入正整数y:"))

while x <> y:

  if x > y:

     x = x - y

  else:

    y = y - x

若输入8、24,则x、y的值分别为(     )

A . 16  8 B . 8  -8 C . 4  2 D . 8  8
数组元素a(1)到a(n*2)为互不相等的正整数(n≥1),要在其中找到最大值和次大值,并分别存储到变量m1和m2中。实现该功能的VB程序段如下:

m1=0:m2=0

For i=1 To n * 2 Step 2

    If a(i)>a(i+1)Then

        t1=a(i):t2=a(i+1)

    Else

        t1=a(i+1):t2=a(i)

    End If

    If  Then

        m1=t1:m2=t2

    ElseIf  Then

        m2=m1:m1=t1

    ElseIf  Then

        m2=t1

    End If

Next i

上述程序段中方框处可选代码为:①t1>m1     ②t1>m2     ③t2>m1

则(1)(2)(3)处代码依次为(    )

A . ①②③ B . ②③① C . ③①② D . ③②①
最近更新