循环结构语句及程序实现 知识点题库

某同学编写了一个VB程序,功能为在文本框Text1中输入英文字符串,单击“转换”按钮Command1,文本框Text1中的大写英文字母转换为小写,结果显示在文本框Text2中。部分程序段如下:

s1 = Text1.Text

s2=“”

For i=1 To Len(s1)

 ch=Mid(s1, i, 1)

 If ch>=“A” And ch<=“Z” Then

′提示:“A”的ASCII码值为65,“a”的ASCII码值为97

 End If

 s2=s2 & ch

Next i

Text2.Text = s2

要使程序实现上述功能,则方框中的代码是(  )

A . ch = Chr(Asc(ch) + 32) B . ch = Asc(Chr(ch) + 32) C . ch = Chr(Asc(ch) - 32) D . ch = Str(Val(ch) - 32)
现要求刚好输出1至100内所有能被7整除的数字,下列哪段程序不能实现(  )
A . B . C . D .
(约瑟夫问题)n个人围成一圈,从第1个人开始从1报数,数到3的人出圈;再由下一个人继续从1开始报数,数到3的人出圈……输出依次出圈的人的编号和最后一个留在圈里的人的编号。如输入n=8,则依次出圈的人的编号是3,6,1,5,2,8,4,最后留在圈内的是7号。

以下VB程序在a数组中保存了下一个要报数的人的编号,即若。(w)=p,则表示当第w个人报过数2后,下一个要报数的是第p号。程序在列表框Listl中输出了依次出圈的人的编号,在标签Label1中输出了最后剩下的人的编号。请完善程序。

Private Sub Command1_Click( )

  Dim i As Integer, n As Integer, w As Integer, num As Integer

  Dim a(1 To 100)As Integer, t As Integer

  n=Val(Text1.Text)

  For i=1 To n-1

      a(i)=i+1

  Next i

  a(n)=1

  w=n        ‘变量w表示当前检查的是第w号数组元素,即从第n号开始检查

  t=0       ‘变量t用以模拟报数

  Do While   ①   

      num=a(w)    ‘当前报数的人的编号

      t=t+1

      If t=3 Then

          List1.AddItem Str(num)

        a(w)=   ②   

        t=0

      Else

             ③   

      End If

  Loop

      Label1.Caption=Str(w)

End Sub

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

小发报名参加“智力大冲浪”节目。比赛规则如下:比赛开始时,参赛者将预先得到M元奖金。比赛时间分为N(N≤100)个时段,有N个小游戏,每个时段完成1个,第i个小游戏必须在规定时段t(i)

(1≤t(i)≤N)内完成,可以提前完成,但不能晚于该时段完成,否则要从奖金M元中扣去一部分奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。请间小炫如何安排自己做游戏的顺序,才能赢取最多的奖金?将结果输出到文本框Text1中。注意;比赛绝对不会让参赛者赔钱。例如:当N=5,M=100时,

游戏编号

1

2

3

4

5

完成期限t(i)

1

4

2

3

2

扣除奖金数w(i)

5

4

10

8

7

最优方案为:

完成时段

5

4

2

3

1

其中第一个游戏无法在期限内完成,扣除5元,最后赢取100-5=95元。

章法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。

⑴按扣款数值从大到小排序,顺序为3,4,5,1,2。

⑵对于游戏,在时间段1到t(i)内完成的效果都是一样的,所以尽量在时间段t(i)内完成,若该时段

  已经被占用,则依次考察时间段t(i)-1,t(i)-2…,1。

  ①考虑游戏3,放置在时间段2完成(注:t(3)=2);

  ②考虑游戏4,放置在时间段3完成(注:t(4)=3);

  ③考虑游戏5,时间段2已经被游戏3占用,放置在时间段1完成(注:t(5)-1=1);

  ④考游游戏1,时间段1已经被游戏5占用,不能按时完成,放到时间段5;

  ⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。

  实现上述功能的VB程序如下。请在画线处填入合适的代码。

  Dim N As Integer,M As Integer

  Dim t(1 To 100)As Integer    ‘变量t(i)表示第i个游戏的完成期限

  Dim w(1 To 100)As Integer    ‘变量w(i)表示未完成第i个游戏要扣除的奖金

  Dim f(1 To 100)As Boolean    ‘变量f(i)表示第i个时段是否已经被占用

  Private Sub Form_Load( )

  ‘生成时段数量N和初始奖金数M

  ‘生成t数组和w数组

End Sub

Sub swap(x As Integer,y As Integer)    ‘自定义过程,可以用Call语句来调用该过程

  Dim z As Integer

  z=x:x=y:y=z

End Sub

Sub sort( )          ‘自定义过程,可以用Call语句来调用该过程

  Dim x As Integer, I As Integer, j As Integer

  For i=1 To N-1

    For j=i+1 To N

      If w(i)<w(j)Then

          Call swap(w(i),w(j))    ‘调用自定义过程

               ①   

      End If

    Next j

  Next i

End Sub

