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

有如下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!
用二分法求解 x3- x2 + x - 1 = 0,请在下划线处完善程序。

def f(x):

    #定义方程

    return x**3-x**2+x-1

a=float(input("请输入解区间的左边界:"))

b=float(input("请输入解区间的右边界:"))

while abs(b-a)>1e-6:

    x0=(a+b)/2

    if ():

        b=x0

    if ():

        a=x0

    if ():

        break

print("解为:",x0)

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

平面上有n(3≤n≤100)个房间围成一圈,编号分别为1~n,相邻的两个房间之间均有一扇门,第i个房间最多居住的人数为a(i)。初始时选择一个房间,将所有人都聚集在该房间,接着每个人都可以按顺时针方向走到相邻的房间,直到找到居住的房间。最后各个房间刚好都住满。一个人每经过一扇门花费1个单位的能量,请确定初始房间及每个人找房间的方案,使得所有人花费的能量的和最小。例如:n=5,a(1)=4,a(2)=7,a(3)=8,a(4)=6,a(5)=4。

最佳方案为初始时所有人聚集在2号房间,此时花费的最小能量为7×0+8×1+6×2+4×3+4×4=48。

实现上述功能的VB代码如下,但加框处代码有误,请改正。

Dim a(1 To 100)As Integer       ‘依次存储编号为1到100的房间的最多居住人数

Private Sub Form_Load( )

    ‘产生n的值

    ‘本过程从数据库中依次读取编号为1到n的房间的最多居住人数,并存储在数组a中

    ‘代码略

End Sub

Private Sub Command1_Click( )

  Dim i As Integer,j As Integer,w As Integer

  Dim t As Long,ans As Long

  ans=32767

  For i=1To n

    t=0

    For j=0 To n-1

                      ‘①

      If w=0 Then w=n

                    ‘②

    Next j

    If t<ans Then ans=t

  Next i

  Text2.Text=Str(ans)

End Sub

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

在数据加密过程中,为了防止加密方法外泄,往往使用密钥,只有掌握了密钥才能正确加密、解密。某信息加密VB程序,对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文。该程序使用的密钥是一个2位十进制数。数据加密方法对明文中的每个字符进行如下处理:

①将该字符的ASCII码加密钥后,转换成对应的8位二进制;

②将对应的8位二进制数进行按位取反(1变0,0变1);

③将最后产生的8位二进制数转换成对应的十六进制数;

④将得到的十六进制数码交换顺序后连接,即为该明文的密文。

例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。

小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 如果输入的明文为大写字母“F",密钥为16,则生成的密文是
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Function btoh(m As String)As String     ‘将4位二进制数转换成对应的十六进制数

      Dim s As Integer, i As Integer

      Dim st As String

      st="0123456789ABCDEF"

      s=0

      For i=1 To 4

          s=s*2 +Val(Mid(m,i,1))

      Next i

         ①   

    End Function

    Private Sub Command1_Click( )

      Dim ans,ch,s,ret,s1,s2 As String

      Dim a,b,c As Integer

      s= Text1.Text

      c= Val(Text2.Text)

      For i = 1 To Len(s)

          ch=Mid(s,i,1)   ‘取出第i个字符存入变量ch

          a=Asc(ch)

          b=a+c

          ret = " "

          For m=1 To 8             ‘完成加密步骤①和步骤②

              n=(b+1)Mod 2

              ret =str(n)+ ret

                 ②   

          Next m

          s1 = btoh(Mid(ret,1,4))    ‘完成加密步骤③和步骤④

          s2 = btoh(Mid(ret,5,4))

          ans=ans +s2+s1

      Next i

      Text3.Text=ans

    End Sub

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

数字之美“卡布列克数”:一个十进制整数X,X的平方可以分割为两个数字,如果这两个数字相加之和恰好等于X,那么X就是卡布列克数。如1,9,10,45……。因为9^2=81,9=8+1,所以9是卡布列克数;45^2=2025,45=20+25,所以45是卡布列克数。小朱编写VB程序验证输入的数是不是卡布列克数。具体功能如下:在文本框Text1中输入一个数,单击“验证”按钮,结果显示在标签Label2中,运行界面如图所示

 

  1. (1) 若要清空文本框Text1的内容,则修改文本框的属性。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim x As Integer, m as double, n As Integer

        Dim num1 as Long, num2 as Long

        Dim s As String, flag as Boolean, i as Integer

        x = val(Text1.Text)

        m = x ^ 2

        s = Trim(Str(m))      ‘Trim函数去除字符串首尾空格

        n = len(s)

        For i = 1 to n

            num1 =

            num2 = Val(Mid(s,i+1,n-i))

            If   Then

                Flag = True

                Exit For

            End If

        Next i

        If flag Then

            Label2.Caption=Str(x)+ "=" +Str(num1)+ "+" + mid(s,i+1)+ ",是卡布列克数!"

        Else

            Label2.Caption = Str(x) + "不是卡布列克数!"

        End If

     End Sub

  3. (3) 若文本框Text1中输入的内容是“55”(不包括引号),单击“验证”按钮后,Label2中显示的内容是
