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

有如下 VB 程序段:

a(0) = 0 i = 1

Do While i <= 6

  a(i) = Int(Rnd * 5) * 2 + 1

  If Not flag(a(i)) Or a(i) > a(i - 1) Then

    flag(a(i)) = True

    i = i + 1

  End If

Loop

已知数组flag各元素的初值为False,该程序段运行后,数组元素a(1)到a(6)的值可能为 (    )

A . 5,1,7,4,9,3 B . 7,5,9,5,3,1 C . 1,5,9,3,5,9 D . 3,5,9,7,7,1
有如下VB程序:

a=2:b=5

If b>=a Then a=a+2

b=b+2

If b Mod 2=1 Then b=b*a+1

Text1.Text=Str(b)

程序运行后,文本框Text1上显示的内容为

为分析数组a中各元素依次变化的情况,进行如下定义:

·变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。

·波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个。终点是峰顶后所有连续下降段中的最后1个。

·对称波峰:上升段与下降段个数相同的波峰称为对称波峰。

图为一组数据的变化段及波峰示意图。

现要求统计数组a中各元素依次变化过程中“对称波峰”的个数,小李依据上述描述设计了如下VB程序,请回答下列问题:

  1. (1) 数组元素“1,4,3,3,2,5,8,7,8,3,4,7,9,6,3,1”依次变化过程中,“对称波峰”的个数为
  2. (2) 请在画线处填入合适的代码。

    Const n=20

    Dim a(1 To n)As Integer

    Private Sub Form_Load( )

    ´读取数据,并存储到数组a中。代码略

    End Sub

      Dim flag As Integer     ‘存储变化段的状态:1表示升,-1表示降,0表示平。

      Dim count As Integer      ‘存储对称波峰的个数

      Dim steps As Integer

      Dim i As Integer

      flag=0:steps=0:count=0

      For i=   ①   To n

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

          If IsSymPeak(flag, steps)Then count=count+1

          If flag=0 Or flag=-1 Then

             ②   

          Else

            steps=steps+1

          End If

          flag=1

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

          If IsSymPeak(flag, steps) Then count=count+1

          steps=0:flag=0

        Else

          steps=steps-1

          flag=-1

        End If

      Next i

      If IsSymPeak(flag, steps) Then count=count+1

      Text1. Text=Str(count)

    End Sub

    Function IsSymPeak(flag As Integer, steps As Integer) As Boolean

      If   ③   Then

        IsSymPeak=True

      Else

        IsSymPeak=False

      End If

    End Function

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

某市实施交通管制,早晚高峰根据车牌号限行。车牌号一般由5个数字或字母组成。车牌号尾位为0和5的周五限行,1和9周一限行,2和8周二限行,以此类推。若尾位为字母,以字母前最后一位数字为准 。实现上述功能的Python程序代码如下:

string = input("请输入您的车牌:浙A ")

for i in range (          , -1):

