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

有如下 VB 程序段:

m = Int(Rnd * 4 + 2)

For i = 1 To 6 - m

  For j = 1 To 6 - i

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

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

    End If

  Next j

Next i

数组元素a(1)到 a(6)的值依次为“49,45,5,61,42,71”,执行该程序段后,a(1)~a(6)各元素值不可能的是(         )

A .  61,49,71,45,42,5 B . 49,45,61,42,71,5 C . 49,61,45,71,42,5 D . 71,61,49,45,42,5
均分红包。当前有n堆红包,编号为1,2, 3, 。。 n,每堆有若干个红包,红包总数sum是n的倍数。可以在任一堆上取若干个红包,然后移动,最终使每堆上的红包个数相同。

移红包规则:

①编号为1的堆上的红包,只能移到编号为2的堆上;

②编号为n的堆上的红包,只能移到编号为n-1的堆上;

③其它堆上的红包,可以移到相邻左边或右边的堆上。

现要求找出最少的移动次数使每堆的红包数-样多。如图所示,在文本框Text1中输入红包堆数n,在文本框Text2中依次输入每堆红包的红包个数(以“,”为分隔符和结束符),单击“移红包次数统计”按钮Command1后,在标签Labe13中显示最少的移动次数。

  1. (1) 代码“Private Sub Command1_ Click() ”中的Click是(单选,填字母: A . 对象名;B . 事件名;C . 事件处理过程名;D . 方法名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const Sum = 40    ‘红包总个数

    Private Sub Command1_Click()

      Dim n As Integer       ‘红包的堆数

      Dim s As String, k As Integer

      Dim avg As Integer    '最终每堆的红包个数

      Dim ml As Integer, m2 As Integer

      Dim tmp As Integer, count As Integer, ans As Integer

      n= 

      s = Text2. Text

      avg=Sum/n

      tmp=0:count=0:ans=0

      For k=1 To Len(s)

        c = Mid(s, k, 1)

        If c <>”,”Then

          tmp =

        Else

          count = count + 1

          If count = 1 Then

            m1 =tmp

          Else

            m2 = tmp

            If m1 <> avg Then

              m2=m2-(avg-m1)

              ans=ans+1

            End If

              

          End If

          tmp=0

        End If

    Next k

    Labe13. Caption = Str (ans)

    End Sub

有如下 VB 程序段:

For i = 1 To 6

  x = Int(Rnd * 10) + 1

  If i Mod 2 <> x Mod 2 Then

    a(i) = x

  Else

    a(7 - i) = x

  End If

Next i

数组a各元素的初始值为0,执行程序后a数组各元素的值不可能是(    )

A . 8,7,0,0,6,5 B . 0,9,8,3,6,3 C . 6,7,2,3,2,0 D . 2,9,4,7,10,3
行程编码(Rim-length Coding)是一种相对简单的压缩技术,是将一个相同字符的连续串用一个串长和字符来代替。例如,有一个字符串“aaabccddddd”,经过行程编码压缩后可以用“3a1b2c5d”来表示。小李编写了一个行程编码的VB程序,功能如下:在文本框Text1中输入原码,单击“压缩”按钮Command1后,在文本框Text2中显示压缩码。程序设计界面和运行界面分别如图a和图b所示。

  1. (1) 在设计程序界面时,要使文本框Text2显示为空,可在其属性窗口中将属性的属性值修改为空。
  2. (2) 实现上述功能的VB程序如下。请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim i As Integer, count As Integer, length As Integer

    Dim ch As String, key As String, s As String

    s= Text1.Text

    length=

    key= Mid(s,1,1)

    i= 2 : count= 1

    Do While i <= length

    ch= Mid(s,i,1)

    If ch = key Then

     

    Else

    Text2.Text = Text2.Text + Str(count) + key

    count= 1

    key= ch

    End If

     

    Loop

    Text2.Text = Text2.Text + Str(count)+ key

    End Sub

  3. (3) 如果删除方框所在的那一行代码,运行该程序,在文本框Text1中输入“aaddddd”,单击“压缩”按钮,则文本框Text2中显示的内容为
给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将该数组依次分割成m+1个段,具体分割方法如下:

·第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1区间,则第1段元素个数为0。

·第1段分割后的剩余元素,用同样的方法来依次分割第2段,第3段…,第m段。

·第m段分割后的剩余元素分割到第m+1段(剩余段)。

若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第P段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分制到第m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图所示。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续三个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含38,58,46,第3段“重叠块”包含5,62,69。

  1. (1) 给定2个区间依次为[10,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为个。
  2. (2) 小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在画线处填入合适的代码。

    Const n=18,m=6

    Dim a(1 To n)As Integer

    Dim b(1 To 2*m)As Integer

    b(1)、b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限……

    Dim c(1 To 2*m+1)As Integer

    ‘c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数;

    ‘c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数……

    ‘c(2*m-1)存储第m段“非重叠块”的元素个数,c(2m)存储第m段“重叠块”的元素个数(值为0);      ‘c(2*m+1)存储剩余段的元素个数

    Private Sub Command1_Click( )

      Dim i As Integer,p As Integer,i As Integer,LL As Integer

    ‘读取n个数据并保存在数组a中,代码略

    ‘读取m个区间的下限和上限并保存在数组b中,代码略

      For i=1 To 2*m+1

        c(i)=0

      Next i

      i=1:p=1

      L=0:LL=0

    Do While   ①   

      If IsIn(i, p)Then

          If IsIn(i, p+1)Then

              LL=LL+1

          Else

                 ②   

              LL=0

          End If

          i=i+1

        Else

          c(2*p-1)=L

          c(2*p)=LL

            L=0:LL=0

            p=p+1

        End If

      Loop

      If i<=n Then

        c(2*p-1)=n-i+1

      Else

        c(2*p-1)=L

        c(2*p)=LL

      End If

    ‘输出统计结果,代码略

    End Sub

    ‘函数IsIn用来判断a(i)值是否属于第p区间

    Function IsIn(i As Integer, p As Integer)As Boolean

    If p>m Then

        IsIn=False

    Else

        If   ③   Then IsIn=True Else IsIn =False

    End If

    End Function

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

为保证信息传输的准确性,可在一段ASCII字符后面插入一个验证字符加以验证。验证字符生成规则如下:

①从左往右依次获取各字符的ASCII码值;

②对奇数位字符的ASCII码值做加法处理,对偶数位字符的ASCII码值做减法处理;

③将上述结果取绝对值后除以26求余数,余数为0~25,分别对应大写字母A~Z,则该大写字母即为验证字符。

小李编写字符串验证程序,功能如下:在文本框Text1中输入待检验字符串(最后一位为验证字符),点击按钮Command1,在标签Label1中显示输入字符串是否验证成功。程序运行界面如图所示。

  1. (1) 按照该规则,字符串“2021”的校验码是(注:字符“0”的ASCII码值为 48,字符“A”的ASCII码值为65,数字、字母 ASCII 码值均按序以 1 递增)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim s As String, t As String

        Dim cha As Integer, ans As Integer

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

        s =

        t = Mid(s, Len(s), 1)

        ans = 0

        For i = 1 To Len(s) - 1

            cha = Asc(Mid(s, i, 1))

            If Then

                ans = ans - cha

            Else

                ans = ans + cha

            End If

        Next i

        ans = Abs(ans) Mod 26

        If  Then

            Label1.Caption = "验证成功!"

        Else

            Label1.Caption = "验证失败!"

        End If

    End Sub

  3. (3) 程序中加框处代码有误,请改正。
编写VB程序实现以下功能:在文本框Text1中输入一个十进制正整数,单击“计算”按钮Command1后,将该正整数转换为二进制数,最后在文本框Text2中输出该二进制数中连续“0”或“1”的最长个数情况。

如:输入十进制数35,将其转换为二进制数为100011,其中最长连续数字是3个“0”。程序运行界面如图所示。

  1. (1) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim n As Integer, i As Integer, j As Integer, m As Integer

        Dim s As String, ch As String, ch1 As String, ch2 As String

    n = Val (Text1. Text)

        Do While n<>0

            s=CStr(n Mod 2)+s    ‘CStr将数字转化为字符串,但不会有前导空格

           

        Loop

        ch1 = Mid(s, 1, 1): ch = ch1

        i=2:j=1:m=0

        For i=2 To Len(s)

           ch2 = Mid(s, i, 1)

            If  Then

              If i-j> m Then

                m=i-j

               ch = ch1

            End If

            ch1 = ch2

           

            End If

        Next i

       

        Text2. Text = Str(m) & “个”& ch

    End Sub

  2. (2) 如果将程序中加提处的代码去掉,在文本框Text1中输入15,单击Command1后在标签Label2中显示的内容是
删除字符:实现从某一字符串删除指定的字符串,并将处理后的字符串重新输出,程序界面如图所示,在文本框Text1中输入原始字符串,在文本框Text2中输入需要删除的字符串,单击command1后,在文本框Text3中输出处理后的结果。实现上述功能的VB程序如下,请在划线处填入合适的代码。

 

Private Sub Command1_Click()

    Dim p As String, k As String, i As Integer

    Dim result As String

    result = ""

    p = Text1.Text

    k = Text2.Text

    i = 1

    Do While i <= Len(p) - Len(k) + 1

        If Mid(p, i, Len(k)) <> k Then

            

            i = i + 1

        Else

            

        End If

    Loop

    Text3.Text =

End Sub

目前部分手机的短信具有“提取详情”的功能,即针对一条短信,可以提取出短信中一些关键的信息。现编写VB程序实现如下功能:在文本框Text1中输入短信内容,点击“提取”按钮,将短信中的数字以“,”间隔输出到文本框Text2中。程序运行界面如图1所示。

  1. (1) 设计程序界面时,图 2 中控件(填数字)未在程序窗体中使用。
  2. (2) 请根据题意将下列程序补充完整

    Private Sub Command1_Click()

        Dim msg As String c As String, tmp As String, s As String, flag As Boolean msg = Text1.Text msg = msg + "/"          '标记字符串结束符

        tmp = "" :s = "" : flag = True

        For i = 1 To Len(msg)

            c = Mid(msg, i, 1)

            If  Then

                flag = False

                tmp = tmp + c

            ElseIf flag = False Then s = s + tmp + ","

            tmp = ""

           

            End If

        Next i

        Text2.Text = s

    End Sub

  3. (3) 若程序未加“msg = msg + "/"”语句,则示例图1中提取后的数字信息为
有如下 VB 程序段:

Dim s As String, t As String, res As String Dim i As Integer, k As Integer

s = "jpqzaabdcfb"

i = 1: k = 1: res = "" t = Mid(s, 1, 1)

Do While i < Len(s)

    If Mid(s, i + 1, 1) >= Mid(s, i, 1) Then

        k = k + 1

    Else

        res = res + CStr(k) + t

        k = 1

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

    End If

    i = i + 1

Loop

Label1.Caption = res

执行该段程序段后,Label1中输出的值为 (    )

A . 4j1a3a2c1b B . 4j4a2c1b C . 4j4a2c D . 4j1a3a2c
学校心理活动节举办“两人三足跑”比赛,比赛规则为:

⑴起点与终点之间共有10 个站点(包括起点与终点),依次为站点1、站点2……、站点10。参赛选手均从起点(站点1)出发,最先恰好到达终点(站点10)的一组选手为胜;

⑵对“恰好到达终点”的界定。比赛前,参赛选手随机抽取一个行进方案,该方案由5个正整数(范围为1~6)组成,表示参赛选手整个行程分5 个阶段完成,并规定了每个阶段能行进的站点数。若某一阶段按所给站点数行进还未到达终点,则向前(终点方向)行进;若某一阶段按所给站点数行进超过终点,则要折回直至行进完所给站点数;前四个阶段不出现按所给站点数行进恰好到达终点的情况,直至行进满五个阶段,且第五阶段按所给站点数行进恰好到达终点,则称为“恰好到达终点”。如方案“3,1,6,4,3,”满足“恰好到达终点”,按该方案行进的过程如图a所示:

组织方为了验证设计方案,编写了如下VB 程序:在文本框Text1 中输入待检验的方案(输入1~6 范围内的整数并以逗号分隔,且以逗号结束。例如:“3,1,6,4,3,”),单击“验证”按钮Command1,判断方案是否能恰好到达终点。若能,在标签Label2中显示“可行方案!”;若不能,则显示“不可行方案!”。程序界面如图b所示。

  1. (1) 若对方案“5,2,6,3,1,”进行验证,则该方案的验证结果是
  2. (2) 实现上述功能的VB 程序如下,请在划线处填入合适的代码。

    Const n = 10

    Private Sub Command1_Click( )

        Dim a(1 To n)As Integer      '表示每一个起点距离终点的站点数

        Dim b(1 To 5)As Integer

        Dim start As Integer, cnt As Integer, endsAs Integer

        Dim i As Integer, j As Integer, c As String, sAs String

        Dim flag As Boolean

        s = Text1.Text: j = 1

        For i = 1 To n

            a(i) = n - i

        Next i

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

            If c = "," Then

               

            Else

                b(j) = Val(c)

            End If

        Next i

        cnt = 1: flag = True

        start = 1: ends = 0

        i = 1

        Do While flag = True And i <= 5

            If b(i) = a(start) Then

                flag = False

            Else

                ends = start + b(i)

                start = adjust(ends)

                cnt = cnt + 1

            End If

            i = i + 1

        Loop

        If  Then

            Label2.Caption = "可行方案!"

        Else

            Label2.Caption = "不可行方案!"

        End If

    End Sub

    'adjust函数的作用是:根据参数ends的值来调整start的值

    Function adjust(endsAs Integer) As Integer

        Dim start As Integer

        If ends < n Then start = ends Else start =

        adjust = start

    End Function

用VB编写“提取字符串”的程序,实现如下功能:在文本框Text1中输入字符串,单击“提取”按钮Command1,程序将字符串中连续最长的大写字母提取出来,并显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 程序运行时,要使按钮Command1标题显示“提取”,可在Form_Load()事件处理过程中添加语句(单选,填字母:A . Command1 ="提取"/B . Command1.Text="提取"/C . Command1.Caption = "提取")。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim s As String, d As Integer, i As Integer

        Dim max As Integer, c As String, ans As String

        s = Text1.Text

        d = 0 : max =0

        For i = 1 To Len(s)

            c = Mid(s, i, 1)

            If c >= "A" And c <= "Z" Then

                d = d + 1

            Else

                If d > max Then

                    ans= Mid(s, i - d, d)

                   

                End If

                d = 0

            End If

        Next i

        Text2.Text=

    End Sub

  3. (3) 若文本框Text1中输入内容为:“Is it JUNE or JULY?”,单击“提取”按钮后,文本框Text2中显示的内容是
给定一个数组(有n个元素),小李通过边分段、边合并的方式将n个数据处理成一个非降序数据段(a(1)≤a(2)≤a(3)≤……≤a(n)),每一轮数据处理方法如下:

1)查找相邻两个非降序数据段:在未处理的数据区域中,从前往后找出第一个最长非降序数据段。若该数据段后面没有元素,则本轮处理完毕:否则在第1个数据段的后面,从前往后找出数组中第二个最长非降序数据段。

2)合并两个数据段:借助数组tmp.将查找到的两个相邻数据段合并成一个非降序数据段,然后将合并后的数据依次存回到原数组中。

