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

以下程序执行后变量y的值为 (     )

t = "abcd123456"

x = Sqr(Len(t))

y = 0

If x >0 Then

  y = 2

ElseIf x >1 Then

  y = 3

ElseIf x >2 Then

  y = 4

Else

  y = 5

End If

A . 2 B .   3 C .   4 D .   5
小李编写VB程序,功能如下:单击“产生数组”按钮Command1,则随机生成10个取值范围是1~10的正整数,分别存储到数组a中,对数组a的元素进行升序排列,并在标签Label1中显示;再单击“重复数”按钮Command2,则在排序后的数组a中查找连续个数最多的一组重复数值,若有两组连续重复数个数一样多,则取数值小的一组,将重复数的数组元素下标显示在标签Label2中。运行界面如图所示。

  1. (1) 已知窗体名称为Form1,要使程序加载时,窗体标题自动显示为“统计重复数”,则可在              (单选,填字母)事件过程中添加代码:Form1.Caption = “统计重复数”。
    A . Form_Click() B . Form_Load() C . Form1_Click() D . Form1_Load()
  2. (2) 实现上述功能的程序如下,请在划线处填写合适代码,使程序正常运行。

    Dim a(1 To 10) As Integer

    Dim n As Integer

    Private Sub Command1_Click()

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

      Dim s As String

      Randomize

      n = 10

      For i = 1 To n

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

      Next i

      For i = 1 To n - 1

        k = i

        For j = i + 1 To n

          If a(j) < a(k) Then

        Next j

        If k <> i Then

          temp = a(i): a(i) = a(k): a(k) = temp

        End If

      Next i

      s = ""

      For i = 1 To n

        s = s + Str(a(i))

        If i < n Then s = s + ","

      Next i

      Label1.Caption = s

    End Sub

    Private Sub Command2_Click()

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

      Dim length As Integer, origin As Integer

      Dim s As String

      k = 1:origin=1:length = 1

      For i = 2 To n

        If a(i) = a(i - 1) Then

          k = k + 1

          If k > length Then

            length = k

            origin = 

          End If

        Else

          k = 1

        End If

      Next i

      s = ""

      For j = origin To

        s = s + Str(j)

      Next j

      Label2.Caption = s

    End Sub

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

Dim ans As Integer,y As Integer

Dimt As String

t="What20"

ans=Val(Mid(t, 5, 2))

y=Len(t)+Int(Sqr(ans))

If ans>y Then

  ans=ans Mod 2

ElseIf ans<y Then

  y=y Mod 2

Else

  ans=y

End If

ans=ans+y

Label1.Caption=Str(ans)

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

A . 0 B . 10 C . 20 D . 30
来种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制数转换为十进制数的值。具体功能如下:在文本框Text1中连续输入多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。程序运行界面如图所示。

  1. (1) 要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句(单选,填字母:A .Width=2018/B .Text1.Width=2018/C .Width.Textl=2018)。
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

    Dims As String, c As String,d As String

    Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integer

    s=Text1.Text:n=Len(s):i=1

    Do While i<=n

        c=Mid(s,i,2)

        If c="00"Then

          d="东"

        ElseIfc="01"Then

          d=“南"

        ElseIf c="10" Then

          d="西(vi)"

        Else

          d="北"

        End If

        b1=Val(Mid(s, i+2, 1))

        b2=Val(Mid(s ,i+3, 1))

        v=   ①  

        List1.AddItemd+""+Str(v)

           ②  

    Loop

    End Sub

     ② 

  3. (3) 若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是
if双分支语句,执行过程中条件表达式为真,执行语句A,为假则执行else后面的语句B。
有如下VB程序段:

s = Text1.Text

a = "": max = ""

For i = 1 To Len(s)

    c = Mid(s, i, 1)

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

        a = a + c

    Else

        If a > max Then max = a

            a = ""

    End If

Next i

Label1.Caption = max

执行该程序段,在文本框Text1中输入“153-023-583-65-”,则Label1中显示的结果是(    )

A . 023 B . 65 C . 153 D . 585
执行该程序段后,Text1显示的是(      )

a(1) = 1: a(2) = 3: a(3) = 7: a(4) = 5: a(5) = 4

s = "PRE2021reform": t = 0

For i = 1 To 5

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

    s = Mid(s, 1, t - 1) + Mid(s, t + 1)

Next i

Text1.Text = s

A . RE021rrm B . RE0rform C . PRE202rm D . RE021rform
运行下列程序

Dim a(1 To 5) As Integer

a(1) = 1

For i = 2 To 5

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

    If a(i) Mod 2 = 0 Then

         a(i) = a(i) + i

    Else

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

    End If

Next i

a(1)~a(5)的值不可能的是(   )

A . 1,2,3,8,9 B . 1,6,2,10,11 C . 1,6,11,16,17 D . 1,4,5,10,7
小明设计了一个可以输入日期得到当天是年度第几天的程序,请阅读程序,完成填空(闰年判断规则:能被4整除但不能被100整除或能被400整除,闰年的2月为29天)

