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

分析完善程序。

圆周率π值的计算方法有多种,其中一种近似值计算公式如下:π2/6=1+1/22+1/32+…+1/n2;对于n的不同取值,得到的π值精度不同。 如:

当n=100000时,计算出π=3.14158310432646,

当n=1000000时,计算出π=3.14159169886051。

以下程序是利用上述公式求n=10000000时π近似值的主要程序片段,请你补全代码。

Dim s As Double

Dim pi As Double

s = 0

For i = 1 To 10000000           ‘求公式右边的值s

   s = s + 1 / (i * i)

Next i

Pi = Sqr

Print  "π=";  pi

有以下程序段:

i = 1;

s = 0;

while i < 7:

  s = s + i;

  i = i + 1;

  if i == 5:

    break;

  print("1-7的累加值为:",s);

程序运行后输出的结果为:(   )

A . 10 B . 15 C . 21 D . 死循环
有如下 VB 程序段:

For i = 1 To 6

  a(i) = Int(Rnd * 20) + 1: b(i) = i

Next i

For i = 1 To 5

  For j = i+1 To 6

    If a(b(i))>a(b(j)) Then

      t = b(j):   b(j) = b(i):   b(i) = t

    End If

  Next j

Next i

i = 1 : j = 6: s="" : Key = Val(Text1.Text)

Do While i <= j

  m = (i + j) \ 2

  If Key = a(b(m)) Then Exit Do

  If Key < a(b(m)) Then j = m - 1 Else i = m + 1

  s = s + Str(m)

Loop

Text2.Text = s

在文本框Text1中输入10,运行以上程序段后,文本框Text2中显示的内容为 3 5 4,则 a 数组中 a(1)到 a(6)各元素的值可能的是(    )

A . 11,6,4,13,18,15 B . 4,5,8,19,10,17 C . 2,11,7,6,3,18 D . 9,2,11,21,5,16
有如下VB程序段:

s=0

For i=1 To 10 Step 3

  s=s+1

Next i

Label1.Caption=Str(s)

该程序段运行后,标签Label1上显示的内容是(  )

A . 2 B . 3 C . 4 D . 5
6174是一个数学黑洞数。一个任意的四位正整数(四位数字完全相同除外),将数字重新组合成一个最大的数和最小的数并相减,重复这个过程,最多七步,必得6174。如取四位数4562,按以上方法做如下运算:①6542-2456=4086;②8640-0468=8172;③8721-1278=7443;④7443-3447=3996;⑤9963-3699=6264;⑥6642-2466=4176;⑦7641-1467=6174。

程序运行界面如图所示。

在文本框Text1中任意输入一个不完全相同的四位正整数,在文本框Text2中输出掉进黑洞的步数。实现上述功能的VB代码如下,但加框处代码有误,请改正。

Private Sub Command1_Click( )

  Dim a(1 To 4)As Integer

  Dim x As Integer,y As Integer,c As Integer,t As Integer

  x=Val(Text1.Text)

  c=0

  Do While x<>6174

      For i=1 To 4

          a(i)=x Mod 10

                    ‘①

      Next i

      For i=1 To 3

          For j=i+1 To 4

            If  Then      ‘②

                t=a(i):a(i)=a(j):a(j)=t

            End If

        Next j

      Next i

      x=a(1)*1000+a(2)*100+a(3)*10+a(4)

      y=a(1)+a(2)*10+a(3)*100+a(4)*1000

      x=x-y

      c=c+1

    Loop

    Text2.Text=Str(c)

End Sub

以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②

有如下程序段

Dim a(1 To 6) As String i = 6

Text1.Text = ""

Do While i > 1

    k = i

    For j = 1 To i - 1

        If a(k) < a(j) Then k = j

    Next j

    tmp = a(k): a(k) = a(i): a(i) = tmp

    Text1.Text = a(i)

    i = i - 1

Loop

其中数据元素 a(1)到a(6)的值依次为“12”、“34”、“8”、“9”、“77”、“23”,执行该程序段后,文本框Text1中显示的内容为(   )

