4.3.1 if语句的应用 知识点题库

杨辉三角是我国古代数学的成就之一,如图所示为杨辉三角前5行的数据排列。从图可知,杨辉三角当前行的数值可由前一行推导计算得到。现要求杨辉三角第n行的数据,编写的VB程序功能如下:在文本框Text1中输入n值(n≤30),单击按钮Command1后,在标签框Label1中输出第n行的数据。

实现上述功能的VB代码如下。

Private Sub Command1_Click()

 Dim pre(0 to 30)As Long, cur(0 to 30)As Long 

 Dim s As String, i As Integer, j As Integer

 n = Val(Text1.Text)

     ′I处

 For i = 1 To n

   s = “”

   For j = 1 To i

     cur(j)=     ′II处

     s = s & str(cur(j))& “ ”

   Next j

   For j = 1 To i

     pre(j)= cur(j)

   Next j

 Next i

 Label1.Caption = s

End Sub

方框处的代码会是以下四句中的某一句:

① cur(1)=1     ②pre(1)=1     ③pre(j-1)+ per(j+1)    ④pre(j-1)+ per(j)

程序中I、II方框处正确的选项是(      )

A . ①③ B . ①④ C . ②③ D . ②④
小王基于选择排序算法编写了一个VB程序,功能如下:数组a有n*n个元素,按n行n列进行排列,按列进行升序排序。例如6*6的数组,第一列将a(1),a(7),a(13),a(19),a(25),a(31)进行排序。运行程序,在列表框List1中显示n*n个数列单击“排序”按钮Command1,在列表框List2中显示排序后的结果,程序运行界面如图所示。请回答下列问题:

  1. (1) n=6时运行结果如图所示,图中1处“47”在数组a中下标是(填数字)。
  2. (2) 为了实现上述功能,请在划线处填写合适的代码。

    Const n =6

    Dim a(1 To n * n) As Integer

    Private Sub Form_Load()      '产生n*n个数组元素,每行按n个数显示在list1中

      For i = 1 To n * n

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

        s = s + Str(a(i))

        IfThen

          List1.AddItem s

          s = ""

        End If

      Next i

    End Sub

    Private Sub Command1_Click()

      Dim i As Integer, j As Integer, w As Integer, s As String

      For i = 1 To n * n

        k = i

        For j = k + n To

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

        Next j

        If _x0000_i1031 Then t = a(k): a(k) = a(i): a(i) = t

      Next i

    '将排序后数组a的元素,按每行n个数显示在list2中,代码略

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
某学校要对班主任进行满意度调查,有20个评分项(为方便程序处理,评分项具体的名称本题中不显示,仅以序号代替),每个评分项学生可以打A、B、C 三个等级中的一个,现在已经收集所有学生对班主任的评价,为了保证隐私,不显示学生姓名,只显示班级,并存储在数据库的表中,点击command2(读取数据),读取原始数据显示在左侧list1中,左侧列表显示的原始评价数据第一条表示高二(01)班有1位同学在第9项给班主任打A,依次类推,点击command1(统计),统计出各项目的评价统计(A+B所占的百分比)。

  1. (1) 根据以下代码可知,本程序访问的数据库名称是
  2. (2) 完成划线处的代码填空:

    Dim classname(1 To 8000) As String       '存储原始数据中的班级名称

    Dim selectabc(1 To 8000) As String        '存储原始数据选项的值

    Dim xiangmu(1 To 8000) As String         '存储原始数据选项的序号

    Dim n As Integer

    Private Sub Command2_Click()             '从数据库读取数据,并且按班级名称排序

    Dim conn As New ADODB.Connection

    conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source="&App.Path&"\pingjia.accdb"

    conn.Open

    Dim rs As New ADODB.Recordset

    Set rs.ActiveConnection = conn

    rs.Open "select * from data"

    n = 0' 记录评价的总条数

    '读取数据,并按班级排序,代码略

    End Sub

    Private Sub Command1_Click()

      Dim cstart(1 To 50) As Integer       '存储每个班级在数组classname中的起始位置

      Dim cend(1 To 50) As Integer        '存储每个班级在数组classname中的末尾位置

      Dim k As Integer                   '存储班级数量

      Dim testall(1 To 20) As Integer          '存储每一项总选择人数,例如testall(1)里存储这评价项目1里的总人数,testc(1)里存储评价项目1里选C的人数

      Dim testc(1 To 20) As Integer          '存储每一题(项)选c的人数

      '确定每个班级的起止位置,存储到cstart数组和cend数组

      cstart(1) = 1

      temp = classname(1)

      k = 1

      For i = 1 To n

        If classname(i) <> temp Then

          

          k = k + 1

          cstart(k) = i

          temp = classname(i)

        End If

      Next i

      cend(k) = n

      For i = 1 To k             '每个班级分别统计评价项目

        

        For q = 1 To 20          '对testall和testc数组初始化

          testall(q) = 0

          testc(q) = 0

        Next q

        For j = cstart(i) To cend(i)           '对第i个班级进行统计

          testall(xiangmu(j)) = testall(xiangmu(j)) + 1\

          If selectabc(j) = "C" Then 

        Next j

        For p = 1 To 20       '统计完成后输出这个班级的20个项目的A+B所占百分比

          s = s &""&Str(Round((testall(p) - testc(p)) / testall(p) * 100, 1))

        Next p

        List2.AddItem s

      Next i

    End Sub

