数字和字符处理题型分析.docx
《数字和字符处理题型分析.docx》由会员分享,可在线阅读,更多相关《数字和字符处理题型分析.docx(30页珍藏版)》请在冰豆网上搜索。
数字和字符处理题型分析
※数字和字符处理题型分析
(2)执行下面的程序,单击窗体后在窗体上显示的第一行结果是 [1] ,第三行结果是__[2]__。
PrivateSubCommand1_Click()
DimMystr,MyStr1,Mystr2AsString
MyStr1="B"
Fori=1To3
Mystr2=LCase(MyStr1)
MyStr1=MyStr1&Mystr2
Mystr=Mystr&MyStr1
PrintMystr
MyStr1=Chr(Asc(MyStr1)+i)
Nexti
EndSub
i
MyStr1
MyStr2
MyStr
打印
B
1
Bb
b
Bb
Bb
C
2
Cc
c
E
BbCc
BbCc
3
Ee
e
BbCcEe
BbCcEe
答案:
(1)Bb
(2)BbCcEe
分析:
Asc()函数只取第一个字符的数值。
7.下面是一个加密/解密程序,加密的算法是:
将原文中每个字符的ASCII代码加上该字符在原文中的位置数(设字符在原文中是第n个字符,在其位置是n被10除的余数,当余数为0时,其位置数为10。
例如原文字符串为“meetmeatsunset”,第一个字符“m”,其位置数为1,而“s”为第12个字符,其位置数是被10除的余数2,其余依次类推)作为密文字符的代码,再将密码字符逆序排列(例如ABCD,逆序排列为DCBA)即为密文。
解密算法是加密算法的逆运算。
OptionExplicit
PrivateSubCommand1_Click()'加密
DimencAsString,decAsString,iAsInteger
DimsAsString*1,nAsInteger
dec=Text1
Fori=1ToLen(dec)
s=Mid(dec,i,1)
(19)
Ifn=0Thenn=10
enc=Chr(Asc(s)+n)&enc
Nexti
Text2=enc
EndSub
PrivateSubCommand2_Click()'解密
DimencAsString,decAsString,iAsInteger
DimnAsInteger,sAsString*1,pAsInteger
enc=Text2
(20)
Fori=1Ton
s=Mid(enc,i,1)
p=nMod10
Ifp=0Thenp=10
dec=(21)
n=n-1
Nexti
Text1=dec
EndSub
答案:
n=iMod10n=Len(enc)Chr(Asc(s)-p)&dec
(4)运行下面的程序,单击窗体后在窗体上显示的第一行结果是 [1] ,第三行结果是 [2] 。
PrivateSubForm_Click()
DimmstAsString,mst1AsString,mst2AsString
DimiAsInteger
mst1="CeBbAa"
Fori=Len(mst1)To1Step-2
mst2=Mid(mst1,i-1,2)
mst=mst&mst2
Printmst
Nexti
EndSub
mst1
mst2
mst
i
打印
CeBbAa
Aa
Aa
6
Aa
Bb
AaBb
4
AaBb
Cc
AaBbc
2
AaBbc
答案:
(8)Aa
(9)AaBbCe
分析:
Mid()函数的操作方式是从后向前取字符。
(2)执行下面程序,第二行输出结果是 [1] ,第三行输出结果是 [2] 。
PrivateSubForm_Click()
DimchAsString,iAsInteger
ch="ABC"
Fori=1To3
ch=Mid(ch,2*i-1,1)+Left(ch,Len(ch))
Printch
Nexti
EndSub
ch
i
打印
ABC
1
Mid("ABC",1,1)+Left("ABC",3)
"A”+”ABC"
AABC
AABC
2
Mid("AABC",3,1)+Left("AABC",4)
"B"+"AABC"
BAABC
BAABC
3
Mid("BAABC",5,1)+Left("BAABC",5)
"C"+"BAABC"
CBAABC
CBAABC
答案:
(1)BAABC
(2)CBAABC
35.执行下面的程序,单击窗体后在窗体上显示的结果是___35___。
PrivateSubForm_Click()
DimStr1AsString,Str2AsString
DimStr3AsString,IAsInteger
Str1="e"
ForI=1To2
Str2=UCase(Str1)
Str1=Str2&Str1
Str3=Str3&Str1
Str1=Chr(Asc(Str1)+I)
NextI
PrintStr3
EndSub
I
Str1
Str2
Str3
打印
1
e
E
Ee
Ee
2
F
F
EeFF
FF
H
EeFF
(A)EeFF(B)eEFF(C)EEFF(D)eeFF
答案:
A
分析:
35.在窗体Form1上,有一个列表框控件List1,在窗体的Click事件中有如下代码:
PrivateSubForm_Click()
DimkAsInteger
DimentryAsString,itemAsString
entry="EDCBA"
Fork=Len(entry)To1Step-1
item=LCase(Mid(entry,k,1))&k
List1.AddItemitem
Nextk
EndSub
运行此程序,单击窗体后在窗体的列表框中显示的第四个列表项内容是___35___。
(A)b4(B)b2(C)d4(D)d2
答案:
D
分析:
K
entry
item
添加
5
EDCBA
a5
a5
4
b4
b4
3
c3
c3
2
d2
d2
1
e1
e1
1.执行下面的程序,在窗体上显示的输出结果的第一行是___thisisabook.___,第二行结果是___ThisIsABook.___。
OptionExplicit
PrivateSubForm_Click()
DimsAsString,iAsInteger,flagAsBoolean
s="THISISABOOK."
s=LCase(s)
Prints
flag=True
Fori=1ToLen(s)
IfMid(s,i,1)=""Then
flag=True
ElseIfflagThen
s=Left(s,i-1)&UCase(Mid(s,i,1))&Right(s,Len(s)-i)
flag=False
EndIf
Nexti
Prints
EndSub
s
i
flag
打印
THISISABOOK.
1
True
thisisabook.
thisisabook.
Thisisabook.
False
5
True
ThisIsabook.
6
False
8
True
ThisIsAbook.
9
False
10
True
ThisIsABook.
11
False
ThisIsABook.
分析:
用flag来控制进程的走向,
4.执行下面的程序,图片框第一行内容是CBA,图片框第二行内容是ABC。
OptionExplicit
PrivateSubCommand1_Click()
DimSAsString
S="ABC"
BackS
Picture1.Print
Picture1.PrintS
EndSub
PrivateSubBack(StAsString)
IfLen(St)>1Then
Back(Right(St,Len(St)-1))
EndIf
Picture1.PrintLeft(St,1);
EndSub
St
层次
打印
ABC
一
BC
二
C
三
C
BC
二
CB
ABC
一
CBA
0
ABC
分析:
这是递归过程。
3.执行下面的程序,单击窗体上的按钮,则在窗体上显示的第一行是 (4) ,第二行是 (5) ,第三行是 (6) 。
PrivateSubCommand1_Click()
DimsAsString,tAsString
DimkAsInteger,mAsInteger
s="BASICY"
k=1:
m=k
Fork=1ToLen(s)Stepm+1
t=t&Chr(Asc(Mid(s,m,1))+k)
k=k+1
IfMid(s,k,1)="Y"ThenExitFor
m=m+k
Printt
Nextk
Printm
EndSub
s
t
k
m
打印
BASICY
C
1
1
C
2
1+2=3
CW
4
3+5=8
CW
7
8
答案:
(4)C
(5)CW
(6)8
分析:
要记住Chr(65)="A",Chr(97)="a"。
Chr(x)返回以x为ASCII代码值的字符,Asc(x)为求单个字符ASCII代码函数,Mid(x,n1,n2)从x字符串左边第n1个位置开始向右起取n2个字符。
注意:
循环变量k在循环体参与了运算,实际步长为3。
变量m的赋值过程为1、3、8。
2.运行下面的程序,当单击窗体时,文本框Text1中的内容是
(2) ,文本框Text2中的内容是 (3) 。
PrivateSubForm_Click()
DimSt0AsString
DimSt1AsString,St2AsString
St0="ASFRSDCFRSKX"
CallChange_String(St0,St1,St2)
Text1.Text=St1
Text2.Text=St2
EndSub
PrivateSubChange_String(SAsString,St1AsString,St2AsString)
DimtemAsString,iAsInteger
Fori=1ToLen(S)‘1~12,实际上只循环了4次,读到“R”就退出了
tem=Mid(S,i,1)‘读取一个字符,A、S、F、R、S、……
Iftem="S"Then
St2=St2&"at"
ElseIftem="R"Then
St1=St1&"T"
ExitFor
Else
St1=St1&tem
St2=St2&tem
EndIf
Nexti
EndSub
答案:
i
S
tem
St1
St2
1
ASFRSDCFRSKX
A
A
A
2
S
"A"&"at"
Aat
3
F
"A"&"F"
AF
"Aat"&"F"
AatF
4
R
"AF"&"T"
AFT
(2)AFT
(3)AatF
分析:
Mid(x,n1,n2)从x字符串左边第n1个位置开始向右起取n2个字符。
过程Change_String的功能是,将字符串St中的“S”置换为“at”,“R”置换为“T”,并退出For循环。
3.执行下面程序,单击命令按钮Command1,则在窗体上显示的第一行是 (4) ,第二行是 (5) ,第三行是 (6) 。
PrivateSubCommand1_Click()
Dims_dataAsInteger,d_dataAsString,kAsInteger,pAsString
s_data=29
DoUntils_data<=5
p=s_dataMod5
d_data=d_data&p
s_data=s_data\5
Loop
d_data=d_data&s_data
Prints_data
Printd_data
p=""
Fork=Len(d_data)To1Step-1‘将d_data的内容颠倒过来
p=p&Mid(d_data,k,1)
Nextk
Printp
EndSub
答案:
s_data
p
d_data
k
打印
29
4
4
5
""
45
5
5
2
45
54
1
54
(4)5
(5)45
(6)54
分析:
本题的难点是字符串和数值之间按VB的默认的方式进行运算和赋值时的类型转换问题。
如果字符串表示数值,则可将字符串赋予数值变量。
也可将数值赋予字符串变量。
VisualBasic会自动强制变量为适当的数据类型。
在转换字符串和数值时要小心;如果传送字符串中的值不是数值,则在运行时会出错。
Mod运算符用来对两个数作除法并且只返回余数。
2.执行下面的Command1_Click事件过程后,Text1中显示的内容是 ,Text2中显示的内容是 。
PrivateSubCommand1_Click()
DimSAsString,IAsInteger
ConstChAsString="0123456789."
S="2L0A03U.1SI0V.11"
ForI=1ToLen(S)
IfInStr(Ch,Mid(S,I,1))=0Then‘视单个字符是否为数值型的
Text1=Mid(S,I,1)&Text1
Else
Text2=Text2&Mid(S,I,1)
EndIf
NextI
EndSub
S
I
Ch
Text1
Text2
2L0A03U.1SI0V.11
1
0123456789.
2
2
L
3
20
4
AL
5
200
6
2003
7
UAL
8
2003.
9
2003.1
10
SUAL
11
ISUAL
12
2003.10
13
VISUAL
14
2003.10.
15
2003.10.11
16
VISUAL
答案:
2003.10.1 IVISUAL
1.执行Command1_Click实践过程后,显示在窗体上的第一行内容是 【1】 ,第二行内容是 【2】 ,第三行内容是 【3】 。
PrivateSubCommand1_Click()
S="TUPMOC":
K=Len(S)
ForI=1ToK/2
Mid(S,I,K-2*(I-1))=Mid(S,I+1,K-2*I)&Mid(S,I,1)
‘将右边的内容替换左边的内容
PrintS
NextI
EndSub
答案:
【1】UPMOTC
答案:
【2】UMOPTC
答案:
【3】UMOPTC
I
K
S
Mid(S,I+1,K-2*I)
Mid(S,I,1)
Mid(S,I,K-2*(I-1))
1
6
TUPMOC
Mid(S,2,4)
“UPMO”
“T”
Mid(S,1,6)
“UPMOTC”
2
UPMOTC
Mid(S,3,2)
“MO”
“P”
Mid(S,2,4)
“UMOPTC”
3
UMOPTC
Mid(S,4,0)
“”
“O”
Mid(S,3,2)
“UMOPTC”
“UMOPTC”
分析:
当Mid函数放置在等号的左边的话,是将右边的内容替换坐标的内容。
~~
7.下面程序是把给定的16进制正整数转换为10进制数。
提示:
一个16进制正整数转换为10进制数的方法是直接用下面的幂级数展开运算而得。
(anan-1…a1)16=an*16n-1+an-1*16n-2+…+a1*160
OptionExplicit
PrivateSubForm_Click()
DimStAsString,DemAsLong
St=InputBox("输入一个十六进制数")
Dem=Convert(St)
PrintSt;"=";Dem
EndSub
PrivateFunctionConvert(SAsString)AsLong
DimNAsInteger,IAsInteger,SubstringAsString*1
DimPAsLong,KAsLong,Asc1AsInteger
N=______‘N的作用是字符串的长度(即数值的位数)Len(s)
P=16^N‘P的作用是十六进制数
ForI=1ToN
P=P/16
Substring=______‘Substring的作用是记录每个字符Mid(S,I,1)
SelectCaseSubstring
Case"0"To"9"
K=K+P*Val(Substring)‘K的作用是记录十进制的数,Val(Substring)为0~9
Case______ ’A~F的计算范围"A"To"F"或Else
Asc1=Asc(Substring)-Asc("A")+10‘Asc1记录A~F的代表的十进制数(10~15)
______‘参照上一句K=K+P*Val(Substring)K=K+P*Asc1
EndSelect
NextI
______‘将K值赋值给函数名返回主过程Convert=K
EndFunction
答案:
Len(s) Mid(S,I,1) "A"To"F"或Else K=K+P*Asc1 Convert=K
分析:
N的作用是字符串的长度(即数值的位数),Substring的作用是记录每个字符,K的作用是记录十进制的数。
5.执行下面程序,在文本框Text1中输入数据as235gh456yj后单击Command1按钮,在列表框List1中显示的第一行是(12)、第二行是(13);列表框List2中显示的第一行是(14)、第二行是(15)。
OptionExplicit
PrivateSubCommand1_Click()
DimstAsString,sAsString,kAsInteger
DimpAsString,num()AsInteger,iAsInteger,nAsInteger
s=Text1
Fori=1ToLen(s)
st=Mid(s,i,1)
Ifst>="0"Andst<="9"Then
p=p&st
Else
Ifp<>""ThenList1.AddItemp
p=""
EndIf
Nexti
Ifp<>""ThenList1.AddItemp
ReDimnum(List1.ListCount)
Fori=1ToUBound(num)
p=List1.List(i-1)
num(i)=Val(Left(p,Len(p)-1))
n=Val(Right(p,1))
List2.AddItemchange(num(i),n)
Nexti
EndSub
PrivateFunctionchange(xAsInteger,yAsInteger)AsInteger
DimpAsInteger,kAsInteger
Do
p=xMod10
change=change+p*y^k
x=x\10
k=k+1
LoopUntilx<=0
EndFunction
答案:
2354561329
s
st
p
List1
List1
p
num
(1)
n
num
(2)
as235gh456yj
a
235
23
5
s