A . 9 B . 8 C . 12 D . 23
城堡问题。有一个城堡的地形图,城堡被分割成若干个方块,每个方块可以有 0~4 面墙(粗线表示墙)。

每个方块用一个代表其周围墙的数字之和(0≤p≤15)表示:1 表示西墙,2 表示北墙,4 表示东墙,8 表示南墙。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。城堡至少有两个房间。例如,图a的每个方块对应数字如图b所示。

图片_x0020_100012 图a

图片_x0020_100013 图b

程序运行界面如图c所示,现已知城堡地形对应的数字矩阵,要求出城堡一共有多少房间,最大 的房间有多大。小金利用深度优先搜索算法解决当 前问题,具体算法如下:

图片_x0020_100014 图c

在城堡中按行搜索,找到第一个未被搜索过方块, 以它为起点,分别按左、上、右、下的顺序向其四个方向试探,若发现一个方向上的方块是未被搜索过且可以通往的(无墙),则以这个方块为新起点,再重复上述试探。若当前方块四个方向上均无路可走,则返回上一个方块进行其他方向上的搜索,直至返回开始当前搜索的第一个方块且这个方块四个方向上也无路可走是,则本轮搜索结束。

  1. (1) 将界面中方块(2,2)对应的数字9改为13,方块(2,3)对应的数字6改为7,则城堡中最大的房间占块方格。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const m = 4 Const n = 7

    Dim a(1 To m * n * 4) As Integer

    Dim f(1 To m * n) As Boolean

    Dim c(1 To m * n) As Integer

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, x As Integer, y As Integer

        Dim area As Integer, max As Integer, cnt As Integer

        '城堡地形对应的数字矩阵,存入 c 数组中,并显示在列表框 List1 中,f 数组初值为 false, 代码略

        For i = 1 To m * n

            x = c(i)

            For j = 1 To 4

                a((i - 1) * 4 + j) = x Mod 2

                x = x \ 2

            Next j

        Next i

        max = 0

        For i = 1 To m

            For j = 1 To n

                IfThen

                cnt = cnt + 1

                area = Search(i, j)

                If max < area Then

                    max = area

                End If

            Next j

        Next i

        Label1.Caption = "城堡一共有" + Str(cnt) + "个房间,最大的房间占" + Str(max) + "块方格."

    End Sub

    '从方块(x, y)开始搜索,并返回其所在房间所占方块数.

    Function Search(ByVal x As Integer, ByVal y As Integer) As Integer

        Dim i As Integer, j As Integer, sum As Integer, r As Integer, c As Integer

        Dim pre(1 To m * n) As Integer     '记录当前房间搜索的路径

        Dim row(1 To 4) As Integer, col(1 To 4) As Integer

        row(1) = 0: row(2) = -1: row(3) = 0: row(4) = 1

        col(1) = -1: col(2) = 0: col(3) = 1: col(4) = 0

        sum = 1: j = 1: pre(1) = x * 10 + y

        f((x - 1) * n + y) = True

        Do While True

            For i = 1 To 4

                r = x + row(i): c = y + col(i)

                If r >= 1 And r <= m And c >= 1 And c <= n Then

                    If f((r - 1) * n + c) = False AndThen

                        sum = sum + 1

                        x = r: y = c

                        f((x - 1) * n + y) = True

                        j = j + 1

                        pre(j) = x * 10 + y

                        Exit For

                    End If

                End If

            Next i

            If i > 4 Then

               

                If j = 0 Then

                Exit Do

                x = pre(j) \ 10: y = pre(j) Mod 10

            End If

        Loop

        Search = sum

    End Function