3)若数组中还有未处理的数据,则重复(1)(2)步骤。每一轮数据处理完毕后,重新从数组第1个数据开始进行下一轮处理。若检测到某一轮没有合并处理,则说明n个数据已构成非降序数据段,数据处理结束。

  1. (1) 根据上述描述,若数组各元素为“3,9,7,6,8,2,1,5,7,4”,则第一轮合并处理完成后,数组中的数据依次是:(用“,”间隔)。
  2. (2) 实现上述功能的VB程序如下.请在划线处填入合适代码。

    Const n = 10

    Dim a(1 To n + 5) As Integer

    Din tmp(1 To n + 5) As Integer

        '读取n个整数保存到数组a中,并在文本概Text1中显示,代码略。

    Private Sub Comnand1_ Click()

        Do While True

            If Not Merge() Then Exit Do

            '在列表概List1中输出这一轮合并后的数据,代码略。

        Loop

    End Sub

    Function Position(low As Integer) As Integer

        Din i As Int eger

        For i=low To n-1

            If  Then Exit For

        Next i

        Position = i

    End Function

    Function Merge() As Bool ean

        Dim i As Integer, flag As Boolean, p1 As Integer, p2 As Integer

        Dim low1 As Integer, high1 As Integer, high2 As Integer

        flag = False: low1= 1

        Do While low1 < n

            high1 = Position(low1)

            If high1 = n Then Exit Do Else flag = True

            high2 = Position(high1 + 1)

            p1=low1:p2=high1+1

            i = low1

            Do While

                If p2>high2 Or p1 <= high1 And a(p1) < a(p2) Then

                    tmp(i)=a(p1):p1=p1+1

                Else

                    tmp(i)=a(p2):p2=p2+1

                End If

                i =i+1

            Loop

            For i = low1 To high2

                a(i) = tmp(i)

            Next i

            

        Loop

        Merge = flag

    End Function

