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

为防止某传染病,在堂食中不能两个人相邻就餐。为避免两个人相邻就餐,小明设计了一个VB程序,在Text 1中输入某一排座位就餐人员的分布情况,用字符“*”代表当前座位有人,字符“#”代表当前座位没人。如“*#**”就代表1号座位有人,2号座位没人,3号座位有人,4号座位有人。单击“检查”按钮后,若该排有人相邻就餐,则在标签Label 2中输出“警告!”;若该排没有人相邻就餐,在己入座人员不换坐的情况下,检查该排座位中是否还可以再加人就餐,若可以,则在标签Label 2中输出这排中至多还能有几个人入座;若不可以,则在标签Label 2中输出“该排人数已满”,程序运行界面如图所示。

  1. (1) 观察VB代码,可知“检查”按钮的名称为
  2. (2) 实现上述功能的VB代码如下,请在划线处填入合适的代码。

    Private Sub Cmd1_Click()

        Dim s As String, c As String

        Dim flag As Boolean

        Dim i As Integer,count As Integer

        s=Text 1.Text

        flag=True

        For i=1 To Len(s) -1

            c=Mid(s,i,2)

            If c=“**”Then

                

                Exit For

            End If

        Next i

        s=“#”+s·“#”

        count =0:i= 2

        Do While flag And i<=Len(s) -1

            If Then

                s=Mid(s,1,i-1) +“*”+Mid(s, i+1, Len(s) -i)

               

            End If

            i=i+1

        Loop

        If Not flag Then

            Label2.Cnption=“警告!“

        Elself count = 0 Then

            Label2.Caption=“该排人数己满”

        Else

            Label2.Caption=“该排至多还能有”+Str(count) +“个人入座”

        End If

    End Sub

     ② ③ 

给定一个字符串(由字母、空格、句末点号组成,单词中不出现其它符号),你需要反转字符串中每个单词的字符顺序且输出均为大写字母,同时仍保留单词的初始顺序、空格和句末点号。小李同学编写的“字符反转”VB程序如下,文本框Text1中输入的是反转前字符串,单击“反转”按钮后,在文本Text2中输出字符串反转结果,程序运行界面如图所示。

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

    Private Sub Command1_Click()

    Dim a(1 To 20)As String

    Dim n,m,i,j As Integer

    Dims,s1,s2 As String

    s1=Text1. Text:n=Len(s1)

    m=0:s=""

    For i=1 To n

        If Mid(s1,i,1)="" Or Mid(s1,i,1)="." Then

           m=m+1

           a(m)=s

           s=""

         Else

           

         End If

    Next i

    For j=1 To m

         n=Len(a(j))

         For k=1 To n

           

            If t﹥="a" And t<="z" Then

             

                s2=s2+t

            Else

                s2=s2+t

            End If

        Next k

        Text2. Text=Text2. Text+s2

        s2=" "

    Next j

    Text2. Text=Text2. Text & "."

    End Sub

  2. (2) 观察程序运行界面和阅读下面程序可知,原字符串输入“ShanShui LianMeng”单击“反转”按钮的则反转结果输出
孪生素数是指间隔为2的相邻素数,它们之间的距离已经近得不能再近了,就像孪生兄弟一样,也称为双生素数。例如,素数11和13,其间隔为2,就是一组孪生素数。请编写程序,输入自然数n(n<1000),判断n和n+2是否为率生素数。(补充说明:素数是指在一个大于1的自然数中,除了1和此数自身外,无法被其他自然数整除的数)

算法描述如图所示,请将程序补充完整。

Private Sub Form_Click()

Dim n As Integer, i As Integer

Dim x As Integer       ‘判断是否为季生素数的变量

 = Val(InputBox("输入自然数 n"))

x=1

If n<=1 Then x = 0

End If

For i = 2 To Sqr(n+2)

  If n Mod i = 0 OrThen

    x = 0

  End If

  Next i

  If x=1 Then

    Print n,n+2 ;"是孪生素数”

  Else

    Print ;"不是孪生素数”

  End If

End Sub

统计不同单词个数:在Text1中输入一行单词,单词和单词之间用1个空格或标点符号隔开,单击“统计”按钮,在Text2中输出单词的个数,单词区分大小写,句子以符号结尾,程序运行界面如下图所示,部分程序代码如下:

k=0:s = Text1.Text For i = 0 To Len(s)-1

     ①  

  If ch >= "a" And ch <= "z" Or ch >= "A" And ch <= "Z" Then

    word = word + ch

  Else

    For j = 1 To k

      If     ②     Then Exit For

    Next j

    If      ③    Then

      k = k + 1

      a(k) = word

    End If

    word = ""

  End If

