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

Photoshop软件中引入了“色差”的概念,色差可表示为RGB各通道颜色在正负两个方向上 的偏离最大范围。

例如:像素A的颜色为RGB(10,40,100),像素B的颜色为RGB(80,20,200),则R通道偏离10-80=-70,G通道偏离40-20=20,B通道偏离100-200=-100,色差=正最大偏离值-负最大偏离值,即20-(-100)=120,当偏离全部为正时,负方向以0表示,反之,偏离全部为负时,正方向以0表示。

小明设计了计算两点色差的VB程序,程序界面如图所示:

以下VB程序用于计算两个随机颜色的色差,请完成以下各题。

  1. (1) 若将图中A处位置的文字修改为“VB程序”,应修改属性。
  2. (2) 程序中的Form_Load()属于                。(单选,填字母)
    A . 对象名 B . 事件名 C . 属性名 D . 事件处理过程名
  3. (3) 填充程序中下划线处代码。

    Dim R1, G1, B1 As Integer      '分别用于存储第一个像素的RGB值

    Dim R2, G2, B2 As Integer      '分别用于存储第二个像素的RGB值

    Private Sub Form_Load()

    ' 随机生成两个数的 RGB值,并显示在text1—text6中,代码略

    End Sub

    Private Sub Command1_Click()

    Dim alw as Integer

    t1 = R1 - R2 : t2 = G1 - G2 : t3 = B1 - B2

    If t1 > t2 Then

      Max = t1 : Min = t2

    Else

      Max = t2 : Min = t1

    If t3 > Max Then

      Max = t3

    ElseIf t3 < Min Then

      Min = t3

    End If

    If Max * Min < 0 Then

      alw = Max - Min

    ElseIf Max < 0 Then

      alw = -Min

    Else

      alw =

    End If

    Text7.Text =

    End Sub

下列VB程序段的功能为;根据文本框Text1中各字符的大小关系,计算各字符按升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~y(4)各元素的值分别为“4,1,2,3”。

s=Text1.Text

n=Len(s)

For i=1 To n

    y(i)=1

Next i

For i=1 To

    For j=  To n

      If  Then

          y(j)=y(j)+1

      Else

          y(i)=y(i)+1

      End If

    Next j

Next i

上述程序段3个方框处的表达式分别为(  )

A . ⑴n         ⑵1         ⑶Mid(s,j,1)>=Mid(s,i,1) B . ⑴n         ⑵1         ⑶Mid(s,j,1)>Mid(s,i,1) C . ⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>=Mid(s,i,1) D . ⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>Mid(s,i,1)
RLE压缩方法是Windows系统中使用的一种图像文件压缩方法,用两个数据表示,第一个记录指定像素重复的次数,第二个记录具体的像素值。例如,有一表示颜色像素值的字符串RRRRGGBB,用RLE压缩方法压缩后可用4R2G3B表示。小芳设计了一个VB程序实现RLE算法功能。在Text1中输入原始数据,点击“压缩”按钮Command1后,在Text2中显示经过压缩后的数据,程序运行界面如图所示。

  1. (1) 这里采用的压缩技术属于(选填:有损压缩/无损压缩)。
  2. (2) 若想修改文本框Text2中的字体大小,需对它的属性值进行修改(选填:BackColor/Font/Text).
  3. (3) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Commandl_Click( )

      Dim s1 As String,s2 As String

      Dim c As Integer,p As Integer

      sl=Text1.Text:s2= ""

      c=1:p=2

      Do While p<Len(sl)

          If Mid(s1,p,1)=Mid(s1,p-1,1)Ther

              c=c+1

          Else

              s2 = s2+Str(c)+ Mid(s1,р-1,1)

                 ①   

          End If

      p=р+1

      Loop

      Text2.Text =   ②   

    End Sub

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

有一段代码如下:

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
字符串,由数字、字母和“-”组成,现以“-”为分组标记,作如下处理:数字往后移5个,如0→5,3→8,6→1;各组字母倒序放在本组前面;“-”不作处理。如字符串“t37-9Yg-52r-”,经过处理后变为“t82-gY4- r07-”。下列VB程序段实现该算法:

Const mw = "0123456789"

S = Text1.Text: s1 = "":s2 = ""

For i=1 To Len(s)

    C = Mid(s,i,1)

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

               

               

        s1 = s1 + c

    ElseIf c = "-" Then

        s2 = s2 + s1 + c

        s1 = ""

    Else

               

    End If

Next i

① t =(Val(c)+5) Mod 10

② c = Mid(mw,t,1)

③ s1 = c + s1

④ t=(Val(c)+4) Mod 10+1

⑤ c= Mid(mw,t+1,1)

