VB编程题讲解39.docx

上传人:b****7 文档编号:9712627 上传时间:2023-02-06 格式:DOCX 页数:19 大小:28.54KB
下载 相关 举报
VB编程题讲解39.docx_第1页
第1页 / 共19页
VB编程题讲解39.docx_第2页
第2页 / 共19页
VB编程题讲解39.docx_第3页
第3页 / 共19页
VB编程题讲解39.docx_第4页
第4页 / 共19页
VB编程题讲解39.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

VB编程题讲解39.docx

《VB编程题讲解39.docx》由会员分享,可在线阅读,更多相关《VB编程题讲解39.docx(19页珍藏版)》请在冰豆网上搜索。

VB编程题讲解39.docx

VB编程题讲解39

1.输入100个数,统计其中负数、零及正数的个数。

PrivateSubForm_Click()

Dimi%,k%,fs%,ns%,zs%:

Remfs表示负数个数

Fori=1To100

k=Val(InputBox("输入一个数据"))

Ifk>0Then

zs=zs+1

ElseIfk<0Then

fs=fs+1

Else

ns=ns+1:

Remns表示正数个数

EndIf

Nexti

Print"负数、零及正数的个数分别是:

";fs,ns,zs

EndSub

 

2.PrivateSubForm_Click()

DimxAsSingle,IAsInteger

DimnAsInteger

e=1

n=0

Do

n=n+1

Item=1/fact(n)

e=e+Item

LoopWhileItem>=0.00000001

Form1.Print"e=";e

EndSub

PrivateFunctionfact(mAsInteger)AsSingle'求m!

的函数

DimxAsSingle,IAsInteger

x=1

ForI=1Tom

x=x*I

NextI

fact=x

EndFunction

 

 

3.计算s=1+2+2^2+2^3+……,直至s超过1E+16

DimsAsSingle

DimiAsInteger

s=1

i=1

DoWhiles<=1E+16

s=s+2^i

i=i+1

Loop

Form1.Print"s=";s

EndSub

 

4.打印由数字组成的如下所示金字塔图案

'9

'888

'77777

'6666666

'555555555

'44444444444

'3333333333333

'222222222222222

'111111*********11

DimiAsInteger,jAsInteger

Fori=1To9

Form1.PrintTab(10-i);

Forj=1To2*i-1

Form1.PrintChr(58-i);

Nextj

Form1.Print

Nexti

 

5、编一子程序验证哥德巴赫猜想:

一个大于等于6的偶数可以表示为两个素数之和。

如:

6=3+38=3+510=3+7

方法1:

PrivateSubForm_load()

Dimn%,n1%,n2%,i%,k%,t1AsBoolean,t2AsBoolean

n=Val(InputBox("输入大于6的正整数"))

Forn1=3ton\2step2

t1=True

Fork=2ton1\2‘判断n1是否是素数

IFn1modk=0thent1=False:

ExitFor

Nextk

IFT1then‘如果n1为素数,将n分解为n1+n2

n2=n-n1:

t2=True

Fork=2ton2\2‘判断n2是否是素数

IFn2modk=0thent2=False:

ExitFor

Nextk

EndIF

‘n1,n2同时为素数时打印输出

Ift1Andt2thenPrintn&"="&n1&"+"&n2:

ExitFor

Nextn1

EndSub

方法2:

将判断一个整数是不是素数写函数过程。

PrivateSubForm_load()

Dimn%,n1%,n2%

n=Val(InputBox("输入大于6的正整数"))

Forn1=3ton\2step2

n2=n-n1

Ifprime(n1)Andprime(n2)then

Printn&"="&n1&"+"&n2

ExitFor'结束循环

Endif

Nextn1

EndSub

PrivateFunctionPrime(n%)AsBoolean

Dimk%,YesAsBoolean

Yes=True

Fork=2ton\2

IFnmodk=0thenYes=False:

ExitFor

Nextk

Prime=Yes

EndFunction

 

6.y=0(x=0)

-1(x>0)

编程计算下列分段函数值:

PrivateSubCommand1_Click()

DimxAsSingle,yAsSingle