四则混合运算是指加法、减法、乘法和除法四种混合运算。现有一程序可计算不带括号的“+”、“-”、“*”三则混合运算。在文本框Text 1中输入表达式(保证符合数学规范),单击“=”按钮Command 1后,在标签Label l中输出运算结果,程序界面如图所示。

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

    Private Sub Command1_Click( )

        Dims As String,ch As String

        Dim i As Integer,t As Integer

        Dim ans As Long,px As Long

        s=Text1.Text

        ans=0:t=0:px= 1

        For i=1 To Len(s)

            ch=Mid(s,i,1)

            IfThen

                t=t*10+Val(ch)

            Else

                px=px*t

               

                If ch= "_" Then

                   

                    px=-1

                End If

                t=0

            End If

        Next i

        Label 1.Caption=Str(ans+

    End Sub

  2. (2) 若删除加框处代码,在文本框Text1中输入表达式“3-2+2*3”,程序运行结束时标签Label1中显示的内容为
模拟图像局部区域处理。随机生成n * n(n≤100,且为偶数)个“0”或“1”字符,将字符按行输出,构成一个n行n列初始矩阵,对该矩阵中的m行m列子矩阵(与初始矩阵同中心)进行水平翻转。例如,当n为8,m为4时,构成初始矩阵如图a所示,将子矩阵进行水平翻转后得到处理结果,如图b所示。

编写程序,实现上述功能:在文本框Text1中输入偶数n,单击“生成”按钮Command1,在列表框List1中显示初始矩阵,在文本框Text2中输入偶数m(2≤m≤ n),单击“处理”按钮Command2,在列表框List2显示处理结果。程序运行界面如图c所示。

请回答下列问题:

  1. (1) 根据程序的运行界面,“处理”是按钮Command2的(单选,填字母:A .对象名/ B .属性名/ C .方法/ D .属性值)。
  2. (2) 请在划线处填入合适的代码。

    Dim n As Integer

    Dim a(1 To 100 * 100) As String

    Private Sub Command1_Click()

        Dim i As Integer

        n = Val(Text1.Text)

        If n <= 100 And n >= 2 And n Mod 2 = 0 Then

            For i = 1 To n * n

                a(i) = Chr()      ‘字符"0"的ASCII码值为48

                '将初始矩阵显示列表框List1中,代码略

            Next i

        Else

            List1.AddItem "输入有误"

        End If

    End Sub

    Private Sub Command2_Click()

        Dim b(1 To 100 * 100) As String, s As String

        Dim m As Integer, y As Integer, i As Integer, R As Integer, C As Integer

        m = Val(Text2.Text)

        If m >= 2 And m <= n And m Mod 2 = 0 Then

            y =

            s = ""

            For i = 1 To n * n

                R = (i - 1) \ n + 1: C = (i - 1) Mod n + 1

                If R <= y Or R > n - y Or C <= y Or C > n - y Then

                    b(i) = a(i)

                Else

                    b(i) =     ‘⑶

                End If

                s = s + b(i)

                If i Mod n = 0 Then

                    List2.AddItem s

                    s = ""

                End If

            Next i

        Else

            List2.AddItem "输入有误"

        End If

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
分析完善程序。

假设银行的年存储利率为3%,如果现在存储10000元钱,问多少年后连本带利超过12000元。设定:连本带利=本金*(1+利率)∧年数

假设n年后连本带息超过12000,根据题意得出数学关系式:10000*(1+3%)∧n>12000,求最小的n。

(参考程序)

Dim s as single

Dim r as single

Dim n as integer

s=10000

r=0.03

n=0

Do while            

    n=n+1

    s=s*(1+r)

Loop

Print n;“年后”:“连本带利超过”;s

根据上述回答下列问题:

  1. (1) 本题采用的算法是(填写:解析法/穷举法/排序法/递归法)
  2. (2) 写出参考程序中空白处表达式
在一个整数序列中找第k大的数,若有相同的整数,则位置靠前的整数的名次靠前。如有整数序列为“10,13,12,13,15”,则第1大的数为15,在第5个位置,第2大的数为13,在第2个位置,第3大的数还是13,在第4个位置,第4大的数是12,在第3个位置,第5大的数是10,在第1个位置。

编写一个VB程序,实现如下功能:程序启动时产生n个1~20之间的随机整数,在文本框

Text2中输人整数k(k≤n),单击“查找"按钮Command1后,在标签Label1上显示第k大的数及位置。程序运行界面如图所示。

  1. (1) 下列对象不具有Caption属性的是(单选,填字母:A .Command1 /B .Form1 / C .Text1 /D .Label1)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const n= 10

    Dima(1 To n) As Integer

    Private Sub Form_ Load( )

    '本过程产生n个1~20之间的随机整数存数组a中,并在文本框Text1中显示,代码略

    End Sub

    Private Sub Command1_Click()

    Dimi As Integer,key As Integer,c As Integer,k As Integer

        Dim b(1 To 20) As Integer

       

        For i= 1 To n

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

        Next i

        i= 20

        Do While i> 1 And b(i) < k

           

            i=i-1

        Loop

       

        Label3.Caption="第"+Str(k)+"大的数是"+Str( key)

        c=0

        For i=1 To n

            If a(i) = key Then c= c+1

            If c= Then Exit For

        Next i

        Label3.Caption =Label3.Caption + ",在第"+Str(i)+"位置"

    End Sub

  3. (3) 程序代码中的加框处代码有误,请改正。
小敏有10万元本金,想要购买银行保证收益型理财产品。每年到期后连本带利仍购买此种理财。请你帮助小敏分析,在年收益率不变的情况下,多少年后小敏的累计收益能超过本金,请完成程序填空。(例如输人:5.15%,输出:14年后收益超过本金。)

1    s=input("请输入年利率:")

2    rate=float(s[:-1])*0.01

3   money=100000

4   year=0

5   while money<=200000:

6        money=round( ),2)