调试程序。请阅读以下程序并写出运行结果。

score=int(input("请输入一个分数"))

if 100>=score>=90:

    print("A")

if 90>score>=80:

    print("B")

if 80>score>=60:

    print("C")

if 60>score>=0:

    print("D")

if score<0 or score >100:

    print("输入错误!")

根据以下程序代码完成下列小题。

程序描述: 所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。

程序要求输入一个正整数(不为1),将经过处理得到1的过程输出来。代码如下:

x=int(input('输入一个正整数:'))

while     ①    

  if       ②  

    x=x/2

           ③      

  else:

         ④    

         ③    

if x==1:

       ⑤     

  1. (1) ①处的语句是          
    A . x>1 B . x>2 C . x!=1: D . x!=0:
  2. (2) ②处的语句是           
    A . x%3=0: B . x%2=0: C . x%3==0: D . x%2==0:
  3. (3) ③处的语句是               
    A . print(‘x/2’) B . print(‘x’) C . print(x) D . print(x/2)
  4. (4) ④处的语句是               
    A . x= x/2 B . x= x/2+1 C . x=x*3+1 D . x=3x+1
  5. (5) ⑤处的语句是               
    A . pass B . exit C . continue D . Break
某影厅共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程序,功能如下:在列表框List中显示整理前的数据,单击“整理”按钮Commandl1,整理结果显示在列表框List2中,程序运行界面如图所示。

  1. (1) 将数组元素d(1)到d(640)分为16段,如果每段恰好包含40个元素,采用选择法排序算法分别对每段中的元素进行排序,整个排序过程中,数组元素之间的比较次数是    (单选,填字母:
    A . 640×639/2次/ B . 16×40×39/2次/ C . 40×16×15/2次)。
  2. (2) 请在划线处填入合适的代码。

    Const n=640   '参加统测总学生数

    Const nc =16  '班级数

    Dim class(1 To n) As Integer, sname(1 To n)As String, score(1 To n) As Integer

    Dim b( To nc) As Integer        '存储每个班级的参加统测人数

    Dim c(1 To nc) As Integer

    Dim d(1 To n)As Integer

    Private Sub Form_Load()

        '本过程读取每个参加统测学生的班级序号、姓名和统测成绩分别存储在数组class,sname和 score中并在List1中显示,代码略

    End Sub

    Private Sub Command1_Click()

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

        For i = 1 To nc

            b(i) = 0

        Next i

        For i = 1 To n           '统计每个班级统测人数

              

        Next i

        k = 1

        For i = 1 To nc

            c(i) = k

            k = k + b(i)

        Next i

        For i = 1 To n

            k = class (i)

            

            c(k) = c(k) + 1

        Next i

        For i = 1 To nc        '对各班级按统测成绩进行排序

            Call px(),c(i)-1))

        Next i

        For i = 1 To n

            List2.AddItem " " & class(d(i)) & " "& sname (d(i)) & " " & score(d(i))

        Next i

    End Sub

    Private Sub px(head As Integer, tail As Integer)

        Dim i As Integer, j As Integer, t As Integer

        For i = head To tail - 1

            For j = tail To i + 1 Step -1

                If Then

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

                End If

            Next j

        Next i

    End Sub