if(条件表达式)后面必须加冒号:
下列程序运行后,在键盘输入100,则程序的运行结果是(    )。

x=input("Please input x:")

if x<0 or x>=20:

    print(x//10)

elif 0<=x<5:

    print(x)

elif 5<=x<10:

    print(3*x-5)

elif 10<=x<20:

    print(0.5*x-2)

A . 10 B . 100 C . 295 D . 48
以下程序的功能是(      )

dim X AS double

X=inputbox(“x=”)

if X<0 then

    X=-X

endif

print X

A .   输入X,输出X的相反数 B .   输入X,输出X的绝对值 C .   输入X,输出X的平方根 D .   输入X,判断其是否小于0,并输出X
递归就是自己调用自己,它是设计和描述算法的一种有力工具,常常用来解决比较复杂的问题。为求解规模为N的问题,设法将它分解成规模较小的问题,从小问题的解容易构造出大问题的解,并且这些规模问题较小的问题也能采用同样的分解方法,分解成规模更小的问题,并能从这些更小问题的解构造出规模较大问题的解。一般情况下,规模N=1时,问题的解是已知的。已知:从1到n的连续自然数相乘的积、叫做阶乘、用符号n!表示。如5!=1×2×3×4×5,规定0!=1。我们用递归算法可以较容易求n的阶乘。求n的阶乘算法可以描述如下:

n!=n*(n-1)!   (n-1)!=(n-1)*(n-2)!   (n-2)!=(n-2)*(n-3)!

2!=2*1!    1!=0!     0!=1

如果把n!写成函数形式,即f(n),f(n)=n*f(n-1)。如f(5)就是表示5!,求5!的过程可以写成如下形式:

f(5)=5*f(4)   f(4)=4*f(3)   f(3)=3*f(2)   f(2)=2*f(1)   f(1)=1

(问题求解)在python中用递归算法求1!+2!+……+n!(n的值为整数,从键盘输入)。请阅读如下程序,在空白处填写适当的表达式或语句,使程序完整。

def f(n):

if n==0:

    return 1

else:

    return

s=0

n=int(input("请输入n:"))

for i in:

    s=

print(s)

从2022年1月起,浙江省的选考成绩将采用新的一分一赋的赋分制,赋分等级与比例如图1所示。

赋分具体步骤为:

第一步,将卷面得分按人数比例划分为20个赋分区间,得出每个区间卷面得分的上限、下限。(说明:每个赋分等级人数=总人数×每个赋分等级比例(结果四舍五入取整) ;当卷面得分相同但人数超出该等级人数时,则减少下一档的人数。)

第二步,对每个区间的卷面得分进行等比例转换成赋分,公式为:

其中,s2、s1为卷面得分区间的上限和下限,s为待转换卷面得分;t2、t1为赋分区间的上限和下限,t为卷面得分等比例转换后的赋分。

第三步,将转换后的赋分t取整(小数部分四舍五入)。

编写VB程序,实现成绩赋分功能:在列表框List1中显示某市所有学生的考号,原始成绩(无0分,降序排列)和名次(同分同名),单击“成绩赋分”按钮Command1后,赋分成绩按从高到低的顺序显示在列表框List2中。程序界面如图2所示。

  1. (1) 若赋分区间为87-85,其对应的卷面得分区间在84-81,某考生的卷面得分为83,则通过比例公式转换,该考生的等级赋分为分 。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n = 18000      '总人数

    Dim kh(1 To n) As String    '学生考号

    Dim cj(1 To n) As Single     '原始成绩

    Dim cj2(1 To n) As Integer    '赋分成绩

    Dim mc(1 To n) As Integer '原始成绩的排名

    Dim pro(1 To 20)As Single    '每个等级的人数比例

    Dim t(1 To 40) As Integer    '每个等级赋分区间的上限和下限

    Dim s(1 To 40) As Single     '每个等级卷面得分的上限和下限

    Dim num(1 To 20) As Integer

    Private Sub Form_ Load()

        '从数据库中读取数据,将考号、原始成绩分别存储在数组kh和数组cj中

        '将每个等级的比例存入数组pro中

        '将每个赋分区间的上限、下限存入数组t中(如t(1)、t(2) 分别存储等级1的赋分上限100, 下限97)

    '将数组cj降序排列,计算出名次存入数组mc中,并显示在List1中,代码略

    End Sub

    Private Sub Command1_Click()

        Dim flag As Boolean, k As Integer, i As Integer

        num(1) = Int(pro(1) * n + 0.5)

        For i=2 To 20

            num(i) =

        Next i

        num(20) = n

        k=1:flag=True:i=1

        Do While i<=n       '划定每个等级相应的卷面得分的上限和下限

            If me(i) <num(k) Then

                If flag Then s(2 * k- 1) = cj(i)

                flag = False

                i=i+1

            ElseIf  Then

                s(2 * k) = cj(i)

                flag = True

                i=i+1

            Else

                

                flag = True

                k=k+1

            End If

        Loop

        If s(2*k)=0 Then s(2*k)=cj(n)

        '根据比例转换公式计算每个考生的赋分结果,存入数组cj2中,代码略。

        For i= 1To n

            List2.AddItem kh(i) +”” + Str(cj(i)) +”” + Str(cj2(i))

        Next i

    End Sub

COD(化学需氧量)是衡量水质污染程度的重要指标之一,污水处理时根据污水的COD指标来计算COD去除剂的投放量。

程序界面如图1所示,在本框Text1中输入COD指标,单击“计算投放量”按钮(Command1)后,程序根据COD指标计算出合适的COD去除剂投放量,并在标签Label3中输出计算结果。

污水处理厂根据COD指标投放COD去除剂的标准如下表所示:

当前COD指标X

根据COD指标应投放COD去除剂的剂量

X<50

10

X≥50并且X≤500

X>500

3X

图 1

图2

  1. (1) 在设计界面时,应使用图2所示“控件工具箱”中的(填写相应编号)添加“计算投放量”按钮。
  2. (2) 为实现上述功能,请在划线处填入合适代码。

    Private Sub Command1_Click( )

        Dim x As Single,s As Single

        x =Val(Text1. Text)

        If x < 50 Then

            s=10

        ElseIf 

           

        Else

            s=3*x

        End If

        Label3. Caption= 

    End Sub

有如下VB程序段:

x = 4095 : s1 = "ABCDEFGHIJ" : s2 = "abcdefghij"

ret=""

Do While x > 0

    r = x Mod 10

    If r Mod 2 = 1 Then

        ret = Mid(s1, r + 1, 1) & ret

    Else

        ret = ret & Mid(s2, r + 1, 1)

    End If

    x = x \ 10

Loop

Text1.Text = ret

执行该程序段后,文本框Text1中显示的内容为(   )

A . JFae B . JFea C . eaJF D . EAfj
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁x、鸡母y、鸡雏z各几何?

问题:请根据问题,编写程序,使得程序最终能够输出百钱买百鸡所有合理方案。

小林编写了一个用于1至9之间整数加减乘除运算的小程序,具体功能如下:在文本框Text1中输入一个算术表达式(该表达式仅包含1至9之间的整数和加减乘除运算符,其中最后一个运算符肯定是乘或除,且乘或除运算符的前和后一个运算符仅可能为加减或没有),单击“计算”按钮Command1,将运算结果显示在Label2中。程序运行界面如图所示,实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 将窗体标题更改为“简单算术运算",应修改窗体的属性的属性值。
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_ Click()

        Dims As String, c As String, i As Integer

        Dim sum As Single, sum1 As Single, sum2 As Single, k As Integer,j As Integer

        s = Text1.Text : sum2=0:k= 1

        For i= 1 To Len(s)

            c=

            If c= "*" Or c= "/" Then

                If c="*" Then

                    sum = Val(Mid(s,i+ 1, 1)) * Val(Mid(s,i- I, 1))

                Else

                    sum = Val(Mid(s, i- 1, 1))/ Val(Mid(s,i+ 1,1))

                End If

                j=i-2

                Do While

                    c = Mid(s,j, 1)

                    If c="+" Then sum1 = Val(Mid(s,j-1, 1)) + sum

                    If c="-" Then sum1 = Val(Mid(s,j- 1, 1)) - sum

                    sum=sum1

                    j=j- 1

                Loop

                If k=1 Then

                    sum2 = sum2 + sum

                Else

                    c= Mid(s, k, 1)

                    If c =“+" Then sum2 = sum2 + sum

                    If c="" Then sum2 = sum2 - sum

                End If

                k=

            End If

            sum=0

        Next i

        Label2.Caption = sum2

    End Sub

  3. (3) 加框处的代码有错误,请改正。
有如下Python程序段:

s="水果5fRU2IT!"

ans-res="

for x in s:

    if "a"<=x<="z":

        ans=ans+chr (ord(x) -32)

    elif "A"<=x<="Z":

        ans=ans+chr (ord(x) +32)

    elif "0"<=x<="9":

        res=res+x

t-ans+res

print(t)

程序执行后,输出的结果是(    )

A . 5fRU2IT B . 5Fru2it C . Fruit52 D . 52Fruit
编写一个“人民币小写转大写”的程序,实现功能如下:从键盘输入待转换的小写金额(不得超过9位数),输出其大写金额。运行界面如图所示:

dx={"0":"零","1":"壹","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖"}

dw="亿仟佰拾萬仟佰拾元"

money=input("请输入金额(整数,不得超过9位):")

zh=""

t=""

if    ①   :

    print("输入的数据超出所能转换的范围。")

else:

    for i in range(0,len(money)):

        t=   ②       #取出第i位小写对应的大写

        dwz=len(dw)-len(money)+i      # 计算该小写数字对应的单位在dw中的索引号  

            ③  

print(money,"的大写为:",zh, "整")

  1. (1) 为实现上述功能,请在划线处填入合适代码。

     ② ③ 

  2. (2) 若输入的金额为20,则输出的结果是
输入100个学生的成绩,统计大等90的人数,大等80小于90的人数,大等70小于80的人数,大等60小于70的人数,不及格的人数.

PRIVATE SUB FORM CLICK()

    DIM X AS SINGLE

    J=0 : B=0: Q=0: L=0: Y=0

    FOR I=1 TO 

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

        SELECT CASE

            CASE  

                J=J+1

            CASE IS>=80

                B=B+1

            CASE IS>=70

                Q=Q+1

            CASE

                L=L+1

            CASE 

                Y=Y+1

         

   

END SUB

两个长度相同的字符串s1和s2,若所含字符及各字符的数量均相等时可以归为一类。如字符串“ABDAC”与字符串“AABCD”可以归为一类,与“AABBC”不可以归为一类。实现该功能的VB程序段如下:

For i=1 To Len(s1)

    c= Mid(s1, i, 1)

    j=1

    Do While j <= Len(s2)

        If c=Mid(s2, j, 1) Then

            s2=

            Exit Do     '退出 Do循环

        Else

            j=j+1

           If j=Len(s2)+1 Then

               Label1.Caption="不可以归为一类!"

               Exit For     '退出For循环

            End If

        End If

    Loop

Next i

If i=  Then Label1.Caption="可以归为一类!"

加框处应填写的代码是(    )

A . ①Mid(s2, i, j- 1) + Mid(s2, j,  Len(s2)-j)   ②Len(s1) B . ①Mid(s2, 1, j- 1) + Mid(s2, j+1, Len(s2)-j)   ②Len(s1)+ 1 C . ①Mid(s2, 1, j- 1)+ Mid(s2, j+1, Len(s2)-j)   ②Len(s1) D . ①Mid(s2, i, j-1)+ Mid(s2, j, Len(s2)-j)   ②Len(s1)+ 1
阅读下图程序,分析程序意义,写出运行结果。

程序运行后,依次输入:12 35 9 11 23 88 13 19 29 55

运行结果是:

用python编辑器打开“Y:\111”下的文件“值班.py”,进行以下操作并保存结果。
  1. (1) 请填空完善该程序,实现功能:某医院内科有a,b,c,d,e,f,g七位医生,他们在一星期内每天值一次班,排班的要求为:

    1)a医生值班儿比C医生晚一天

    2)D医生值班儿比e医生晚两天

    3)B医生值班儿笔记医生早三天

    4)F医生值班儿日在BC医生值班日之间,且在星期四。打印出每个医生的值班表。

    某医院内科有a,b,c,d,e,f,g七位医生,他们在一星期内每天值一次班,根据排班要求打印出值班表。

    # 用列表结构列出Monday~Sunday

    days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday",]

    for a in range(7):

      for b in range(7):

        if a!=b:

          for c in range(7):

            if(c!=a)and(c!=b):

              for d in range(7):

                if(d!=a)and(d!=b)and(d!=c):

                  for e in range(7):

                    if(e!=a)and(e!=b)and(e!=c)and(e!=d):

                      for f in range(7):

                        if(f!=a)and(f!=b)and(f!=c)and(f!=d)and(f!=e):

                          for g in range(7):

                            if(g!=a)and(g!=b)and(g!=c)and(g!=d)and(g!=e)and(g!=f):

                            #用条件表达式表示出符合要求的排班

                            if(a==c+1)and(d==)and(b==g-3)and(f>b)and(f<c)and():

                            #打印输出每个医生的排班结果

                          print("a医生:",,'\n')

                      print("b医生:",days[b],'\n')

                  print("c医生:",days[c],'\n')

              print("d医生:",days[d],'\n')

          print("e医生:",days[e],'\n')

        print("f医生:",days[f],'\n')

    print("g医生:",days[g],'\n')

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

最近更新