⑥ s1 = s1 + c

则填空处的代码应该是(    )

A . ①②③ B . ④⑤⑥ C . ①⑤③ D . ④②⑥
有Visual Basic代码段如下:

s = Text1.Text : sum = 0

c = 1 : j = 0

For i = 1 to len(s)

    ch = Mid(s, i, 1)

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

        j = j + 1

    Else

        If c mod 2 = 1 then sum = sum + Val(Mid(s,i-j,j))

        j=0 : c = c + 1

    End If

Next i

Label1.Caption = Str(sum)

在文本框Text1中输入“20a20b1c29d9”,执行该段代码后,标签Label1中的结果是(   )

A . 70 B . 21 C . 30 D . 79
操作说明:编写一个程序实现以下功能,将程序以“Y:/3/3.py”作为文件名保存。

题目:设计100以内的数中能同时被3或5整除的个数。

有如下VB 程序段:

c =0: k = 1

For i = 2 To 10

    If i Mod 2 <> 0 And a(k) < a(i) Then

        k = i

        c = c + 1

    End If

Next i

数组元素a(1)到a(10)的值依次为“12, 33, 14, 6, 7, 23, 25, 37, 34, 40”,执行该程序段后,变量k和c的值分别为(    )

A . 9 3 B . 10 3 C . 5 1 D . 4 2
阅读程序。分析代码并回答问题。

list=['a','b','c','d','e','f','g']

list1=[]

list2=[]

for i in range(7):

    if i%2==0:

        list1.append(list[i])

else:

    list2.append(list[i])

print(list1)

print(list1)

 

  1. (1) list的数据类型是
  2. (2) list中的元素的数据类型
  3. (3) list1=[ ]的作用是
  4. (4) for i in range(7)语句中,i的实际数据范围是从
  5. (5) append(list[i])的作用是
某景区渡口游客可乘船往返于河的两岸,有m个人自河东去河西,n个人自河西返回河东。现有一艘船,最大载重量为wt,最多可同时载两人,船自河东出发,最后返回河东。所有人的体重不会超过wt,求把所有人载过河所需最少往返次数。编写一个VB程序,实现上述功能。程序运行时,在列表框List1中显示所有游客的体重和去向(W表示往西、E表示往东),如“132E”表示体重为132往东。单击“统计”按钮Command1,在标签Label1中显示最少往返次数。程序运行界面如图所示。

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

    Const m = 6, n = 8, wt = 200

    Dim d(1 To m + n) As String, a(1 To m + n) As Integer

    Private Sub Form_Load()

        '读取m + n 个人的体重及去向数据存入d 数组,代码略

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer, p As Integer, q As Integer, s As String

        Dim num As Integer, num1 As Integer, num2 As Integer

        '以下代码实现从d 数组中提取每个人的体重数据,根据去向分段存入a 数组

        p = 1 : q =

        For i = 1 To m + n

            s = Mid(d(i), 1, Len(d(i)) - 1)

            If Mid(d(i),  , 1) = "W" Then

                a(p) = Val(s): p = p + 1

            Else

                a(q) = Val(s): q = q + 1

            End If

        Next i

        num1 = GetNum(1, m)

        num2 = GetNum(m + 1, m + n)

        If num1 > num2 Then num = num1 Else num = num2

        Label1.Caption = "过河需要最少往返次数:" + Str(num)

    End Sub

    Function GetNum(head As Integer, tail As Integer) As Integer

        Dim i As Integer, j As Integer, k As Integer, cnt As Integer, t As Integer

        '以下代码实现对数组a 降序排序

        i = head

        Do While i < tail

            k = i: i = tail

            For j =

                If a(j - 1) < a(j) Then

                    t = a(j): a(j) = a(j - 1): a(j - 1) = t

                    i = j

                End If

            Next j

        Loop

        cnt = 0: i = head: j = tail

        Do While i <= j

            If  Then j = j - 1

            cnt = cnt + 1: i = i + 1

        Loop

        GetNum = cnt

    End Function

  3. (3) 程序加框处的代码有误,请改正。
小明编写Python程序,把百分制分数(fenshu)转换为五分制等级,然后输出等级。例如分数95,程序输出 “A”。转换规则如下,请在横线填入正确的代码。

大于等于90分为A;

小于90且大于等于80为B;

小于80且大于等于70为C;

小于70且大于等于60为D;

小于60为E。

if fenshu>=90:        #变量fenshu表示分数

grade="A"

 

grade="B"

elif fenshu >=70:

grade="C"

elif fenshu >=60:

grade="D"

else:

grade="E"

                #输出等第

阅读下列程序,写出运行结果

