4.3.1 if语句的应用 知识点题库

某对分查找算法的VB程序段如下:

key=Int(Rnd*20)+3

i=1:j=6:id=1

Do Whilei<=j

    m=(i+j)\2

    If key = a(m) Then Exit Do

    If key < a(m) Then

        j=m-1:id=id*2

    Else

        i=m+1:id=id*2+1

    End If

Loop

Label 1. Caption = Str(id)

数组元素a(1)到a(6)的值依次为“4,7,9,14,15,21”,执行该程度段后,标签Label1中显示的内容不可能的是(    )

A . 4 B . 7 C . 13 D . 15
小明编写了一个程序,运行时在文本框Text1中输入一个字符串,单击“去除数字”按钮Command1后,去除字符串中的数字字符,并在标签Lable2上输出结果。如图所示。

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

    Private Sub Command1_Click()

      Dim zfc As String  '用于存储输入的字符串

      Dim ans As String  '用于存储处理后的字符串

      Dim i As Integer,ch As String

      Dim n As Intege  r'用于存储输入的字符串的长度

         ①   

      n=Len(zfc)

      i=1

      Do While i<=n

             ②   

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

            i=i+1

          Else

               ③   

            i=i+1

          End If

      Loop

      Label2.Caption="结果为:"+   ④   

    End Sub

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

编写“二进制加法”程序,实现如下功能:在文本框Text1和Text2中分别输入两个二进制数,单击“计算”按钮Command1,程序在位数较少的二进制数前补“0”,使两个二进制数位数相同,然后从右向左按位依次进行加法运算,最后在文本框Text3中显示相加的结果。程序运行界面如图所示。

  1. (1) 在设计程序界面时,要设置窗体的标题为“二进制加法”,应修改窗体的属性。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dim s1, s2, result, t As String

      Dim span, jw As Integer

      s1=Text1. Text:s2=Text2. Text

      span=Len(s1)-Len(s2)

      If span<0 Then

        t=s1:s1=s2:s2=t

        span=   ①  

      End If

      For i=1 To span

        s2="0"+s2

      Next i

      jw=0:result="  "

      For i=   ②   To 1 Step-1

        x=Val(Mid(s1, I, 1))+Val(Mid(s2,i,1))+jw

        jw=x\2

        result=Str(x Mod 2)+result

      Next i

      If jw=1 Then result="1"+result

      Text3. Text=result

    End Sub

  3. (3) 在文本框Text1中输入“10”,在文本框Text2中输入“11000”,单击“计算”按钮Command1后,变量b2的值是
(聪明的猪)某屠宰厂每天决定宰杀若干头猪(1<=n<=100),把每天待宰杀的猪按顺序编号后排成一排,每次将排在单号位置的猪杀掉;然后把剩下的猪按上一次相对的位置排好,重新编号,再次将排在单号位置的猪杀掉;以后每次重复前面的过程,直到仅剩下一头猪时停止宰杀,将这头幸运的猪放回;有一头猪聪明的猪,每天都能躲避被屠宰。利用VB编写一个程序,根据每天杀猪的数量,求出当天这头聪明的猪的原始编号。VB程序界面设计如下:

控件属性设置如下:

对象

属性

属性值

说明

Form1

Caption

幸运的猪

窗体的标题

Label1

Caption

当天要杀猪的数量

标签显示 文字

Label2

Caption

幸运猪的原始编号

标签显示的文字

Text1

Text

空白

文本框的文本

Text2

Text

空白

文本框的文本

Image1

Picture

Pig.gif

显示的图片

Command1

Caption

计算

按钮显示的文字

  1. (1) 完成以上功能的程序代码如下,请在划线处填入正确的语句。

    Private Sub Command1_Click()

      Dim sum, i, pos, last, count As Integer

      Dim a(1 To 100) As Integer

     

      For i = 1 To sum

        a(i) = 1                            '初始状态为1表示还没被杀掉

      Next i

      count=0

      Do while                '要杀掉sum-1头猪

        Pos=0

        For i = 1 To sum

            If a(i) <>0  Then

                pos = pos + 1                    'pos表示报数

                If   Then            '报到奇数的猪被屠宰

                    count = count + 1 

                    a(i) = 0

                End If

            End If

        Next i

      Loop

      For i = 1 To sum

        If a(i) = 1 Then

            Text2.Text = Str(i)

        End If

      Next i

    End Sub

  2. (2) 屠宰场每天有100头猪被屠宰,这头聪明的猪,需要初始排在号位置上才能避免被屠宰掉。
  3. (3) 还是这100头猪,如果屠宰场改变杀猪规则,第一次杀奇数,第二次杀偶数,第三次杀奇数,第四次杀偶数……,依次轮流,100头猪中幸运的猪的原始编号是