答题卡一般采用2B铅笔填涂,填涂好的答题卡经过扫描后得到如图所示的数字化图像,从一个像素点的灰度值>132判断是否被填涂开始,进而判断一个信息点是否被填涂。利用如下的Python程序可以识别并统计填涂好的答题卡中的答案:
  1. (1) 答题卡通常使用红色,如使用黑色印刷,对答案识别(有/无)影响。

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

    from PIL import Image

    x_start = 11       # 起始点坐标

    y_start = 92    

    fill_width= 24       信息点宽度

    fill_height= 10         # 信息点高度

    space_width = 15       间隔宽度

    space_height = 12         # 间隔高度

    ans_cnt = 5            # 题目个数

    def bw_judge(R, G, B):         # bw_judge用于判断一个像素的填涂情况

    Gray_scale = 0.299 * R + 0.587 * G + 0.114 * B

    return Gray_scale < 132

    def fill_judge(x, y):            # fill_judge 用于判断信息点的填涂情况

    count = 0

    for i in range(x, x + fill_width):

      for j in range( ):

      R, G, B = pixels[i, j]

      if bw_judge(R, G, B) == True:

        count = count + 1

        if count >= fill_width * fill_height * 0.64:

          return True

          total_width  = fill_width + space_width

          total_height = fill_height + space_height

          image = Image.open ("card.bmp")

          pixels = image.load()

          ans = ""

          item=[‘A’,’B’,’C’,’D’]

          list=[]

          for col in range(ans_cnt):

            x =

            for row in range(4):

              y = y_start + total_height * row

              if fill_judge(x, y) == True:

                    

                list.append(ans)

                ans=""

    print(list)