警察抓小偷,有四个嫌疑人甲乙丙丁,其中一人是小偷。甲说“不是我”,乙说“是丙”,丙说“是丁”,丁说“丙在冤枉人”。他们中只有一人说了假话,编程判断谁是小偷。(注:在Python运算中,True的值为1,False的值为0)

persons=[‘甲’,‘乙’,‘丙’, ‘丁’]

for thief in persons:

flag =(thief!=‘甲’)+(thief==‘丙’)+(thief ==‘丁’)+(thief!=‘丁’)

if flag == 3:

print(thief)

运行结果是:

对n位二进制数进行海明码编码(n是8的倍数),以8位二进制数为一段,每段插入4位校验位,构成12位二进制数,依次处理,完成各段数据编码。

每段海明码编码方法如下:

     插入二进制位:在第1、2、4、8位置上插入4个二进制位r1、r2、r3、r4,初值为0。把原8位二进制数d1~d8从左往右依次填入剩余位置中,原数据位和插入的二进制位如图a所示:

图a

     计算插入的校验位的值:把每个位置号转换成4位二进制数,选出形如“***1”(“*”表示一位0或1)的位置号,则统计这些位置号对应数据位中的“1”的个数,若是奇数,则r1为1,否则为0;再选出形如“**1*”的位置号,则统计这些位置号对应数据位中的“1”的个数,若是奇数,则r2为1,否则为0;以此类推……

如8位二进制数“10101101”的编码过程如下:

1)插入4个二进制位,初值为0,剩余位置依次填入原数据位,如图b所示。

图b

2)计算插入的校验位的值,选出形如“***1”的位置号,即1、3、5、7、9、11,统计这些位置号对应数据位中“1”的个数为2,故r1=0,同理可得:r2=1,r3=0,r4=1,如图c所示。

图c

3)按位置号从小到大依次拼接各数据位得到最后编码“011001011101”。

  1. (1) 若要计算校验位r2的值,需统计位置号为的数据位中1的个数(依次填整数表示的位置号,用逗号分隔)。
  2. (2) 编写VB程序实现上述功能,代码如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

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

        Dim s As String, ch As String, result As String

        Dim a(1 To 12) As Integer, n(1 To 4) As Integer

        Dim b(1 To 8) As Integer

        b(1) = 3: b(2) = 5: b(3) = 6: b(4) = 7

        b(5) = 9: b(6) = 10: b(7) = 11: b(8) = 12  '编码数据的插入位置

        s = Text1.Text: result = ""

        For i = 1 To Len(s) \ 8

            For j = 1 To 12

                a(j) = 0

            Next j

            For j = 1 To 8

            ch = Mid(s, (i - 1) * 8 + j, 1)

                             '把编码数据插入相应位置

        Next j

        For j = 1 To 4

            n(j) = 0

        Next j

        For j = 1 To 12

            m = j

            For k = 1 To 4

                If m Mod 2 = 1 Then

                    m = m \ 2

                Next k

            Next j

            For j = 1 To 4

                a(2 ^ (j - 1)) =

            Next j

            For j = 1 To 12

                result = result + Chr(Asc("0") + a(j))

            Next j

        Next i

        Text2.Text = result

    End Sub

小明用VB编写了统计短文(不超过500字)中英语单词频次的程序。在文本框Text1中输入短文,单击“单词统计”按钮Count后,在列表框List1中按字典升序输出单词(不区分大小写)和出现频次,程序运行结果如图所示。

请回答下列问题:

  1. (1) 观察程序代码,该事件处理过程名为
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Count_Click()

        Dim word(1 To 500) As String, num(1 To 500) As Integer

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

        Dim i As Integer, j As Integer, k As Integer, low As Integer, high As Integer

        Dim m As Integer, n As Integer, b As Integer

        For i = 1 To 500

            num(i) = 0

        Next i

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

        i = 1 : b = 1 : m = 0 : j = 0

        Do While i <= n

            c = Mid(s, i, 1)

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

                j = j + 1

            Else

                If j > 0 Then

                    tmp = 

                    low = 1

                    high = m

                    Do While low <= high

                        t = (low + high) \ 2

                        If tmp = word(t) Then

                            Exit Do

                        If tmp < word(t) Then

                            high = t - 1

                        Else

                            low = t + 1

                    Loop

                    If   Then

                        For k = m To low Step -1

                            word(k + 1) = word(k)

                            num(k + 1) = num(k)

                        Next k
                         

                        num(low) = 1

                        m = m + 1

                    Else

                        num(t) = num(t) + 1

                    End If

                    j = 0

                End If

                b = i + 1

            End If

            i = i + 1

        Loop

        List1.Clear

        For i = 1 To m

            List1.AddItem word(i) + ":" + Str(num(i)) + "次"

        Next i

    End Sub

    Function Lowcase(t As String) As String

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

        s = ""

        For i = 1 To Len(t)

            c = Mid(t, i, 1)

            If c >= "A" And c <= "Z" Then s = s + Chr(Asc(c) + 32) Else s = s + c

        Next i

         

    End Function