day=input("请输入年月日(格式举例:2000-01-05):")

year=int(day[:4])

month=      ①        

sun=int(day[8:10])

print(year,month,sun)

f_run=[31,28,31,30,31,30,31,31,30,31,30,31]    

tall_day=0

if       ②         :

    for i in range(month-1):

        tall_day +=f_run[i]

           ③           

else:

    for i in range(month-1):

        tall_day +=f_run[i]

tall_day += sun

print(day+"是当年的第"+str(tall_day)+"天")

  1. (1) 将程序横线处补充完整

     ② ③ 

  2. (2) 如输入“2020-4-19”为当年的第天。
设有n盏灯,放在一排。从1到n依次顺序编号。有n个人也从1 到n依次编号。第1 个人(1号)将灯全部关闭,第2 个人(2号)将2 的倍数的灯打开,第3个人(3号)将编号为3 的倍数的灯做相反处理(该灯如果已打开,则将它关闭;如为关闭则将它打开),以后的人和3号一样,将编号为自己号数倍数的灯做相反处理。问当n个人操作后,哪几盏灯是亮的(亮灯为0,关闭为1)。程序代码如下:

Private Sub Command1_Click()

    Const n = 20

    Dim i As Integer, j As Integer

    Dim a(1 To n) As Integer

    For j = 1 To n

        a(j) = 0

    Next j

    For i = 1 To n

        For j = 1 To n

            Ifthen

               

            End If

        Next j

    Next i

    For j = 1 To n

        If a(j) = 0 Then list1.AddItem Str(j)

    Next j

End Sub

为了实现程序该功能,在画线处填写正确代码。

展开字符串。如果在输入的字符串中,含有类似于“c-g”或者“3-7”的字符子串,就把它当作一种简写,字符串展开输出时有如下规则:

1)如果“-”号右边的字符按照ASCI码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“-”号,例如:“c-g”输出为“cdefg”,“3-7”输出为“34567”。

2)如果“-”号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,保留中间的“-”号,例如:“a-a”输出为“a-a”,“4-1”输出为“4-1”。

3)如果“-”号右边的字符恰好是左边字符的后继,则删除中间的“-”号,例如“d-e”应输出为“de”,“3-4”应输出为“34”。

某同学按照上述算法,编写了VB程序,功能如下:在文本框Text 1中输入简写字符串,单击“展开”按钮Command 1,程序进行字符串展开处理并显示在文本框Text 2中。程序运行界面如图所示。

  1. (1) 如果输入的简写字符串为“abs-w-Y1234-5S-4z”,则展开后的字符串为
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适代码。

    Private Sub Command1_Click()

        Dim st1 As String, st2 As String, i As Integer

        st1=Text1. Text

        n=Len(st1)

        st2=""

        For i=1 To n

            If pos(st1, i)Then<> "-" Then

                st2=st2+pos(st1, i)

            Else

                If pos(st1, i-1)<pos(st1, i+1) Then

                    For j=Asc(pos(st1, i-1))+1 To Asc(pos(st1, i+1))-1

                       

                    Next j

                Else

                    st2=st2+"-"

                End If

            End If

        Next i

        Text2. Text=st2

    End Sub

    Function pos(s As String, x As Integer) As String     '返回字符串s中x位置的字符

       

    End Function

有VB程序段如下:

Dim a(1 To 6) As Integer, i As Integer

a(1) = Int(Rnd() * 5) + 95

For i=2 To 6

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

    If i Mod2=0 Then a(i) = a(i) + a(i) Mod 2

Next i

程序运行后,a(1)-a(6)中可能的值是(     )

A . 95  92  88  86  86  84 B . 95  92  88  87  86  84 C . 95  92  88  86  84  85 D . 100  92  88  86  86  84
在计算机进行加密或解密过程中,经常会对字符串进行移位等变换操作。某字符串的变换规则描述如下:

①输入的字符为十六进制数(英文字母大写,确保输入的个数为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) 请在下划线处补充完整程序

     ② 

读Pyton程序代码,回答下列问题:
  1. (1) 代码一:

    def fun(b):

        c=a*b

        return C

    a=4

    print(fun(a))

    程序执行后,输出的结果是

  2. (2) 代码二:

    s=["Java", "C++", "Python", "C","PHP*"]

    max=s[0]

    i=1

    while i<len(s) :

        if max<s[i]:

            max=s[i]

        i+=1

    print (max)

    程序执行后,输出的结果是

给定一个正整数,要求将该数各个位上数字反转得到一个新数,如数字56020反转得到新数2065。有如下VB程序段:

n=Val(Text1.Text)

s=""

flag=True

Do While n>0

      ⑴ 

    n=n\10

    If Not flag Or x>0 Then

          ⑵ 

        flag=False

    End If

Loop

If s="" Then s ="0"

Labe 11.Caption=s

方框中(1)和(2)应填入的代码顺序为(    )

①x=nMod10^len(n)  ②x=nMod10  ③s=Str(x)+s  ④s=s+Str(x)

