




已阅读5页,还剩107页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第2章基本数据类型及算法,2,本章主要内容:程序设计中数据和算法的概念介绍。VisualBasic2005中的数据类型,以及不同数据类型之间的转换。VisualBasic2005程序设计中的变量、常量声明及引用。使用字符串类型数据。文本输入框TextBox控件的基本操作。使用日期类型数据。各种运算符的操作格式及含义。,3,著名的计算机科学家沃斯(NikiklausWirth)提出了一个著名的公式:数据结构+算法=程序这里数据结构指程序中对数据类型的描述和数据的组织形式,而算法是用来描述如何对数据进行处理,得到正确的结果。,4,设计一个程序包括选择合适的数据类型来描述要处理的问题,同时还要设计相应的算法,即如何处理这些数据。而编写程序只是使用合适的编程语言实现数据结构及对其处理的算法。因此,我们使用程序设计语言开发一个应用系统应该包括对系统的设计阶段(确定数据结构和算法的一般描述)和编码阶段。当然,从软件工程的角度来说,可能还包括软件测试等阶段。,5,2.1数据和算法,数据和算法是程序设计的灵魂,选择合适的数据及数据结构,并设计良好的算法,才能设计出高质量的软件。,6,2.1.1信息和数据,信息描述的是事实,只要能够被人类或计算机理解,它可以以任何形式出现。比如我们看到国旗,得到的颜色信息是红色;看到道路上的汽车,从感官上得到车辆多或少的信息;看到一个小学生,得到他是一个少年等信息;听到8点整的报时,得到是上班事件的信息。计算机能够判断是具体的信息,不能判断抽象的概念(如车辆很多或很少)。在这些信息中,有些内容可以在计算机中直接表示,如8点整的时间信息,但有些信息需要进一步转换为计算机能够表示的格式,才能把相关的信息在计算机中表示出来,如国旗的颜色使用RGB三色表示时,R、G、B的值分别是多少;车辆很多或很少如果使用每分钟通过的车辆数目表示;而小学生通过其年龄表示其是否是少年。这些转换后能够表示信息的内容称为数据,因此,数据是用来描述信息的,是通过对信息进行处理得到并能够直接在计算机中使用。在程序设计中,我们需要培养把信息转换、归纳为数据表示的能力与意识。,7,2.1.2算法,在现实生活中,要实施任何工作之前,必须对工作要有一个整体的规划,然后按照规划一步一步地实施工作。同样,如果让计算机完成一项工作,则需要编写相应的软件,而编写软件之前必须明确计算机如何实施该工作,即需要先设计好算法,算法是软件开发的基础。,8,比如要计算,即1+2+3+100的值,最原始的解决方法(算法)是:算法1:步骤1:计算1+2的值;步骤2:将步骤1的结果加3;步骤3:将步骤2的结果加4;步骤98:将步骤97的结果加99;步骤99:将步骤98的结果加100;步骤99的结果即为值。,9,上述算法虽然可以实现计算值的目的,但太繁琐,不适于在计算机中实现。如果要计算的是,则需要999个步骤。其实,从上述算法的描述过程可以看出,从第2步开始,都是上一步的结果加一个整数,而这个整数是执行的步骤的序号加1(如步骤3加的数是4),一直到步骤99,都有相同的模式。,10,为此,上述算法可以改写为:算法2:步骤1:100=N;步骤2:1=Sum;步骤3:1=i;步骤4:如果i小于N,执行步骤5,否则转向骤8;步骤5:i+1=i;步骤6:Sum+i=Sum;步骤7:转向步骤4;步骤8:输出Sum的值。,11,显然,改进的算法描述比原始的解决方案要简洁。如果要计算,只要把步骤1中的“100=N”改为“10000=N”即可!从上述两个算法可以看出,解决同一问题可以有多个不同的算法,但不同的算法可能在执行效率、编程实现等方面不同。,12,算法应该具有下述特性:有穷性:一个算法应该包含有限的执行步骤,而不能是无限的。如上述第一个算法,执行99个步骤,第二个算法通过步骤4的判断,决定程序继续执行,还是执行步骤8,即停止程序执行。确定性:算法中的每一个步骤都要有明确的含义,不能出现模棱两可的含义。,13,有零个或多个输入:所谓输入是指算法在执行时,需要从输入设备得到的数据。如上述第二个算法中,在步骤1中,如果用户输入的是100并保存到N中,则计算的是的值,如果用户输入的是1000并保存到N中,则计算的是的值。,14,有一个或多个输出:算法执行的目的是通过对相关数据的处理,得到一个或多个结果,这些结果就是输出内容。如上述算法,最后得到的结果都是累加和。有效性:算法中的每一步执行都应该是有效的,这样才能确保整体算法的有效。比如有这样的算法描述:0=x;1/x=y。由于x的值是0,作为被除数是无效的,则对y的赋值则是无效的。,15,算法除使用上述自然语言描述外,还可以使用流程图表示。常用流程图符号如图2-1所示。,16,算法2使用流程图表示,如图2-2所示。,17,2.2数据类型,不同的信息可能要使用不同的数据进行描述,比如某人的年龄可以用整数18描述,姓名用字符串“李刚”描述。如果在程序中出现下面的代码:“李刚”100则VisualBasic2005编译器会认为是错误代码,这是因为“李刚”和100对于运算符而言是两个无效的数据类型,即编译器能够检测两个运算对象的类型是否符合运算符的要求。,18,注意:如果字符串类重载了运算符,且运算对象是字符串和整数,则“李刚”100是有效的语句,否则“李刚”100是无效语句。因此,在程序中根据要描述的信息的不同,确定正确的数据类型非常重要!,19,2.2.1基本数据类型,20,21,22,虽然VisualBasic2005支持的数据类型比较多,但只要熟悉各种数据类型,在编程时就能选择合适的数据类型表示信息了。确定数据类型时,可遵循下面的原则:如果存储的信息只包含True和False时,使用Boolean数据类型。提示:在VisualBasic2005中,True在内部存储为-1,而False存储为0。在编程时,任何非零值都代表True,因此将数值转换为Boolean类型时,VisualBasic2005将0转换为False,其它值都转换为True。,23,如果要存储文本内容,如人的姓名、地址等信息,使用String数据类型。String数据类型可以存储任何有效的字母、汉字、数字(这里的数字按字母处理,如12包括字母“1”和字母“2”)和非字母字符(如回车换行)等。如果存储的数据不包含小数点且在-32768到32767之间的数字,使用Short数据类型。如果存储的数据不包含小数点且超出了Short范围的数字,使用Integer或Long数据类型。如果存储的数据包含小数点,使用Single数据类型。如果要存储的数据非常大,或进行复杂的数学运算,使用Double数据类型。要存储金额,使用Decimal数据类型。,24,如果要存储日期或时间,使用Date数据类型。使用Date数据类型时,VisualBasic2005能够识别常见的日期和时间格式,如存储“1/1/2008”,VisualBasic2005不会将该值看成文本字符串,而是处理为日期数据:2008年1月1日。不同的数据类型占用不同大小的内存空间,为了节省系统资源,最好使用占用内存最少但又能够存储所有可能值的数据类型。例如,存储人的年龄值,最好使用Byte数据类型,而不使用Integer或Long数据类型。如果将变量或数组定义为Object数据类型,则变量或数组可以存储任意类型的数据。VisualBasic2005在变量或数组元素赋值时确定具体使用的数据类型。Object的默认值为Nothing(空引用)。,25,提示:Object数据类型为引用类型。但是,当Object变量引用值类型的数据时,VisualBasic将此变量视为一个值类型。无论它引用什么数据类型,Object变量都不包含数据值本身,而是指向该值的一个指针。它总是在计算机内存中使用4个或8个字节,但这不包括表示变量值的数据的存储。由于使用指针定位数据的代码的缘故,访问持有值类型的Object变量比访问显式声明类型的变量速度稍慢。,26,2.2.2数据类型转换,一般情况下,VisualBasic2005不允许将一种类型的数据赋值给另一种类型的变量。改变值的数据类型称为“类型转换”。转换到取值范围更大或精度更高的数据类型被称为向上转换(收缩转换);而转换到取值范围更小或精度更低的数据类型被称为向下转换(扩张转换)。VisualBasic2005通常向上转换,而不向下转换。例如,可以将Single变量的值赋给Double类型的变量,因为这样操作不会丢失任何数据:Double数据类型的精度比Single数据类型的精度更高。但在不使用数据类型转换函数进行显式类型转换时,如果将Double变量的值直接赋给Single类型的变量,有可能丢失数据。,27,下面介绍的类型转换函数采用内联方式编译,即转换代码是计算表达式的代码的一部分,即不是通过调用一个过程来完成转换,这会使执行速度更快。数据类型转换函数分为两类:CType函数Ctype函数的格式为:CType(expression,typename)其中expression是任何有效的表达式。Typename是任何在Dim语句的As子句内合法的表达式,即任何数据类型、对象、结构、类或接口的名称。例如:DimdblVariableAsDouble=1.7976931348623156E+38DimsngVariableAsSinglesngVariable=CType(dblVariable,Single),28,提示:如果在运行时转换失败,将会引发相应的异常。如果收缩转换失败,最常见的结果是OverflowException。如果未定义转换,将会发生InvalidCastException。例如,如果expression的类型为Object,并且其运行时类型没有转换为typename,则可能会发生这种情况。如果expression或typename的数据类型为已经定义的类或结构,则可以在该类或结构中将CType定义为转换运算符。这将使CType用作重载运算符。如果这样做,则可以控制转换在类或结构之间进行的转换的行为,包括可能引发的异常。Object数据类型为引用类型。但是,当Object变量引用值类型的数据时,VisualBasic将此变量视为一个值类型。,29,专用转换函数这种类型转换函数的格式为:函数名(表达式)将“表达式”的类型转换为转换函数返回的类型。表2-2列出了这种数据类型转换函数的函数名、返回数据类型和对表达式的说明。使用这种类型转换函数比较简单,如将Double变量的值赋给Single类型的变量,可以使用如下语句:DimdblVariableAsDouble=1.7976931348623156E+38DimsngVariableAsSinglesngVariable=CSng(dblVariable),30,表2-2数据类型转换函数说明,31,表2-2数据类型转换函数说明,32,提示:将一个非整数值转换为整型时,整数转换函数(CByte、CInt、CLng、CSByte、CShort、CUInt、CULng和CUShort)将移除小数部分,并将该值舍入为最接近的整数。如果小数部分正好是0.5,整数转换函数将其舍入为最接近的偶数整数。例如:DimintNumberAsInteger=1intNumber=intNumber/2虽然1/2的结果是0.5,但intNumber的类型为整数,经过四舍五入,0.5舍入为0,结果是intNumber的值为0。如果intNumber=3,则经过intNumber=intNumber/2运算后,intNumber的值为2,即1.5舍入为2。如果intNumber=5,则经过intNumber=intNumber/2运算后,intNumber的值为2,即2.5舍入为2。这种四舍五入的方式有时称为“四舍六入五成双”,其目的是弥补在将许多这样的数字相加时可能会累积的偏量。,33,如果传递给函数的“表达式”的值超出要转换成的数据类型的范围,将发生OverflowException异常。异常处理在第4章中介绍。CDate能够识别符合日期和时间的文本,但不能识别数值。可以使用IsDate函数确定一个值是否可转换为日期和时间。如下代码所示:DimdteValueAsDateDimstrValue=1/30/2008IfIsDate(strValue)Then判断strValue是否是有效的日期或时间格式的字符串dteValue=CDate(strValue)EndIf涉及日期的类型转换函数根据应用程序的当前区域设置进行转换。例如,CDate依据系统的区域设置来识别日期的格式。必须以正确的顺序为区域设置提供日、月、年数据,否则可能无法正确解释日期。,34,2.3变量与常量,变量就是在程序执行过程中用来存储值的容器。每个变量都有一个名字,称为变量名。如算法2中的“1=i”,表示把值1保存到变量i中。变量的值在程序执行过程中可以修改,如算法2中的“i+1=i”,表示把i的当前值加1后再保存到变量i中。也可以通过变量名来引用变量的值,如算法2中“Sum+i=Sum”,表示Sum的当前值和i的当前值相加(通过变量名i引用i存储的值),然后保存到变量Sum中。,35,2.2.1变量的命名规则,VisualBasic2005中变量的命名必须遵循下列规则:必须以字母或下划线(_)开头。必须只包含字母、十进制数字、下划线或汉字。如果名称以下划线开头,则必须至少包含一个字母、十进制数字或汉字。长度不能超过1023个字符。不能使用VisualBasic2005中的关键字作为变量名。提示:Sub,Dim,While等在VisualBasic2005中具有特殊的含义,是构成VisualBasic2005编程语言的基础,因此称为关键字。,36,1023个字符的长度限制还适用于完全限定名的整个字符串,如outerNamespace.middleNamespace.innerNamespace.thisClass.thisElement。VisualBasic2005中变量名称不区分大小写,即编译器在比较两个只有字母大小写不同的名称时,将它们解释为相同的名称。如VisualBasic2005编译器将ABC和abc视为相同的已定义的变量名。注意:在代码编辑器代码行中输入无效变量名时,在“错误列表”窗口中会提示“关键字作为标识无效”的错误信息提示。,37,实际使用时,通过在变量名前添加前缀表示其数据类型(匈牙利表示法),表2-3列出了常用数据类型的前缀。而且变量名应该尽可能地短,这样能够提高代码的可读性,并减少代码行的长度和源文件大小。,38,表2-3常用数据类型的前缀,39,2.2.2声明变量,默认情况下,VisualBasic2005要求在使用变量前进行声明变量,这被称为显式变量声明。声明变量使用Dim语句,格式为:Dim变量名As数据类型其中变量名必须符合变量的命名规则,数据类型是前面介绍的基本数据类型或用户自定义的类型/类。可以在一行中同时声明多个同种类型的变量,如:Dimx,yAsInteger也可以在Dim语句后声明多个不同类型的变量,如:DimwAssingle,hAsInteger注意:最好的变量声明方式是一行只声明一个变量,这样便于代码阅读。,40,在程序中引用变量之前,应该确保变量已经被赋值,否则可能使用变量的默认初始值。String数据类型的默认初始值是Nothing,其含义是不包含任何文本字符串。如果在声明变量时能够确定变量的初始值,可以在声明的语句中为变量赋初始值。如:DimstrNameAsString=“李刚”注意:赋初始值后变量的值在程序中还可以改变。,41,在以前的VisualBasic语言中,允许在程序中随时创建变量(隐式变量声明),甚至不进行严格的类型检查。先看下面的代码:DimstrNameAsStringstrName=“李刚”MessageBox.Show(strNamee,“学生姓名”)程序编译、运行时是否会发生错误?MessageBox消息对话框能显示字符串“李刚”吗?注意,在MessageBox.Show(strNamee,“学生姓名”)中strNamee变量名多了一个字母e。,42,为了回答上面的问题,需要先看看VisualBasic2005在编译时对变量的选项:用鼠标右键单击“解决方案资源管理器”中的项目名并从上下文菜单中选择“属性”。在“项目属性”页中,单击左边的选项卡“编译”。在“OptionExplicit”下面的下拉列表中可以选择“On”或“Off”。如图2-3所示。,43,如果显式变量声明被启用(Optionexplicit选择On)时,VisualBasic2005提示未声明名称“strNamee”的错误信息。如果显式变量声明被禁用(Optionexplicit选择Off)时,上述代码不提示任何错误,但运行结果是MessageBox消息对话框没有显示任何内容。这是因为显式变量声明被禁用时,编译器检查到“strNamee”时认为strNamee是一个新变量,而且由于该变量在此之前没有被声明,则strNamee自动被声明为Object类型的变量,由于Object类型变量的默认值为空,所以MessageBox消息对话框没有显示任何内容。注意:最好启用变量名的显示声明功能,以便在编程时及时发现变量名输入错误,减少程序出错。,44,图2-3VisualBasic2005在编译时对变量的选项,45,2.2.3严格类型检查,严格类型检查是指VisualBasic2005执行数据类型检查的过程:只能将数据类型正确的值赋给变量。如果要将值赋给取值范围更小或精度更低的变量,必须使用类型转换函数。先看下面的代码:DimdblVariableAsDouble=1.7976931348623156E+38DimsngVariableAsSinglesngVariable=dblVariable,46,类型检查选项(Optionstrict)启用、禁用如图2-3所示。当类型检查选项禁用(Optionstrict选择Off)时,上述代码不提示任何警告、错误信息。当类型检查选项启用(Optionstrict选择On)时,VisualBasic2005提示不允许从“Double”到“Single”隐式转换的错误信息,解决办法是使用类型转换函数:sngVariable=CSng(dblVariable)注意:启用严格类型检查可迫使程序员编写出更好的代码。,47,2.2.4常量,常量是指在程序运行过程中其值始终不变的量,在VisualBasic2005中有三种常量:直接常量、声明符号常量和系统提供的常量。直接常量表2-1列出的各种数据类型的常数,反映了一定的量。数值型常量直接表示,如120,0.5等。日期型常量使用#包括,如#1/31/2008#表示2008年1月31日这个日期常量。字符串常量使用双引号“”包括,如“VisualBasic2005程序设计”。,48,声明符号常量如果有一个值在应用程序中始终不变,则可以定义一个命名常数,并用该常数取代该值。声明符号常量的格式为:Const符号常量名As数据类型=表达式其中Const符号常量名:Const是关键字,说明后面的名称是常量名,符号常量名的命名规则和变量的命名规则一样。数据类型:见表2-1列出的数据类型。表达式:表达式的返回值作为符号常量名所代表的值,因此,表达式的返回值必须要和符号常量的数据类型匹配。,49,例如:ConstPIAsSingle=3.14声明常量PIConstc_dateStartasDate=#1/10/1949#声明常量c_dateStart注意:常量一旦声明,在其后的代码中只能对其引用,不能再改变其值。使用声明符号常量的优点:一是名称比值更容易记忆;二是如果该常量的值需要在源程序中修改,只需更改Const语句即可,如上面的PI常量,如果PI的精度不够,要改变为3.1415926,则只需ConstPIAsSingle=3.1415926即可,这样在后续代码中凡是使用PI的表达式中,PI的值由3.14改变为3.1415926了。,50,系统提供的常量VisualBasic2005提供的一些常量,如当调用输出和显示函数时,可以在代码中使用下列常数来代替实际值。如表2-4所示。,51,表2-4调用输出和显示函数时常用控制常数,52,2.2.5使用变量,可以通过变量名来引用变量的值,或对变量进行操作。为变量赋值时,必须要根据变量的类型进行:如果使用字符串常量为字符串变量赋值,则字符串的值必须放在引号中,如:DimstrNameAsStringstrName=“李刚”为日期型变量赋值时,可以通过日期常量赋值,如:DimdateBirthdayAsDatedateBirthday=#1/30/1990#当然,也可以使用前面介绍的类型转换函数为日期型变量赋值,如:dateBirthday=CDate(“1/30/1990”)。对于数值型变量,可以直接使用数值为其赋值,如:DimintClickCountAsIntegerintClickCount=0,53,例2.1演示变量的引用及赋值操作。具体操作过程:新建项目,选择“Windows应用程序”,并把“名称”修改为“变量示例”,然后单击“确定”。在解决方案资源管理器中把“Form1.vb”文件名改为“变量示例.vb”。打开窗体设计视图,选择Form1窗体,在属性框中修改窗体的属性:Name改为“frmVariables”;StartPosition改为“CenterScreen”;Text改为“变量示例程序”。在“工具箱”中选择Button控件,单击选择,然后添加到窗体中。选择Button按钮,在属性框中修改按钮的属性:Name改为“btnVariables”;Text改为“变量值加1演示”。双击Button按钮,在代码编辑器中添加对btnVariables按钮Click事件响应的代码。,54,图2-4变量演示程序设计视图,55,PrivateSubbtnVariables_Click(ByValsenderAsSystem.Object,-ByValeAsSystem.EventArgs)HandlesbtnVariables.Click声明变量DimintVariablesAsIntegerintVariables=100显示变量的当前值MessageBox.Show(变量的当前值是:&intVariables,变量示例)变量的值加1intVariables=intVariables+1显示变量的当前值MessageBox.Show(变量值加1后的值是:&intVariables,变量示例)EndSub,56,2.4字符串类型,字符串作为特殊的数据类型,不同于数值型数据,很多数值型的运算符不能直接用于字符串类型数据。但字符串又在程序设计中非常重要,因此,VisualBasic2005提供了许多操作字符串的函数。对字符串操作的讨论结合下面的例子进行。,57,例2.2字符串操作演示。具体操作过程:新建项目,选择“Windows应用程序”,并把“名称”修改为“字符串操作演示”,然后单击“确定”。在解决方案资源管理器中把“Form1.vb”文件名改为“字符串操作.vb”。打开窗体设计视图,选择Form1窗体,在属性框中修改窗体的属性:Name改为“frmStrOption”;StartPosition改为“CenterScreen”;Text改为“字符串操作演示”。在“工具箱”中选择Label控件,选择并添加到窗体中,修改该控件的属性:Name改为“lblInput”;Text改为“请输入字符串:”。在“工具箱”中选择TextBox控件,选择并添加到窗体中,修改该控件的属性:Name改为“txtInputBox”;Anchor改为“Top,Bottom,Left,Right”;MultiLine改为True;Text为空;ScrollBars改为“Vertical”。,58,提示:TextBox控件的MultiLine若为True,则在文本框中可输入多行(回车键换行),若为False,则只能输入一行。ScrollBars用于指示多行TextBox控件显示时是不带滚动条、带有水平滚动条、带有垂直滚动条还是同时带有这两种滚动条。默认为None。若要与窗体一起动态调整控件的大小及保持正确的位置,可使用Windows窗体控件的Anchor属性。Anchor属性定义控件的定位点位置。当控件锚定到某个窗体时,如果该窗体的大小被调整,该控件维持它与定位点位置之间的距离不变。例如,如果一个TextBox控件锚定于窗体的左、右和底边缘,那么当调整该窗体的大小时,该TextBox控件将在水平方向上调整大小,以便维持与该窗体右边和左边的距离不变。另外,控件垂直定位其自身,以便其到窗体底边的距离始终不变。如果控件未锚定而窗体的大小被调整,则该控件相对于窗体边缘的位置将发生变化。,59,在“工具箱”中选择Button控件,选择并添加到窗体中,修改该控件的属性:Name改为“btnShow”;Text改为“显示”。在“工具箱”中选择Button控件,选择并添加到窗体中,修改该控件的属性:Name改为“btnQuit”;Text改为“退出”。,60,双击“退出”按钮,在代码编辑器中添加对“退出”按钮Click事件响应的代码。PrivateSubbtnQuit_Click(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesbtnQuit.Click结束程序并退出窗体Me.Close()EndSub,61,双击“显示”按钮,在代码编辑器中添加对“显示”按钮Click事件响应的代码。PrivateSubbtnShow_Click(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesbtnShow.Click显示输入到TextBox中的内容MessageBox.Show(txtInputBox.Text,输入内容)EndSub提示:txtInputBox.Text表示引用文本框对象txtInputBox的Text属性值,即文本框输入的内容。,62,2.4.1连接字符串,连接字符串是指把多个字符串连接到一起,形成一个新的字符串。字符连接非常有用,比如要删除某一用户的信息,弹出对话框进行提示“您是否确认要删除用户XXX”,这里XXX可能随着删除的用户的不同而不同,而“您是否确认要删除用户”则对任何被删除的用户都一样进行提示,这样在程序设计时,只要把“您是否确认要删除用户”和存储用户名的字符串变量进行连接即可。字符串连接的运算符为“&”。,63,字符串连接也可以使用内联式的操作方式,如上述“显示”按钮Click事件响应的代码可改为:PrivateSubbtnShow_Click(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesbtnShow.Click输出字符串内容MessageBox.Show(您输入的内容是:&vbCrLf&vbTab&txtInputBox.Text,输入内容)EndSub提示:在VisualBasic2005中,还可以使用“+”来连接字符串,但一般不推荐使用。,64,2.4.2计算字符串长度,统计字符串所包含的字符的个数,有两种方式:使用Len()函数Len()函数的格式为:Len(expression)这里expression可能是:一个字符串。则Len()函数返回字符串中的字符个数;其它数据类型的变量。则Len()函数返回存储该数据类型所需的字节数。,65,例如:DimstrOutputAsString=”VisualBasic2005程序设计”DimintStrLen,intIntLenAsIntegerintStrLen=Len(strOutput)结果为22,字符个数包含空格,一个汉字计算为一个字符intIntLen=Len(intStrLen)结果为4,存储一个Integer类型数据所需的字节数,66,使用Length()属性也可以使用字符串变量的Length属性,得到字符串所包含的字符的个数。例如:DimstrOutputAsString=”VisualBasic2005程序设计”DimintStrLenAsIntegerintStrLen=strOutput.Length()结果为22,字符个数包含空格,一个汉字计算为一个字符.,67,2.4.3子字符串操作,子串是指一个字符串的一部分连续字符。子串的操作主要包括:提取字串SubString()是字符串数据类型变量的方法,可以在字符串的任何位置提取一个子串。其格式为:SubString(startIndexAsInteger,lengthAsInteger)AsStringstartIndex指提取子串的开始位置;如果省略length,则提取的子串为从startIndex到字符串结束的所有字符,否则提取从startIndex开始,长度为length的子串。提示:startIndex与length之和如果不是字符串内的有效位置,或startIndex和length之一小于零,都会出现ArgumentOutOfRangeException的异常。,68,字符串包含判断Contains()是字符串数据类型变量的方法,判断在字符串中是否包含指定的子串。其格式为:Contains(valueAsString)AsBooleanValue为被包含的子串。如果value出现在该字符串中,或者value为空字符串(),则返回值为True;否则返回值为False。,69,替换子串替换字串是对文本内容(字符串)的主要操作之一,如MSWord字处理软件中的“替换”功能。替换字符串的方法Replace()是字符串数据类型变量的方法,其格式为:Replace(oldValueAsString,newValueAsString)AsString返回值为字符串中所有oldValue子串替换为newValue子串后的新字符串。,70,定位子串的位置IndexOf()是字符串数据类型变量的方法,可以定位字符串中指定子串的起始位置。其格式为:IndexOf(valueAsString,startIndexAsInteger)AsIntegervalue为被定位的字串,如果不指定startIndex,则从字符串的起始位置开始搜索定位,否则从字符串的startIndex位置开始搜索定位。如果value子串存在,则返回其起始位置的值,否则返回-1。,71,删除字符Remove()是字符串数据类型变量的方法,可以在指定位置删除指定个数的字符。其格式为:Remove(startIndexAsInteger,countAsInteger)AsStringstartIndex是删除字符的起始位置;如果省略count,则删除从startIndex到字符串结束的所有字符,否则删除从startIndex开始的count个字符。返回值为删除后剩余的字符串。,72,2.5日期类型,日期是一种独特的数据类型,既可以像字符串一样进行连接和分解,又可以像数值类型一样进行加减运算。因此,日期数据类型有专门的处理函数。比如,通过日期数据类型变量的特定属性,获得日期和时间的特定内容(如dteTodayTime.Month返回日期变量dteTodayTime的月份值);通过调用日期数据类型变量的特定方法,对日期的特定内容进行增减(如dteTodayTime.AddDays(10)为日期变量dteTodayTime中的天数加10天)等。对日期数据类型的常用操作结合下面的例子进行说明。,73,例2.3日期数据类型操作演示。具体操作过程:新建项目,选择“Windows应用程序”,并把“名称”修改为“日期数据类型操作演示”,然后单击“确定”。在解决方案资源管理器中把“Form1.vb”文件名改为“日期数据类型操作.vb”。打开窗体设计视图,选择Form1窗体,在属性框中修改窗体的属性:Name改为“frmDateOption”;StartPosition改为“CenterScreen”;Text改为“日期数据类型操作演示”。为窗体添加Button控件,修改该控件的属性:Name改为“btnShowDate”,Text改为“显示日期”。,74,2.5.1获取当前的系统日期和时间,VisualBasic2005通过DateTime结构实现获取当前的系统日期和时间。获取当前的系统日期使用DateTime的Today属性,获取当前的系统日期和时间使用DateTime的Now属性。继续例2.3的操作,双击“显示日期”按钮,在代码编辑器中添加对“显示日期”按钮Click事件响应的代码。,75,PrivateSubbtnShowDate_Click(ByValsenderAsSystem.Object,_ByValeAsSystem.EventArgs)HandlesbtnShowDate.Click定义变量DimdteTodayAsDateDimdteTodayTimeAsDate获取当前的系统日期dteToday=DateTime.Today获取当前的系统日期和时间dteTodayTime=DateTime.Now显示日期和时间DimstrDateShowStrAsStringstrDateShowStr=当前系统日期:&dteTodaystrDateShowStr=strDateShowStr&vbCrLf&当期系统日期和时间:&dteTodayTimeMessageBox.Show(strDateShowStr)EndSub,76,2.5.2格式化日期和时间,通过VisualBasic2005提供的格式化日期和时间功能,可以控制日期和时间的显示格式。日期和时间的格式化可以通过Format()函数实现,Format函数的格式:Format(ByValExpressionAsObject,OptionalByValStyleAsString=)AsString其中Expression为日期和时间表达式,Style为有效的格式字符串,函数返回以Style描述格式显示的Expression字符串。表2-5列出了日期和时间格式字符串的有效字符。,77,表2-5日期和时间格式字符串的有效字符,78,79,80,试一试:在例2.3中添加相应的代码,输出dteTodayTime的日期、时间组成部分,如:dteTodayTime.Hour返回dteTodayTime中的小时部分值;dteTodayTime.Minute返回dteTodayTime中的分钟部分值;dteTodayTime.Second返回dteTodayTime中的秒部分值;dteTodayTime.Millisecond返回dteTodayTime中的毫秒部分值;dteTodayTime.Year返回dteTodayTime中的年部分值;dteTodayTime.Month返回dteTodayTime中的月部分值;dteTodayTime.DayOfYear返回dteTodayTime中年值中的第几天。,81,在例2.3中添加相应的代码,实现对dteTodayTime的日期、时间组成部分值的修改,如:dteTodayTime.AddDays(10),dteTodayTime中的天数加10;dteTodayTime.AddYears(1),dteTodayTime中的年份数值加1;dteTodayTime.AddHours(2),dteTodayTime中的小时数值加2。,82,2.6运算符,VisualBasic2005提供了非常丰富的运算符,通过运算符和操作数的组合形成表达式,实现程序设计中的各种运算。,83,2.6.1运算符优先级,如果表达式中出现几种运算符,将按照预先确定的称为“运算符优先级”的顺序计算和解析各个部分。当表达式包含不止一种运算符时,则按照下列规则对其进行计算:不同的算术运算符和字符串连接运算符具不同的优先级顺序,它们的优先级均高于比较运算符、逻辑运算符和位运算符。比较运算符具有相同的优先级,它们的优先级均高于逻辑运算符和位运算符,但低于算术运算符和字符串连接运算符。不同的逻辑运算符和位运算符具有不同的优先顺序,它们的优先级均低于算术运算符、字符串连接运算符和比较运算符。具有相同优先顺序的运算符将按照它们在表达式中出现的顺序从左至右进行计算。,84,运算符的计算优先级顺序如下:算术运算符和字符串连接运算符优先级从高到低依次是:求幂();一元标识(+、);乘法和浮点除法(*、/);整数除法();取模(Mod);加法和减法(+、),字符串连接(+);字符串连接(&);算术移位()。所有关系运算符(=、=、Is、IsNot、Like、TypeOfIs)具有相同的优先级。逻辑运算符和位运算符优先级从高到低依次是:非(Not);与(And、AndAlso);或(Or、OrElse);异或(Xor)。提示:在表达式中,“=”是相等比较运算符,不是赋值运算符。字符串连接运算符(&)不是算术运算符,但它在优先级方面与算术运算符属于一组。,85,2.6.2算术运算符,求幂运算求幂运算是指求以某个数为底、以另一个数为指数的幂。指数部分可以是任何数,在VisualBasic2005中可用下面的代码计算:DimdblR1AsDouble=22计算22DimdblR2AsDouble=20.5计算20.5,即求2的平方根DimdblR3AsDouble=2(1/3)求2的立方根,86,正负符号运算+、的一元运算用来表示正负符号,在VisualBasic2005中可用下面的代码计算:DimdblR1AsDouble=-22计算-22注意:如果要计算(-2)2,则要写成(-2)2,因为符号“-”的优先级低于“”,没有使用括号之前,会先执行幂运算,然后执行-一元符号运算。注意:如果要计算(-2)2,则要写成(-2)2,因为符号“-”的优先级低于“”,没有使用括号之前,会先执行幂运算,然后执行-一元符号运算。,87,乘运算*通常手写的“”在VisualBasic2005中使用“*”,如要计算“2.52”,可用下面的代码计算:DimdblR1AsDouble=2.5*2计算2.52乘运算*通常手写的“”在VisualBasic2005中使用“*”,如要计算“2.52”,可用下面的代码计算:DimdblR1AsDouble=2.5*2计算2.52,88,除运算/通常手写的“除”在VisualBasic2005中使用“/”,如要计算“5/2.5”,可用下面的代码计算:DimdblR1AsDouble=5/2.5计算52.5,89,整除运算如果将两个数相除只返回以整数形式表示的结果,则可以使用整除运算。如:DimdblR1AsDouble=51.5上述计算结果为2,这是因为在执行除法之前,VisualBasic2005会将所有浮点数值表达式转换为Long,因此,在计算前先把1.5转换为2。提示:转换为Long服从“四舍六入五成双”的原则。如果OptionStrict为On,将产生编译器错误。如果OptionStrict为Off,若值超出Long数据类型(VisualBasic)的范围,则可能会产生OverflowException。,90,取模运算Mod取模运算是对两个数执行除法运算,但只取余数,取模运算使用关键字Mod。如:DimdblR1AsDouble=5Mod2.5结果为0,即5除以2.5商2余0DimdblR2AsDouble=13.6Mod5结果为3.6,即13.6除以5商2余3.6,91,加、减运算二元加、减是常用的运算,如:DimdblR1AsDouble=5+1.5DimdblR2AsDouble=5-1.5,92,左移位对整型数值的二进制位执行向左移位运算,“”为两个连续的小于符号“”。如DimintXAsInteger=9intX=intX2则IntX的计算结果为36,这是因为9二进制表示为(00000000000000000000000000001001)2进行左移2位操作后,为(00000000000000000000000000100100)2即十进制为36。左移位的缩略格式为:intX=2等价于intX=intX对整型数值的二进制位执行向左移位运算,“”为两个连续的大于符号“”。如:DimintXAsInteger=9intX=intX1则IntX的计算结果为4,这是因为9右移1位后,二进制值为:(00000000000000000000000000000100)2即十进制为4。右移位的缩略格式为:intX=1等价于intX=intX1一个整数右移m位,相当于该整数除以2m取整,如4为921取整的结果。,94,提示:被移位的值和需要移动的位数只能是整型数据。移位不循环,即不会将在结果的一端移出的数位从另一端重新移入。在左移位运算中,丢弃移出结果数据类型范围的数位,而将右端空出的数位位置设置为零;在数学右移位运算中,将丢弃移出最右侧数位位置的数位,并将最左侧的(符号)数位传播到左端空出的数位位置。如果被右移位操作的数为负值,空出的位置将设置为1(负数用补码表示);否则,将设置为零。,95,2.6.3关系运算符,关系运算符用于对两个数据进行比较,返回结果是True或False。表2-6列出了关系比较运算符以及判定result是为True还是为False的条件。,96,表2-6关系比较运算符以及判定条件,97,如:DimblnR1AsBoolean=53结果为TrueDimblnR2AsBoolean=50结果为TrueDimblnR3AsBoolean=5=4结果为False,第一个“=”是赋值,第二个“=”是关系运算DimblnR4AsBoolean=1.0=A结果为True,字母a的ASCII码值比字母A的ASCII码值大,98,Is和IsNot运算符是对象引用关系运算符。它们不比较两个对象的值,只确定两个对象变量是否引用相同的对象实例。Like运算符根据模式来比较字符串,其格式为:result=StringLikepattern,99,模式匹配功能允许将Stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/GDACERCU 0009-2020废旧动力蓄电池回收制取电池级硫酸镍绿色工艺规范
- 高中化学说课课件教学
- 高中化学冶金课件
- 2025学年四川省高三语文秋季入学摸底考试卷附答案解析
- 半导体行业市场前景及投资研究报告:走向更高端国产掩膜版厂商2.0时代
- 高一化学钠课件
- 砂石场物流管理人员劳动合同及供应链管理协议
- 景观园林住宅区物业合同终止及园林景观维护协议
- 体育休闲公园空地租赁及赛事运营管理合同
- 离婚协议书范本:共同债务处理明确责任归属
- 大学英语写作教学课件
- 国家安全生产法2025
- 2025年中航油招聘笔试参考题库附带答案详解
- DB54∕T 0275-2023 民用建筑节能技术标准
- 班级小法庭培训课件
- 前交叉韧带损伤治疗讲课件
- 电销公司风控管理制度
- 办公室设备领用管理制度
- 部编版九年级历史上册第19课法国大革命和拿破仑帝国 课件(内嵌视频)
- 多发性结肠息肉的护理查房
- 2025至2030年中国环保胶黏剂行业市场运行格局及产业需求研判报告
评论
0/150
提交评论