有一段代码如下:

a=3; b=1; c=2

if a>b:

    a,b=b,a

if b>c:

    b,c=c,b

if a>b:

    a,b=b,a

print(a,b,c)

其输出结果为(     )

A . 3 2 1 B . 1 2 3 C . 2 1 3 D . 3 1 2
实现一个简单的出租车计费系统,当输入行程的总里程时,输出乘客应付的车费(车费保留一位小数)。计费标准具体为起步价10元/3千米,超过3千米以后,每千米费用为1.2元,超过10千米以后,每千米的费用为1.5元。
有如下VB程序段:

Dim i As Integer

Dim c As String, s As String, t As String

s = "2021 PYthon": t = ""

For i = 1 To Len(s)

    c = Mid(s, i, 1)

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

        t = t + c

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

        t = c + t

    End If

Next i

Text1.Text = t

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

A . 2021thon B . 1202thon C . thon1202 D . noht1202
下列VB程序段的功能为:在字符串s中找出最长连续上升子串,显示在文本框Text2中,例如:s的值为“ACFBCCDEGKKMNPQ”时,运行程序段后,在Text2中显示子串“CDEGK”。

s= Text1.text

i=1:max1=1: maxi=i

j= 2

Do While j <= Len(s)

    If  Then

        If j-i> max1 Then max1= j-i: maxi= i
       

    End If

   

Loop

If j-i> max1 Then max1 =j- i: maxi= i

If max1 > 1 Then Text2.Text = Mid(s, maxi, max1)

上述程序段中方框处可选语句为

①j=j+1

②i = j

③Mid(s, j, 1)>= Mid(s, j - 1, 1)

④Mid(s, j, 1) <= Mid(s, j - 1, 1)

则方框处语句依次为(    )

A . ④①② B . ④②① C . ③②① D . ③①②
有如下VB程序段:

Dim a(1 To 5) As Integer

Dim i As Integer

Dim j As Integer

Dim s As String

s = ""

For i = 2 To 5

    For j = i To 5

        If j Mod i = 0 Then a(j) =a(j)+1

    Next j

Next i

For i = 1 To 5

    If a(i) <> 1 Then s = Str(i) + s

Next i

Text1.Text = s

若数组a的初始值都为0,则运行该程序段后,Text1中显示的内容为(     )

A . 14 B . 235 C . 532 D . 41
小安需要在一个n*n(4<=n<=10)的房间里使用黑白两种地砖铺设房间,要求相邻的两块地砖颜色都不同。房间里会随机产生m(m<=10)根柱子,如果最后黑白两种地砖使用的数量相同,就认为可以铺满整个房间。小安将a数组元素值设置为0、1和2三种,当数组a的值为0时显示“□”,代表白地砖,为1时显示“■”,代表黑地砖,为2时显示“○”,代表柱子。最后,小安还求出了任意两根柱子之间的最大面积,单位长度为1(当两个柱子在同一行或同一列,认为面积为0,面积求法如图b所示)。

图a

图b

程序运行界面如图a所示。实现上述功能的VB代码如下:

Dim n As Integer, m As Integer

Dim a(1 To 100) As Integer

Dim b(1 To 10) As Integer 'b数组存储柱子位置

Dim f(3) As Integer, i As Integer 'f数组存储三种类型的个数

Private Sub Command1_Click()

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

    k = 0

    For i = 1 To m

        b(i) = Int((Rnd * n ^ 2) + 1)

        a(b(i)) = 2

        For j = 1 To i - 1

            If b(i) = b(j) Then

                   ①   

                Exit For

            End If

        Next j

    Next i

    '将房间设置为黑白两种颜色交错,白黑以0、1代替

    For i = 1 To n * n

        

        If a(i) = 0 And k = 1 Then

            s = s + "■": a(i) = k

        ElseIf a(i) = 0 And k = 0 Then

            s = s + "□": a(i) = k

        Else

            s = s + "○"

            f(k) = f(k) - 1

            f(2) = f(2) + 1

        End If

            ②  

        If i Mod n = 0 Then

            List1.AddItem s

            s = ""

        End If

    Next i

    '对b数组的数值按升序进行排序,代码略

    For i = 1 To m - 1

        s = search(i)

        If s > smax Then smax = s

    Next i

    '对f(0)和f(1)的相等情况进行判断,并输出最后结果,代码略

End Sub

