a=3;b=4;
if a<b then a=0;
else a=1;
end if
提示:本题“除 2 取余倒排法”的方法将十进制转化为二进制,算法如下: 例如十进制数“97”转化为二进制的过程如右图所示:
因此“97”二进制值为:1100001
Dim a As Integer, c As Integer, w As Integer, i As Integer
Dim s As String, k As String
c = 0
For m = 1 To 100
k = ""
i = 2 * m
Do While i > 0
a=i Mod 2
k = str(a) + k
Loop
For n = 1 To Len(k)
s = Mid(k, n, 1)
If s = "1" Then w = w + 1
Next n
If w = 4 Then
c = c + 1
End if
Next m
Text1.Text = Str(c) End Sub
实现上述功能的VB程序如下,请回答下列问题:
Function zf(s As String) As Boolean
zf = False
If s >= "A" And s <= "Z" Or s >= "a" And s <= "z" Then
①
End If
End Function
Private Sub rev_Click()
Dim s As String, ch As String, rv As String, rv1 As String
Dim i As Integer, j As Integer, k As Integer
s = Text1.Text
rv = "" : i = 1
Do While True
ch = Mid(s, i, 1)
Do While Not zf(ch) And i < Len(s)
rv = rv + ch
i = i + 1
ch = Mid(s, i, 1)
Loop
j = i
ch = Mid(s, j, 1)
Do While zf(ch) And j <= Len(s)
②
If j > Len(s) Then Exit Do
ch = Mid(s, j, 1)
Loop
rv1 = ""
For '改错
rv1 = Mid(s,k,1)+rv1
Next k
rv = rv + rv1
If j <= Len(s) Then rv = rv + Mid(s, j, 1)
i = j + 1
If i > Len(s) Then Exit Do
Loop
Text2.Text = rv
End Sub
① ②
Private Sub Command1_Click()
Dim s As String, s1 As String, s2 As String
Dim c As Integer, k As Integer, i As Integer, flag As Boolean
flag = False: c = 0
s = Text1.Text
For i = 1 To Len(s)
If Mid(s, i, 1) = “=”Then Exit For
Next i
s2 = Mid(s,i+1,Len(s)- i)
k = Len(s1)
For i = 1 To k-1
If Val(Mid(s1, 1, i))+Val(Mid(s1, i + 1, k-i))=Val(s2) Then
List1.AddItem “第”+Str (c)+“种答案:”+Mid(s, 1, i)+“+”+Mid(s, i + 1, Len (s)-i)
flag = True
End If
Next i
IfThen List1.AddItem “没有答案!”
End Sub
合并规则如下:
⑴当字符串1的长度大于字符串2的长度时,将字符串2中的各个字符从左侧依次插入到字符串1中的各字符后方。例如字符串1为“abcdef”,字符串2为“123”时,合并后的字符串为“a1b2c3def”
⑵当字符串2的长度大于等于字符串1的长度时,将字符串1中的各个字符从右侧依次插入到字符串2中的各个字符后方。例如字符串1为“abcd”,字符串2为“12345”时,合并后的字符串为“12d3c4b5a”。
程序运行界面如图所示。
Private Sub Commandl_Click ()
Dim sl As String, s2 As String, ans As String
Dim n As Integer, m As Integer, i As Integer
s1=Text1. Text
s2=Text2. Text
m=Len (s1)
n=Len (s2)
If m>n Then
For i=1 To n
ans=ans+Mid (sl, i, 1)+Mid (s2, i, 1)
Next i
ans=ans +Mid (sl, i, m-n)
Else
For i=1 To m
ans= ① +Mid (s1, i, 1)+ans
Nest i
ans=Mid (s2, 1, n-m)+ans
②
Label3. Caption=“合并为”+ans
End Sub
① ②
例如,读取的数据为 2、3、15、25、10、14、1、5、30、60、15、25,过程是:
⑴设置区间信息为[2,3],[15,25],[10,14],[1,5],[30,60],[15,25];
⑵按区间左端点升序排序,得到J区间信息为
[1,5],[2,3],[10,14],[15,25],[15,25],[30,60],[15,25];
⑶合并区间,得到[1,5],[10,25],[30,60]。说明:区间[1,5]和[2,3]合并为[1,5],区间[10,14]和[15,25]合并为[10,25],区间[10,25]和[15,25]合并为[10,25],因此合并后的结果为:
[1,5],[10,25],[30,60]三个区间。
程序功能如下:单击“读数据库”按钮Command1,程序从数据库读取数据,输出在文本框Text1中;单击“开始处理”按钮Command2,程序进行区间排序,并进行区间合并操作,操作后的结果输出在文本框Text2中。程序运行结果如图所示。
实现上述功能的VB程序如下,请回答下列问题:
Dim a(l To 100) As Integer ′数组a存储合并前的区间
Dim b(l To 100) As Integer ′数组b存储合并后的区间
Dim n As Integer ′n表示区间个数
Private Sub Command1_Click()
Dim s1 As String, i As Integer
′读取数据,并存储到数组a中,并输出在文本框Text1中,代码略
End Sub
Private Sub Command2_CIick()
Dim s2 As String, i As Integer, j As Integer, k As Integer
Dim n As Integer, t As Integer, x As Integer
For i=1 To n-1
For j=1 To 2 * n-2 * i Step 2
If ① Then
t=a(j): a(j)=a(j+2): a(j+2)=t
t=a(j+1): a(j+1)=a(j+3): a(j+3)=t
End If
Next j
Next i
k=2
b(1)=a(1): b(2)=a(2)
i=2: j=3
Do While j <=2 * n
If b(i) >=a(j) Then
If b(i) <=a(j+1) Then ②
Else If b(i)+1=a(j) Then
b(k)=a(j+l)
Else
k=k+1:③
k=k+1: b(k)=a(j+1)
i=i+2
End If
j=j+2
Loop
For x=1 To k-2 Step 2
s2=s2 & “[”& b(x) & “,” & b(x+1) & “]” & “,”
Next x
s2=s2 & “[” & b(x) & “,” & b(x+1) & “]”
Text2.text=s2
End Sub
import math
a=float(input("请输入方程系数a:"))
b=float(input("请输入方程系数b:"))
c=float(input("请输入方程系数c:"))
d=b*b-4*a*c
if :
x1=(-b+math.sqrt(d))/(2*a)
x2=(-b-math.sqrt(d))/(2*a)
print("方程有两个不同的解",x1,x2)
elif:
x1=-b/(2*a)
print("方程有两个相同的解",x1)
else:
print("方程无解")
现在我们来验证一个简单点的“1+1+1+1猜想”;在Text1中输入整数,单击“验证”按键Command1后,把此整数分解成任意四个素数之和的形式,并在List2中输出这四个素数。已知1≤n≤1000000。程序运行时,先求出1000000以内的所有素数,并输出到List1中。运行界面如图所示。
⑴在事件处理过程Form_Load( )中,用筛选法筛出了1~n范围内的所有素数,放置在数组p中。筛选算法是:从2开始,第一个未被筛掉的是2,2是素数,那么把2×2,2×3…,即所有2的倍数都筛掉,下一个未被筛掉的数是3,再把所有3的倍数筛掉……若下一个未被筛掉的是i,那么要把i×i,i×(i+1),i×(i+2)…筛掉,请把画线①、②处的代码补充完整。
⑵有了1~n范围内的素数表后,我们可以用枚举算法验证素数表中的四个数pa , pb , Pc , Pd。是否满足pa+pb+Pc+Pd=n。但是,范围过大,无法承受这么大的枚举量。因此我们考虑如何用哥德巴赫猜想来优化。显然n<8时是无解的,只需考虑n≥8时的情况。因为分解是任意的,那就用前两个素数2或3去分解n,余下部分用哥德巴赫的“1+1猜想”去验证即可。请把画线③、④处的代码补充完整。
Const maxn As Long=1000000 ‘这里最多验证一百万以内的“1+1+1+1猜想”
Dim p(maxn)As Boolean ‘p存放maxn以内的素数,p(i)=True表示i是素数
Private Sub Form_Load( )
Dim i As Long, j As Long, cnt As Long
For i=0 To maxn
p(i)=True
Next i
p(0)=False:p(1)=False
‘筛选法求素数表,对于maxn个数,最后一次只要筛去 的所有倍数即可
For i=2 To Int(Sqr(maxn))
If p(i)Then
For j=i To ①
p( ② )=False
Next j
End If
Next i
cnt=0
For i=1 To maxn
If p(i)Then
List1.Addltem Str(i):cnt=cnt+1
End If
Next i
Label1.Caption=maxn & "内的素数,共"& cnt & "个"
End Sub
Private Sub Command1_Click( )
Dim n As Long, i As Long
n=Val(Text1.Text):List2.Clear
If n<8 Then
List2.AddItem"Impossible":Exit Sub
Else If ③ Then ‘先用两个2去分解n
List2.Addltem"2"
List2.Addltem"2"
n=n-4
Else
List2.AddItem "2" ‘用2和3去分解n
List2.AddItem "3"
n=n-5
End If
For i=2 To n ‘余下部分用哥德巴赫的“1+1猜想”来验证
If ④ Then
List2.AddItem Str(i)
List2.Addltem Str(n-i)
Exit For
End If
Next i
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③;④。
s=Text1.Text: n=len(s): y=" "
For i = 1 To n\2
If Mid(s, i, 1) = Mid(s,n-i+1,1) Then
y = Str(i)+y
End If
Next i
若在文本框Text1中输入字符串“abc2008cba”,则y的值为( )
S = 0
For i = _____ to 3 step -1
S = S + i
Next i
该程序段运行后,语句S = S + i共执行了4次,则下划线处应是( )
① 处可填入的正确的表达式为
A.X%2==0 B.X%2!=0
C.X//2==0 D.X//2!=0
②