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

小张设计了某企业职工IC卡查询系统,输入职工的卡号,可以查出该卡号对应的余额。所有职工的IC卡号和相应的余额已分别保存在zg数组(按从小到大排序)和ye数组中,第i个职工卡号保存在zg(i)中,对应的卡号余额保存在ye(i)中。

程序界面如图所示,左边列表框List1中显示的是部分职工的卡号和余额,在文本框Text1中输入职工的IC卡号,单击“查询余额”按钮(Command1)后,如果找到此卡号,则在标签Lab3中显示“此卡号余额为”和对应的余额值,如果未找到则显示“找不到此卡号,请重新输入”。

 

解决此问题的部分程序段如下:

Const n=500' 设卡号总数为500

Dim zg(1 To n) As Long

Dim ye(1 To n) As Single

Private Sub Form1_Load()

' 此过程用于对数组zg和数组ye进行初始赋值,代码略

End Sub

Private Sub Command1_Click()

Dim x As Long, i As Long, j As Long, m As Long, find As Boolean

x=Val(Text1.Text)

i = 1 : j = n : find = False

Do While   ‘改错

     m = Int((i + j) / 2

     If x = zg(m)  Then

             ①     

     Else If        ②       Then

       j = m - 1

     Else

       i = m + 1

     End If

Loop

If find = true Then

       Lab3.Caption=″此卡号余额为″+Str(ye(m))+″元″

Else

       Lab3.Caption=″找不到此卡号,请重新输入″

End If

End Sub

  1. (1) 在设计程序界面时,要使命令按钮上显示“查询余额”,应修改命令按钮的属性值。
  2. (2) 程序中加框处代码有错,请改正。
  3. (3) 在程序①、②画线处填入适当的语句或表达式。将程序补充完整:

    程序中①画线处应填入

    程序中②画线处应填入

字符串数组a中a(1)到a(6)的原始数据为57,3,24,34, 6,120,为了对该数组进行排序操作,编写了以下VB程序。

i=2

Do While i<=6

  For j=6 To i+2 Step -2

    If a(j)>a(j-2)Then t=a(j):a(j)=a(j-2):a(j-2)=t

  Next j

  i=i+2

Loop

则程序运行之后,数组元素a(1)和a(2)的值分别是(  )

A . 6    3 B . 57    120 C . 120   57 D . 6    34
高精度除法常用于计算两个数位较大的数之间的除法运算,设被除数为s1,除数为s2,保存在字符串中。除法的基本思想是反复做减法,s1能够被s2减多少次,商就是多少。但是这样做显然比较慢。如下算法做了部分优化,以48695除以324为例:

①将324扩大100倍,32400只能被48695减去1次,则百位上的商是1;

②将324扩大10倍,3240能被前一次余的16295减去5次,则十位上的商就是5;

③对于324,不能被最后剩余的95减去,则个位上的商为0。所以最后的商的整数部分为150。

程序运行界面如图所示。

  1. (1) 根据该算法计算5731423除以23345,十位上的商是
  2. (2) 阅读以下程序,在画线处填入合适的代码。

    Dim s1, s2, s3, s, ans As String

    Dim tot As Integer, t As Integer

    Private Sub Command1_Click( )

      Dim a, b, i, j, length As Integer

      s1=Text1.Text:s2=Text2.Text:s3=""

      Length=Len(s1)-Len(s2)

      For i=1 To length

          s2=s2+"0"

      Next i

      For i=0 To length

          s=Mid(s2, 1, Len(s2)-1):tot=0

          Do While   ①   or(Len(s1)=Len(s)And s1>=s)

              tot=tot+1

              ans="":flag=False

              a=Len(s1):b=Len(s)

              For j=a To 1 Step-1

                  t=0

                  If flag Then

                    t=-1:flag=False

                  End If

              If b>0 Then

                  t=t+Val(Mid(s1, j, 1))-Val(Mid(s, b, 1))

              Else

                  t=    ②   

              End If

              If t<0 Then

                     ③  

                  flag=True

              End If

              ans=t&ans:b=b-1

            Next j

            s1=Val(ans)

        Loop

        s3=s3&tot

      Next i

      i=1

      Do While Mid(s3,i,1)="0"

            i=i+1

      Loop

      Text3.Text=Mid(s3,i,Len(s3))

    End Sub

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

两个长度相同的字符串s1和s2,若所含字符及各字符的数量均相等时可以归为一类。

如字符串“ABDAC”与字符串“AABCD”可以归为同一类,与“AABBC”不可以归为同一类。图图编写了一VB程序,功能如下:在文本框Text1中输入字符串s1,在文本框Text2中输入字符串s2,单击“判断”按钮Command1,在标签Label1中显示是否可以归为同一类的结果。部分运行界面如图所示。

请回答下列问题:

  1. (1) 要使窗体的标题栏文字显示为“同类字符判断”,则应设置窗体的 属性(单选,填字母:A .Text / B .Name /C .Caption)。
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim a(1 To 100) As Boolean

        Dim i As Integer, j As Integer

        Dim flag As Boolean

        s1 = Text1.Text

        s2 = Text2.Text

        flag = True

        For i = 1 To Len(s2)

            

        Next i

        If Len(s1) <> Len(s2) Then

            flag = False

        Else

        For i = 1 To Len(s1)

            c =

            j = 1

            Do While j <= Len(s2)

                If  Then

                    a(j) = False

                    Exit Do

                End If

               

            Loop

            If j = Len(s2) + 1 Then flag = False

        Next i

    End If

    If flag Then

        Label1.Caption = "可以归为同一类"

        Else

            Label1.Caption = "不可归为同一类"

        End If

    End Sub

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

Dim s1 As String, s2 As String, ch As String

Const code = "@*()^&#"

s1 = Text1.Text

For i = 1 To Len(s1)

    ch = Mid(s1, i, 1)

    If ch >= "a" And ch <= "z" Then

        t = (Asc(ch) - 65 + i) Mod 7

        s2 = Mid(code, t + 1, 1) + s2

    Else

        s2 = s2 + ch

    End If

Next i

Text2.Text = s2

若 text1 中输入字符“AbCd”,则 text2 中输出的是 (     )

A .  AC^@ B .  ^@AC C .  ^(@& D . A^C@
一家商场在降价促销,如果购买金额不高于200元,会给10%的折扣,如果购买金额高于200元,会给20%的折扣。编写一个Python程序,输入消费额(整数),显示折扣后的应付金额。
以下语句格式正确的是(    )。
A . if age < 18; B . if age < 18: C . if age < 18。 D . if age < 18.
有如下VB程序段:

Function fun(x As Integer) As Integer

    If x <= 2 Then

        fun = x

    Else

        fun = 2 * fun(x - 1) + fun(x - 2)

    End If

End Function

则表达式fun(5)的值为(   )

A . 12 B . 29 C . 30 D . 70
有如下VB程序段:

x = 4095 : s1 = "ABCDEFGHIJ" : s2 = "abcdefghij"

ret=""

Do While x > 0

    r = x Mod 10

    If r Mod 2 = 1 Then

        ret = Mid(s1, r + 1, 1) & ret

    Else

        ret = ret & Mid(s2, r + 1, 1)

    End If

    x = x \ 10

Loop

Text1.Text = ret

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

A . JFae B . JFea C . eaJF D . EAfj
对数组a中6个有序数据“11,22,33,44,55,66”,用下面的程序代码查找数据“23”,程序执行完毕后,下列各变量值正确的是(    )

a(1)=11: a(2)=22:a(3)=33: a(4)=44: a(5)=55

a(6)= 66 : i = 1: j = 6: p = 0: Key = 23

Do While i <= j

p = p + 1:m = (i + j) \ 2

If j Mod 2 = 0 Then m = m + 1

If a(m) = Key Then Exit Do

If Key < a(m) Then

   j = m - 1

Else

   i = m + 1

Loop

A . i=5 B . j=4 C . m=3 D . p=2
以下Python程序段执行后,输出结果为(    )。

m= 29

if m%3!=0:

    print (m, "不能被3整除")

else

    print (m,“能被3整除")

A . m不能被3整除 B . 29不能被3整除 C . 29能被3整除  D . m能被3整除
有如下VB程序段:

s = "python": b = 0

For i = 1 To Len(s) - 1

    a = Abs(Asc(Mid(s, i, 1)) - Asc(Mid(s, i + 1, 1)))

    If a > b Then b = a

Next i

Label1.Caption = Str(b)

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

A . 1 B . 7 C . 9 D . 12
编写一个“人民币小写转大写”的程序,实现功能如下:从键盘输入待转换的小写金额(不得超过9位数),输出其大写金额。运行界面如图所示:

dx={"0":"零","1":"壹","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖"}

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

money=input("请输入金额(整数,不得超过9位):")

zh=""

t=""

if    ①   :

    print("输入的数据超出所能转换的范围。")

else:

    for i in range(0,len(money)):

        t=   ②       #取出第i位小写对应的大写

        dwz=len(dw)-len(money)+i      # 计算该小写数字对应的单位在dw中的索引号  

            ③  

print(money,"的大写为:",zh, "整")

  1. (1) 为实现上述功能,请在划线处填入合适代码。

     ② ③ 

  2. (2) 若输入的金额为20,则输出的结果是
试卷运送。五校联考就要到了,本次负责安排运送试卷的路线的是TBY。由于各所学校都参与了一些科目命题工作,所以目前每个学校里都有几个科目的试卷。为了节省运输费用,TBY想要找到一种能连接所有学校且线路总长最短的方案。

一共有n(3<=n<=100)个学校,各所学校之间的线路长度以一行共n*n个数据输入,

第i组的n个数据为从第i个学校出发到其他学校的线路长度,保证第i组的第i个数据为0。

编写VB程序,实现上述功能。运行程序,在文本框Text1中输入学校总数,

在文本框Text2中按题述方法输入各校之间的距离,点击命令按钮Command1后,在标签Label1中显示最短的线路总长。程序运行界面如图所示。

请回答下列问题:

  1. (1) 若n=4,各校距离为0242831240352528350303125300,则最短的线路总长为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const INF = 2147483646

    Dim n As Long, a As Long

    Dim dis(1 To 10001) As Long, flag(1 To 10001) As Boolean

    Dim head(1 To 10001) As Long, nxt(1 To 10001) As Long

    Dim ed(1 To 10001) As Long, value(1 To 10001) As Long

    Dim cnt As Long, tby As Long, sss As String

    Dim i As Long, j As Long

    Private Sub Command1_Click()

        cnt = 0

        n = Val(Text1.Text)

        For i = 1 To n

            dis(i) = INF : flag(i) = False : head(i) = 0

        Next i

        tby = 1

        sss = Text2.Text

        For i = 1 To n

            For j = 1 To n

               

                If i <> j Then Call addedge(i, j, a)

            Next j

        Next i

        Dim ans As Long

        dis(1) = 0 : ans = 0

        For i = 1 To n

            Dim hg As Long, u As Long

            hg = INF

            u = 0

            For j = 1 To n

                If  Then

                    hg = dis(j)

                    u = j

                End If

            Next j

           

            flag(u) = True

            Dim p As Long

            p = head(u)

            Do While p <> 0

                Dim v As Long

                v = ed(p)

                If Not flag(v) And dis(v) > value(p) Then

                    dis(v) = value(p)

                End If

                p = nxt(p)

            Loop

        Next i

        Label1.Caption = Str(ans)

    End Sub

    Sub addedge(a As Long, b As Long, x As Long)

        cnt = cnt + 1

        value(cnt) = x

        ed(cnt) = b

        nxt(cnt) = head(a)

        head(a) = cnt

    End Sub

    Function Getin() As Long

        Dim aaa As String

        aaa = Mid(sss, tby, 1)

        If aaa = " " Then tby = tby + 1

        aaa = Mid(sss, tby, 1)

        Dim bbb As Long

        bbb = 0

        Do While aaa <> " " And tby <= Len(sss)

            bbb = bbb * 10 + Val(aaa) : tby = tby + 1

            aaa = Mid(sss, tby, 1)

        Loop

        Getin = bbb

    End Function

IF TRUE THEN PRINT 1  ELSE PRINT  2

这段代码的执行结果是(     )

A . 1 B . 0 C . 无输出 D . 出错
键盘依次输入3和4,执行如下程序,则运行结果为(    )

a=int(input())

b=int(input())

if a%3==0:

  if b%2==0:

    c=a**b

  else:

    c=a*b

  else:

    c=a-b

print(c)

A . -1 B . 81 C . 12 D . 64
编写VB程序,实现如下功能:在文本框Text1中输入关键词,例如关键词“ok”,单击“查找”按钮Com-mannd1,在左边的列表框List1所列单词中查找包含“ok”的字符串,如果查找成功,将在右边的列表框List2中输出该单词。若该单词多次符合条件,则只显示一次。如果查找失败,则在列表框List2 中显示“查找无结果“。

实现上述功能的VB代码如下,运行效果如图所示。请回答下列问题:

Const n= 5

Dim a(1 To n) As String

Private Sub Form_ Load( )

'将n个字符串分别赋值给数组元素a(1)、a(2)、……、a(n),并在列表list1中显示

'代码略:

End Sub

Private Sub Command1_ Click( )

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

    Dim m As Integer, k As Integer

    Dim flag As Boolean

    s = Text1. Text

    m = Len(s)

    List2. Clear

    flag = False

    For i=1 To n

        k = Len(a(i))

        For j=1 To k- m + 1

            If  = s Then     '①改错

                List2. AddItem a(i)

                flag = True

                Exit For      '退出for 循环

            End If

        Next j

    Next i

    If  Then    '②填空

        List2. AddItem“查找无结果”

    End If

End Sub

  1. (1) 观察运行界面,窗体中一共有个对象。
  2. (2) 程序代码中,加框处①有错,请改正。
  3. (3) 为实现上述功能,请在加框处②填入合适的代码。
  4. (4) 如果删除程序代码中Exit For语句,对程序最终运行结果(选项:有/无)影响。
有如下VB程序段:

a(0)= Int(Rnd() * 6+95)

For i=1 to 5

a(i)=a(i-1)-Int(Rnd() * 6)

  If i Mod 2=0 then

    a(i)=a(i)+a(i) Mod 2

  End if

Next i

执行该程序段后,在下列选项中,a(0)~a(5)各元素值可能是(    )

A . 96,95,90,89,86,82 B . 95,92,89,87,86,84 C . 95,92,88,86,84,85 D . 100,92,88,86,86,84
无序数组元素a(1)到a(n)中存在一个出现次数过半的值,如数组a的值依次为3,1,2,2,2,其中出现次数过半的元素为2。查找该值的VB程序段如下:

c= a(1): cnt= 0

For i= 1 To

     If  Then c= a(i)

     If  Then cnt= cnt+ 1 Else cnt= cnt- 1

Next i

Text1.Text= "出现次数过半的值是: " &c

上述程序段3个方框处的代码分别为(    )

A . ①n②cnt=i ③c = a(cnt) B . ①n\2+ 1②cnt=0 ③c= a(i) C . ①n②cnt= 0③c= a(i) D . ①(n+ 1)\2 ②cnt=i ③c = a(cnt)
将十进制数79.5转换为8421BCD码的方法是,将每一位数字转换为4位二进制(8421BCD码含义:8421BCD码中的“8421”表示从高到低各位二进制位对应的权值分别为8、4、2、1),结果为01111001.0101。转换代码VB程序段如下:

s1 = Text1.Text: s2 = "":n = Len(s1): i = 1

Do While i <= n

    ch = Mid(s1, i, 1)

    If ch <> "." Then

        p = 8: x = Val(ch)

        Do While p > 0

           

        Loop

    Else

        s2 = s2 & ch

    End If

    i = i + 1

Loop

方框中的代码由以下三部分组成:

①x = x Mod p    ②p = p \2      ③s2 = s2 & x \p

下列选项中,代码顺序正确的是(    )

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