Function search(i As Integer) As Integer

    Dim x1 As Integer, x2 As Integer

    Dim y1 As Integer, y2 As Integer

    x1 = (b(i) - 1) \ n + 1

    y1 = (b(i) - 1) Mod n + 1

    For j = i + 1 To m

        x2 = (b(j) - 1) \ n + 1

        y2 = (b(j) - 1) Mod n + 1

        If    ③   Then s = 0

        s = (x2 - x1) * (y2 - y1)

        If s > search Then search = s

    Next j

End Function

  1. (1) 请在划线处填入合适代码。

     ② ③ 

  2. (2) 实线框处的语句改为k = 1 - k,对程序运行结果(填:有/无)影响?
少里湾小学委托小龙同学帮助开发一个积分入学录取程序,2021年当地积分入学政策为:

一 、采用父母积分中较高者做为入学申请人的积分,积分相同时取父亲积分,由高到低进行录取(积分=社保积分+基础积分)。

二 、积分相同时,按以下条件依次确定录取顺序

1)申请人家庭在市区有自购产权住房且实际居住优先录取;

2)本区连续居住时间较长者优先录入;

3)在所采用的积分中,社保积分较高者优先录入;

4)以上全部相同,则按报名序号的先后顺序录取。

根据上述要求编写VB程序,功能如下:窗体装载时,按报名顺序读取1000个同学的信息,显示在列表框List1中。在文本框Text1中输入录取人数,单击“确定”按钮Command1,在列表框List2中按照录取序号显示录取名单。程序运行界面如图所示。

请回答下列问题:

  1. (1) 在VB代码List1.AddItem info_ str中List1.AddItem、info_str依次表示(单选,填字母:A .对象名、方法名、变量名/B .对象名、事件名、变量名/C .对象名、属性名、属性值)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n As Integer = 1000       '报名总人数

    Dim xh(1 To 1000) As Integer,xm(1 To 1000) As String

    Dim fqsb(1 To 1000) As Integer, fqjc(1 To 1000) As Integer

    Dim mqsb(1 To 1000) As Integer, mqjc(1 To 1000) As Integer

    Dim sfgf(1 To 1000) As Boolean, jzsc(1 To 1000) As Integer +

    Private Sub Form_ Load ()

        '依次读取n个入学申请人的信息,并显示在列表框List1中,代码略

        ' xh(1) 到xh(n)存储报名序号,对应的值从1到n

        ' xm(1)到xm(n)存储姓名

        'fqsb(1)到fqsb (n)存储父亲社保积分,fqjc (1)到fqjc (n)存储父亲基础积分

        'mqsb (1)到mqsb(n)存储母亲社保积分,mqjc (1)到mqjc (n)存储母亲基础积分

        ' sfgf (1)到sfgf (n)存储是否购房

        'jzsc (1)到jzsc (n)存储居住时长

    End Sub

    Private Sub Command1_ _Click ()

        Dim lqrs As Integer lqrs'表示录取人数

        Dim info_ str As String

       

         For i=1 To 1qrs

            For j=i+ 1 To n

                If  Then

                    tmp= xh(i): xh(i) = xh(j): xh(j) = tmp

                 End If

            Next j

            '将录取的第i个学生信息显示在列表框List2中,代码略

         Next i

    End Sub

    Function bj(a As Integer, b As Integer) As Bool ean

        Dim jfa As Integer, jfb As Integer, sba As Integer, sbb As Integer

        bj = False

        '计算报名序号a的积分

        If  Then

            jfa = fqsb(a) + fqjc(a)

            sba = fqsb(a)

        Else

            jfa = mqsb(a) + mqjc (a)

            sba = mqsb(a)

        End If

        '计算报名序号b的积分,并存入jfb、sbb,代码略

        If jfa <> jfb Then

            If jfa>jfb Then bj=True

        ElseIf sfgf(a) <> sfgf (b) Then

            If sfgf(a) = True Then bj = True

        ElseIf jzsc(a) <> jzsc (b) Then

            If sfgf(a) = True Then bj= True

        ElseIf jzsc(a) <> jzsc(b) Then

            If jzsc(a) > jzsc(b) Thenbj = True

        Elself sba <> sbb Then

            If sba> sbb Then bj = True

        Else

            If  Then bj = True

        End If

    End Function

  3. (3) 程序中加框处代码有错,请改正。
在计算机进行加密或解密过程中,经常会对字符串进行移位等变换操作。某字符串的变换规则描述如下:

①输入的字符为十六进制数(英文字母大写,确保输入的个数为3的倍数),如4AC

②字符串中的每个字符转成四位二进制,按序拼接,如010010101100

③二进制字符串每4位进行前后倒置(即4位数左右倒置)操作,如001001010011

④将倒置后的字符串每3位转换成1位十进制,按序拼接后输出该十进制串,如001001010011转为1123

