VB程序设计基础教程第3章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

魏豪明制作第3章过程、函数与算法过程Sub过程的定义3.1.1Sub过程Sub过程没有返回值,是在响应事件时执行的代码块。Sub过程用Sub…EndSub定义,其格式为:[Private][Public][Static]Sub[过程名]([参数表])语句序列EndSub说明:①Sub过程定义以Sub开始,以EndSub结束,中间是描述过程功能的语句序列,称为过程体。②Sub前面的Private、Public和Static,用于指定过程或其中定义的变量的有效范围。③过程名与变量的命名规则相同,不能与VisualBasic中的关键字重名,也不能与同级的变量同名。魏豪明制作图3-1“添加过程”对话框图3-2代码编辑窗口魏豪明制作Sub过程的调用(1)直接使用子程序名调用Sub过程格式:子程序名[参数1],[参数2]直接使用子程序名调用上述Sum子程序如下:Suma1,b1(2)使用Call语句调用Sub过程格式:Call过程名(参数1,参数2)注意参数的个数、数据类型必须与被调用过程的参数一致。例如,下面是调用Sum子程序的语句:a1=5b1=5CallSum(a1,b1)同样在使用Call语句调用时,也可以不带参数,如:CallSum。魏豪明制作定义Function过程3.1.2Function过程[Private][Public][Static]Function过程名([参数表])[As数据类型]语句序列EndFunction说明:①Function过程定义以Function开始,以EndFunction结束,中间是描述过程功能的语句序列,称为过程体或函数体。②[Private]和[Public]表示函数是“公用的”还是“私用的”。③[参数表]的具体形式为:变量名[As数据类型][,变量名[As数据类型]…]其中,[As数据类型]主要用来表示函数返回值的类型。魏豪明制作图3-3“添加过程”对话框魏豪明制作Function过程的调用过程名([参数表])例如,调用前面定义计算减法的Function过程“add”,可以采用下面的程序:PrivateSubCommand1_Click()Dimz(2)AsSingleForI=1To2Z(i)=InputBox(“Enteravalue”,”INPUTBOX”)NextiSum=add(z(1),z(2))Print”Sum=”;SumEndSub魏豪明制作按值传递参数3.1.3参数传递例如:PrivateSubDo(ByValnAsInteger)n=n+1Print子程序中m的值为&nEndSubPrivateSubForm_Click()DimmAsIntegerm=10Print调用前m的值为&mDomPrint调用后m的值为&mEndSub程序执行结果为:调用前m的值为10子程序中m的值为11调用后m的值为10魏豪明制作按地址传递参数例如,将上面的Do过程修改为:PrivateSubDo(nAsInteger)n=n+1Print子程序中m的值为&nEndSubForm_Click()过程保持不变,程序执行结果为:调用前m的值为10子程序中m的值为11调用后m的值为11魏豪明制作3.2常用内部函数3.2.1算术函数表3-1常用算术函数函数名返回值类型功能例子返回值Abs(x)与x相同x的绝对值Abs(-19)19Atn(x)Double角度x的反正切值4*Atn(1)3.14159265Cos(x)Double角度x的余弦值Cos(60)0.5Exp(x)Doublee(自然对数的底)的幂值Exp(x)e的x次幂Fix(x)Doublex的整数部分(不进位取整)Fix(-99.9)-99Int(x)Doublex的整数部分(进位取整)Int(-99.9)-100Log(x)Doublex的自然对数值Log(x)/Log(10)以10为底的x的对数Rnd(x)Single一个小于1但大于等于0的随机数值Int((6*Rnd)+1)1~6之间的随机数Sgn(x)VariantIntegerx0返回1x=0返回0x0返回-1Sgn(11)Sgn(0)Sgn(-2)10-1Sin(x)Doublex的正弦值Sin(30)0.5Sqr(x)Doublex的平方根Sqr(9)3Tan(x)Double角度x的正切值Tan(45)1Val(x)Double字符串的数值Val(“24and7”)24Asc(x)Integer字符串首字母的ASCII代码Asc(“A”)65Chr(x)StringASCII代码指定的字符Chr(97)aStr(x)String数值转换的字符串Str(-459.65)-459.65Hex(x)String十六进制数值Hex(10)AOct(x)String八进制数值Oct(8)10魏豪明制作3.2.2字符串函数表3-2常用字符串函数函数名返回值类型功能例子返回值Ltrim(字符串)String去掉左面空格LTrim(Hello!)Hello!RTrim(字符串)String去掉右面空格RTrim(Hello!)Hello!Trim(字符串)String去掉前后空格Trim(Hello!)Hello!Left(字符串,长度)String从左起取指定数的字符Left(Hello!,5)Hello[续]函数名返回值类型功能例子返回值Right(字符串,长度)String从右起取指定数的字符Right(Hello!,1)!Mid(字符串,开始位置[,长度])String从开始位置起取指定数的字符Mid(Hello!,2,4)elloInstr([开始位置,]字符串1,字符串2[,字符串比较])IntegerVariant串2在串1中最先出现的位置lnstr(XpXXPXXP,P)5Len(字符串)IntegerVariant字符串长度Len(Hello!)6String(长度,字符)String重复数个字符String(5,*)*****Space(长度)String插入数个空格Hello&Spance(10)&Wodd插入10个空格Lcase(字符串)String转成小写Lcase(Hello)helloUcase(字符串)String转成小写Ucase(Hello)HELLOStrcomp(字符串1,字符串2[,比较])IntegerVariant串1串2–1串1=串20串1串21StrComp(AB,abcd)-1魏豪明制作3.2.3转换函数表3-3转换函数的数据类型转换函数结果类型例子转换结果Cbool(x)BooleamCBool(1)trueCbyte(x)ByteCByte(125.5678)126Ccur(x)CurrencyCcur(123.14588)Currency型123.1459Cdate(x)DateCDate(February16,2006)Date型06-2-16CDbl(x)DoubleCDbl(CCur(234.456784)*8.2)1922.54576Cint(x)IntegerCint(2345.5678)2346CLng(x)LongCLng(25427.45)2547CSng(x)IntegerCSng(75.3421115)75.34211CStr(x)StringCStr(437.324)437.314Cvar(x)VariantCVar(4534&000)4534000CVErr(x)errorCVErr(2001)自定义错误码Str(x)VariantStringStr(459)459魏豪明制作3.2.5判断函数表3-5常见的判断函数函数名返回值类型功能IsArray(变量名)Boolean判断变量是否为数组IsDate(表达式)Boolean判断表达式是否为日期IsEmpty(变量)Boolean判断变量是否已被初始化IsNumeric(表达式)Boolean判断表达式是否为数字型魏豪明制作3.3常用算法3.3.1简单算法例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并打印出来。将程序编写在一个GetTJput过程中,代码如下:PublicSubGetTJput()Dimm(1To100)AsIntegerDimn(1To10)AsIntegerDimiAsInteger,pAsInteger'产生100个[0,99]范围内的随机整数,并以每行10个打印出来魏豪明制作Fori=1To100m(i)=Int(Rnd*100)Ifm(i)10ThenForm1.PrintSpace(2);m(i);ElseForm1.PrintSpace(1);m(i);EndIfIfiMod10=0ThenForm1.PrintNexti魏豪明制作统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),…,x(10)中,将统计结果打印出来。Fori=1To100p=m(i)Mod10//求个位上的数字//Ifp=0Thenp=10n(p)=n(p)+1NextiPrint统计结果Fori=1To10p=iIfi=10Thenp=0Form1.Print个位数为+Str(p)+共+Str(n(i))+个NextiEndSub魏豪明制作3.3.2最大公约数、最小公倍数分析:求最大公约数的算法思想(最小公倍数=两个整数之积/最大公约数):(1)对于已知两数m,n,使得mn;(2)m除以n得余数r;(3)若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4)m←n,n←r,再重复执行(2)。例如,求m=14,n=6的最大公约数和最小公倍数:魏豪明制作PublicSubMain()m=inputBox(m=)n=inputBox(n=)nm=n*mIfmnThent=m:m=n:n=tR=mmodnDoWhile(r0)m=nn=rr=mmodnLoopPrint最大公约数=,nPrint最小公倍数=,n*m/nEndSub魏豪明制作3.3.3判断素数魏豪明制作选择法排序(升序)3.3.4排序问题基本思路如下:(1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,并与第1个数交换位置;(2)除第1个数外,其余n-1个数中选最小的数,并与第2个数交换位置;(3)依次类推,选择了n-1次后,这个数列已按升序排列。魏豪明制作程序代码如下:Fori=1Ton-1imin=iForj=i+1TonIfa(imin)a(j)Thenimin=jNextjtemp=a(i)a(i)=a(imin)a(imin)=tempNextI魏豪明制作冒泡法排序(升序)冒泡法排序是一类依靠“交换”进行排序的方法,其基本思路:将相邻两个数比较,如果前者较大,则将两个数进行交换。(1)有n个数(存放在数组a(n)中),第一次将每相邻两个数比较,小的调到前面,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;(2)第二次对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;(3)依次类推,n个数共进行n-1次比较,在第j次中要进行n-j次两两比较。魏豪明制作程序如下:Fori=1Ton-1Forj=1Ton-iIfa(j)a(j+1)Thentemp=a(j);a(j)=a(j+1);a(j+1)=tempEndifNextjNexti魏豪明制作合并法排序合并法排序即是将两个有序数组A、B合并成另一个有序的数组C,并按升序排列。基本思想如下:(1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组;(2)取小的元素所在数组的下一个元素,与另一数组中上次比较后较大的元素比较,重复

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功