作业帮 > 综合 > 作业

VB编程:输入一个数,求它的自然数对,

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/05/01 16:16:37
VB编程:输入一个数,求它的自然数对,
提示:自然数对是指两个自然数和与差都是平方数,如8和17的和是25,差是9,它们都是平方数 则8和17就称为自然数对.
VB编程:输入一个数,求它的自然数对,
Private Sub Command1_Click()
Dim a As Long
Dim i As Long
Dim s As Boolean
s = True
a = InputBox("请输入一个自然数","输入")
'--------以下为判断自然数
If Not IsNumeric(a) Then Exit Sub '判断输入的是否是数字
If Fix(a) a Then Exit Sub '判断是否为整数
If a < 0 Then Exit Sub '判断是否小于0
'--------以上为判断自然数
Do While s
i = i + 1
If Fix(Sqr(i + a)) = Sqr(i + a) Then
If i - a > 0 Then
If Fix(Sqr(Abs(i - a))) = Sqr(Abs(i - a)) Then s = False
End If
End If
Loop
Print i
End Sub
再问: 谢谢,能运行。我想问i-a>0为什么不能不写?
再答: 不好意思,这里写错了,应该是 i-a0 你改一下吧,如果不写的话比如求4的自然对数就是0了,如果求自然对数可以是0的话这个语句就可以删除
再问: 嗯,改了。可是如果把这句话去除,它提示我说 end if没有块if。。。但我觉得没什么错呢
再答: 你对比一下,去掉那行的话需要相对去掉一个END IF Private Sub Command1_Click() Dim a As Long Dim i As Long Dim s As Boolean s = True a = InputBox("请输入一个自然数", "输入") '--------以下为判断自然数 If Not IsNumeric(a) Then Exit Sub '判断输入的是否是数字 If Fix(a) a Then Exit Sub '判断是否为整数 If a < 0 Then Exit Sub '判断是否小于0 '--------以上为判断自然数 Do While s i = i + 1 If Fix(Sqr(i + a)) = Sqr(i + a) Then 'If (i - a) 0 Then If Fix(Sqr(Abs(i - a))) = Sqr(Abs(i - a)) Then s = False 'End If End If Loop Print i End Sub
再问: 嗯 这样对比我也明了。可还有点纠结,每个if都要有个end if吗? 还是在then后直接打语句,不另起一行就可省略一个end if? 因为我自己修改了这里 If Fix(Sqr(Abs(i - a))) = Sqr(Abs(i - a)) Then s = False End If End If End If 只是把s = False打在下一行,也可运行的。还有,若输入一个没有自然数对的数,就陷入死循环了吧?如果想输出“无自然数对”可行吗?麻烦再帮我看看。感激不尽~~
再答: 第一问,是的,没有问题 第二问,是的,你可以设定循环范围的,比如数字范围为0~+32767 Private Sub Command1_Click() Dim a As Long Dim i As Long Dim s As Boolean s = True a = InputBox("请输入一个自然数", "输入") '--------以下为判断自然数 If Not IsNumeric(a) Then Exit Sub '判断输入的是否是数字 If Fix(a) a Then Exit Sub '判断是否为整数 If a < 0 Then Exit Sub '判断是否小于0 '--------以上为判断自然数 Do While s If i > 32767 Then i=0:exit do '设定数字范围 i = i + 1 If Fix(Sqr(i + a)) = Sqr(i + a) Then 'If (i - a) 0 Then If Fix(Sqr(Abs(i - a))) = Sqr(Abs(i - a)) Then s = False 'End If End If Loop Print i End Sub 第二种,