根据该规则编写的程序如下,运行结果如图所示,请回答以下问题:

Hex={"0":"0000","1":"0001","2":"0010","3":"0011","4":"0100","5":"0101","6":"0110","7":"0111","8":"1000","9":"1001","A":"1010","B":"1011","C":"1100","D":"1101","E":"1110","F":"1111"}

sch=input("请输入一个十六进制数(字母大写):")

th=""

for k in sch:

    if "0"<=k<="9" or "A"<=k<="F":     #若k为数字字符或大写字母

           ①                #每1位十六进制转成4位二进制

        ts=""

        for i in range(0,    ②   ):         #每4位进行前后倒置

            ts+=th[i+3]+th[i+2]+th[i+1]+th[i]

            tob=""

            tmp=0

            for i in range(len(ts)):                 #二进制串转十进制

                tmp=tmp*2+int(ts[i])             #累乘相加转换成十进制

                if                   #每3个字符为一组进行转换后的拼接

                    tob=tob+str(tmp)

                    tmp=0

print("变换后的字符串为:",tob)

  1. (1) 从代码中可知,当输入的值为4aC时,程序运行结果(填:是/否)和题图相同
  2. (2) 程序中加框处代码有误,请改正
  3. (3) 请在下划线处补充完整程序

     ② 

某影厅共12排,每排10座。座位编号以排号+座号来命名,如第10排3座,编号命名为103。该影厅的最佳观影区为方框内的座位,即第5排3座~第10排8座的矩形位置。0表示该座位可选,非0表示已售(1表示系统推荐,2表示手工选择) 座位推荐算法:

1)只推荐最佳观影区的座位,从前往后,优先选择最中间的位置,若找到最中间位置,则推荐,否则继续寻找下一排,以此类推;

2)购票数为1时,推荐单个靠中间的位置,大于1时,只推荐连续的座位;

3)若在最佳观影区内未找到可以推荐的座位时,系统将提示手工选择。编写VB程序,模拟电影院选座。在文本框Text1中输入购票数,单击“选座”按钮Command1,在标签Labe12中显示机选座位。程序运行界面如图所示。

  1. (1) 该影厅空座情况不变如上图所示,若购票数由2改为1,则推荐的座位编号为
  2. (2) 实现上述功能的VB程序如下,请在划线处填写合适的代码。

    ConstC=10:ConstR=12    '每排10座,共12排

    Dim zw(1 To C * R) As Integer, kzw(1 To C * R) As Integer      '座位,空座位

    Private Sub Form_ Load ()

        '读取影厅座位数据存入数组zw,并将座位信息显示在列表框list1中,代码略

    End Sub

    Private Sub Command1_Click ()

        Dim i As Integer, j As Integer, k As Integer

        Dim x As Integer, min As Integer, start As Integer

        Dim m As Integer, n As Integer, ans As String

        m = Val (Text1.Text)          '购票数,确保数值在座位数以内

        n=0            '空座位的个数

        For i=5 To 10         '统计最佳观影区中的空座位编号

            For j=3 To 8

                If zw((i-1)*C+j)= 0 Then

                    n=n+1

                    kzw(n) =

                End If

            Next j

        Next i

        min = C: start=0: k=1

        Do While k+m-1<= n

            If kzw(k) + m-1= kzw(k +m- 1) Then

                x=Abs(C\2-(kzw(k)+kzw(k+m-1))\2 Mod C)

                If x < min Then

                    min=x

                    start = k     '记录满足座位条件的起始空位号

                    If min=0 Then Exit Do    'Exit Do表示退出循环

                End If

            End If

           

        Loop

        ans =””

        If start = 0 Then

            ans = "未能推荐座位,请手工选座"

        Else

            For i = kzw(start) To

            'CStr函数把表达式转换为字符串,不产生前置空格

           ans = ans + "第"+ CStr(i \C+ 1) +"排"+ CStr(i ModC) +"座"

          Next i

        End If

        Label2.Caption = ans

    End Sub

有如下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
有n个整数存放在数组a中,整数k1与k2且k1<k2。某程序段如下:

i = 1: L = 0: R = n + 1

Do While i < R

If a(i) < k1 Then

L = L + 1

If L <> i Then tt = a(i): a(i) = a(L): a(L) = tt

i = i + 1

ElseIf a(i) > k2 Then

R = R - 1

tt = a(i): a(i) = a(R): a(R) = tt

Else

i = i + 1

End If

Loop

则执行上述代码后,下列说法正确的是(   )