7        year=year+1

8   print(year,"年后收益超过本金。”)

  1. (1) 程序第6行下划线处应填入
  2. (2) 程序第2行的作用是,并赋值给变量 rate。
  3. (3) 该程序主要是通过while实现结构。
有下列程序执行后文本框Text1显示的内容是(    )

s = "Happy new year↑”

flag=False:m=0

For i=1 To Len(s)

    c= Mid(s,i,1)

    If c >=“a" And c <= "z” Then

        If Not flag Then

            m=m+1

            flag=True

        End If

    Else

        flag = False

    End If

Next i

A . 4 B . 3 C . 6 D . 11
波波同学一直梦想买彩票中500万大奖,他收集了最近100期“双色球”开奖信息,存储于data. accdb文件中,并使用VB软件编写了“双色球投注建议”程序,程序根据最近100期开奖信息,统计出现概率最低的6个红色球号码和1个蓝色球号码,给出投注建议。如果蓝色球有多个概率最低的号码,则输出多个,红色球不考虑并列概率量低情况。

注:福彩“双色球”玩法;在1-33个红色球影申随机生成6个号码,在1~16个蓝色球号码中随机生成个号码,共计6+1个号码开奖。

程序运行界面如图所示。

  1. (1) 实现上述功能的VB程序如下,请完善画线处的代码。

    Dim red(1 To 600) As Integer        '用于存储100*6红色球信息

    Dim blue(1 To 100) As Integer       '用于存储100*1蓝色球信息

    Private Sub Form_Load()

    '本过程用于从数据库data. accdb中读取最近100期双色球开奖信息

    '将100*6个红色球开奖信息依次存储在数组red()中

    '将100*1个蓝色球开奖信息依次存储在数组blue()中

    '将最近100期开奖信息格式化后显示在列表框List1中

    '本过程代码略

    End Sub

    Private Sub Command1_Click()

        Dim min As Integer

        Dim s As string

        Dim f(1 To 33)As Integer

        '——以下开始处理蓝色球部分——

        For b= 1 To 100

            f(blue(b))= f(blue(b))+1

        Next b

        min= 100

        For i= 1 To 16

            If f(i)< min Then min f(i)

        Next i

        For i=1 To 16

            If f(i)= min then s=

            f(i)=0

        Next i

        List2. Additem"蓝色球重点买人:"十s

        '——以下开始处理红色球部分——

        For r=1 To 600

            

        Next r

       

  2. (2) 在某次红球部分处理时,若数组f中的,f(1)至f(33)的值依次为:

    f(1)-f(11):

    6

    8

    20

    25

    16

    21

    14

    20

    24

    28

    26

    f(12)-f(22):

    1

    30

    8

    1

    10

    10

    33

    28

    32

    20

    6

    f(23)-f(33):

    4

    34

    29

    18

    25

    30

    4

    13

    30

    20

    6

    结合加虚线框处代码的算法,输出的内容是:

    红色球重点买入:(按输出顺序写出6个红球号码)。

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

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

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

for thief in persons:

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

if flag == 3:

print(thief)

运行结果是:

有如下VB程序段:

s = "ABCDEF"

For i = 1 To Len(s)

    a = Int(Rnd * 3 + 1)

    b = Mid(s, a Mod 6 + 1, 1)

    ch = ch + Chr(Asc(b) + 32)

Next i

执行该程序后,变量ch的值可能是(    )

A . Dccebd B . Bdbfbd C . Ddcefb D . Bdddbc
某学校编写了一个Python程序对全校150位教师进行分组。首先随机成150个[1,100]范围内的整数分配给每位教师,再根据数值进行分组。数值与分组对照如下表:

数值

[1,20]

[21,40]

[41,60]

[61,80]

[81,100]

分组

一组

二组

三组

四组

五组

最后按照对照表统计出各个分组的人数占总人数的比例。程序运行界面如下:

import random

a=[ ]   #存放随机生成的整数

b=[0]*5

c=“一组二组三组四组五组”

for i in range(150) :

        ①            #生成[1, 100]的随机整数

    a. append (m)

for i in range (len(a)):

       ②   

for j in range (5) :

    con=round (b[j]/len (a)*100, 2)

    print(    ③    + “比例是”+str(con)+“%”)

  1. (1) 80在第几组?
  2. (2) 请在划线处填上合适的代码

     ② ③

下列Python程序段功能为:随机生成省会城市的测试题目及相应答案。运行结果如图所示。

import random

dict={"北京市":"北京","上海市":"上海","河北省":"石家庄",…    #dict中存储中国34个省级行政区及其省会城市

sf=list(   ⑴   )

sh=list(   ⑵   )

sj=random.randint(0,33)        #生成[0,33]之间的整数

zd=sh[sj]

del sh[sj]             #删除列表 sh 中的第 sj项

xx=random.sample(sh,3)+[zd]      #随机产生列表 sh 中的 3 项,与 zd 连接成新列表xx #对列表xx 中的内容进行随机排序

random.shuffle(xx)        

print("%s 的省会城市是? "%(   ⑶   ))

for i in range(4):

print(‘%s.%s’%(‘ABCD’ [i],xx[i]))

print(‘本题参考答案为: %s’%(‘ABCD’[   ⑷   ]))

上述程序段中方框处可选语句为:

①dict.values()

②dict.keys()

③sh[sj]

④sf[sj]

⑤xx.index(zd)

⑥xx[zd]

则( 1 )( 2 )( 3 )( 4 )处语句依次可为(     )

A . ①②④⑤ B . ①②③⑥ C . ②①④⑥ D . ②①④⑤
运行如下程序,输出结果为(    )

x=0

for i in range(1,11,2):

  x+=i

print(x)

A . 9 B . 16 C . 25 D . 36
有如下 python 程序段:

a = [1] * 6

b = [96,88,84,91,99,80]

for i in range(6):

  for j in range(i+1,6):

    if b[j] > b[i]:

      a[i] += 1

    else:

      a[j] += 1

该程序段运行后,列表 a 的值为(     )

A . [5, 3, 2, 4, 6, 1] B . [2, 4, 5, 3, 1, 6] C . [10, 6, 4, 8, 12, 2] D . [4, 8, 10, 6, 2, 12]