4.4.2 while循环的应用 知识点题库

有如下VB程序段:

flag=False: s="ShanShui2020!"

For i=1 To Len(s)

    ch=Mid(s,i,1)

If Not(ch>="0" And ch<="9")And Not flag Then

        t=ch+t

    End If

    flag=Not flag

Next i

Text1.Text=t

执行完以上程序段后,文本框text1中的内容为(    )

A . !uSaS B . SaSu! C . !22uSaS D . ShanShui!
阅读程序,写出运行结果

Dim s As Integer

Dim i As Integer

s=0

For i=1 To 10 Step 4

  Print “#”;

  s=s+i

Next i

Print s

上述程序运行后,输出“#”的个数是;输出s的值是

有如下 VB 程序段:

Dim n As Integer

Dim sum As Integer

Dim i As Integer

Function fx(i As Integer) as Integer

  If i = 1 Then

    fx = 5 

  Else

    fx = 5 * 2 ^ (i - 1) + fx(i - 1)

  End if

End Function

Private Sub Command1_Click()

  n = Val(Text1.Text): sum = 0

  For i = 1 To n

    sum = sum + fx(i)

  Next i

  Label1.Caption = Str(sum)

End Sub

若在 Text1 中输入4,单击 Command1,则 Label1 中显示的内容为(    )

A . 55 B . 75 C . 80 D . 130
有如下VB程序段:

For i=1 to 3

    For j=1 to 5-i

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

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

        End If

    Next j

    Text1.Text = Str(a(i))+Text1.Text

Next i

数组元素a(1)到a(5)的值依次为“2,9,7,8,5”。若该程序段执行后,文本框Text1显示的内容是(    )

A . 2 5 7 B . 9 8 7 C . 2 7 7 D . 7 7 2
下列程序段执行后,x的值为(  )

x=0

For i=1 To 3

  For j=1 To i

    For k=j To 3

      x=x+1

    Next k

  Next j

Next i

A . 16 B . 14 C . 9 D . 8
一小球从100米高度自由落下,与地面碰撞时能量损失一半。假设小球每次与地面碰撞后反弹回到原来一半的高度(小球在运动过程中视为质点,且不计空气阻力),则经过5次落地共经过了287.5米。编写Python程序,实现计算小球从m米高处落下,在n次地面碰撞后经过的总路程。

height = 0

m = float(input("输入起始高度:"))

n = int(input("输入次数: "))

for i in range(1,n):

    if i= 1:

        height+=m

    else:

                       

    m/=2

print("总路程:" +str(height))

  1. (1) height变量的功能是
  2. (2) 程序中划线①处应填入的代码是 。
  3. (3) 程序调试如图所示,计算结果出错,该如何修改程序?

    输入起始高度:100

    输入次数:5

    总高度:275. 0

目前部分手机的短信具有“提取详情”的功能,即针对一条短信,可以提取出短信中一些关键的信息。现编写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中提取后的数字信息为
为统计某股票一年内共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
有如下VB程序段:

s=Text1.Text

ans=0

Text2.Text=Str(ans)

若Text1中输入的内容为“10”则Text2中输出的内容为“2”,加框处代码,不正确的是(   )。

A . For i=1 To Len(s)

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

    ans=ans+t*2^(Len(s)-i)

Next i B . For i=1 To Len(s)

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

    ans=ans*2+t

Next i C . For i=Len(s) To 1 step-1

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

    ans=ans+t*2^(i-1)

Next i D . For i=1 To Len(s)

    t=Val(Mid(s, Len(s)-i+1, 1))

    ans=ans+t*2^(i-1)

Next i

学校历届校友的海量数据存储在校网络中心服务器中(共10000条,无重复数据),某管理员因为误操作删除了一位校友的ID号(8位整数)信息,恰好在备份数据库中保存了一份所有人员ID号的文件(无重复数据,无序)。参考流程图阅读下列快速找出被误删的ID号程序代码

关于异或,下列选择错误的是(    )

A . target=target^int(line)是异或运算 B . 异或应用于逻辑运算,其运算法则为:0^0=0,1^0=1,0^1=1,1^1=0 C . 0异或任何数=任何数,1异或任何数=任何数取反,任何数异或自己=把自己置0 D . 以上都不对
计算机在0~1000中随机产生一个数,试试看你要多少次才能猜中,阅读下列程序.

import random

num=random.randint(1,  ①  )

mynum=int(input('请输入mynum='))

n=1

while not(  ②  ):

    n= n+1

    if mynum<num:

        print("输入的数小了")

    elif mynum>num:

        print("输入的数大了")

    print("输入不正确,请再次输入")

    mynum=int(input('请输入mynum='))