Next i

Text2.text=str(k)

则①②③处的代码为(   )

A . ①ch = Mid(s, i, 1) ②a(i) = word            ③ j <= k B . ①ch = Mid(s, i, 1) ②a(j) = word            ③ j <= k C . ①ch = Mid(s, i+1, 1) ②a(i) = word             ③ j > k D . ①ch = Mid(s, i+1, 1) ②a(j) = word             ③ j > k
有如下VB程序段:

s = Text1.Text

For i=1 To Len(s)

  ch = Mid(s,i,1)

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

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

    ch = Chr(Asc(ch)-32)

    t=t+ch

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

    t=ch+t

  End If

Next i

Text2.Text = t

已知'A'的ASCI码为65,'a'的ASCI码为97。程序运行后,在文本框Text1中输人“Text2.text=”Abc1234“”(外括号不包括),则在Text2中显示的内容是(    )

A . TEXT2.TEXTABC1234 B . 43212TexttextABC C . 43212TEXTTEXTABC D . TEXTTEXTABC43212
某加密算法的明文和密钥均由英文字母组成,且密钥循环使用,其加密规则如下:

①明文字符与对应密钥的ASCII码转化为二进制后求异或(对应位相同时结果为0,对应位不同时结果为 1,如二进制1001与二进制1100的异或值为0101),并将异或结果转换为十进制p;

②如果处在奇数位,则将明文字符循环后移p个位置,否则将明文前移p个位置。移动过程中保持大小写不变。

最后把所得到的字符连接起来就是密文。

例如,密钥是“abc”,明文“d”的加密过程是:字符“d”的ASCII码表示为二进制是1100100,密钥“a”的ASCII码表示为二进制是1100001,两数进行异或结果是:0000101,转化为十进制为5,因为是第1个位置,所以把明文后移5个位置,则密文是“i”。

该加密过程使用VB来实现。具体功能设计如下:在Text1中输入明文,Text2中输入密钥,单击“开始加密”按钮Command1后将密文显示在Text3中,界面设计如图所示。

_x0000_i1034

请回答以下问题:

  1. (1) 如果密钥为“bc”,字符“d”加密后的密文为:(字母“a”的 ASCII 码为97)
  2. (2) 请完善以下程序代码。

    Private Sub Command1_Click()

      Dim s As String, sn As String

      Dim i As Integer, t As Integer, u As Integer

      Dim p As Integer, g As Integer

      sn = ""

      For i = 1 To Len(Text1.Text)

        t = Asc(Mid(Text1.Text, i, 1))

        If t >= Asc("a") Then

          g = Asc("a")

        Else

          g = Asc("A")

        End If

        u = Asc(Mid(Text2.Text, (i - 1) Mod Len(Text2.Text) + 1, 1))

        p =

        t = t - g

        If i Mod 2 = 1 Then

          t = (t + p) Mod 26

        Else

          t =

        End If

        sn = sn + Chr(t + g)

      Next i

      Text3.Text = sn

    End Sub

    Function txor(x As Integer, y As Integer) As Integer    'x、y求异或并返回十进制

      Dim a As Integer, b As Integer, r As Integer, i As Integer

      a = x: b = y

      r = 1

      For i = 1 To 7

        If a Mod 2 <> b Mod 2 Then

        a = a \ 2

        b = b \ 2

        r = r * 2

      Next   i

    End Function

寻找受潮药瓶。现有5瓶药,每瓶有20粒药丸,每粒药丸重10克,其中有几瓶受潮了,受潮的每粒药丸重11克,如何用天平只称一次找出受潮的那几瓶药?