小明编写Python程序,实现对某次评价报名序号的检测并输出该考生的评价类别+科类类别。报名序号的编写方法是:由10位数字组成,毕业年份(4位)+评价类别(1位)+科类代码(1位)+顺序代码(4位)。评价类别:1普通、2 单项;科类类别:3 艺术类、4 体育类、5综合类。

例如: 输入报名序号“2022150001”,输出“普通综合类”

  1. (1) 与加框处代码功能相同的是。(单选,填字母:A .s=dic[ticket[-6:-4]]/ B .s=dic[ticket[-6:-5]])
  2. (2) 实现查询功能的Python程序如下,请在划线处填入合适的代码

    while True:

        ticket=

        num=0

        for i in ticket:

            if i>="0" and i<="9":

              num=num+1

        If  len(ticket)!=10:

            print("输入长度不符合要求")

        elif :

            print("输入存在非数字字符")

        else:

            break

    dic={"13":"普通艺术类","14":"普通体育类","15":"普通综合类","23":"单项艺术类","24":"单项体育类","25":"单项综合类"}

    print("该考生的考试科类为:",s)

下列程序的输出结果是(    )

y=0

x=1

while x<=10:

  if x%5==0:

    break

  else:

    y+=x

    x=x+1

print(y)

A . 50 B . 55 C . 15 D . 10
最近更新