A . ①③ B . ②③ C . ①④ D . ②④
算法描述如下:

Input(x)

if x 能被 2 整除 Then

     输出x是偶数

else

     输出x是奇数

end if

上述采用的算法描述方法是(      )

A . 自然语言 B . 流程图 C . 伪代码 D . N-S图
不能实现分支结构程序设计的语句是(      )
A . IF       THEN  B . SELECT      END  SELECT C . IF    ELSEIF      END  IF D . DO    LOOP
Subaru在进入异世界后,可能遇见的人物,以及由此带来的生命值变化如下:

遇见了Felt 生命值加2分

遇见了Reinhard 生命值加10分

遇见了Bully 生命值减30分

遇见了Emilia生命值加20分

假设Subaru初始生命值为5分,遇见的对象由你输入确定,当生命值超过50分时,或生命值为0或更低时则显示生命值后结束游戏,按如上需求,程序代码如下:

Score = 5

Flag = 0

Do While      

    X = InputBox("输入遇见对象")

    If X = "Felt" Then

        Score = Score + 2

    ElseIf X = "Reinhard" Then

        Score = Score + 10

    ElseIf X = "Bul1y" Then

        Score = Score - 30

    ElseIf X = "Emi1ia" Then

        Score = Score + 20

    End If

    If      Then

        Print Score

        Flag=1

    End If

Loop

假设定义变量X为字符串,其他均为整形,则代码中空缺的部分应分别填入(     )。

A . Flag = 1       Score > 50 or Score <= 0 B . Flag = -1       Score > 50 or Score <= 0 C . Flag = 0       Score > 50 and Score <= 0 D . Flag = 0       Score > 50 or Score <= 0
级差又称范围误差及一组数据中,最大值减最小值后所得数据。用Python编辑器打开“Y:\87”下的文件”极差.PY“,请完善程序并保存结果。
  1. (1) 请填空,完善该程序。实现功能:求出一组数据的极差并输出。

    n=int(input("请输入一个整数:"))

    m=int(input("请输入一组数据的第一个数:"))

    =m

    max=m 

    for i in range(1,n):

        t=int(input("请输入后续的数:"))

        if  t<:

             min=t 

        if  t>max:

             

    print()  #输出极差的值

    input("运行完毕,请按回车键退出...")

    编写完成后原名保存并关闭应用软件。

有m个人结伴旅行(m≤9,每个人用整数1~m编号)。期间既有全员参与的集体活动,也有自主参与的小团队活动。每项活动的消费由参与人平均分摊,其中一人先行垫付并记录。记录内容包括该项活动的人均消费金额(整数,单位:元)、参与人。每项活动的参与人用字符串表示,垫付人排在第1位。如“25134”表示2、5、1、3、4号参与该项活动,其中2号是垫付人。旅行结束后依据所有活动的消费记录进行结算:

1)计算每个人的应还款(应还款=应分摊的总金额-先行垫付的总金额);

2)根据所有人的应还款数据计算转账明细(应还款为正的人转给应还款为负的人)。

根据上述要求编写VB程序,功能如下:运行程序,读取消费记录数据并在列表框List 1中显示。单击“结算”按钮Command 1,在列表框List 2中显示每个人的应还款,在列表框List 3中显示转账明细。程序运行界面如图所示。

  1. (1) 结合程序与界面可知,AddItem是List 2的(单选,填字母:A .方法名/B .事件名/C .属性名)。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    Const n=9, m=15

    Dim x(1 To n)As Integer       ‘x(i)存储第i项消费记录的人均消费金额

    Dim a(1 To n)As String        ‘a(i)存储第i项消费记录的参与人

    Private Sub Form_Load( )

        ‘读取所有消费记录,存入数组x和a中,并显示在列表框List 1中

         ‘代码略

    End Sub

    Private Sub Command1_Click( )

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

        Dim c As Integer, w As Integer, v As Integer

        Dim b(1 To m)As Integer        ‘保存应还款数据

        For i= 1 To m

            b(i)=0

        Next i

        For i=1 To n      ‘根据消费记录计算应还款

            k=Len(a(i))

            p=Val(Mid(a(i), 1, 1))

            b(p)=b(p)-(k–1)*x(i)

            For j=2 To k

                p=Val(Mid(a(i), j, 1))

                

            Next j

        Next i

        c=0

        For i=1 To m

            List 2. AddItem Str(i)+“号”+Str(b(i))

            If b(i)>0 Then c=c+1

        Next i

        i=1 : j=1               ‘根据应还款数据计算转账明细

        Do While  

            Do While b(i)<=0

                i=i+1

            Loop

        Do While b(j)>=0

            j=j+1

        Loop:

            

            If w>0 Then  Else v =b(i)

            b(i)=b(i)-v:b(j)=b(j)+v

            List 3. AddItem Str(i)+“号->”+Str(j)+“号   ”+Str(v)

            If w<=0 Then c=c–1

        Loop

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
最近更新