if string[i]>== "0" and string[i]<="9":

   if string[i]=="0" or string[i]=="5":

     print("周五限行!")

    elif string[i]=="4" or string[i]=="6":

        print("周四限行!")

    elif string[]=="3" or string[i-="7":

        print("周三限行!")

    elif string[i]=="2" or string[i]=="8":

        print("周二限行!")

    elif string[i]=="1" or string[i]="9":

        print("周一限行!")

break

  1. (1) 划线处应填入的代码是(     )
    A . len(tring)-1,-1 B . len(tring),0 C . len(string)-1,0 D . 1,len(string)+1
  2. (2) 若车牌为“浙A 2P27P”,则程序中的for循环语句执行次。
  3. (3) 某景区节假日期间实行单双号限行措施:按车牌号最后一位阿拉伯数字(尾数为字母的,以字母前最后:一位数字为准)实行单号单日行驶双号双日行驶(单号为1,3,5,7,9,双号为2,4,6, 8,0)。请编写实现上述功能的Python程序。

    string = input("请输入您的车牌:浙A ")

       

有如下Python程序:

score = int(input('\n'))

if score>= 90:

    grade= 'A'

elif score >= 60:

    grade = 'B'

else:

    grade= 'C'

print (score, grade)

运行程序,输入“78”后回车,程序的输出结果是(     )

A . 78A B . B78 C . 78B D . 78C
根据上题的算法描述以下划线处填写Python程序代码。

数据连接(代码略)

userID = request.POST.get(‘txtUserID’)

userPassword = request.POST.get(‘txtPassword’)

cursor.execute(u""" Select * FROM [student] where [学号]

    = '%s' and 密码= '%s'""" %(userID,))

list=cursor.fetchall( )

:

   for row in list :

       request.session['userID']=

       request.session['userName']=

       return HttpResponseRedirect("")

else :

    warn= u"

编写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中显示的内容是
对于两个大小为3*3的整数矩阵,设计一个通用的矩阵相乘函数,求得它们的矩阵乘积(新的矩阵),并查找出新矩阵中最大元素的位置和大小。其中一个矩阵已给定,另一个矩阵B由用户主动输入,相乘顺序为A*B。给定矩阵A为随机生成[-10,10]之间的非0随机数,矩阵B自己输入,由1和0构成,如果输入时有其它内容的就略过。

解题思路:A矩阵放a数组,B矩阵放b数组,相乘后的结果放在d数组

矩阵相乘的方式为:

⒈用A的第1行各个数与B的第1列各个数对应相乘相加,得到的结果就是第1行第1列的数;

⒉用A的第1行各个数与B的第2列各个数对应相乘相加,得到的结果是第1行第2列的数;

……

⒋依次进行,(直到)用A的最末行各个数与B的第末列各个数对应相乘相加,结果是最末行第末列的数。

  1. (1) 如图a所示,新矩阵的d(5)的值是

    图 a

  2. (2) 程序如图b所示,请在划线处填写合适的代码。

    图 b

    Dim a(1 To 9) As Integer, b(1 To 9) As Integer '矩阵 A,B 的数组

    Private Sub Command1_Click()

        Dim s As String, i As Integer, ch As String

        Dim x As Integer, y As Integer, k As Integer

        Dim d(1 To 9) As Integer      '新矩阵的数组

        s = Text1.Text                     'B 矩阵以字符串的形式输入

        k = 1

        '输入 B 矩阵的值

        For i = 1 To Len(s)

            ch = Mid(s, i, 1)

            If ch = "0" Or ch = "1" Then

                b(k) = Val(ch)

                k = k + 1

                If k = 10 Then Exit For

            End If

        Next i

        '计算出新的矩阵的值

        For i = 1 To 9

            For j = 1 To 3

               

            Next j

        Next i

        '输出新矩阵的值

        For i = 1 To 3

            ch = ""

            For j = 1 To 3

                ch = ch + Str(d((i - 1) * 3 + j)) + " "

            Next j

            List2.AddItem ch

        Next i

        Max = 1

        For i = 2 To 9

            If d(Max) < d(i) Then Max = i

        Next i

        x = ((Max - 1) \ 3 + 1)

        y =

        Label2.Caption = "最大的数是" + Str(d(Max)) + "位置(" + Str(x) + "," + Str(y) +

    ")"

    End Sub

    Private Sub Form_Load()

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

        s = ""

        Randomize

        '生成矩阵 A 数组

        For i = 1 To 9

            a(i) = Int(Rnd * 20 + 1) * (-1) ^ (Int(Rnd * 2))

            If  Then

                List1.AddItem s

                s = ""

            End If

            s = s + " " + Str(a(i))

        Next i

        List1.AddItem s

    End Sub

   当if分支语句中,语句A由多个语句构成时,严格遵守相同的缩进
某仓库管理员希望使用计算机来帮助他管理仓库物品。会有不同的人到仓库取物品,每人希望取走不同数量的物品,物品库存总量事先已知。

计算机的管理规则如下:

·对于某人需要的物品数量,若仓库有足够的物品,将直接分配给该人。

·若某人需要的物品数量超过了当前的库存量,仓库会拒绝该人的请求。

管理员希望知道有多少人没有顺利取到物品。

现编写VB程序实现对物品的管理,在文本框Text 1中输入物品库存总量,在文本框Text 2中输入每人所需要物品的数量(以逗号分隔),单击“统计”按钮count,在Label 4中显示一天中没有取到物品的人数。程序设计界面如图所示。

图片_x0020_100009

  1. (1) 根据题意,“统计”按钮的对象名为
  2. (2) VB程序代码如下,请在划线处填入合适的代码。

    Private Sub count_Click()

        Dim sum As Integer,num As Integer

        Dim cnt As Integer

        Dims As String,chAs String,tmp As String

        cnt= 0

        sum=Val(Text 1.Text)

        s=Text 2.Text

        For i=1 To Len(s)

            ch=Mid(s,i,1)

            If ch=","Then

                num=Val(tmp)

                If num>sum Then

                    cnt=cnt+ 1

                Else

                   

                End If

                tmp=""

            Else

               

            End If

        Next i

        Label 4.Caption=Str(cnt)

    End Sub

  3. (3) 若在文本框Text 1中输入“30”,文本框Text 2中输入“10,5,20,6,78”,则程序运行结束时标签Label 4中显示的内容为
有如下Visual basic程序段:

a=2

b=5

If a<b Then

    m=a

Else

    m=b

End If

该程序段运行后,变量m的值为(   )。

A . “a” B . “b” C . 2 D . 5
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。判断是否是素数的VB程序段如下:

n = Val(Text1.Text)

   

For i=2 To n- 1

    If n Mod i= 0 Then

        a= False

       

    End If

Next i

If  Then Label1.Caption = "不是素数" Else Label1.Caption = "是素数"

程序段中有3处加框的地方需要完善代码,现有如下代码:

①Exit For

②a=True

③a = False

则程序段里从上往下方框里的代码分别是(    )

A . ①②③ B . ②①③ C . ③①② D . ③②①
有一组正整数,要求对其中的奇偶数进行交换。交换后奇数在前,偶数在后,并保持相对顺序不变。

Const n = 10

Private Sub Command1_Click()

    num = 0: k = 0

    Do While k < n

        k = k + 1

        If   ①   Then

            num = num + 1

            b(num) = a(k)

        Else

              ② 

        End If

    Loop

    For j =③

        a(j) = b(j - n + num)

    Next j

End Sub

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

A . ①a(k) Mod 2 = 1 ②b(k - num) = a(k)          ③n - num To n B . ①a(k) Mod 2 = 0         ②a(k - num) = a(k)          ③n - num + 1 To n C . ①a(k) Mod 2 = 1         ②a(k - num) = a(k)          ③n - num To n D . ①a(k) Mod 2 = 0 ②b(k - num) = a(k)          ③n - num + 1 To n
展开字符串。如果在输入的字符串中,含有类似于“c-g”或者“3-7”的字符子串,就把它当作一种简写,字符串展开输出时有如下规则:

1)如果“-”号右边的字符按照ASCI码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“-”号,例如:“c-g”输出为“cdefg”,“3-7”输出为“34567”。