A . 数组a变成升序排列 B . a(L)<=k1 C . a(R)>=k2 D . a数组中大于等于k1小于等于k2的元素个数为R-L-1
现需要查找正整数数组元素a(1)到a(10)中距离最远的两个相同数字,输出其最远距离,如下VB程序段实现该功能,其中f数组中所有元素的初始值为0。

For i=1 To 10

    If f(a(i)) = 0 Then

          ① 

    Else

        If i - f(a(i)) > max Then max = i - f(a(i))

    End If

Next i

Text1.Text = Str(max)

则代码①处的语句可为

A . f(a(i))=a(i) B . f(i)=f(a(i)) C . f(a(i))=i D . f(a(i))=f(i)
请判断如下程序的运行结果是将三个数(  )。

print("请输入3个数:")

x=int(input("x="))

y=int(input("y="))

z=int(input("z="))

temp=0

if x>y:

  temp=y

  y=x

  x=temp

if x>z:

  temp=z

  z=x

  x=temp

if y>z:

  temp=z

  z=y

  y=temp

print("这3个数新序列是:",x,y,z)

A . 从小到大排序 B . 从大到小排序 C . 都变成最大的数 D . 都变成最小的数
国际乒联现任主席自从上任以来就立志于推行一系列改革,其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。小明就是其中一位,他退役之后走上了乒乓球研究工作,为分析11分制和21分制对选手的不同影响,编写了如下VB程序。在Text1中输入比赛记录(其中w表示小明获得一分,f表示对手获得一-分)最终运行界面如第16题图,发现21分制确实对小明这种慢热型的选手有利:

  1. (1) 如果记录是wwfffffffffwfwwfwwfwfwffffffwwwwfffwf, 请问11分制比赛的第二局小明与对手的比分是(注:当任一方得分大于等于11分,且领先对方2分及以上,领先一方赢一局)
  2. (2) 在程序划线处填入合适代码

    Private Sub Command2_ Click()

        Dim sp As String, s As String

        Dim a(1 To 1000) As Integer

        Dim b(1 To 100) As Integer

        Dim c(1 To 100) As Integer

        Dim i As Integer, j As Integer

        Dim n As Integer, f1 As Integer

        Dim f2 As Integer, h1 As Integer

        Dim k As Integer, x As Integer

        '对数组a赋初值为0,代码略

        s = Text1.Text: j = 1: k=1: x=0

        For i=1 To Len(s)

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

        Next i

       

        For i=1Ton

            If a(i)=1 Then f1=f1+1 Else f2=f2+1

            H1=h1+a(i)

            

            If heck(f1, f2, 11) Then

                b(j)=f1:b(j+1)=f2:j=j+2

                f1 =0:f2= C

            End If

            If check(h1, h2,21) Then

                c(k) = h1:c(k+1)=h2:k=k+2

                h1=0:x=i

            End If

        Next i

        '输出各局比分代码略

    End Sub

    Function check (ByVal dl As Integer, ByVal d2 As Integer, fz As Integer) As Boolean

        check = False

        If Then check = True

    End Function

需要把一个由小写字母构成的字符串s中的字符从左到右写入行中。每行最大宽度为20,如果往后新写一个字符导致该行宽度超过20,则写入下一行。

注意:每个字符的宽度不为1。给定一个列表width,其中width[0]是字符“a”的宽度,width[1] 是字符“b”的宽度,...,width[25]是字符'z'的宽度。

如图:输入字符串“aabbb”,“a”的宽度为 4, “b”的宽度为 6,所以“aabb”长度为

4+4+6+6=20写入第一行,最后一个”b”长度为6写入第二行。最后程序输出内容为“写入字符串s共需2行,最后一行宽度为:6”。

pythont程序如下:

width = [4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]

s =int( input("s:"))

L=0

count=1

for i in s:

  index=   ①  

  L=L+width[index]

  if L>20:

    L=   ②  

    count+=1

    print("小写字母宽度列表width为:")

  print(width)

print(f"写入字符串s共需{count}行,最后一行宽度为:{L}")

阅读程序回答:

  1. (1) 上述程序代码,若输入的s=“bbbaa”,那么最后一行宽度为
  2. (2) 加框处代码有误,请改正。
  3. (3) 补充横线两处代码。

有如下VB程序段:

n = 0

For i = 1 To Len(Text1.Text)

    c = Mid(Text1.Text, i, 1)

    If c >= “0” And c <= “9” Then m = 1 Else m = 2

    a(m) = a(m) + 1

    If a(m) = 1 Then n = n + 1

Next i

数组a各元素的初始值都为0,文本框Text1的内容为“Happy2018”。执行程序后,变量n的值为(  )

A . 1 B . C . 4 D . 9
最近更新