Z=X+Y
CaseX=Y
Z=X*Y*SGN(Y)
CaseX>YANDY<>0
Z=X/Y
ENDSELECT
MSGBOX(“Z=”&STR(Z))
ENDSUB
2)编写程序,求一元二次方程Ax2+Bx+C=0的解,输入为系数A,B和C。
PublicSubP172_4_2()
'求方根
Dima,b,cAsInteger
a=Val(InputBox("输入系数a:
"))
b=Val(InputBox("输入系数b:
"))
c=Val(InputBox("输入系数c:
"))
d=b^2-4*a*c
Ifd>0Then
x1=(-b+Sqr(d))/(2*a)
x2=(-b-Sqr(d))/(2*a)
MsgBox("x1="&Str(x1))
MsgBox("x2="&Str(x2))
ElseIfd=0Then
x1=-b/(2*a)
x2=-b/(2*a)
MsgBox("x1="&Str(x1))
MsgBox("x2="&Str(x2))
Else
MsgBox("x1=x2=无解")
EndIf
EndSub
3)用整数0-6依次表示星期日、星期一、……、星期六,编程实现下列功能:
用键盘输入一个整数,在显示器上输出对应的中文表示星期几,如果键入的整数范围不在-1到6之内,则显示“输入数据错误”,返回要求再次键入正确数字。
当键入-1时,程序终止。
解1:
PublicSubSelectCaseP172_4_3()
DimaAsInteger
a=Val(InputBox("请输入一个整数"))
SelectCasea
Case0
MsgBox("星期日")
Case1
MsgBox("星期一")
Case2
MsgBox("星期二")
Case3
MsgBox("星期三")
Case4
MsgBox("星期四")
Case5
MsgBox("星期五")
Case6
MsgBox("星期六")
Case-1
End
CaseElse
MsgBox("输入数据错误")
EndSelect
EndSub
解2:
PublicSubSelectCaseP172_4_3()
DimaAsInteger
DoWhileTrue
a=Val(InputBox("请输入一个整数"))
SelectCasea
Case0
Debug.PrintMsgBox("今天是星期天",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case1
Debug.PrintMsgBox("今天是星期一",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case2
Debug.PrintMsgBox("今天是星期二",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case3
Debug.PrintMsgBox("今天是星期三",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case4
Debug.PrintMsgBox("今天是星期四",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case5
Debug.PrintMsgBox("今天是星期五",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case6
Debug.PrintMsgBox("今天是星期六",vbYesNoCancel+vbExclamation+vbDefaultButton1,"今日提示")
Case-1
ExitDo
CaseElse
MsgBox("你输入的数据错误!
")
EndSelect
Loop
EndSub
4)乘火车旅行的行李收费标准如下:
成年人可免费携带重量20公斤的行李,未成年人可免费携带10公斤的行李,超出这个重量,火车站将加收费用,收费标准是每公斤每百公里收费为0.20元,不足百公里按百公里记。
试编程按不同类型的人和行李重量来记收费用。
PublicSubP172_4_4行李收费()
Dima,w,m,s,yAsInteger
a=Val(InputBox("请输入乘客年龄"))
w=Val(InputBox("请输入乘客行李重量"))
m=Val(InputBox("请输入行驶公里数"))
y=Int(m/100)
Ifa>=18Then‘成年人
Ifw<=20Then‘行李小于等于20公斤免费
s=0
ElseIf(mMod100)=0Then
s=0.2*(w-20)*y‘行李大于20公斤每公斤每百公里收费为0.20元
Else
s=0.2*(w-20)*(y+1)‘不足百公里按百公里记
EndIf
EndIf
Else
Ifw<=10Then‘未成年人行李小于等于10公斤免费
s=0
else
If(mMod100)=0Then
s=0.2*(w-10)*y‘行李大于20公斤每公斤每百公里收费为0.20元
Else
s=0.2*(w-10)*(y+1)‘不足百公里按百公里记
EndIf
EndIf
EndIf
Debug.Print"应付费用:
"&Str(s)
EndSub
5)编写程序完成求和S=1+(1+2)+(1+2+3)+…+(1+2+…+10)。
如果求S=1!
+2!
+3!
+…+10!
,试编写程序并比较其同异。
方法1:
PublicSubP172_4_5累加累加和()
Dimx,s,t,iAsInteger
s=0
t=0
Fori=1To10
s=s+i
t=t+s
Next
Debug.Prints
Debug.Printt
EndSub
5_2、S=1!
+2!
+3!
+…+10!
,
PublicSub求阶乘和()
Dimi,j,p,sAsDouble
s=0
Fori=1To10
p=1
Forj=1Toi
p=p*j'循环不变式,完成累乘。
Nextj
Debug.PrintStr(i)&"的阶乘是:
"&Str(p)
s=s+p
Nexti
Debug.PrintStr(i)&"的阶乘和是:
"&Str(s)
EndSub
6)编程求100到200之间即能被3整除又能被5整除的正整数的个数,并显示这些数。
Publicsub整除()
n=0
fori=100to200
ifimod3=0andimod5=0then‘或imod15=0
n=n+1
Debug.printi
endif
Next
Debug.printn
Endsub
7)编程完成下列图形的打印。
其中第一个*所在列为第10行,第20列。
*
***
*****
*******
PublicSub三角形1()
Fori=10To14
Debug.PrintTab(20);"*";
Forj=1To2*(i-9)-2
Debug.Print"*";
Nextj
Debug.Print
Nexti
EndSub
*
***
****
*****
******
PublicSub三角形2()
Dimi,jAsInteger
Fori=1To9
Debug.Print
Next
Debug.PrintSpc(19);"*"
Fori=1To4
Debug.PrintSpc(18-i);"*";
Forj=1Toi+1
Debug.Print"*";
Next
Debug.Print
Next
EndSub
******
******
******
******
******
PublicSub平行四边形输出()
Dimi,jAsInteger
Fori=10To14
Debug.PrintTab(30-i);"*";
Forj=1To5
Debug.Print"*";
Nextj
Debug.Print
Nexti
EndSub
8)使用数组输入十个评委的评分,要求去除最高分、最低分,求应试者的最后得分。
解:
PublicSubP172_4_8()
Dimmark!
aver!
i%,max1!
min1!
aver=0
Fori=1To10
mark=Val(InputBox("请输入第"&i&"位评委的打分"))
Ifi=1Then
max1=mark:
min1=mark
Else
Ifmarkmin1=mark
ElseIfmark>max1Then
Maxl=mark
EndIf
EndIf
aver=aver+mark
Nexti
aver=(aver-max1-min1)/8
MsgBoxaver
EndSub
9)编程求2到100间的所有素数,并求它们的和。
PublicSub求素数个数()
Dimw,n,j,sAsDouble
s=0
j=0
Forw=3To99Step2
Forn=2ToInt(Sqr(w))'判断W是否为素数
IfwModn=0Then
ExitFor'能整除时说明不是素数结束内循环
EndIf
Next
Ifn>Int(Sqr(w))Then'说明是素数
Debug.Printw
s=s+w'累加素数
j=j+1'统计素数的个数
EndIf
Next
Debug.Print"S=";s,"素数的个数";j
EndSub
10)使用循环嵌套语句编程求:
在0至999的范围内,找出所有这样的数,其值等于该数中各位数字的立方和。
如:
153=13+53+33
求0~999之间水仙花数。
(水仙花数:
指一个三位数,其各位数字立方之和等于该数本身。
如:
153=13+53+33)
算法思路:
解此题的关键是要知道如何分离出一个三位数中的各位数字。
本题采取将指定的数除10求余,所得余数就是数值最右边得一个数码。
接着将除10后的数截尾取整,得到的就是去掉最右边一个数码后的数值,以此类推,每次都可以截得一个最右边的数码,将该三位数的各位数码分别截取出来并进行立方求和,如等于原数,则原数为水仙花数;否则原数不是水仙花数。
PublicSubsxh()
ForN=0To999
DimA(3)
I=1
M=N
DoWhileI<=3
A(I)=MMod10
M=Int(M/10)
I=I+1
Loop
IfN=A
(1)^3+A
(2)^3+A(3)^3Then
Debug.PrintN
EndIf
Next
EndSub
11)有一个分数数列:
求出这个数列前20项之和。
扩充题11_2)求数列:
1,1/2,2/3,3/5,5/8......前1000项的数据和
11_1)
前20项之和
PublicSubfsl()
i=1:
k=2:
m=1
s=0
Fori=1To5
s=s+k/m
t=k
k=m+t
m=t
Next
Debug.Print"前20项的数据和s="+Str(s)
EndSub
11_2)求数列:
1,1/2,2/3,3/5,5/8......前1000项的数据和
PublicSubsl()
i=1:
k=1:
m=1
ss=0
Fori=1To1000
ss=ss+k/m
t=m
m=m+k
k=t
Next
Debug.Print"前1000项的数据和ss="+Str(ss)
EndSub
12)已知二年期人民币整存整取年利率为2.25%,王大妈选择二年期整存整取,存款金额10000元,她希望有1000元以上的净利息。
由于银行对最后的利息征20%所得税,故至少要税前为1250元利息,才有1000元的净利息。
请你编程帮王大妈算一算,要存几年才能达到她的目标。
13)编写一个过程Swap,实现两个数据交换功能。
调用该过程求随机生成的60-100间30个数中最大数和最小数。
PublicSubP172_4_13()
'产生60_100的随机数并找出最大和最小数
DimxAsInteger,iAsInteger
Do
x=Int(Rnd
(2)*1000)
LoopUntilx>=60Andx<=100
Debug.Printx;"";
max=x
min=x
Fori=1To30
Do
x=Int(Rnd
(2)*1000)
LoopUntilx>=60Andx<=100
Debug.Printx;"";
Ifx>maxThen
max=x
EndIf
Ifxmin=x
EndIf
Nexti
Debug.Print
Debug.Print"max=";max
Debug.Print"min="&Str(min)
EndSub
PublicSubP172_4_13_2()
'产生30个200-300的随机数,并求累加和均值
DimxAsInteger,iAsInteger
DimsumAsInteger,cntAsInteger
DimavgAsSingle
sum=0
cnt=0
Fori=1To30
Do
x=Int(Rnd
(2)*1000)
LoopUntilx>=200Andx<=300
Debug.Printx;"";
cnt=cnt+1
sum=sum+x
Nexti
Debug.Print
Ifcnt>0Then
avg=sum/cnt
Else
avg=0
EndIf
Debug.Print"sum=";sum
Debug.Print"avg=";avg
Debug.Print"count=";cnt
EndSub
14)输入两个正整数m和n,求其最大公约数和最小公倍数。
解题思路:
最大公约数采用辗转相除法可以获得,
最小公倍数就是x*y/最大公约数了....
用辗转相除法求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。
那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。
例如求1515和600的最大公约数,
第