Private Sub Command1_Click( )

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

  Call sort         ‘调用自定义过程

  tot=0

  For i=1 To n

      f(i)=True

  Next i

  For i=1 To N        ‘对每个游戏从该游戏的规定期限开始往左找时间段,找到则完成该游戏

      p=-1

      k=t(i)

      Do While k>0 And p=-1

              If f(k)=True Then

              p=k

            Else

               ②   

            End If

      Loop

      If p=-1Then tot=tot+w(i)

  Next i

     ③   

  Text1.Text=Str(ans)

End Sub

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

下面代码的输出结果是(     )

for i in range(1,5):

 print(‘#’*i)

A . B . C . D .
桶排序优化。桶排序的思想是根据数组中各元素的值,依次放入相应编号的桶中,最后按顺序输出桶中数据,即可完成排序。例如:数据 10、15、8、9、3,桶中的顺序如下表:

图片_x0020_1846351350

但是,当数据范围很大时,需要的桶则非常多,会造成很大的资源浪费。为了解决该问题,小张对桶排序进行了优化,算法思想如下:

① 先依据数组中元素的个位进行桶排序;

② 再依据数组中元素的十位进行桶排序;

......

直到排序完成。

例如:有数组 a 中各元素分别为 53,3,542,748,17,214,154,63,616,第一趟按个位排序过程如下:

① 个位填入相应桶编号中,并统计每个桶中数据个数。

图片_x0020_1008987576

② 计算索引。计算方法是从前往后,依次计算当前桶中元素个数与前一项之和。

③按索引从桶中倒序取出数据,每取一个索引减 1。重新排列后为542,53,3,63,214,154,616,17,748。

接下来对重新排序后的数据以十位、百位依次进行桶排序即可完成排序(每一趟排序后数据重新排列)。

  1. (1) 第二趟以十位排序后的结果中,前 4个数为。(数字间用逗号间隔)
  2. (2) 现在有n个0~5000的数据,其VB代码如下,请在划线处填入合适的代码。

    Const n = 10

    Dim a(1 To n) As Integer

    Dim tmp(1 To n) As Integer         '临时数组,用来保存桶排序后的结果

    Dim count(0 To 9) As Integer

    Dim i As Integer, j As Integer

    Dim s As Integer, k As Integer

    Private Sub Form_Load( )

    '待排序数据保存在a数组中,代码略

    End Sub

    Private Sub Command1_Click( )

        s = 1

        For i = 1 To

            For j = 0 To 9     '初始化数组

                count(j) = 0

            Next j

            For j = 1 To n       '统计各桶中数据个数

                k = (a(j) \ s) Mod 10

                count(k) = count(k) + 1

            Next j

            For j = 1 To 9            '计算索引

                count(j) =

            Next j

            For j = n To 1 Step -1    '根据索引,从桶中取出数据,放入tmp数组

                k = (a(j) \ s) Mod 10

                 

                count(k) = count(k) - 1

            Next j

            For j = 1 To n      '数组a重新排列

                a(j) = tmp(j)

            Next j

            s = s * 10

        Next i     '输出排序后的数据,代码略。

    End Sub

有如下VB程序段:

s = 0: x ="0123456789": i = 1

Do While i <= Len(x)

    t = Val(Mid(x,i,2))

    If t Mod 3 = 0 Then s = s + t

    i = i + 1

Loop

执行该段程序后,s的值为(    )

A . 18 B . 135 C . 144 D . 225
小陈编写了一个消消乐的VB程序,程序的功能是:在文本框Text1中输入一个字符串,单击“消一消”按钮Command1,从第2个字符开始,与它前面第1个字符进行比较,相邻重复的字符大于等于2个就消除,消除后的结果不再进行消除。程序运行界面如下图所示。

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

    Private Sub Command1_Click( )

        Dim s As String, s1 As String, c1 As String, c2 As String

        Dim i As Integer, t As Integer      't 用于统计相同字符的个数

       

        c1 = Mid(s,1,1) : s1 = ""

        t = 1

        For i = 2 To Len(s)

            c2 =

            If c1 <> c2 Then

                If t = 1 Then s1 = s1 + c1

               

                t = 1

            Else

                t = t + 1

            End If

        Next i

       

        Text2.Text = s1

    End Sub

  3. (3) 若将程序中加框处的语句删除后,在文本框Text1中输入“accessd”,则在文本框Text2中显示的内容是
编写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中显示的内容是
有两个字符串s1、s2(s2中字符不重复),若s2中的字符按顺序在s1中依次出现,则称s2是s1的子串。例:s1="acde",s2="ce",则s2是s1的子串。实现该功能的VB程序段如下:

s1 = Text1.Text: s2 = Text2.Text

i = 1: j = 1

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

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

Loop

If  Then Label1.Caption = "是子串" Else Label1.Caption = "不是子串"

方框处的可选语句为:

①i = i + 1        ②j = j + 1    ③i > Len(s2)  ④j > Len(s2)

以下选项正确的是(   )

A . ①②③ B .   ①②④ C .   ②①③ D .   ②①④
某排序算法,VB代码如下:

i=1

Do While i<=5

    If i = 0 or a(i - 1)<= a(i) Then

        i=i+1

    Else

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

        i=i-1

    End If

Loop

数组元素a(0)到a(5)依次为:“0,41,22,53,99,36”,经过该程序段处理后,数组元素a(3)的值为(   )

A . 36 B . 53 C . 41 D . 22
有以下VB程序段

Dim c(-10 To 10) As Integer, a(1 To 10) As Integer, b(1 To 10) As Integer

a(1)=58:a(2)=88:a(3)=66:a(4)=60:a(5)=78

a(6)=32:a(7)=54:a(8)=75:a(9)=99:a(10)=69

Label1. Caption =

For i=1 To 9

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

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

Next i

For i=0 To 10

     If c(i) > 0 Then Label1.Caption = Label1.Caption + Str(c(i))

Next i

已知数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是(    )

A . 131 B . 1421 C . 1131 D . 11421
listque=[]   #定义列表listque存储订单

x=0

while(x!=4):    #当x=!4时,执行循环

 print('1. 添加订单')

 print('2. 发货')

 print('3. 查看订单列表')

 print('4. 退出')

 x=int(input("输入你的选择:"))    #输入选择项

 if  1 :

 y=input("输入订单编号:")     #输入订单编号

  2     #在列表listque中添加订单号

 elif x==2:

  3  #如果订单列表为空

 print("订单列表为空")

 else:

 print("发货单号:"+listque.pop(0))

 elif x==3:

 print("等待发货:",listque) #查询列表listque中的订单号

 print()

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

此列表,定义的是(   )列表。(从“空、非空” 里选填); 补充划线1/2/3处的内容。

A . 空;x=1;listque.append(y) ; if len(listque)=0: B . 非空;x==1;listque.append(x) ; if len(listque)==0: C . 空;x==1;listque.append(y) ; if len(listque)==0: D . 非空;x==1;listque.append(y) ; if len(listque)==0
程序运行后,程序输出结果为

n=1

for i in range(1,5):

  n=n*i

print(n)

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

程序描述: 计算正整数35到500之间的所有奇数的和。代码如下:

    ①   

for i in    ②   

       ③   

print(s)

  1. (1) ①处的语句是                 
    A . s=0 B . s=1 C . i=0 D . i=1  
  2. (2) ②处的语句是                 
    A . range(35,500) B . range(35,500,2)    C . range(35,501) D . range(35,501,2)
  3. (3) ③处的语句是                
    A . s=s+1 B . i=i+1 C . s=s+i D . i=s+i
已知由字母组成的字符串s,现要实现如下功能:将字符串s中的字母按照26个英文字母顺序依次输出(重复出现的字母只需输出一次)。如s="Congratulate",输出结果为"aceglnortu",为实现上述功能,在横线处填入的代码应该是(    )

Dim a(1 To 26)As Integer

    s=Text1. Text

    For i=1 To Len(s)

           ①      

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

            ②    

    Next i

    For i=1 To 26

        If a(i)<> 0 Then Label1.Caption= Label1.Caption+     ③    

Next i

A . ①c=Mid(s,i,1)   ②a(Asc(c)-96)=a(Asc(c)-96)+1   ③Chr(96+i) B . ①c=Mid(s,i,1)   ②a(i)=a(i)+1   ③Chr(a(i)) C . ①c=Mid(s,i,1)   ②a(Asc(c)-96)=a(Asc(c)-96)+1   ③Chr(a(i)) D . ①c=Mid(s,i,1)   ②a(i)=a(i)+1   ③Chr(96+i)
有如下VB程序段:

x = 0

For i = 0 To 20 Step 2

  If i Mod 3 = 0 Then x = x + i

Next i

该程序段执行后,变量x的值是(  )

A . 12 B . 18  C . 36 D . 60
阅读下列程序,写出运行结果。

程序运行时,输入:685,运行输出结果是:

班级最后一排有6名学生,体育委员想编程实现最高身高和最矮身高。用python编辑器打开”Y:\85”下的文件”最高和最矮.py”,进行以下操作并保存结果。

⑴请填空完善该程序,实现功能:键盘依次输入6名同学身高,输出最高身高和最矮身高的值。
⑵编写完成后原名保存并关闭应用软件。

height=[]

for i in range(0,):

    x=float(input("请输入身高:"))

    height.append()     

print(max(), min(height))

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

将十进制数79.5转换为8421BCD码的方法是,将每一位数字转换为4位二进制(8421BCD码含义:8421BCD码中的“8421”表示从高到低各位二进制位对应的权值分别为8、4、2、1),结果为01111001.0101。转换代码VB程序段如下:

s1 = Text1.Text: s2 = "":n = Len(s1): i = 1

Do While i <= n

    ch = Mid(s1, i, 1)

    If ch <> "." Then

        p = 8: x = Val(ch)

        Do While p > 0

           

        Loop

    Else

        s2 = s2 & ch

    End If

    i = i + 1

Loop

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

①x = x Mod p    ②p = p \2      ③s2 = s2 & x \p

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

A . ①②③ B . ③①② C . ②①③ D . ③②①