2)如果“-”号右边的字符按照ASCII码的顺序小于或等于左边字符,输出时,保留中间的“-”号,例如:“a-a”输出为“a-a”,“4-1”输出为“4-1”。

3)如果“-”号右边的字符恰好是左边字符的后继,则删除中间的“-”号,例如“d-e”应输出为“de”,“3-4”应输出为“34”。

某同学按照上述算法,编写了VB程序,功能如下:在文本框Text 1中输入简写字符串,单击“展开”按钮Command 1,程序进行字符串展开处理并显示在文本框Text 2中。程序运行界面如图所示。

  1. (1) 如果输入的简写字符串为“abs-w-Y1234-5S-4z”,则展开后的字符串为
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适代码。

    Private Sub Command1_Click()

        Dim st1 As String, st2 As String, i As Integer

        st1=Text1. Text

        n=Len(st1)

        st2=""

        For i=1 To n

            If pos(st1, i)Then<> "-" Then

                st2=st2+pos(st1, i)

            Else

                If pos(st1, i-1)<pos(st1, i+1) Then

                    For j=Asc(pos(st1, i-1))+1 To Asc(pos(st1, i+1))-1

                       

                    Next j

                Else

                    st2=st2+"-"

                End If

            End If

        Next i

        Text2. Text=st2

    End Sub

    Function pos(s As String, x As Integer) As String     '返回字符串s中x位置的字符

       

    End Function

有如下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
输入一个成绩, 若大等90显示“优”,否则若大等80显示“良”,否则若大等70显示“一般”,否则若大等60显示“及格”,否则显示“不及格”

PRIVATESUB FORM_CLICK( )

    DIM X AS SINGLE

    X=VAL(INPUTBOX(“请输入一个成绩”))

    SELECT CASE 

        CASE 

            PRINT “优”

        CASE 

            PRINT “良”

        CASE

            PRINT “一般”

        CASE

            PRINT “及格”

        CASE 

            PRINT “不及格”

   

END SUB

分析问题,建立模型,并用算法描述区间测速问题