print("你猜对了!","一共用了",n,"次") 

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

下列说法正确的是(    )

A . ①填写999 B . ①填写1000 C . ①填写1001,②填写mynum== num D . ②填写mynum!= num
大数据是当今最热门的领域之一,小王同学利用VB设计了一个模拟大数据应用的程序。有10种商品,数组a存储用户是否购买了各种商品;某个用户购买时,商品两两之间是否一起购买用另一个数组dsj来记录;各数组元素的解释如下表所示。

数组元素

数组元素的含义

a(i)

a(1)到a( 10)依次存储1号顾客购买商品1~商品10的记录:

a(11)至a(20)依次存储2号顾客购买商品1~商品10的记录;依次类推。

数组a的某个元素的值为1,则表示某位顾客购买了某种商品,若为0则表示没有购买

该种商品。如a(6)=1表示1号顾客购买了商品6,a(6)=0表示未购买。

dsj(i)

dsj(1)~dsj(9)依次存储商品1与商品2~商品10的关联次数;

dsj(10)~dsj(17)依次存储商品2与商品3~商品10的关联次数;依次类推。

如dsj(5)=2表示商品1与商品6被同时购买过2次;

如dsj(45)=4表示商品9与商品10被同时购买过4次。.

数组dsj中,若dsj(45)的值最大,则表示商品9和商品10 的关联次数最多。

小王按照上述算法设计了VB程序,统计了20个用户购买10种商品之间的关联性,VB程序如下,部分界面如题图所示。

Private Sub Cmd1_Click( )

    Dim a(1 To 200) As Integer     '各个用户原始的购买记录

    Dim dsj(1 To 45) As Integer     '统计商品之间的关联次数

    Dim i As Integer, t As Integer, ne As Integer, j As Integer, max As Integer

    '数组a读入数据并在列表框分行输出,代码略

    For i= 1 To 20 '20个用户

        t= 1

        For j= 1 To 9      '10个商品,共45种组合

            For k=j+ 1 To 10

                m=(i- 1)* 10

                If  Then dsj(t) = dsj(t)+ 1

                     ①   

            Next k

        Next j

    Next i

    max=0

    For i=1 To 45

        If     ②     Then

            max=dsj(i)

            maxi=i

        End If

    Next i

    t=9:nc= 1

    Do While maxi>t

            ③   

        t=t-1

       nc=nc+1

    Loop

    Text1.Text="关联最多的是商品"+Str(nc)+Str(maxi+nc)+":"+Str(max)+"次"

End Sub

  1. (1) 将按钮.上的文字“统计”修改为“计算”,可在Form_Load过程中使用        (单选,填字母)语句实现;
    A . Cmd1.Caption= "计算” B . Cmd1_Click="计算" C . Command1.Text="计算"
  2. (2) 加框处代码有错,请改正;
  3. (3) 在程序划线处填入合适代码,使程序完整。

     ② ③ 

有如下VB程序段:

Const n = 50

Din a(1 To n) As Integer, b(1 To 10) As Integer, k As Integer

k=n\ 10

For i=1 To n

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

Next i

For i=1 To k

    For j=I To n Step k

        b(i) = b(i) + a(j)

    Next j

Next i

执行该程序段后,b(1)~b(5)各元素值不可能的是(    )

A . 0,60,32,50,150 B . 10,40,70,100,130 C . 5,5,55,75,100 D . 2,5,8,11,14
a(1)~a(12)是升序排列的数组元素,但是其中有重复数据,经过程序处理后,在文本框Text1中显示去重后数据,实现该功能的VB程序段如下:

n =1

For i=2 To 12

    If    ⑴    Then

        n=n+1

           ⑵  

    End If

Next i

S=””

For i=1 To n

    s=s+Str(a(i))

Next i

Text1.Text = s

上述程序中划线处可选语句为:①a(i)<>a(n)  ②a(i)=a(n)  ③a(n)=a(i)

则(1)、(2)处语句依次是(    )

A . ①、② B . ②、① C . ①、③ D . ②、③
某VB程序段如下:

Dim i As Integer, n As Integer, k As Integer, s As String n = Val(Text1.Text):k = 1: s = ""

Do While 2 ^k < n

    k = k + 1

Loop

Do While n <> 0

    If n >= 2 ^ (k -1) Then s = s + "1"

    n = n - 2 ^ (k -1)

    Else

        s = s + "0"

    End If

    k = k - 1

Loop

For i= 1 To k

    s = s + "0"

Next i

在文本框Text1输入12,执行该程序段后,变量s、k的值分别为(     )

