VBA结构化程序设计-例题习题_第1页
VBA结构化程序设计-例题习题_第2页
VBA结构化程序设计-例题习题_第3页
VBA结构化程序设计-例题习题_第4页
VBA结构化程序设计-例题习题_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章VBA程序设计基础,1,2,【例1-1-1】求解一元二次方程:AX2BXC=0,Dima,b,c,dAsDoublea=1b=-6c=8d=b*b-4*a*cIfd=0Thenx1=(-b+Sqr(d)/2*ax2=(-b-Sqr(d)/2*aDebug.Printx1=;x1Debug.Printx2=;x2ElseDebug.Print无实数解EndIf,算法描述,算法实现,算法分析:一元二次方程求根公式。,自己动手,1、已知,3,试编程求sgn(x)的值。,算法分析:用分支语句简单列举x的取值情况。,DimxAsIntegerDimzAsDoublex=Val(InputBox(请输入x的值)Ifx0Thenz=1EndIfIfx=0Thenz=0EndIfIfx0Thenz=-1EndIfDebug.Printsgn(x)=;z,4,自己动手,1、用整数0-6依次表示星期日、星期一、星期六,编程实现下列功能:用键盘输入一个整数,在显示器上输出对应的中文表示星期几,如果键入的整数范围不在0到6之内,则显示“输入数据错误”。,5,算法分析:用多重分支语句简单列举x的取值情况。,DimxAsIntegerx=Val(InputBox(请输入x的值(0-6)Ifx=0ThenDebug.Print星期日ElseIfx=1ThenDebug.Print星期一ElseIfx=2ThenDebug.Print星期二ElseIfx=3ThenDebug.Print星期三ElseIfx=4ThenDebug.Print星期四ElseIfx=5ThenDebug.Print星期五ElseIfx=6ThenDebug.Print星期六ElseDebug.Print输入数据错误EndIf,6,自己动手,1、用整数0-6依次表示星期日、星期一、星期六,编程实现下列功能:用键盘输入一个整数,在显示器上输出对应的中文表示星期几,如果键入的整数范围不在0到6之内,则显示“输入数据错误”。,7,算法分析:用多重分支语句简单列举x的取值情况。,DimxAsIntegerx=Val(InputBox(请输入x的值(0-6)SelectCasexCase0Debug.Print星期日Case1Debug.Print星期一Case2Debug.Print星期二Case3Debug.Print星期三Case4Debug.Print星期四Case5Debug.Print星期五Case6Debug.Print星期六CaseElseDebug.Print输入数据错误EndSelect,8,自己动手,1、乘火车旅行的行李收费标准如下:成年人可免费携带重量20公斤的行李,未成年人可免费携带10公斤的行李,超出这个重量,火车站将加收费用,收费标准是每公斤每百公里收费为0.20元,不足百公里按百公里记。试编程按不同类型的人和行李重量来记收费用。,9,算法分析,10,11,Dimadult,factorAsIntegerDimweight,distance,expenseAsDoubleadult=Val(InputBox(是否成年人?(是-输入1,不是-输入0))Ifadult=0Oradult=1Thenweight=Val(InputBox(请输入行李重量)distance=Val(InputBox(请输入乘车里程)IfInt(distance/100)=distanceThenfactor=Int(distance/100)Elsefactor=Int(distance/100)+1EndIfIfadult=1ThenIfweight=20Thenexpense=0Elseexpense=(weight-20)*factor*0.2EndIfElseIfweight=10Thenexpense=0Elseexpense=(weight-10)*factor*0.2EndIfEndIfDebug.Print行李费用=;expense;元ElseDebug.Print输入有误EndIf,延伸思考、讨论,1、如何求s=1*2*3*10=10!2、如何求s=1+3+5+993、如何求s=0+2+4+100,12,自己动手,1、编写程序完成求和:S=1+(1+2)+(1+2+3)+(1+2+10)。如果求S=1!+2!+3!+10!,试编写程序并比较其同异。,13,算法分析:每个加项都是累加(乘)值。,14,Dimi,s0,sAsLongi=1s0=0s=0DoWhilei=10s0=s0+is=s+s0i=i+1LoopDebug.Prints=;s,自己动手,2、有一个分数数列:求出这个数列前20项之和。算法分析:1)后一项的分子=前一项的分子+前一项的分母2)后一项的分母=前一项的分子,15,16,Dimupnum,downnum,temp,iAsIntegernumerator分子,denominator分母DimsAsDoublei=1upnum=2downnum=1s=0DoWhilei=20s=s+upnum/downnumtemp=upnumupnum=upnum+downnumdownnum=tempi=i+1LoopDebug.Print2/1+3/2+.=;s,17,【例8-11】试求,。,算法分析:1)奇数项的符号为+,偶数项的符号为-,即:(-1)n+1,n为所在项的序号2)每项的分母是对应项的序号,分子为1,即:1/n,n为所在项的序号3)将上述1)2)每项求和,得到结果,18,PublicSubWhileWend()DimiAsIntegerDimsAsDoublei=1Whilei=100s=s+(-1)(i+1)/ii=i+1WendDebug.Prints=;sEndSub,【例8-12-0】打印如下图形*算法分析:1)4行(类似4个学院)-外循环2)7列(类似7个班级)-内循环,19,20,Dimrow,colAsIntegerrow=1col=1DoWhilerow=4DoWhilecol=7Debug.Print*;col=col+1LoopDebug.Printcol=1row=row+1Loop,【例8-12】打印九九乘法表。算法分析:1)9行(类似9个学院)-外循环2)9列(类似9个班级)-内循环,21,22,Dimi,jAsIntegerDebug.PrintSpace(3);Fori=1To9循环用来生成第一行的数据Debug.PrintFormat(i,0#);i输出格式控制NextDebug.Print用来另起一行输出Fori=1To9Debug.Printi;Forj=1To9Debug.PrintFormat(i*j,0#);NextDebug.PrintNext,【例8-13】打印如图所示对称三角图形,要求第一行的*在第10列。,*,23,算法分析:1)4行(类似4个学院)-外循环2)2m-1列(类似2m-1个班级)-内循环,24,Dimi,jAsIntegerFori=1To4控制输出的行数Debug.PrintTab(11-i);定位每行第一个*所在的列数Forj=1To2*i-1控制每行输出的*个数Debug.Print*;输出*NextjDebug.Print输出另起一行Nexti,延伸思考、讨论,如何打印如下图形?,25,*,*,*,*,2、编程求2到100间的所有素数,并求它们的和。算法分析:1)将(2到100的99个数)看成99个“学院”-外循环2)再将每个数的因子看成“班级”-内循环,26,27,DimflagAsBooleanDimi,j,sAsIntegeri=2s=0DoWhilei=100flag=True设置标志,假定为素数j=2DoWhilejiIfInt(i/j)=i/jThenflag=FalseExitDoEndIfj=j+1LoopIfflagThenDebug.Printi;Space(2);s=s+iEndIfi=i+1LoopDebug.PrintDebug.Print2-200间的素数和为:;s,2、输入两个正整数m和n,求其最大公约数和最小公倍数。算法分析:(1)变换m、n,使他们变成mnThent=mm=nn=tEndIfDoWhilei=mIfInt(m/i)=m/iThenIfInt(n/i)=n/iThencomdiv=iEndIfEndIfi=i+1LoopDebug.Printm;和;n;的最大公约数是:;comdivcommul=m*n/comdivDebug.Printm;和;n;的最小公倍数数是:;commul,3、编程求100到200之间即能被3整除又能被5整除的正整数的个数,并显示这些数。,30,Dimi,numAsIntegerDebug.Print100-200间能同时被3和5整除的数是:i=100DoWhilei=200IfInt(i/3)=i/3ThenIfInt(i/5)=i/5ThenDebug.Printi;Space(2);EndIfEndIfi=i+1Loop,5、在0至999的范围内,找出所有这样的数,其值等于该数中各位数字的立方和。如:153=13+53+33算法分析:1)先提取一个3位数的百位、十位、个位数字,如:153拆分为1、5、3。方法:百位数字n1=int(153/100),十位数字n2=int((153-n1*100)/10),个位数字=153-n1*100-n2*102)判断153=n13+n23+n33?,31,32,Dimi,j,n1,n2,n3AsIntegerDebug.Print满足条件的立方数:i=0DoWhilei=999n1=Int(i/100)n2=Int(i-100*n1)/10)n3=i-100*n1-10*n2Ifi=n13+n23+n33ThenDebug.Printi;Space(2);EndIfi=i+1Loop,6、已知二年期人民币整存整取年利率为2.25%,王大妈选择二年期整存整取,存款金额10000元,她希望有1000元以上的净利息。由于银行对最后的利息征20%所得税,故至少要税前为1250元利息,才有1000元的净利息。请你编程帮王大妈算一算,要存几年才能达到她的目标。算法分析:利息=本金*利率净利息=利息-利息*20%,33,34,Dimmoney,rate,interest,netinterest,taxrate,sum,tempAsDoubleDimiAsLongi=0money=10000rate=0.0225taxrate=0.2interest=0netinterest=0sum=0temp=moneyDoWhilesummaxThenmax=score(i)EndIfIfscore(i)0Then如果该位置有人,则表示点到人offset=offset+1报过数的人数加1EndIfremain=0统计剩多少人Fori=1Tomremain=remain+w(i)NextiIfremain0ThenDebug.PrintiExitFor因为只有一个结果,所以这句建议加上,退出循环EndIfNexti,练习题,一、编一个程序,将华氏温度F=68度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论