某医院每天提前发放100个预约号。考虑到老年人身体,预约的病人按照以下规则进行就诊:

①老年人(年龄≥60岁)比非老年人优先就诊;

②老年人按年龄从大到小的顺序就诊,年龄相同的按预约顺序就诊;

③非老年人按预约顺序就诊。

小王根据以上规则编写了一个VB程序,通过引入索引数组temp进行排序,使得age(temp(1))≥age(temp(2))≥age(temp(3))…≥age(temp(n))。如图a所示。

图a

图b

程序运行时,病人的数据显示在列表框List1中,单击“就诊排序”按钮Command1,排序结果显示在列表框List2中,程序运行界面如图b所示。

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 分析程序,可知程序中读取的数据库工作表名称为
  2. (2) 请在画线处填入合适的代码。

    Dim pname(1 To 100)As String           ‘存放病人姓名

    Dim age(1 To 100)As Integer             ‘存放病人年龄

    Dim num(1 To 100)As Integer            ‘存放病人序号

    Dim n As Integer

    Private Sub Command1_Click( )

      Dim temp1(1 To 100)As Integer, temp2(1 To 100)As Integer   ‘索引数组

      Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer, t As Integer

      k1=0:k2=0

      For i=1 To n

          If age(i)<60 Then

          k1=k1+1

        temp1(k1)=num(i)

      Else

          k2=k2+1

          temp2(k2)=num(i)

        End If

    Next i

    For i=1 To k2-1

        For j=k2 To i+1 Step-1

          If   ①   Then

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

          End If

        Next j

    Next i

    List2.Clear

    List2.Addltem "就诊号  名单   年龄"

    For i=1 To k2

        List2.Addltem Str(i)&."  "&.pname(temp2(i))&"r/&.Str(age(temp2(i)))

    Next i

    For j=1 To k1

        List2.Addltem   ②   &"    "&pname(templ(j)&"   "&.Str(age(templ(j)))

    Next j

    End Sub

    Private Sub Form_Load( )

      Dim conn As New ADODB. Connection, rs As New ADODB. Recordset

      Conn.ConnectionString="Provider=Microsoft. ACE. OLEDB. 12.0;DataSource="&App. Path&"\pdxt.accdb"

      conn.Open

      Set rs. ActiveConnection=conn

      rs. Open"select*from jzmd"

      n=0

      List1.AddItem"预约号   名单   年龄"

      Do While Not rs. EOF

           ③   

        num(n)=n

        pname(n)=rs. Fields(1)

        age(n)=rs Fields(2)

        List1. Addltem Str(num(n))&"  "&-pname(n)&."  "&.Str(age(n))

        rs. MoveNext

      Loop

      rs.Close:conn.Close

    End Sub

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

某地区天然气价格如下表所示:

居民用户气价

阶梯分档

年用气量Nm3

气价(元/Nm3)

第一阶梯

0-360 (含)

3.00

第二阶梯

360-540 (含)

3.50

第三阶梯

540以上

4.50

小明为了计算家庭每年应缴费用,编写了一个VB程序,功能如下:在文本框Text1中输入每年使用的天然气用量,单击“计算”按钮Command1后,在文本框Text2中输出年缴天然气费用。程序运行界面如图所示。

  1. (1) 在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的属性。

    (单选,填字母:A .Text / B .Caption / C .Font)

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

    Dim price(1 To 3) As Double

        Private Sub Form_Load()

        '本过程读取天然气的单价存储在数组 price 中

        '代码略

    End Sub

    Private Sub Command1_Click()

        Dim num As Integer, s As String

        num = Val(Text1.Text)

        If num < 0 Then

            s = "请输入正确的数值!"

        ElseIf num <= 360 Then

            s = Str(num * price(1))

        ElseIf num <= 540 Then

            s = Str(360 * price(1) + )

        Else

            s = Str(360 * price(1) + (540 - 360) * price(2) + (num - 540) * price(3))

        End If

        Text2.Text=

    End Sub

  3. (3) 本程序的算法属于算法。(选填:解析/枚举)
编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。
小明用Python语言写了一个货币兑换程序如下:

  1. (1) 参数currency指:
  2. (2) 该程序用了哪一种算法结构:
  3. (3) 输出结果为“50$= 325.25人民币”。则代码应该如何编写:
一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则称该序列为摇摆序列。小王同学想求出某个数列的最长播摆子序列。

以序列[3,14,7,6,9,12,10,8,13,5]为例,整体不是摇摆序列,但子序列[3,14,7,9]、[3,14,6,12]等都属于摇摆子序列,其中最长的摇摆子序列[3,14,6,12,8,13,5]。根据第16图a分析得知,当序列有一段连续的递增(或递减)时,为形成摇摆子序列,我们只需要找到每一次转折中的拐点元素。

小王编写了一个VB程序实现该功能:程序运行时,从文本框Text1中读入数据,单击按钮Command1后,将计算得到的最长摇摆序列的长度输出到标签Label1中,并将具体的序列输出到文本框Text2中。程序运行界面如图b所示:

  1. (1) 若文本框Text1中输入数据“2,4,5,3,2,1”,则最长摇摆子序列为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(1 To 20) As Integer

    Dim b(1 To 20) As Boolean

    Dim ans As String

    Private Sub Command1_Click()

        Dim i As Integer, flag As Integer, n As Integer

        Dim gd As Boolean

        '从文本框 Text1读入数据,依次存储到a数组中,数据总数为n

        'b数组初值均为False

        '代码略

        flag = 0         '0代表开始,1代表上升,2代表下降

        For i=2 To n

            gd = True

            If flag = 0 Then

                If a(i) >a (i-1) Then

                    flag= 1

                ElseIf a(i) < a(i - 1) Then

                    flag = 2

                Else

                    gd = False

               End If

            ElseIf flag = 1 And a(i) < a(i - 1) Then

                flag = 2

            ElseIf   Then

                flag = 1

            Else

                gd = False

            End If

            

        Next i

        If f(n)<3 then

            Label1.Caption =“不构成摇摆子序列”

        Else

            Label1.Caption =“最长摇摆子序列长度为:”+ Str(f (n))

            Text2.Text =“最长摇摆子序列为:”+ ans

        End If

    End Sub

    Function f(n As Integer) As Integer

        f = 1: ans=Str(a(n))

        For i=n-1 To 1 Step-1

            If b(i) Then

                f=f+1

                

            End If

        Next i

    End Function

小明编写Python程序,把百分制分数(fenshu)转换为五分制等级,然后输出等级。例如分数95,程序输出 “A”。转换规则如下,请在横线填入正确的代码。

大于等于90分为A;

小于90且大于等于80为B;

小于80且大于等于70为C;

小于70且大于等于60为D;

小于60为E。

if fenshu>=90:        #变量fenshu表示分数

grade="A"

 

grade="B"

elif fenshu >=70:

grade="C"

elif fenshu >=60:

grade="D"

else:

grade="E"

                #输出等第

要实现将整数变量a、b和c中的最大值存变量m,下列VB程序段中不正确的是(    )
A . B . C . D .
若变量X=1,则执行语句if x then x=0 else x=1后,X的值是(    )
A . 0 B . 1 C . 实时错误 D . 编译错误
下列选项的语句中,与“若x小于0则y=-1,否则y=1”功能相同的是(        )

A. if x < 0:

y = -1

y = 1

B. y =1

if x < 0:

y = -1

C. if x < 0:

y = -1

if x > 0:

y = 1

D. if x > 0 :

y = 1

else:

y = -1

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

Private Sub Command1_Click()

    Dim n As Integer, ans As Integer

    n = 5

    Dim x(1 To 5) As Integer

    x(1) = -30: x(2) = 26: x(3) = -18: x(4) = 60: x(5) = 22

    ans = 60

    For i = 1 To n

        If x(i) < 0 Then x(i) = -x(i)

        ans = ans + gcd(ans, x(i))

    Next i

    Text1.Text = Str(ans)

End Sub

Function gcd(a As Integer, b As Integer)

    If b = 0 Then

        gcd = a

    Else

        gcd = gcd(b, a Mod b)

    End If

End Function

执行该程序段后,Text1. Text中显示的值为(      )

A . 1 B . 2 C . 90 D . 98
小明为了将十进制数转化为k进制数(k值范围在2到16之间),设计如下界面程序:在文本框Text1中输入一个十进制数,在文本框Text2中输入整数k,单击“运行”按钮Command1,程序将十进制转化为k进制值,并在标签Label1中输出结果。请回答下列问题:

  1. (1) 程序窗体中“运行”所用的控件是(选项A . ;B . ;C . ;D . )。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_ Click()

      Dim d As Integer, k As Integer, r As Integer

      Dim s As String, c As String

      d= Val(Text1. Text)

      k= Val(Text2. Text)

      s=" "

      Do While d>0

        r=d Mod k

        If r>=10 Then

          c= Mid(“ABCDEF”,,1)

        Else

          c=str(r)

        End If

        s=

        d=d\ k

      Loop

      Label1. Caption=“结果为:”+s

    End Sub

  3. (3) 运行该程序,在文本框Text1中输入“28”,文本框Text2 中输入“16”,单击“运行”按钮,则Label1显示的内容为是
汉字可以使用N * N的黑白点阵图案来表示,例如汉字“上”和“二”使用8* 8的点阵图案表示,如图a所示。转化为0和1的点阵,其中0表示白色,1表示黑色,则“上”字可以表示为:

使用以下规则对01点阵进行编码(以“上”为例):

①编码的第一个数为点阵的行列数N,如示例中“上”对应的行列数N为8;

②按行列顺序从上到下,由左到右依次进行编码;

③第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数表示再接下来连续有几个0,依此类推……

根据以上规则,“上”的编码为8,3,1,7,1,7,1,7,3,5,1,7,1,7,1,4,8。 依据上述描述的编码规则,设计一个解码程序,根据输入的压缩编码,输出01点阵和黑白点阵。程序运行界面如图b所示,其VB代码如下。请回答下列问题:

  1. (1) 依据图a中“二”字点阵图案以及上述压缩编码的规则,“二”字的编码为(填数字,中间用逗号分隔)。
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_ Click()

        Dim n As Integer, m As Integer, flag As Integer

        Dima(1 To 100) As Integer, sum As Inte-ger, num As Integer

        Dim s As String, tmp As String

        读取一组数据,并对数据处理后存入相应变量

        s= Text1. Text : s=s+","

        num=0: i=1

        Do While Mid(s, i, 1) <","

            i=i+1

        Loop

        n=

        p=i+1

        num=0 : m=0

        For i=p To Len(s)

            ch= Mid(s, i, 1)

            If ch="," Then

                m=m+1

               

                num= 0

            Else

                num= num* 10+Va1(ch)

            End If

        Next i

        下列代码为按规则对编码进行解码,输出01点阵sum=n * n

        i=1 : flag=0 : tmp=" "

        Do While sum > 0

            For j=1 To a(i)

                If flag=0 Then

                    tmp= tmp+"0"

                Else

                    tmp=tmp+"1"

                End If

                If  Then

                    List1. AddItem tmp

                    tmp =" "

                End If

            Next j

           

            i=i+1

            flag=1- flag

        Loop

        '按规则对编码进行解码,输出黑白汉字点阵,代码略

    End Sub

目前我国18位身份证号码的倒数第二位代表性别,单数为男性,双数为女性。若字符串变量s代表身份证号码,则下面判断语句表达正确的是(     )

A

B

C

D

if (s[16])%2==0:

print(“女性”)

else:

    print(“男性”)

If int(s[16])%2==0:

print(“女性”)

else:

    print(“男性”)

if int(s[16])//2==0:

print(“女性”)

else:

    print(“男性”)

if (s[16])//2==0:

print(“女性”)

else:

    print(“男性”)

A . A B . B C . C D . D
某张单据上有一个5位数的编号n,如图所示 ,其百位数和十位数模糊不清,但是知道 这个5位数是23的倍数。现要设计一个算法,找出所有满足这些条件的5位数,并统计个数。

现有Python程序段如下:

c=0

for i in range(10):

    for j in range(10):

                                         

        m=25006+s

        if m%23==0:

            print(m)

            c=c+1

print(“满足这些条件的5位数总共有:”,c,“个” )

画线处应填的代码是(    )

A . s=i*10+j B . s=i*100+j C . s=i+j*10 D . s=(i*10+j)*10
小墩和小融打乒乓球,利用Micro:bit主板的 LED 阵列实时显示比分情况(如图1所示,2个方框分别表示小墩和小融比分区,每个亮点表示1分),并在BXY Python Editor软件的串口中实时输出对局输赢情况(如图2所示)。

图1

图2

操作步骤:小墩得1分,按下Micro:bit主板的按钮A,左侧比分区亮点加1;小融得1分,按下按钮B,右侧比分区亮点加1。一局比赛初始比分为0:0,每一局中先达到10分的选手可以赢得该局。

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

    from microbit import *

    def bf(x,y):

        #在led板上显示比分情况,代码略

    m=0;n=0  #m表示小墩得分,n表示小融得分

    while True:

        if button_a.is_pressed():   #若按钮A被按下,则小墩得1分

            m+=1

        elif button_b.is_pressed():  #若按钮B被按下,则小融得1分

            n+=1

        if :

            if m>n:

                print("第",i,"局:小墩赢,比分:",m,":",n)

            else:

                print("第",i,"局:小融赢,比分:",m,":",n)

            i+=1;m,n=0,0

        bf(m,n)

        sleep(200)  #设置程序运行间隔为200毫秒

  2. (2) 根据上述程序,下列比分情况不可能出现的是(   )。
    A . B . C . D .
用python编辑器打开“y:\109”下的文件“凯撒密码.py”进行以下操作并保存结果。凯撒密码是一种移位密码,明文中的所有字母都在字母表上向后按照一个固定数目(密钥)进行偏移后被替换为密文

①请填空,完善该程序实现功能:输入一串字符串(message)和一个数字(key)。对这串字符进行加密(向后移位Key位,只对26个英文字母加密)

注:程序修改时,请把下划线及序号删除,不能删除注释语句。

import math

import random

import os

#定义加密函数,对字母进行加密,即向后移动key位,其他字符不加密。

def cipher(befmessage, key):

    aftmessage = ''

    for char in befmessage:

        if char.isupper():    #对大写字母进行加密

            code = ord('A')+(ord(char)-ord('A')+key) % 26

            aftmessage = aftmessage+chr(code)

        elif char.islower():  #对小写字母进行加密

            code = +(ord(char) - ord('a') + key) % 26

            aftmessage = +chr(code)

        else:

            aftmessage = aftmessage+char   #字母以外的其他字符不进行加密

return aftmessage

#主程序

message = input('请输入明文:')

key = (input('请输入密钥(整数):'))  # 输入数字密钥

secret = cipher(message, )

print('加密后的密文是:',)

# 结束

②编写完成后,原名保存并关闭应用软件。

有如下VB程序段:

n=6

For i=1 To n\2

    flag=True : t=a(i+1)-a(1)

    j=i+2

    Do While j<=n And flag

        If a(j)-a(j-i)=t Then j=j+1 Else flag=False

    Loop

    If j>n Then Exit For     ‘Exit For表示退出循环

Next i

整型数组元素a(1)到a(6)的值依次为“3,x,11,14,19,22”,执行该程序段后,变量i的值为2,则x的值为(    )

A . 5 B . 6 C . 7 D . 8