某次模拟考试后,某班主任为了统计本班学生的语文和数学成绩,制作了如下 VB 程序。程序界面如下图所示:在文本框Text1中输入语文和数学成绩,成绩之间用“,”隔开,以“,”结束,加载窗体时,将成绩提取到数组 a中,如a(1)表示第一位学生的语文成绩,a(2)表示第一位同学的数学成绩,如a(3)表示第二位学生的语文成绩,a(4)表示第二位同学的数学成绩,……,以此类推,单击按钮Command11,将成绩按照语文为主要关键字、数学为次要关键字做升序排序,并将排序后的结果显示在文本框Text2中。

  1. (1) 窗体中没有用到的控件是           
    A . B . C . D .
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码

    Dim a(1 To 20) As Integer

    Dim i As Integer, n As Integer

    Private Sub Form_Load()

        Dim s As String, ch As String

        n = 1:s = Text1.Text

        For i = 1 To Len(s)

            ch = Mid(s, i, 1)

            If ch <> "," Then

                a(n) =

            Else

                n = n + 1

            End If

        Next i

       

    End Sub

    Private Sub Command1_Click()

        Dim j As Integer, t1 As Integer, t2 As Integer

        For i = 2 To n/2

            t1 = a(2 * i - 1): t2 = a(2 * i): j = i - 1

            Do While

                a(2 * j + 1) = a(2 * j - 1)

                a(2 * j + 2) = a(2 * j)

                j = j - 1

                If j = 0 Then Exit Do

            Loop

            a(2 * j + 1) = t1

           

        Next i

        For i = 1 To n/2

            Text2.Text = Text2.Text + Str(a(2 * i - 1)) + Str(a(2 * i))

        Next i

    End Sub

  3. (3) 程序中加框处代码有误,请改正
下列程序的运行结果是(    )

PRIVATE SUB FORM_CLICK( )

  X=3 : Y=12

  IF X>2 THEN Y=3

  Y=5

  PRINT Y

END SUB

A . 2 B . 3 C . 5 D . 无结果
有如下Python程序段

s="aabbccabc"

st=s[1]

for i in range(1,len(s)):

    if len(st)==0 or s[i]!=st[len(st)-1]:

        st=st+s[i]

    else:

        st=st[0:len(st)-1]

print(st)

运行该段代码后,输出结果为(     )

A . abc B . abcabc C . ababc D . aabbc
有如下Python程序段:

ma=a[0];mb=a[0];pa=0;pb=0

for i in range(1,10):

    if ma < a[i]:ma = a[i];pa=i

    if mb > a[i]:mb = a[i];pb=i

下列关于该程序段功能描述正确的是(     )

A . 变量pa存储a[0]至a[9]中的最大值 B . 变量ma存储a[0]至a[9]中的最小值 C . 变量pb存储a[0]至a[9]中的最大值 D . 变量mb存储a[0]至a[9]中的最小值
某些数据中存在“数字山峰”,例如数据“21432748”中存在“1432”、“274”两座“数字山峰”(必须包含上坡与下坡),下面程序用于求数据中“数字山峰”的数量:

num=input("请输入数字串:");c=0

for i in range(1,len(num)):

    if  and f==False:

        f=True

    elif  and f==True:

        c=c+1

        f=False

print("有",c,"座数字山峰")

方框(1)(2)(3)的代码由以下部分组成:

①f=True         ②f=False        ③num[i-1]>num[i]           ④num[i-1]<num[i]

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

A . ①③④ B . ①④③ C . ②③④ D . ②④③
有两个以字母结尾的字符串s1和s2,在忽略字符串中空格的前提下判断它们是否相同。实现该功能的VB程序段如下:

i=i+1 : j=j+1

Do While i<=Len(s1) And j<=Len(s2)

    If Mid(s1, i, 1 )=Mid(s2, j, 1) Then

        i=i+1 : j=j+1

    Else

        

    End If

Loop

If i>Len(s1) And j>Len(s2) Then Text1.Text=“相同”Else Text1.Text=“不相同”

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

①If Mid(s1, i, 1)="" Then i=i+1

②If Mid(s2, j, 1)="" Then j=j+1

③If Mid(s1, i, 1)< > " " And Mid(s2, j, 1)<>" " Then Exit Do      'Exit Do表示退出循环

代码顺序正确的是(   )

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