解决此问题的方法是:将5瓶药编号为1~5号,从中分别取出1、2、4、8、16粒药丸进行称重。在不受潮时应是(1+2+4+8+16)×10=310(克)。假如称出的重量是315克,那么超出的重量是5克,说明有5粒超重,(5)10=(00101)2 , 因此受潮的是第1瓶和第3瓶。编写程序模拟此过程,程序运行时,单击“模拟”按钮Command1,在文本框Text1中输出超重克数,在列表框List1中输出药瓶编号,运行界面如图所示。

  1. (1) 代码中List1.AddItem中的AddItem是。(选,填字母:A .属性名 / B .方法名 /C .事件名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim s As Integer, cz As Integer       'cz存储超重克数Dim k As Integer

        '依次从1~5号瓶中取出1、2、4、8、16粒药,并计算总重量,存储在变量s中,代码略

        cz = s - 310

        Text1.Text =

        k = 0

        Do While  cz <> 0  

            k = k + 1

            If  Then

                List1.AddItem "第" + Str(k) + "瓶"

            End If 

            cz = cz \ 2

        Loop

    End Sub

  3. (3) 假如超重为10克,则受潮的药瓶编号是(填数字:若有多瓶,用“,”号隔开)
为统计某股票一年内共200个交易日收盘价中连续20个交易日的最大波动值(即连续20个交易日内的最高收盘价-最低收盘价)。数组元素a(1)~a(200)按时间先后顺序分别存储200个交易日的收盘价。编写如下VB程序实现上述功能:

max = 0

For p =

    amin = a(p): amax = a(p)

    i = p + 1: j = p + 19

    Do While

        If a(i) > a(j) Then

            If a(i) > amax Then amax = a(i)

            If a(j) < amin Then amin = a(j)

        Else

            If a(i) < amin Then amin = a(i)

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

        End If

        i = i + 1: j = j - 1

    Loop

    If  Then max = amax - amin

Next p

Text1.Text = "最大波动值为:" + Str(max)

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

A . ①1 To 181 ②i <= j ③max < amax - amin B . ①1 To 181 ②i < j ③max > amax - amin C . ①1 To 180 Step 20 ②i <= j ③max < amax - amin D . ①1 To 180 Step 20 ②i < j ③max > amax - amin
若一个正整数从左向右读与从右向左读都一样, 我们就将其称之为“回文数”。设计一个在列表框List中显示100 500之间的所有回文数的程序,实现该功能的VB程序段如下:

For k=100 To 500

    x=k

    z =0

    Do While x> 0

        

        

        

    Loop

    If z=k Then

        List1.AddItem Str(k)

    End If

Next k

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

①x=x\10   ②y=xMod10

③z=z+10*y   ④z=10*z+y

则(1)(2)(3)处语句依次为(    )

A . ①②③ B . ②①③ C . ①②④ D . ②①④
有如下VB程序段,运行该程序段后变量a的值为(     )

a=4: b=3

If a >= 4 Then

    If b < 2 Then a=a+2

    If b > 2 Then a=a+3

    a=a+2

ElseIf a >= 9 Then

    a=a+4

Else

    a=a+b

End If

A . 13 B . 9 C . 16 D . 8
两个长度相同的字符串s1和s2,若所含字符及各字符的数量均相等时可以视为相同组合。如字符串“ABCA”与字符串“BCAA”可以视为相同组合,与“ABCD”视为不同组合。实现该功能的VB程序段如下:

Text1.text="相同":j=1

Do while j<=len(s2)

    If mid(s1, 1, 1)=mid(s2, j, 1) then

        s1=mid(s1, 2, len(s1)-1)

        s2=mid(s2, 1, j-1)+mid(s2, j+1, len(s2)-j)

       

    Else

       

        If

            Text1.text="不相同"

        End if

    End if

Loop

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

①j=j+1           ②j=1             ③j=len(s2)+1

则(1)、(2)、(3)中代码顺序正确的是(    )

A . ①②③ B . ②①③ C . ②③① D . ②③①
现有一个只包含字符"A"、"B"的字符串s,并且两类字符的总数量刚好相等。将其尽可能多地分割成多段,使得每一段中都包含相同数量的"A"、"B",输出每一段的范围。例如,当s="ABAABABBAB"时,根据要求最多可以分割成3段,分别为[1,2],[3,8],[9,10]。如下VB程序段实现该功能。

s="ABAABABBAB"

x=0: pos=1

For i= 1 To Len(s)

    If Mid(s, i,1)="A" Then x=x+1

    If  Then

        List1.AddItem Str(pos) + ":" + Str(i)

       

    End If

Next i

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

①i-pos=x    ②i-x=x    ③pos=i    ④pos=i+1

则(1)(2)处的语句依次可为(    )

A . ①③ B . ①④ C . ②③ D . ②④
下列程序的功能是找出被5、7除,余数为1的最小5个正整数。

Private Sub Form_Click()

    Dim Ncount%, n%

    Ncount =

    n = 1

    Do

        If  Then

            Print n

            Ncount = Ncount + 1

        End If

        n = n + 1

    Loop Until =5

End Sub

某VB程序段如下:

s = "Hello World"

s1 = ""

n = Len(s)

For i = 1 To n \2

    If Mid(s, i, 1) > Mid(s, n - i + 1, 1) Then

        s1 = s1 + Mid(s, i, 1)

    Else

        s1 = Mid(s, n - i + 1, 1) + s1

    End If

Next i

Text1.Text = s1

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

A . WlleH B . oorld C . dlroo D . Orldo
有如下VB程序段:

Dim a(1 To 6) As Integer

For i=1 To 6

    a(i)= Int(Rnd * 4)+1

    If a(i) Mod 2=0 And i Mod 2=0 Then

       a(i)=2 * a(i) - a(i - 1)

    End If

    s=s+Str(a(i))

Next i

执行该程序段后,变量s的值可能是(    )

A . 242221 B . 333126 C . 043513 D . 323117
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 . 出错
有下列Python程序段:

a=[3,7,8,2,19,10,16,12]

n=len(a)

for i in range(2):

    k=i

    for j in range(i+1,n):

        if a[k]<a[j]:

            k=j

            if i!=k:

                a[i],a[k]=a[k],a[i]

下列说法不正确的是(       )

A . 程序段执行后,列表a中的元素为[19,16,8,2,3,10,7,12] B . 代码“for i in range(2):”等价于“for i in range(0,2):” C . 程序段执行后,变量k的值为7 D . 将代码“if i!=k:”修改为“if k>i:”,不会影响程序的运行结果
单车道胡同路边停车,先进去的车只能从另一出口出来,阅读程序代码(break表示退出循环):

listque=[]        #定义列表listque存储停车状况

max=8         #停车位最大容量

while(True): 

    print('1.停车')

    print('2.开车离开')

    print('3.查看停车库')

    print('其他. 退出')

    x=input("输入你的选择:")        #输入选择项

    if x=='1':

        if len(listque)< :

            print("还有",max-len(listque),"个停车位。")      

            listque.append(input("请输入停车车牌:"))       

        else:

            print("对不起,停车位已满。")

        elif x=='2':

            if len(listque)==0:                           

                print("停车库为空。")

            else:

                print (,"开出。")    

        elif x=='3':

             print(listque)

        else:

            break

在横线中填入代码中

利用VB程序将两组成绩数据合并为一组并按成绩从高到低排列输出。成绩相同时,第一批学生优先输出。实现上述功能的VB代码如下,但加框处代码有错,请改正:

Dim xm(1 to 1000) as string        '存储学生姓名

Dim cj(1 to 1000) as integer        '存储学生成绩

Private Sub Form_Load()        '该处具体代码省略

    '从数据库读取两批学生数据第1批学生的人数rs1,按成绩从高到低的顺序将成绩存入cj(1)、cj(2)…cj(rs1)中,姓名存入xm(1)、xm(2)…xm(rs1)中,第2批人数rs2,按成绩从高到低的顺序将成绩存入cj(rs1+1)、cj(rs1+2)…cj(rs1+rs2)中,姓名存入xm(rs1+1)、xm(rs1+2)…xm(rs1+rs2)中

End Sub

Private Sub Command1_Click()

    i=1

    j=rs1+1

    '以下程序开始按成绩高低逐个输出,每次输出前后两段中,尚未处理的学生中成绩最高的n=1    '①

    Do While i<=rs1 And j<=rs1+rs2    '两段都有未输出的情况,输出两段中最大值

        n=n+1

        If cj(i)>=cj(j) Then

            k=i:i=i+1

        Else

            k=j: j=j+1

        End If

        List1.AddItem(″第″+Str(n)+″名″+xm(k)+″成绩:″+Str(cj(k)))

    Loop

    Do While i<=rs1     '剩下第一段还有未输出的,逐个输出

        n=n+1

        List1.AddItem(″第″+Str(n)+″名″+xm(i)+″成绩:″+Str(cj(i)))

        i=i+1

    Loop

    Do While j<=rs2     '②若第二段还有未输出的,逐个输出

        n=n+1

        List1.AddItem(″第″+Str(n)+″名″+xm(j)+″成绩:″+Str(cj(j)))

        j=j+1

    Loop

End Sub
  ②

BMI指数(即身体质量指数,简称BMI),是目前国际常用的衡量人体胖瘦程度以及是否健康的一个标准。BMI测量公式:BMI=体重(kg)÷身高2(m2);评判依据:BMI ≥ 27:肥胖;23.9 ≤BMI < 27:过重;18.5 ≤BMI < 23.9:正常;BMI < 18.5:过轻。

编写程序,实现如下功能:输入身高(m)和体重(kg),执行程序后,输出对应评判结果。程序运行界面如下图所示。

请在画线处填入合适的代码:

w=float(input('请输入你的体重:'))

h=float(input('请输入你的身高:'))

bmi =

if bmi >= 27 :

  print('肥胖')

elif

  print('过重')

elif bmi >= 18.5 :

  print('正常')

  print('过轻')

最近更新