第五章 控制结构编程练习.docx
《第五章 控制结构编程练习.docx》由会员分享,可在线阅读,更多相关《第五章 控制结构编程练习.docx(46页珍藏版)》请在冰豆网上搜索。
![第五章 控制结构编程练习.docx](https://file1.bdocx.com/fileroot1/2023-2/9/19cd2667-b26e-4c0d-8c13-47b3b243ace0/19cd2667-b26e-4c0d-8c13-47b3b243ace01.gif)
第五章控制结构编程练习
第5章控制结构程序设计
No.1
绿色文字,用上引号隔开的,是注释,不需要写,起到说明作用。
No.2
设置text1的maxlength设置为3
方法1程序代码:
方法2程序代码:
PrivateSubCommand1_Click()
DimaAsInteger‘如果思考成熟的话,当然可以不定义那么多变量
a=Val(Text1.Text)‘但往往我们办不到。
Text4.Text=a\100‘求百位数
Text3.Text=(aMod100)\10‘求十位数
Text2.Text=aMod10‘求个位数
EndSub
方法3程序代码:
PrivateSubCommand1_Click()’往往我们做不到先知先觉,所以定义一些变量也无妨。
DimaAsInteger
a=Val(Text1.Text)
b=a\100‘求百位数
c=aMod10‘求个位数
d=(a-c-100*b)\10‘求十位数
Text2.Text=b
Text3.Text=d
Text4.Text=c
EndSub
No.3
No.4
方法1程序代码:
一般来说,题目都提供了判断的规则。
需要完成的,是如何接近这个规则。
取字符mid()函数,绝对是一个很方便的手段。
方法2程序代码:
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger,cAsInteger,dAsInteger
a=Val(Text1.Text)
b=a\100‘用数学方法取出个位,十位,百位上的数
c=(aMod100)\10
d=aMod10
Ifa=b^3+c^3+d^3Then
Label1.Caption="是水仙花数"
Else
Label1.Caption="不是水仙花数"
EndIf
EndSub
No.5
方法1程序代码
PrivateSubCommand1_Click()
DimaAsInteger,iAsInteger,sAsLong,sumAsLong
a=Val(Text1.Text)
Fori=0To5
s=s+a*10^i
sum=sum+s
Nexti
Text2.Text=sum
EndSub
方法2程序代码
PrivateSubCommand2_Click()
DimaAsInteger,
a=Val(Text1.Text)
Text2.Text=a*(1+11+111+1111+11111+111111)
EndSub
选择结构编程
No.6
PrivateSubCommand1_Click()
DimxAsDouble,y#‘熟练掌握选择的几种结构,单分支,双分支,多分支,以及selectcase
x=Val(Text1.Text)
Ifx<10Then
y=x-1
ElseIfx<20Then
y=2*x-1
Else
y=3*x-1
EndIf
Text2.Text=y
EndSub
No.7
PrivateSubCommand1_Click()
DimaAsSingle,bAsSingle,cAsSingle
a=Val(Text1.Text)‘因为等下要进行数学大小比较,所以转换类型。
b=Val(Text2.Text)
c=Val(Text3.Text)
Ifa<=0Orb<=0Orc<=0Then‘选择结构的几个条件如何写,能否构成并列关系,是重点。
Text4.Text="非法数据"
ElseIfa+b>cAndb+c>aAnda+c>bThen
Text4.Text="能"
Else
Text4.Text="否"
EndIf
EndSub
No.8
方法1程序代码:
策略:
总体来说,先比较两个。
比较大的,令他暂时为max;比较小的,令他暂时为min。
然后再把第三个c跟目前的max比较,跟目前的min比较。
PrivateSubCommand1_Click()
DimmaxAsInteger,minAsInteger
A=Val(Text2.Text)
B=Val(Text2.Text)
C=Val(Text2.Text)
max=a
min=max
Ifb>maxThenmax=b
IfbIfc>maxThenmax=c
IfcText4.Text=max
Text5.Text=min
EndSub
方法2程序代码:
PrivateSubCommand1_Click()
Dima%,b%,cAsInteger,max%,min%
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
Ifamax=b
min=a
Else'a>b
max=a
min=b
EndIf
Ifc>maxThenmax=c
IfcText4.Text=max
Text5.Text=min
EndSub
方法3程序代码:
PrivateSubCommand1_Click()
Dima%,b%,cAsInteger,max%,min%
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
Ifa>bThen
max=a
Else'b>a
max=b
EndIf
Ifc>maxThenmax=c
Ifa>bThen
min=b
Else
min=a
EndIf
Ifmin>cThenmin=c
Text4.Text=max
Text5.Text=min
EndSub
方法4程序代码:
最复杂的一种
PrivateSubCommand1_Click()
Dima%,b%,cAsInteger,max%,min%
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
IfaIfbmax=c
min=a
Else'b>c
Ifa>cThen
max=b
min=c
Else'amax=b
min=a
EndIf
EndIf
Else'a>b
Ifamax=c
min=b
Else'a>c
Ifb>cThen
max=a
min=c
Else
max=a
min=b
EndIf
EndIf
EndIf
Text4.Text=max
Text5.Text=min
EndSub
No.9
PrivateSubCommand1_Click()
DimaAsInteger
a=Val(Text1.Text)
IfaMod4=0AndaMod100<>0OraMod400=0Then‘根据题意书写表达式
Label2.Caption="闰年"
Else
Label2.Caption="非闰年"
EndIf
EndSub
No.10
PrivateSubCommand1_Click()
'''不得删除本行注释
DimnAsInteger
n=Val(Text1.Text)
IfnMod4=0AndnMod100<>0OrnMod400=0Then
Text2.Text=366
Else
Text2.Text=365
EndIf
EndSub
循环结构编程
No.12
PrivateSubCommand1_Click()
DimaAsInteger
a=Val(Text1.Text)
Fori=1Toa
Sum=Sum+i^2‘通常是sum=sum+i,但是,并不是说第i项就一定是i,本题第i项就是i2
Next
Text2.Text=Sum
EndSub
No.13参考第六章-》单选按钮
由于是两个单选框,所以互相排斥,所以option.value=true的时候,肯定option.value=false.因此可以建立双分支结构.
方法2程序代码:
PrivateSubCommand1_Click()
'''不得删改本行注释
DimnAsInteger,iAsInteger,sumAsLong
n=Val(Text1.Text)
sum=0
IfOption1.Value=TrueThen
Fori=1TonStep2
sum=sum+i
Nexti
Else
Fori=2TonStep2
sum=sum+i
Nexti
EndIf
Text2.Text=sum
EndSub
方法3程序代码:
PrivateSubCommand1_Click()
'''不得删改本行注释
DimnAsInteger,iAsInteger,sumAsLong
n=Val(Text1.Text)
sum=0
IfOption1.Value=TrueThen
A=1
Else
A=2
EndIf
Fori=atonstep2
Sum=sum+i
Nexti
Text2.Text=sum
EndSub
No.14
方法1:
PrivateSubCommand1_Click()
DimiAsInteger
Fori=1To200
IfiMod3=0AndiMod7=0Then
Text1.Text=Text1.Text&""&i‘第二个Text1.Text代表过去的积累,第一个代表新的总的。
EndIf
Next
EndSub
方法2
PrivateSubCommand1_Click()
DimiAsInteger
Fori=1To200
IfiMod3=0AndiMod7=0Then
Text1.Text=Text1.Text&space
(2)&i‘space
(2)代表输出2个空格。
EndIf
Next
EndSub
No.15
逐一判断,因为要逐一,所以要循环;因为要判断,所以用选择。
PrivateSubCommand1_Click()
DimiAsInteger,nasinteger,sumasinteger
N=val(text1.text)
Fori=1Ton
IfiMod3=0Then
sum=sum+i
EndIf
Next
Text2.text=sum
EndSub
No.16
PrivateSubCommand1_Click()
DimiAsInteger
Fori=1To100
IfiMod9=0Then
Text1.Text=Text1.Text&""&i^2
EndIf
Next
EndSub
No.17
PrivateSubCommand1_Click()
DimiAsInteger,nasinteger,sumasinteger
N=val(text1.text)
Sum=1‘累乘的sum,需要事先设置为1,否则sum默认为0,每次累乘的结果都为0。
Fori=1Ton
IfiMod7=0Then
sum=sum*i
EndIf
Next
Text2.text=sum
EndSub
No.18
策略:
先生成一个,令他为max,再陆续生成9个。
每生成一个a,就和之前的max和min比较。
比max大,把max里面的值改为当前这个a;比min小,把min里面的值改为当前这个a。
PrivateSubCommand1_Click()
DimiAsInteger,minAsInteger,maxAsInteger,aAsInteger
max=Int(Rnd*101)
min=max
Fori=1To9
a=Int(Rnd*101)
Ifa>maxThenmax=a
IfaNext
Text1.Text=max
Text2.Text=min
EndSub
No.21
PrivateSubCommand1_Click()
Dimn,iAsInteger
n=int(Text1.Text)
fori=2ton-1
ifnmodI=0thenexitfor
next
ifi<=n-1then‘或者本语句写成ifi=nthen
Label2.Caption="非质数"‘相应的,这边是“质数”
Else
Label2.Caption="质数"‘相应的,这边是“非质数”
Endif
EndSub
PrivateSubCommand1_Click()
Dimn,iAsInteger
n=Val(Text1.Text)
Fori=2Ton-1
IfnModi=0Then
Label2.Caption="非质数"
Else
Label2.Caption="质数"
EndIf
Nexti
EndSub
错误的编程方式!
~
因为大部分n/(n-1)不能整除。
那么,n=14时,在循环中一直到i=13。
最终14mod13,反而是质数
No.22
PrivateSubCommand1_Click()
'''不得删除本行注释,参考课本P96
DimmAsInteger,nAsInteger,r%
m=Val(Text1.Text)
n=Val(Text2.Text)
r=mModn
DoWhiler<>0
m=n
n=r
r=mModn
Loop
Label3.Caption=n
EndSub
No.23
方法1程序代码:
PrivateSubCommand1_Click()
'''不得删改本行注释
DimiAsInteger,jAsInteger,mAsInteger,sAsLong
Fori=Len(Text1.Text)To1Step-1
m=val(Mid(Text1.Text,i,1))
s=s+m*2^j‘二进制转换为十进制,规定用位权展开式。
寻找多项式的规律,
j=j+1
Nexti
Text2.Text=s
EndSub
方法2程序代码:
PrivateSubCommand1_Click()
'''不得删改本行注释
DimiAsInteger,mAsInteger,sAsLong
a=Len(Text1.Text)‘两处要用到长度,所以就定义一个变量a来接收
Fori=1ToaStep1
m=Val(Mid(Text1.Text,i,1))
s=s+m*2^(a-i)'二进制转换为十进制,规定用位权展开式。
寻找多项式的规律,
Nexti
Text2.Text=s
EndSub
No.25
方法1:
PrivateSubCommand1_Click()
Fori=1ToLen(Text1.Text)step1
a=Mid(Text1.Text,i,1)
Text2.Text=a+Text2.Text
Next
EndSub
方法2:
PrivateSubCommand1_Click()
Fori=Len(Text1.Text)To1step-1
a=Mid(Text1.Text,i,1)
Text2.Text=Text2.Text+a
Next
EndSub
方法3:
PrivateSubCommand1_Click()
I=1
whilei<=Len(Text1.Text)
a=Mid(Text1.Text,i,1)
Text2.Text=Text2.Text+a
I=i+1
Next
EndSub
No.26
打开工程文件csnx.vbp,添加适当的事件过程代码,实现以下功能:
单击“产生”按钮,随机产生一个四位的正整数,并显示在文本框text1中;单击“计算”按钮,在文本框text2中显示该数各位数字之和。
策略:
逐一取字符,转换成数值型,进行累加
PrivateSubCommand1_Click()
Text1.Text=Int((9999-1000+1)*Rnd+1000)
EndSub
PrivateSubCommand2_Click()
'''不得删改本行注释
DimnAsInteger,iAsInteger,sAsInteger
Fori=1To4
s=s+Val(Mid(Text1.Text,i,1))‘取字符的结果是字符型数据,要经过val后,才能变成数值
Nexti
Text2.Text=s
EndSub
No.27
策略:
●取字符(从第2个字符开始取),转换成数值型,进行累加,
●取出第1个字符,与上面的累和比较,是否相等。
是,文本框就是’合法会员”;是,文本框就是’非法会员”
PrivateSubCommand1_Click()
'''不得删除本行注释
DimiAsInteger,nAsInteger,sAsInteger
IfLen(Text1.Text)=6andval(text1.text)>=100000Then‘排除两种情况:
输入不够6位;输
Fori=2To6‘入的8542ab这种样式的。
因为val(8542ab)的结果是8542。
Val函数的特点
n=val(Mid(Text1.Text,i,1))
sum=sum+n
Nexti
Ifval(Mid(Text1.Text,1,1))=sumMod10Then‘题目意思是sum可能是两位数。
求个位数
Text2.Text="合法会员"‘那么632146也是合法的,6等于16的个位数
Else
Text2.Text="非法会员"
EndIf
Else
Msgbox“请你输入6位会员号”
Endif
EndSub
No.28
策略:
●取出第一个字符max,假定它是最大的字符。
●利用循环,从第二个字符开始逐一取字符A。
在循环内嵌套选择语句,A是否比max大。
是,就把a的值赋给max。
方法1程序代码:
DimmAsString,iAsInteger,sAsString
max=Mid(Text1.Text,1,1)‘字符比较,默认按照ASCII比较。
Fori=2ToLen(Text1.Text)
s=Mid(Text1.Text,i,1)
Ifs>maxThenmax=s
Nexti
Label2.Caption=max
EndSub
方法2程序代码:
DimmAsString,iAsInteger,sAsString
max=Mid(Text1.Text,1,1)‘字符比较,默认按照ASCII比较。
Fori=2ToLen(Text1.Text)
s=Mid(Text1.Text,i,1)
Ifasc(s)>asc(max)Thenmax=s
Nexti
Label2.Caption=max
EndSub
No.28’可参考课本P160-》Function过程
OptionExplicit
DimmAsInteger,nAsInteger
PrivateSubCommand1_Click()
'''不得删除本行注释
n=Val(Text1.Text)
m=Val(Text2.Text)
Text3.Text=Fact(m)/(Fact(n)*Fact(m-n))
EndSub
'###################################################
FunctionFact(kAsInteger)AsDouble
DimiAsInteger,FAsDouble
F=1
Fori=1Tok
F=F*i
Nexti
Fact=F
EndFunction
'###