2.3 周而复始的循环 知识点题库

编写VB程序,实现如下功能:在文本框Text1、Text2中分别输入一个正整数,单击“计算累加和”按钮(Command1),在标签Label3中显示起始值与结束值之间所有奇数的和。界面如1图所示。

1图

2图

  1. (1) 在设计应用程序界面时,应使用2图所示“控件工具箱”中的 (填写相应编号)添加“计算累加和”按钮。
  2. (2) 为实现上述功能,请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim x1 As Integer, x2 As Integer, n As Integer

    Dim sum As Long

    x1 = Val(Text1.Text)

    x2 = Val(Text2.Text)

    Sum = 0

    If x1 < x2 Then n = 1 Else     

    For i = x1 To x2 Step n

        If Then

            Sum = Sum + i

                

    Next i

    Label3.Caption = "从" & x1 & "到" & x2 & "之间所有奇数的累加和=" & Str(Sum)

    End Sub

有如下VB程序段:

For i=1 To 3

k=“”

Fori-1 To 2*i-1

k=k+“*”

Next j

List1.AddItem k

Next i

该程序运行后,在列表框List1中显示的是(  )

A . B . C . D .
为防止某传染病,在堂食中不能两个人相邻就餐。为避免两个人相邻就餐,小明设计了一个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

     ② ③ 

用户日常使用的程序使用时必须调用到硬盘才能运行。
有Python程序段如下:

import pandas as pd

df1=pd. DataFrame([[10, 20], [30, 40]], columns=['A','B'])