x=Val(InputBox("x=?

"))

Ifx<0Andx<>-3Then

y=x*x+x-6

ElseIfx>=0Andx<10Andx<>2Andx<>3Then

y=x*x-5*x+6

Else

y=x*x-x-1

EndIf

Print"y=";y

EndSub

 

7.编程序求表达式s=x/2!

+x^3/4!

+…+x^(2n-1)/(2n)!

的值,并在窗体上输出。

要求如下:

(1)变量x与n的值在窗体单击事件中用InputBox()函数输入,通过调用函数过程s实现题目要求。

(2)求表达式的值用函数过程Functions(n%,x!

)AsSingle完成。

OptionExplicit

PrivateFunctions(n%,x!

)AsSingle

Dimi%,k%,t#,f#

f=0#:

k=x:

t=1#

Fori=2To2*nStep2

t=t*i*(i-1)

f=f+k/t

k=k*x*x

Nexti

s=f

EndFunction

 

PrivateSubForm_Click()

Dimn%,x!

x=InputBox("x=")

n=InputBox("n=")

Print"s=";s(n,x)

EndSub

 

8.迭代法求

求立方根的迭代公式为:

提示:

初值

可取为a,精度为0.000001。

a值由键盘输入。

方法一

PrivateSubForm_click()

Dima!

x1!

x0!

a=InputBox("输入一个数A=?

","输入框")

x0=a/3'先给x0赋一初值

x1=2/3*x0+a/(3*x0*x0)'通过迭代公式求得到一个新的值x1

DoWhileAbs(x1-x0)>0.000001

x0=x1'将x1赋值给x0

x1=2/3*x0+a/(3*x0*x0)'再通过迭代公式求得到一个新的值x1

Loop

Printa;"的立方根是:

";x1

EndSub

 

方法二

PrivateSubForm_click()

Dima!

x1!

x0!

a=InputBox("输入一个数A=?

","输入框")

x1=a/3'先给x1赋一初值,

Do

x0=x1'将x1赋值给x0

x1=2/3*x0+a/(3*x0*x0)'通过迭代公式求得到一个新的值x1

LoopUntilAbs(x1-x0)<0.000001

Printa;"的立方根是:

";x1

EndSub

 

9.有1分、2分、5分硬币若干枚,从中取出20枚硬币使其总值为60分,求出取法的数量以及每一种取法的1分、2分、5分硬币个数。

解:

本题属于“穷举”问题,它的基本思想是:

一一列举各种可能的情况,并判断哪一种可能是符合要求的解,这种算法称为穷举法(又称“枚举法”)。

PrivateSubForm_Click()

Dimi%,j%,k%,m%,n%'用i,j,k分别代表1分、2分、5分枚数

n=0'n代表取法总数

Fori=1To20

Forj=1To20

k=20-i-j

m=i+2*j+5*k'用m代表取出20枚硬币的总值

Ifm=60Then'当20枚硬币的总值等60分,则输出

Print"1分:

";i,"2分:

";j,"5分:

",k

n=n+1

EndIf

Nextj

Nexti

Print"------------------------------------"

Print"总共有:

";n;"取法"

EndSub

 

方法二、

Dimi%,j%,k%,m%,n%'用i,j,k分别代表1分、2分、5分枚数

n=0'n代表取法总数

Fori=1To20

Forj=1To20

Fork=1To20

m=i+2*j+5*k'用m代表取出20枚硬币的总值

Ifm=60Andi+j+k=20Then'当硬币数为20枚,且总值等60分,则输出

Print"1分:

";i,"2分:

";j,"5分:

",k

n=n+1

EndIf

Nextk

Nextj

Nexti

Print"------------------------------------"

Print"总共有:

";n;"取法"

EndSub

 

10.打印如下图所示的杨辉三角形(杨辉三角形为一个下三角矩阵,每一行第一个和主对角线上元素都为1,其余每一个数正好等于它上面一行的同一列与前一列数之和)。

PrivateSubForm_click()

Dimi%,j%

Constn=7

Dima(n,n)AsInteger'将定义为n×n的数组

Fori=1Ton'给第一列和主对角线上的元素赋值1

a(i,i)=1

a(i,1)=1

Nexti

Fori=3Ton

Forj=2Ton-1

a(i,j)=a(i-1,j-1)+a(i-1,j)'计算除第一列和主对角线上之外元素的值

Nextj

Nexti

Fori=1Ton

RemPrintTab(30-i*3);'定位每一行第一个元素输出位置

Forj=1Toi

Printa(i,j);

Ifa(i,j)<10Then'打印格式的设置

PrintSpace(3);

Else

PrintSpace

(2);

EndIf

Nextj

Print

Nexti

EndSub

 

11.编一程序,用InputBox函数输入12个整数,赋值给3*4的二维数组,求出其中最大元素及它的行、列坐标,并将数组按行(矩阵形式)输出到窗体,最大元素及行、列下标输出在数组的下方。

PrivateSubForm_Click()

Dima(3,4)AsInteger

Dimi%,j%,t%,max%,ir%ic%

Fori=1To3'输入数组元素

Forj=1To4

a(i,j)=InputBox("请输入"&"A("&i&","&j&")=")

Nextj

Nexti

ir=1:

ic=1:

max=a(1,1)'赋初值

Fori=1To3'将数组转置

Forj=1To4

Ifmax

Max=a(i,j):

ir=i:

ic=j

EndIf

Nextj

Nexti

Fori=1To3'在窗体上输出数组元素

Forj=1To4

Printa(i,j);Spc

(2);

Nextj

Print

NextI

Print

Print"a(";ir";",";ic;")=";a(ir,ic)

EndSub

 

12.编写一个加密程序,界面下图所示。

要求:

(1)在原文本框中输入任何文本,立即在密文文本框中显示出加密结果。

(2)加密思想:

将每个字母向后顺序移动5个位置,如“A”→“F”、“B”→“G”、“a”→“f”、“b”→“g”、“Z”→“E”。

对于非字母字符原样输出。

PrivateSubText1_KeyPress(KeyAsciiAsInteger)

Dimstr$,Iasc%

str=Chr$(KeyAscii)

If(str>="A"Andstr<="Z")Then

Iasc=Asc(str)+5

IfIasc>Asc("Z")ThenIasc=Iasc-26

st=Chr$(Iasc)

ElseIf(str>="a"Andstr<="z")Then

Iasc=Asc(str)+5

IfIasc>Asc("z")ThenIasc=Iasc-26

st=Chr$(Iasc)

Else

st=str

EndIf

Text2.Text=Text2.Text+st

EndSub

 

13.编一程序统计文本框(Text1)中英文单词的个数。

设计单词的分隔符是空格,程序代码写在窗体单击事个中,结果输出到文本框(Text2)中。

PrivateSubForm_Click()

Dimn%,k%,str$,sp$

sp=""

n=0

str=Trim(Text1.Text)

k=InStr(str,sp)'查找第一个空格的位置

DoWhilek<>0

n=n+1'单词数加1

str=Mid$(str,k+1)'从str中去掉开始的第一个单词

str=Trim(str)

k=InStr(str,sp)'再次查找第一个空格的位置

Loop

n=n+1'加中最后一个单词数

Text2.text="单词个数为&n

EndSub

 

14.产生30个1--100之间的随机整数,计算这30个数的平均值,找出30个数中数值在平均值之上的数据,并统计出这些数据的个数。

PrivateSubCommand1_Click()

Dimx(30)AsInteger

DimsumAsInteger,aveAsInteger'平均值取整数

DimiAsInteger

DimcountAsInteger'在平均值之上的数据个数

Open"c:

\mydir\res.txt"ForOutputAs#1

Randomize

Fori=1To30

x(i)=Int(Rnd*100)+1

Nexti

sum=0

Fori=1To30

sum=sum+x(i)

Nexti

ave=sum/30

'5个一行打印出原始数据,打印平均值

Fori=1To30

Print#1,x(i);Space

(2);

IfiMod5=0ThenForm1.Print

Nexti

Print#1,"平均值:

";ave

'找出并5个一行打印在平均值之上的数据,打印统计的个数

Print#1,"在平均值之上的数据是:

"

Fori=1To30

Ifx(i)>aveThen

count=count+1

Print#1,x(i);Space

(2);

IfcountMod5=0ThenForm1.Print

EndIf

Nexti

Form1.Print

Print#1,"共有";count;"个在平均值之上."

Close#1

EndSub

15.编写函数Insertfun(a%(),y%),它的功能是:

把y值插入到有序(升序)数组a中,插入后数组中的数仍然有序。

PrivateSubInstert(a()AsSingle,yAsSingle)

Dimp%,n%,i%

n=UBound(a)

Printn

ReDimPreservea(n+1)

p=0

DoWhiley>a(p)Andp

p=p+1

Loop

Printp

Fori=nTopStep-1

a(i+1)=a(i)

Nexti

a(p)=y

EndSub

 

 

 

16.输入一个5行、6列的数组,先以5行6列的格式输出该数组,然后找出该数组中值最小的元素,输出该元素及其两个下标。

PrivateSubForm_Click()

Dimi%,j%,row%,col%,max%,A(5,6)AsInteger

Fori=1To5

Forj=1To6

A(i,j)=Val(InputBox("A("&i&","&j&")"))

PrintA(i,j);

Nextj

Print

Nexti

Print

max=A(1,1):

row=1:

col=1

Fori=1To5

Forj=1To6

Ifmax

max=A(i,j):

row=i:

col=j

EndIf

Nextj

Nexti

Print"max=";max,"row=";row,"col=";col

EndSub

 

17.产生100个[0,99]范围内的随机整数,每行10个打印出来,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x

(1),x

(2),...,x(10)中,将统计结果打印出来。

PrivateSubCommand1_Click()

Dima(1To100)AsInteger

Dimb(0To9)AsInteger

DimiAsInteger,kAsInteger

Fori=1To100

a(i)=Int(Rnd*100)

k=a(i)Mod10

b(k)=b(k)+1

Nexti

Fork=0To9

Print"个位数是"&k&"有";b(k)&"个"

Nextk

EndSub

 

18.从键盘上输入一个任意的字符串,将该字符串的所有组成字符拆分开,再按照字符ASCII码从小到大的顺序将这些字符重新组成新的字符串。

例如输入a4fkze5,重新组合的字符串为45aefkz。

PrivateSubCommand1_Click()

DimxAsString'原始字符串

DimyAsString'重新组合的字符串

Dimc()AsString'拆分出的字符

DimlAsInteger'字符串长度

DimiAsInteger,jAsInteger

DimtempAsString

x=InputBox("输入一个字符串")

l=Len(x)

ReDimc(l)AsString

'字符串拆分

Fori=1Tol

c(i)=Mid(x,i,1)

Nexti

'字符排序

Fori=1Tol-1

Forj=i+1Tol

Ifc(i)>c(j)Then

temp=c(i)

c(i)=c(j)

c(j)=temp

EndIf

Nextj

Nexti

'排序后的字符组成新字符串

y=""

Fori=1Tol

y=c(i)+y

Nexti

Form1.Print"原始字符串";x

Form1.Print"重新组合的字符串";y

EndSub

 

19.采用连除2取余数的方法,将一个十进制数转换为二进制数。

DimDecAsInteger'输入一个十进制数

DimBinAsString'转换为二进制表示

DimresAsInteger

DimiAsInteger

Dec=Val(InputBox("x="))

Form1.Print"十进制数:

";Dec

Do

res=DecMod2'求出除以2的余数

Bin=res&Bin

Dec=Dec\2

LoopWhileDec<>0

Form1.Print"转换为二进制数为:

";Bin

 

20.编一函数将二进制字符串转换成十进制数

FunctionTransfer(binAsString)AsDouble

DimDecAsDouble'十进制数

DimtempAsString

DimiAsInteger

DimnAsInteger

n=Len(bin)

i=0

Do

temp=Mid(bin,n-i,1)

Dec=Dec+Val(temp)*2^i

i=i+1

LoopWhilei

Transfer=Dec

EndFunction

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1