上机试题与答案Word下载.docx
《上机试题与答案Word下载.docx》由会员分享,可在线阅读,更多相关《上机试题与答案Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
&
m&
"
个数:
)
m=m+1
n=InputBox("
查找的数是:
i=0:
flag=False
Do
Ifa(i)=nThen
j=i:
flag=True
Fork=jToUBound(a)-1
a(k)=a(k+1)
Nextk
ReDimPreservea(UBound(a)-1)
i=i-1
EndIf
i=i+1
LoopWhile(i<
=UBound(a))
Ifflag=FalseThen
MsgBoxn&
不在该数组中"
Else
删除"
n&
后的数组是:
Fori=0ToUBound(a)
3.数组a中存放着升序排列的数据,使用array赋值,将inputbox输入的新数插入到数组中,插入后数组仍有序。
要求利用动态数组,能够实现多次插入
n=8:
ReDima(n)
a=Array(5,15,23,52,68,88,90,99)
n=n+1:
ReDimPreservea(n)
m=InputBox("
请输入要插入的数据:
Fori=1Ton-1
Ifm<
a(i)ThenExitFor
Fork=nToi+1Step-1
a(k)=a(k-1)
Nextk
a(k)=m
Fori=1Ton
4.6个评委为4位歌手打分,分数介于1-100之间。
去掉一个最高分,一个最低分,求出每位选手的最后得分。
将4位歌手得分从高到低排列输出,同时输出该选手的编号。
如:
歌手395分歌手187分歌手480分歌手270分
OptionBase1
PrivateTypegeshou
xuhaoAsString
fenshu(6)AsInteger
scoreAsInteger
pingjunAsInteger
EndType
Dimsinger(1To4)Asgeshou
PrivateSubCommand1_Click()
Fori=1To4
Forj=1To6
singer(i).fenshu(j)=Int(Rnd*100)
singer(i).xuhao="
歌手"
i
Next
Next
Callpaixu
PrivateSubpaixu()
DimpAsgeshou
Fori=1To4
Forj=1To5
Fork=jTo6
Ifsinger(i).fenshu(j)>
singer(i).fenshu(k)Then
t=singer(i).fenshu(j)
singer(i).fenshu(j)=singer(i).fenshu(k)
singer(i).fenshu(k)=t
EndIf
Forj=2To5
singer(i).score=singer(i).score+singer(i).fenshu(j)
singer(i).pingjun=singer(i).score/4
Fori=1To3
Forj=iTo4
Ifsinger(i).score<
singer(j).scoreThen
p=singer(i):
singer(i)=singer(j):
singer(j)=p
Printsinger(i).xuhao&
得分:
singer(i).pingjun
10个评委给10个选手打分
n=UBound(b)
Forj=1To10
a(i,j)=Val(InputBox("
请第"
j&
位评委给第"
i&
位选手打分:
))
Nextj
max=a(i,1):
sum=0
min=a(i,1):
ave=0
Ifa(i,j)>
maxThenmax=a(i,j)
Ifa(i,j)<
minThenmin=a(i,j)
sum=sum+a(i,j)
Nextj
ave=(sum-max-min)/(n-2)
b(i)=ave
Forj=i+1Ton
Ifb(i)<
b(j)Then
t=b(i):
b(i)=b(j):
b(j)=t
选手的得分由高到低为:
Printb(i);
5.编写函数求一元二次方程ax2+bx+c=0的解。
要求考虑方程有两相等实根、两不等实根和两个虚根的情况。
DimaAsSingle,bAsSingle,cAsSingle
DimsAsSingle
a=InputBox("
请输入a"
b=InputBox("
请输入b"
c=InputBox("
请输入c"
s=b^2-4*a*c
Ifs<
0Then
MsgBox("
方程无解"
ElseIfs=0Then
Print-b/2*a
Print((-b)+Sqr(s))/2*a&
((-b)-Sqr(s))/2*a
6.任意输入一组字符,统计出大写字母多少个,小写字母多少个,数字多少个?
要求用过程实现。
Calltongji(a,n,m,o)
Print"
数字:
Chr(13)&
小写:
大写:
o
PrivateSubtongji(aAsString,nAsInteger,mAsInteger,pAsInteger)
Fori=1ToLen(a)
IfAsc(Mid(a,i,1))>
47AndAsc(Mid(a,i,1))<
58Then
n=n+1
ElseIfAsc(Mid(a,i,1))>
96AndAsc(Mid(a,i,1))<
123Then
64AndAsc(Mid(a,i,1))<
91Then
p=p+1
7.随机产生一个5*5的矩阵,将主对角线和次对角线元素都置为1,并求出矩阵的四周元素之和,显示在列表框中。
Dima(5,5)AsInteger
DimsAsInteger
Fori=1To5
Ifi=jOri=6-jThen
a(i,j)=1
Else
a(i,j)=Int(Rnd*1000)
Text1.Text=Text1.Text&
a(i,j)
s=s+a(i,j)
vbCrLf&
vbCrLf
List1.AddItem(s)
8.编写一个函数,能将字母按下列规律译成密码:
A<
-->
Za<
z
B<
Yb<
y
即第1个字母与第26个字母互换,第i个字母与第(26-i+1)个字母互换。
在文本框中任意输入一个字符串,调用该函数将密码显示在另一个文本框中。
Dims1AsString
s1=Text1.Text
Text2.Text=convert(s1)
PrivateFunctionconvert(s1AsString)AsString
Fori=1ToLen(s1)
IfAsc(Mid(s1,i,1))<
91AndAsc(Mid(s1,i,1))>
64Then
convert=convert&
Chr(91-Asc(Mid(s1,i,1))+64)
ElseIfAsc(Mid(s1,i,1))<
123AndAsc(Mid(s1,i,1))>
96Then
Chr(123-Asc(Mid(s1,i,1))+96)
EndFunction
9.编写2个函数,分别求两个正整数的最大公约数和最小公倍数,用户任意输入两个数,采用函数嵌套调用,该函数将它们在窗体显示。
Text1="
:
Text2="
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13ThenText2.SetFocus
PrivateSubText2_KeyPress(KeyAsciiAsInteger)
DimmAsInteger,nAsInteger,rAsInteger,tAsInteger,x
Cls
IfKeyAscii=13Then
m=Text1.Text
n=Text2.Text
nThen
t=m:
m=n:
n=t
r=mModn
Whiler<
>
0
n=r:
Wend
Print
0Orn<
x=MsgBox("
请输入正数"
vbCritical+vbOKCancel)
Ifx=vbCancelThen
End
Text1="
Text1.SetFocus
PrintText1.Text&
和"
Text2.Text&
的最大公约数是:
;
n
10.编写计算阶乘的Function过程,利用ex的下列公式计算e(直到最后一项小于10-6为止)的近似值。
ex≈1+x/1!
+x2/2!
+x3/3!
+…+xn/n!
OptionExplicit
DimxAsInteger,nAsInteger,sAsDouble
x=InputBox("
请输入一个数:
n=1:
s=1
s=s+x^n/(jiecheng(n))
LoopUntilx^n/(jiecheng(n))<
10^(-6)
Prints
PublicFunctionjiecheng(nAsInteger)AsDouble
DimiAsInteger,sAsDouble
s=1
s=s*i
jiecheng=s
11.输入整数N,显示具有N行的杨辉三角形,要求按正三角形的形式在图片框中显示。
OptionExplicit
WindowState=2
Dima(),nAsInteger,iAsInteger,jAsInteger,gAsInteger,eAsInteger
ReDima(n,n)
e=80
e=e-5:
g=e
Forj=1Ton
Ifj>
iThen
a(i,j)=0
Ifi=jThen
a(i,j)=a(i-1,j)+a(i-1,j-1)
Ifa(i,j)=0Then
ExitFor
Picture1.PrintTab(g);
a(i,j);
g=g+10
Picture1.Print
PrivateSubPicture1_Click()
12.编写一个过程,输出以下菱形图形:
A
BBB
CCCCC
DDDDDDD
主程序输入一个奇数(>
=3),调用过程在窗体上输入图形。
DimnAsInteger
IfnMod2=0Orn<
=3Then
错误"
Calldraw(n)
Subdraw(nAsInteger)
Fori=1To(n+1)/2
s=Chr(64+i)
PrintTab(41-i+1);
String(2*(i-1)+1,s)
c=1
Forj=(n-1)/2To1Step(-1)
c=c+1
s=Chr(64+i-c)
PrintTab(41-i+c+1);
String(2*(j-1)+1,s)
13.编写一个将十进制转换为二进制字符串输出的函数。
调用函数计算用户输入一个十进制数,在文本框中输出二进制值。
输入数据为负数,应该将符号位输出
如-13结果-1101
Dima()
PrivateFunctionconvert(y)AsString
DimiAsInteger
i=1
ReDima(i)
x=Abs(y)
DoWhilex<
ReDimPreservea(i)
a(i)=xMod2
Ifa(i)=1Then
x=(x-1)/2
x=x/2
Loop
ReDimPreservea(UBound(a))
Ify<
Fori=1ToUBound(a)
a(i)
convert="
-"
convert
DimyAsInteger
Text1.Text="
y=InputBox("
请输入十进制数字"
Text1.Text=convert(y)
14.输入一个整数N,产生N个随机数(范围1—10*N),然后采用任何2种算法实现由小到大的排序。
将排序前后的数据显示出来。
Dima()AsInteger,nAsInteger
n=InputBox("
请输入数列项数"
Fori=1Ton
a(i)=Int(Rnd*10*n+1)
Fori=1Ton-1
Ifa(i)>
a(j)Then
PrivateSubCommand2_Click()
Forj=1Ton-i
Ifa(j)>
a(j+1)Then
t=a(j):
a(j)=a(j+1):
a(j+1)=t
15.
编写程序,在窗体上输出3~100之间的所有素数。
要求每行显示4个数。
DimfAsBoolean,cAsInteger
Fori=3To100
f=False
Forj=2ToInt(Sqr(i))
IfiModj=0Then
f=True:
Iff=FalseThen
Printi;
IfcMod4=0Then
16.把文本框1、文本框2指定的范围内的所有素数添加到列表框中,并选中列表框数据中最后一位是9的所有数据(设定selected属性),把它们的和值输出。
PublicaAsInteger
PrivateFunctionfact(n)AsLong
Ifn=1Then
fact=1
ElseIfn=2Thenfact=1
Else:
fact=fact(n-2)+fact(n-1)
请输入n"
Printfact(n)
PrivateFunctions(n)AsLong
s1=1:
s2=1
Fori=1Ton-2
s=s1+s2:
t=s2:
s2=s:
s1