A . "1100"、2 B . "11"、2 C . "0011"、4 D . "1100"、4
a=[3,7,2,5,4,6,9,1]

m=abs(a[0]-a[1])

for i in range(2,len(a)):

    if abs(a[i]-a[i-1])>m:

        m=abs(a[i]-a[i-1])

则程序执行后,m的值是(     )

A . 4 B . 5 C . 7 D . 8
有如下VB程序段:

flag = False: txt = "Fighting"

For i = 1 To Len(txt)

    ch = Mid(txt, i, 1)

    If (ch>="a" And ch<="z" Or ch>="A" And ch<="Z") And Not flag Then

        s = ch + s: flag = True

    Else

        flag = False

    End If

Next i

Text1.Text = s

程序运行结束后,Text1中显示的内容是(   )

A . Fighting B . ntgF C . gnithgiF D . Fgtn
给定一个序列a,这个序列由n个数组成(n个数依次保存在数组a(1)~a(n)中),现在给定一个整数p,要求将序列a的前p个数与后n-p个数对调,且不改变这p个数(和n-p个数)之间的相对位置。例如长度为5的序列1,2,3,4,5,当p=2时重排的结果为3,4,5,1,2。

我们可以用两种不同的方法来实现这一目的:

方法一:逐个地将数组a的后n-p个数依次移动到前面去。

数组 a:

1

2

3

4

5

3

1

2

4

5

3

4

1

2

5

3

4

5

1

2

方法二:将前p个数看作一个区间,后n-p个数看作另一个区间,依次将数交换,同时缩小区间的大小;若某一个区间达到末尾,则调整区间的范围,直到两个区间刚好同时达到末尾,即调整结束。

数组a:

互换并调整区间:第一个区间结束且第二个区间还有元素,调整区间 1 和区间 2 的范围,如图将区间 1 调整为[3,4],区间 2 调整为[5:5]。

互换并调整区间:第二个区间结束且第一个区间还有元素,仅调整第 1 个区间的起始位置。

互换并结束:两个区间同时到达末尾。

3

4

5

1

2

小明依据上面的方法设计了VB程序如下:

Dim a(1 To 100), i As Integer, j As Integer, tmp As Integer, p As Integer

Dim start1 As Integer, end1 As Integer, start2 As Integer, end2 As Integer   '将序列保存到数组a中,序列长度保存到n中,移动数字的个数保存在p中

Private Sub Command2_Click()       '用方法一实现

    For i = p + 1 To n

        tmp = a(i)

        For j = i To  ①   Step -1

            a(j) = a(j - 1)

        Next j

           ②   = tmp

    Next i

End Sub

Private Sub Command3_Click()      '用方法二实现

    start1 = 1: end1 = p      '第1个区间的起始状态

    start2 = p + 1: end2 = n      '第2个区间的起始状态

    i = start1: j = start2

    Do While   ③  

        i = start1: j = start2

        Do While i <= end1 And j <= end2

            tmp = a(i): a(i) = a(j): a(j) = tmp

            i = i + 1:j = j + 1

        Loop

        If i <= end1 Then     '第2个区间结束且第1个区间还有元素

            start1 = i

        ElseIf j <= end2 Then   '第1个区间结束且第2个区间还有元素

            start1 = i:   ④  

            start2 = j

        End If

    Loop

End Sub

请回答下列问题:

  1. (1) 若序列为:9,8,13,22,7,6,5,37,6,p=4 时,使用方法一,则a(3)的值依次是13,(用逗号隔开,顺序填写曾存储过的值)。
  2. (2) 请在划线处填入合适的代码。

     ② ③ ④ 

编写VB程序,实现如下功能:在文本框中输入一个整数,单击“计算”按钮Command1,则输出表达式 的值。程序运行界面如下图所示。

  1. (1) 该VB窗体上共包含类对象。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim n As Integer, p As Long, s As Double, i As Integer, t As Integer

        s = 0

     t = 1

     p = 0

     n = Val(Text1.Text)

     For i = 1 To n

     

       s = s + t * 1 / p

     

     Next i

     Label1.Caption = Str(s)

    End Sub

  3. (3) 运行该程序,在文本框Text1中输入5,单击“计算”按钮,则表达式的值是
有如下VB程序段:

k=3 : sum=0 : j=0 : c=0

For i=1 To Len(s)

    ch=Mid(s, i, 1)

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

        c=c * 10+Val(ch)

        j=j+1

    Else

        If j=k Then sum=sum+c

        j=0:c=0

    End If

Next i

字符串s为“ab300cde2022fg002h”时,执行该程序段后,sum的值为(    )

A . 300 B . 302 C . 504 D . 2324
最近更新