分析已知条件,抽象建立数学模型,算法描述区间测速。根据要求,回答问题。

  1. (1) 分析明确区间测速需要采集的关键数据,理解并形成问题的初始表征。

    ■采集的数据:测速路段长度,用s表示,单位为千米

    抓拍同一车辆时间间隔,用t表示,单位为分钟

    测速路段限速limit,单位为千米/时

    ■区间测试问题的初始表征:用表征车辆通过区间测速路段平均时速(选填:/ ),假如测速路段限速limit为每小时80公里,如果v≤limit,则判定为,否则判定为(选填:“符合限速要求”/“已超速”)。

  2. (2) 小组成员采用不同的方法描述区间测速的算法。如图a,该同学是用描述算法;如图b,该同学是用描述算法,如图c,该同学是用描述算法。(选填:自然语言/流程图/伪代码)

  3. (3) 关于自然语言、流程图和伪代码算法描述方法的比较,正确的是           (多选)。
    A . 自然语言描述算法更容易掌握,但对分支和循环结构的描述能力较弱 B . 流程图描述算法清晰、简洁 C . 伪代码描述算法书写方便,格式紧凑,易于理解,便于向计算机程序设计语言过渡 D . 伪代码是最适合描述算法抽象结构的一种方式
  4. (4) 当将图c中表达式“时速小于等于limit”改为“时速大于limit”,算法中的流向将发生改变。请模仿图c,补全图d中部分算法描述。

有如下python程序段:

n="p4y2t3h1o9n4";p=""

for i in n:

    if "0"<=i<="9":

        if p=="":

            p+=i

        elif i>=p[-1]:

            p+=i

        elif i<p[0]:

            p=i

执行该程序段后,则p的值是(     )

A . "239" B . "14" C . "19" D . "4"
有如下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
疫情期间学校实行错时吃饭,中午吃饭时间(文本框Text1)按照高三、高一、高二的顺序依次下课去食堂,年级之间间隔5分钟(文本框Text2),已知每个年级同学数按500人整计算,每分钟进入食堂的人数按100人次计算,5批次可以全部进入食堂。食堂共设置了15个打菜窗口,每个打菜窗口的绝对等待时间依次为“0秒,10秒,20秒,……,(n-1)*10秒”n表示该窗口第n位排队打菜同学。每个窗口最多容纳排队人数=1500/15=100人。

现在设计一个VB程序,计算三个年级每一个批次进入食堂排队打菜完需要的相对等待时间平均值(输出到标签Label1,单位:分钟),以及抽样调查:在文本框Text3中输入某年级第n位进入食堂的同学,排队打到饭菜需要的时间(单位分钟,取整)并输出到标签Label2中。程序运行界面如第16题图所示。

  1. (1) 如图所示,将食堂打菜窗口增加到20个,则平均排队打菜时间将(单选:A .增大/B .减小)。
  2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

    Const n= 1500:Const nj = "

    Dim d(1 To 3 * 5) As Integer, cw(1 To 100) As Integer, w(1 To n) As Integer

    Private Sub Command1_Click()

        Dim i As Integer, j As Integer, t(1 To 3) As Integer

        Dim k As Integer, sum As Long, aver As Integer

        t(1) = TtoM(Text1.Text):k = Val(Text2.Text)

        For i = 1 To 3

            If i > 1 Then t(i) =      '三个年级的午餐时间

            For j = 1 To 5

                d((i -1) * 5 + j) = t(i) + j -1   '记录三个年级每个批次进入食堂的时间点

            Next j

        Next i

        List1.Clear

        For i = 1 To 15

        '输出三个年级每个批次进入食堂的时间点,代码略

        Next i

        For j = 1 To n

            If j Mod 15 = 1 Then

                i = (j -1) \15 + 1

                cw(i) = (i -1) * 10     '每个打菜窗口的等待时间(单位:秒)

            End If

            w(j) = cw(i) -() * 60    '每位同学打菜等待时间

            sum = sum + w(j)

        Next j

        aver = sum \n \60

        Label1.Caption = "平均排队打菜时间:" + Str(aver) + "分钟" 

    End Sub

    Private Sub Command2_Click()

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

        s = Text3.Text

        i = 1

        Do While i <= 3

            If Then j = (i -1) * 500 + Val(Mid(s, 4)): Exit Do

            i = i + 1

        Loop

        Label2.Caption = s+"进入食堂的同学大约" +Str(w(j)\60)+ "分钟左右打到饭菜。"

    End Sub

    Function TtoM(t As String) As Integer

        '将时间转换为绝对数值,例如t="12:01"→TtoM=721,代码略

    End Function

    Function MtoT(m As Integer) As String

        '将时间绝对数值转换为时间格式,代码略

    End Function

最近更新