程序设计与实践(VB.NET)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

活动三 输出给定范围内所有被3、5、7整除的整数

活动简介

在键盘上输入一个正整数num,随后程序给出1至num之间所有能被3、5、7同时整除的整数。程序实现的界面如图3-28和图3-29所示。

图3-28 3、5、7整除程序界面

图3-29 显示指定范围内符合要求的数

活动实施

本程序实现的思想是:将指定范围内每个整数都进行条件测试,如果满足条件则将该整数加入待显示字符串内;若不满足则测试下一个整数,直到测试完所有范围内的整数。

本程序使用循环结构实现,程序界面中对象的属性见表3-7。

表3-7 输出给大范围内所有被3、5、7整除的整数程序界面对象的主要属性

试一试

1.在键盘上输入一个整数n,然后用对话框给出2至n之间所有的素数(素数是指大于1且只能被1和本身整除的正整数,如2、3、5、7等)。如图3-30和图3-31所示。在字符框内输入正整数时,单击“开始”,显示选择范围内的素数。

图3-30 素数检查程序界面

图3-31 素数检查程序运行时界面

提示

① 本题使用穷举法,对范围内的每个整数进行测试,符合条件的显示。

② 测试原理:先设置符号位flag = False,然后使用两个For循环,将当前值i与自i -1至2之间的所有整数进行Mod运算。若结果为0,则置flag = True,并跳出内循环循;否则进行下一个数的检测。

关键性代码如下。

    Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As
    System.EventArgs)Handles Button1.Click
    Dim i,j As Integer
    Dim s As String
    Dim flag As Boolean
    s = "1至" & n & "之间的素数有:" & vbCrLf
      For i = 2 To n
        flag = False
        For j = i -1 To 2 Step -1
            If i Mod j = 0 Then
              flag = True
              Exit For' 该语句的意思是跳出当前For循环
            End If
        Next j
        If flag = False Then
            s &= i & " "
        End If
      Next i
    MsgBox(s)
    End Sub

关于指示变量flag的使用:在很多情况下,我们会需要一个指示状态的量。如CPU内累加器在做加法运算时进位的问题。这时可以利用flag来表示进位:flag = True时,有进位,否则无进位。这种解决方法是程序设计中经常使用的,希望读者注意。

2.已知母鸡3元每只,公鸡2元每只,小鸡3只1元。现在A君有100元,且3种鸡都要买,请问A君如何能100元买100只鸡?程序界面如图3-32所示。

图3-32 百元百鸡程序界面

提示

① 本题使用穷举法,对范围内的每个整数进行测试,符合条件的显示。

② 由于有三个变量,故使用三重循环,设母鸡、公鸡、小鸡购买的只数分别为x、y、z。

关键性代码如下。

    For x = 1 To 100
    For y = 1 To 100
      For z = 1 To 100
        If(x + y + z = 100)And(x * 3 + y * 2 + z/3 = 100)Then
              s &= "x=" & x & " " & "y=" & y & " " & "z=" & z & vbCrLf
        End If
      Next
    Next
    Next

与“百元百鸡”问题相似的是“百元百张人民币”问题,有兴趣的读者可以试着自己编程实现。

3.输出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数的立方之和等于该数本身。例如,153就是一个水仙花数,因为153 = 13+53+33。如图3-33所示。

图3-33 程序界面

4.猴子吃桃子。小猴摘了一些桃,当天吃了一半多一个,第二天吃了剩下的一半多一个,以后每天如此。第七天小猴一看,只剩下一个桃了。问小猴一共摘了多少个桃?程序如图3-34所示。

图3-34 程序界面

分析:这是个递推问题。递推法(迭代法)就是将一个复杂的

计算过程转化为简单过程的多次重复,每次重复都在旧值上推出新值,由新值代替旧值。本题从最后一天推出前一天有几个桃,直到第一天有多少个桃。递推公式如下。

提示

    Dim  i,x As Integer
    x = 1
    Label1.Text = "第7天的桃子数为:1只" &vbCrLf
    For i = 6 To 1 Step -1
    x =(x + 1)* 2
    Label1.Text &= "第" & i & "天的桃子数为:" & x & "只" &vbCrLf
    Next i

5.编写程序,输出如图3-35所示的图案。

图3-35 输出界面