df2=pd. DataFrame([50, 60], [70, 80]], columns=['A',B'])

df=df1. append(df2,ignore_ index= True)

print(df)

该程序段运行后输出结果为(    )

A . B . C . D .
有如下VB程序段:

Const n = 5

Dim b(n)As Integer

For i = 1 To 5

    b(i)= i

Next i

For i = 1 To 2

    For j = n – 1 To I Step -1

        If a(b(j))> a(b(j + 1))Then

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

        End If

    Next j

Next i

数组元素a(1)~a(5)的值依次为“35,24,45,16,77”,运行上述程序段后,数组元素b(1)到b(5)的值依次为(    )

A . 1,3,5,2,4 B . 5,3,1,2,4 C . 2,4,1,3,5 D . 4,2,1,3,5
如图 a 所示,在 excel 中使用Rank函数可以快速地返回一个数字在数字列表中的排位,而且是同分同名次,非常方便。小明想用Vb编写一个程序来实现类似Rank排名次的功能,程序运行时,随机产生10个[60,100]之间的随机数,并显示在列表框List1中,单击“排名”按钮Command1,在列表框List2中输出数据及其排名,程序运行界面如图 b 所示。

  1. (1) 随机产生[60,100]之间的随机数的代码为:
  2. (2) 实现上述功能的 VB 程序如下,代码加框处有错,请改正。
  3. (3) 划线处填入正确代码。

    Dim a(1 to 10) As Integer     ‘存储原始数据

    Dim b(1 to 10)As Integer    ‘存放名次

    Private Sub Command1_Click()

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

        For i=1 To 10 n=0

            For j=1 To 10

                If  Then

            Next j

        Next i

        b(i)= n

        For i= 1 to 10

            List2.Additem str(a(i))&“ ”&

        Next i

    End Sub

    Private Sub Form_Load()

    ‘随机产生 10 个[60,100]之间的随机数,并显示在 List1 中,代码略。

    End Sub

有如下ⅤB程序段:

For i=1 To 10

    b(a(i) Mod 10)= b(a(i) Mod 10)+1

    b(a(i)\10)=b(a(i)\10)+1

Next i

num=0

For i=0 To 9

    If b(i)>num Then num b(i)

Next i

数组b各元素初始值为0,数组元素a(1)到a(10)的值依次为“68,17,24,30,36,40,55,58,61,66”,执行该程序段,num的值为(   )

A . 2 B . 3 C . 4 D . 5
现有VB程序“矩形面积和.vbp”,可计算100个矩形序列的面积和,计算公式为s=1 * 2+2 * 3+…+100 * 101,该程序运行时,单击“计算”按钮,即显示结果。但该程序代码有3处错误,请修改。

Private Sub Command1_Click()

    Dim i AS Integer

    Dim As Long

    For i = 1 To 100

        s = s + i *(i+1)

    Nest i

    Text1. Caption = s

End Sub

  1. (1) 修改“Dim As Long”行中的错误;
  2. (2) 修改“Nest i”行中的错误;
  3. (3) 修改“Text1. Caption=s”行中的错误;
小张同学在学习了选修教材《算法与程序设计》后,准备小试牛刀一下,就编了“判断一个数能否被7整除”的小程序,其中有三处错误,请帮助他修改。

Private Sub Command1_ Click()

    Dim i As Integer

    Dim As String

    i= Text1.Text

    If i/7=0 Then                            '判断文本框中输入的数是否是7的倍数

        j=i & “是7的倍数,能被7整除! ”         '是7的倍数,输出能被7整除!

    Else

        j=i&"不是7的倍数,不能被7整除!"        '不是7的倍数,就输出不是7的倍数,不能被7整除!!

    EndIf

    Label3. Caption=j

End Sub

  1. (1) 修改语句“Dim As String”行中的错误;
  2. (2) 修改语句“If i/7=0 Then”行中的错误;
  3. (3) 修改语句“End”行中的错误。
在VB中,下面程序段执行后,语句y=y+1执行的次数是(    )

x=0: y=0

For n=1 To 5

x=x+1

y=y+1

Next n

Print x+y

A . 2次 B . 3次 C . 4次 D . 5次
有如下VB程序段:

s =“312321”:m=0:c=“”:k=1

For i=1 To Len(s)

    m=m+k

    If k=1 Then c=Mid(s,n,1)+c Else c=c+ Mid(s,m,1)

    If i Mod 3=0 Then k=-k:m=Len(s)+1

Next i

执行该程序段后。变量c的值是(    )

A . ”213321” B . ”213123" C . ”312123" D . ”312213 "
在文本框Text1中输入十进制数,将其转换为二进制数后在标签Label1上输出。VB程序段如下:

Dim x As Integer,s As String,t As Integer

x=Val(Text1.Text)

Do While x>0

   

Loop

Label1.Caption= s

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

①x=x\2

②s=Str(t)+s

③t=x Mod 2

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

A . ②①③ B . ①③② C . ③②① D . ①②③
灰度图像像素的灰度值为0~255的整数,为区分图像的前景与背景,寻找一个最佳灰度值T,使得前景、背景这两类像素之间的差异最大。

求T值的方法如下:取某个灰度值k,将图像所有N个像素分成两类,灰度值小于k的作为背景像素,灰度值大于等于k 的作为前景像素,统计两类像素的个数分别为N1、N2,计算灰度值的均值分别为μ1、μ2,利用公式 计算出两类像素的差异值。当该值最大时,k即为要找的最佳灰度值T。若某区间段内有连续多个T满足要求,则T取中间值。

例如:图a所示图像像素的灰度值仅为0~5,统计0~5灰度值像素的个数依次为8、7、2、6、9、4,如图b所示。当k=2时,N1=15,N2=21,μ1=(0*8+1*7)/(8+7),μ2=(2*2+3*6+4*9+5*4)/(2+6+9+4),计算出差异值为2.5635。依此类推,计算差异值如图c所示。可知,当k=3时差异值最大,3是最佳灰度值T。

编写VB程序,实现如上功能。读取图像所有像素的灰度值后,单击按钮Command1,在标签Label1上显示T值。

  1. (1) 在上例中,取k=3,则背景像素的个数N1为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const N = 32 * 24

    Dim a(1 To N) As Integer     'a 数组存储图像所有像素的灰度值

    Private Sub Form_Load()

        '读取图像中的所有像素的灰度值存入a数组,代码略

    End Sub

    Private Sub Command1_Click()

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

        Dim sum As Long, sum1 As Long, N1 As Long, N2 As Long

        Dim μ1 As Double, μ2 As Double, diff As Double, max_var As Double

        Dim t1 As Integer, t2 As Integer, T As Integer

        Dim h(255) As Long

        Dim c(255) As Long

        max_var = 0: t1 = 0: t2 = 0: N1 = 0: N2 = 0: sum = 0: sum1 = 0

        For i = 0 To 255

            h(i) = 0: c(i) = 0

        Next i

        For i = 1 To N

            h(a(i)) = h(a(i)) + 1

        Next i

        c(0) = h(0)

        For i = 1 To 255

                 '统计灰度值小于等于i 的像素个数

            sum = sum + i * h(i)

        Next i

        For k = 1 To 255

            N1 = c(k - 1)

            N2 = N - N1

            If N1 <> 0 And N2 <> 0 Then

               

                μ1 = sum1 / N1

                μ2 = (sum - sum1) / N2

                diff = N1 / N * N2 / N * (μ1 - μ2) ^ 2

                diff = Round(diff, 4)      'Round 函数的作用是对diff 保留四位小数

                If diff >= max_var Then

                    t1 = k

                If diff > max_var Then

                    max_var = diff

                End If

            End If

        Next k

        T = (t1 + t2) \ 2

        Label1.Caption = "将该图像分割为前景与背景两部分的最佳灰度值为:" & T

    End Sub

学习小组有5名成员,成员的分数存放在字典中。为得到成员的分数(用变量fenshu表示),请在横线填入正确的代码。

a={"张三":80,"李四":85,"王五":90,"赵六":70,"钱七":65}

b=input("请输入姓名:")

fenshu=         #从字典读取分数

“回文字符串” 是一种正读和反读都一样的字符串, 比如“level"或者“noon”等就是回文字符串。现在要求把字符串看成一个环,求环中能截取的最长回文字符串,当存在多组长度相同的最长回文字符串时,输出第1次找到的即可。实现该功能的Python程序如下,请回答下列问题:
  1. (1) 若输入“cdcdcdedc",则输出的最长回文字符串是
  2. (2) 完成以下程序填空:

    样例:

    请输入字符串: bcabc

    字符串环中的最长回文字符串是: bcb

    import sys

    def ishw(s): #判断s是否是回文字符串

        if s==

             return True

        else:

           return False

    s = input("请输入字符串: ")

    n = len(s)

    s=s+s

    for i in range(n, 0, -1): # 枚举字符串长度

        for j in

             t=s[j:j+i]

             if ishw(t):

               print(“字符串环中的最长回文字符串是:”+ t)

               sys.exit(0) #提前结束程序

通过调查发现,人们普遍认为带有数字2、6、8的车牌比较吉利,而带有数字4的车牌则不吉利。小石想通过编写程序来计算车牌的吉利值:其中数字2吉利值为1,数字6吉利值为2,数字8吉利值为3,数字4的吉利值为-2,其他数字吉利值为0。如车牌号“浙 H94286”的吉利值为4。程序代码如下:

dic={ "2":1,"6":2,"8":3,"4":-2 }

cp=input("请输入车牌号(格式如“浙H94286”):")

count=0

for i in range(2,   ①  ):

  x=cp[i]

  if x in ["2","4","6","8"]:

    count+=  ② 

print("该车牌号的吉利值为:",count)

为实现功能,划线处代码应为( )

A . ①len(cp)-1 ②dic[x] B . ①len(cp) ②dic[int(x)] C . ①len(cp)-1 ②dic[int(x)] D . ①len(cp) ②dic[x]
一个弹球会发出红、绿或蓝三种单色光。 发着光的弹球从高处垂直下落,触地会垂直弹起,且弹起时发光颜色会变化。 假设弹球下落高度为 h, 触地前发红光、绿光、蓝光时,反弹高度分别为0.8h、0.6h、0.5h。 触地若干次后,弹球弹起时不再发光。观察弹球的发光颜色变化,并用字符串记录,其中每个字符表示弹球一次触地前的发光颜色(字符R、G、B 分别表示红、绿、蓝)。编写一个程序,计算弹球发光状态下的运动轨迹长度。
  1. (1) 请根据运行结果,完善下面的代码

    h=

    s=input('触地前的发光颜色变化:') 

    d={'R':0.8,'G':0.6,'B':0.5}

    sum=h

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

      

      h=d[c]*h

      sum=

    print('弹球发光状态下的运动轨迹长度:'+str(sum)) 

  2. (2) 请结合题目描述和程序代码判断这是哪种算法(单选,填字母:A .解析算法/B .枚举算法)
在窗体上有两个标签(Label1和Label2)一个命令按钮(Command1),单击命令按纽Command1,从键盘中输入学生姓名和成绩,统计并在标答中输出最高学生姓名和成绩及最低学生姓名和成绩。当从键盘中输入-1时,结束输人。程序代码如下,请补充完善程序。

Private Sub Commaadl Click()

    Dim xm As String,xmmax as String ,xmmin as String

    Dim cj As Single,cjmax As Single,cjmin As Single

    xm=InputBox("请输人学生姓名")

    cj=InputBox("请输人学生成绩")

    xmmax=xm

    cjmax=cj

    xmmin=xm

    cjmin=cj

    Do While

        If Then

            cjmax=cj

            xmmax=xm

        End if

        If Then

            cjmin = cj

            xmmin=xm

        End if

        xm=InputBox("请输人学生姓名")

        cj=InputBox("请输人学生成绩")

        Label1.Caption ="学生"&xmmax&"成绩最高”&cjmax

        Label2.Caption ="学生"&xmmin &“成绩最低"& ejmin

   

End Sub

运行如下程序,输出结果为(    )

for i in range(1,3):

  for j in range(1,4):

    print(i*j,end='')

A . 1 2 3 4 2 4 6 8 B . 1 2 3 2 4 6 C . 1 2 3 4 D . 1 2 3 2 3 6 3 6 9