活动三 输出给定范围内所有被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 输出界面