1、Visual Basic.NET 程序设计,主讲人:蒋忠中 东北大学工商管理学院,第2章 Visual Basic.NET语法基础,教学目的,教学要求,重点难点,教学内容,教学目的,通过本章的学习,了解数据类型、常量和变量的概念,合理的确定变量的类型,掌握数组的定义,数组元素的引用方法,会正确的书写算术表达式、字符串表达式、关系表达式和逻辑表达式,正确使用常用的字符串函数,日期时间函数,数学函数和随机函数。,BACK,教学要求,了解数据类型的概念,掌握整型,字符型,字符串,单精度,日期时间型的类型名,了解枚举类型的概念; 掌握变量和存储单元的对应关系,掌握上述类型常量的表示方法; 掌握数组的定
2、义和引用数组元素的方法,了解动态数组的概念; 能够正确书写算术表达式、字符串表达式,关系表达式和逻辑表达式,正确理解字符串运算符、逻辑运算符; 掌握常用的字符串函数、数学函数和随机函数的书写格式和功能。,BACK,重点难点,重点: 变量和存储单元的对应关系; 数组的概念,数组元素的引用方法; 算术表达式、字符串表达式、关系表达式和逻辑表达式的正确书写; 字符串函数、日期时间函数、数学函数和随机函数。 难点: 数据类型的概念; 变量和存储单元的对应关系; 数组的概念; 字符串的运算、逻辑运算、字符串函数和随机函数。,BACK,教学内容,2.1 数据类型,2.2 常量和变量,2.3 数组,2.4
3、运算符与表达式,2.5 常用内部函数,2.1 数据类型,2.1.1 基本数据类型,2.1 数据类型,2.1.1 基本数据类型,2.1 数据类型,2.1.1 基本数据类型,给变量赋超出其表示范围的值,将导致出错; 带小数的数值赋给整数变量,则系统对小数部分进行四舍五入处理; 日期型数据要用分界符#。# 日期数据 #,2.1 数据类型,2.1.2 复合数据类型,1结构的声明,结构的声明由Structure语句开始,由End Structure语句结束。例如:Structure StudentDim Number As LongDim Name As StringDim Age As Integer
4、Dim Score As SingleEnd Structure,结构名,成员,2.1 数据类型,2.1.2 复合数据类型,2结构成员的访问,定义结构类型以后,就可以声明该结构类型的变量。Dim S1 As Student访问结构变量的字段,必须使用“.”号。S1.Number=980205S1.Name=“张明”S1.Age=20S1.Score=86.5,2.1 数据类型,2.1.2 复合数据类型,3结构的嵌套,一个结构中包含其它结构类型的字段,构成结构的嵌套。 Structure ScoreDim YuWen As SingleDim ShuXue As Single Dim WuLi
5、As SingleDim YingYu As Single End Structure Structure Student2Dim Number As LongDim Name As StringDim Age As IntegerDim ChengJi As Score End Structure,ChengJi是结构Student2的一个域,是Score结构类型,2.1 数据类型,2.1.2 复合数据类型,3结构的嵌套,嵌套的结构变量,需要使用多级“.”符号访问其字段。Dim S2 As Student2S2.Number=980206S2.Name=“李佳”S2.Age=19S2.Che
6、ngJi.YuWen=82.5S2.ChengJi.YingYu=65.0,2.1 数据类型,2.1.3 枚举类型,枚举类型用Enum语句创建。在默认情况下,枚举类型中的多个常量值依次赋初值为0,1,2,。 Public Enum DaysSundayMondayTuesdayWednesdayThursdayFridaySaturday End Enum,2.1 数据类型,2.1.3 枚举类型,在定义枚举类型时,可以为枚举常量显式赋值,通常使用小于零的值标示为无效。Public Enum DaysSundaySaturdayInvalid=-1End Enum在引用枚举类型成员时,必须使用枚
7、举类型名限定。X = Days.Sunday,2.1 数据类型,2.1.4 类型转换,将值从一种数据类型改变为另一种数据类型的过程被称为类型转换。,2.1 数据类型,2.1.4 类型转换,1扩展转换与收缩转换(标准扩展转换表),2.1 数据类型,2.1.4 类型转换,1显式转换与隐式转换(类型转换关键字表),使用类型转换关键字的类型转换,称为显式转换。,类型转换改变的是表达式值的类型,而不影响表达式中变量的值和类型,由系统自动完成的类型转换,称为隐式转换。Dim X As IntegerDim Y As SingleX=125Y=X,2.1 数据类型,2.1.4 类型转换,1显式转换与隐式转换
8、,125.0,MENU,2.2 变量和常量,2.2.1 常量,Const 常量名 As 类型 = 表达式VB.NET提供了一个管理常量类型的编译指令“Option Strict”。 当Option Strict为On时,必须指出常量的数据类型; 当Option Strict为Off时,编译器将为常量分配数据类型。Option Strict OnConst MinAge As Integer = 16Const PI AS Single = 3.14159或者:Option Strict OffConst Days = 365Const Salary = 2450,2.2 变量和常量,2.2.2
9、 变量,在程序运行过程中其值可以变化的量称为变量。变量的使用前需要声明,声明格式为:Dim 变量名 As 类型Dim Height As IntegerDim Score As SingleDim Name As StringDim A,B As Single,2.2 变量和常量,2.2.2 变量,变量名称必须遵守下列规则: 必须以字母、汉字或下划线(_)开头。 仅能由字母、数字、下划线或汉字组成。 以下划线开头,其后必须跟有其他字符。不能使用VB.NET保留字。变量名在变量的作用范围内不能重名。 例如:MyAge、_1、ab_453都是合法的变量名21abc、_、My.Name、Money$
10、都是非法的变量名。,2.2 变量和常量,2.2.2 变量,变量的有效范围是指,从其声明语句开始到包含它的程序块结束。 Private Sub Button1_Click( ) Dim AA As IntegerIf AA 0 Then Dim CC As SingleEnd If End Sub,AA的有效范围,CC的有效范围,MENU,2.3 数组,2.3.1 数组的定义,数组应该先定义后使用。定义数组可以使用Dim、ReDim、Static、Public、Protected、Private等语句: Dim:用于模块或过程中; ReDim:只用于过程中,定义动态数组; Static:只用于过
11、程中,定义静态数组; Public:用于模块中,定义全局数组 。,2.3 数组,2.3.1 数组的定义,1一维数组的定义,Dim 数组名(下标上界)As 类型名 Dim Myarray(5) As Integer 说明: (1)“数组名”的命名规则与变量相同。 (2)如果省略“As 类型名”,则定义的数组为Object类型。,2.3 数组,2.3.1 数组的定义,1一维数组的定义,(3)定义数组时只指定数组下标的上界,其下界为0,而且不能改变。 (4)定义时,系统会把 数值型数组中的所有元素初始化为0; 字符类型的数组初始化为空字符串; 布尔型的数组初始化为False等。 (5)通常,数组各元
12、素的类型是相同的。但是,当定义的数组是Object类型时例外。,2.3 数组,2.3.1 数组的定义,1一维数组的定义(内存分配示意图),内存单元,Myarray(0),Myarray(2),Myarray(1),Myarray(3),Myarray(5),Myarray(4),2.3 数组,2.3.1 数组的定义,2二维数组的定义,格式:Dim 数组名(第一维下标上界,第二维下标上界) As 类型名Dim Arr(3,4)As Integer,2.3 数组,2.3.1 数组的定义,2二维数组的定义,(1)二维数组在内存中“按行存放”。(2)定义的二维数组a(m,n),其第i行第j列的元素a(
13、i,j)在数组中的排列位置可以用i(n+1)+j+1计算。(3)在同一定义体中定义的变量、一维数组和二维数组必须是同一类型的数据。 Dim d,a(2),b(2,1) As Integer,2.3 数组,2.3.1 数组的定义,2二维数组的定义(内存分配图),内存单元,对应元素,A(0,0) A(0,1) A(0,2) A(0,3) A(1,0) A(1,1) A(1,2) A(1,3) A(2,0) A(2,1) A(2,2) A(2,3),Dim a(2,3) as integer 则,数组元素在内存中的存储。,2.3 数组,2.3.2 数组的初始化,1一维数组的初始化,Dim 数组名()
14、As 类型 = 常量1,常量2,常量n 数组初始化时,不能指定下标的上界; 元素个数由花括号中的常量个数决定; 各常量之间用逗号隔开; 常量的类型要与数组类型一致。 Dim numbers( ) As Single = 12,25,-6,2.3,0 ,2.3 数组,2.3.2 数组的初始化,2二维数组的初始化,Dim 数组名(,)As 类型 = 第一行值,第二行值,第n行值 内层花括号的个数等于二维数组的行数; 第一维下标的上界等于内层花括号个数减1 ; 内层花括号中常量的个数等于二维数组的列数; 第二维下标的上界等于内层花括号中常量的个数减1。 初始化二维数组时,每维数据的个数要一致。,2.
15、3 数组,2.3.2 数组的初始化,3多维数组的初始化,对于一个n(n=3)维数组来说,初始化时,等号左边括号中要用n-1个逗号指定数组维数,等号右边的花括号中的初值要放在n-1层嵌套的花括号中。,Dim a( , , ) As Integer = 1,1,4,5,2,1,1,5,7,4,3,7, 0,5,3,0,1,1,2.3 数组,2.3.2 数组的初始化,4. UBound函数和LBound函数,格式: UBound(数组名,n) LBound(数组名,n) UBound函数返回指定数组第n维的下标上界值; LBound函数返回指定数组第n维的下标下界值。 如果数组是一维数组,参数n可以
16、省略。 Dim a(,) As Short = 2, 3, 1, 2, 5, 4 DeBug.WriteLine(UBound(a, 1) DeBug.WriteLine(LBound(a, 2),2.3 数组,2.3.3 数组元素的引用,数组名(下标1,下标2,下标n) 下标可以是整型常数、变量或整型表达式; 下标取值必须在指定范围之内,即0到下标上界; 在引用数组元素时,数组名和维数必须与定义数组时一致。 Dim a()As Short = 3,2,4,9 Dim b(1,1)As Short b(1,0)= a(2)+ a(1) b(1,1)= a(0)- a(3),2.3 数组,2.3
17、.4 动态数组,1动态数组的定义,动态数组的定义分两个步骤:(1)用Dim、Public、Private等语句声明一个只有括号但没有下标的数组。(2)在过程中用ReDim语句重定义数组时,指定动态数组的下标上界。,使用ReDim语句的格式为:ReDim Preserve 数组名 (下标上界),2.3 数组,2.3.4 动态数组,1动态数组的定义,保留上次数组各元素的值,用Dim语句定义好的动态数组,被赋过值的变量,2.3 数组,2.3.4 动态数组,1动态数组的定义,使用ReDim语句: 可以多次对同一数组进行重定义,并对数组中的元素个数进行修改; 不能改变数组的维数和类型。,2.3 数组,2
18、.3.4 动态数组,1动态数组的定义,Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _ MyBase.ClickDim arr() As Integer, n As Integern = 1ReDim arr(n)arr(0) = 56 : arr(1) = 3Debug.WriteLine(arr(0) & “ “ & arr(1)n = 2ReDim arr(n)arr(2) = 23Debug.WriteLine(arr(0) & “ “ & arr(1) & “
19、“ & arr(2)n = 4ReDim Preserve arr(n)arr(3) = -10 : arr(4) = 24Debug.WriteLine(arr(0) & “ “ & arr(1) & “ “ & arr(2) & “ “ & arr(3) _& “ “ & arr(4) End Sub,Dim arr() As Integer, n As Integer,n = 1 ReDim arr(n) arr(0) = 56 : arr(1) = 3 Debug.WriteLine(arr(0) & “ “ & arr(1),n = 2 ReDim arr(n) arr(2) = 2
20、3 Debug.WriteLine(arr(0) & “ “ & arr(1) & “ “ & arr(2),n = 4 ReDim Preserve arr(n) arr(3) = -10 : arr(4) = 24 Debug.WriteLine(arr(0) & “ “ & arr(1) & “ “ & arr(2) & “ “ _ & arr(3) _& “ “ & arr(4),2.3 数组,2.3.4 动态数组,2Erase语句,Erase 数组名 释放数组的存储空间; 只能用在过程中。,MENU,2.4 运算符与表达式,2.4.1 算术运算符,a=2,2.4 运算符与表达式,2.
21、4.1 算术运算符,1指数运算与取负运算,指数运算比取负运算的优先级别要高,但当指数运算符后面紧临着取负运算符时,先进行取负运算。2-2求的是2-2,结果是0.25; (-2)-2求的是(-2)-2 ,结果是0.25;-2-2求的是 -(2-2 ),结果是-0.25。,2.4 运算符与表达式,2.4.1 算术运算符,2浮点除与整除运算,浮点除运算执行标准的除法运算,结果为浮点数。13.49/2.49=5.42 整除运算执行整数除法运算,即运算符的操作数都要先四舍五入取整,其运算结果被截断为整型数或长整型数,并不进行四舍五入。13.492.49=6,2.4 运算符与表达式,2.4.1 算术运算符
22、,3模运算,模运算符Mod用来求余数。7 Mod的计算结果为7.5 Mod 3的计算结果为1.5,2.4 运算符与表达式,2.4.2 字符串运算符,使用字符串运算符“&”和“+”可以把两个字符串连接起来。变量后使用“&”时,变量名与“&”之间应留有空格。当两个操作数中有一个是数值型数据时:(1)“&”把数值型数据转换为字符类型,然后进行字符的连接;(2)“+”把字符数据转换为数值数据执行加法运算,但如果字符数据不能转换成数值,就会出错。12.23 + “asf” 是错误的。,2.4 运算符与表达式,2.4.3 关系运算符,X=12.3 Y=56,2.4 运算符与表达式,2.4.3 关系运算符,
23、(1)如果两个操作数是数值,就按其大小进行比较。 (2)如果两个操作数是字符或字符串,则按字符的UniCode码值从左到右逐个字符进行比较,其UniCode码值大的字符串大。“abcdf“ “abcf“比较结果为False“10”2”比较的结果为False (3)关系运算符之间的优先级相同。,2.4 运算符与表达式,2.4.4 逻辑运算符,2.4 运算符与表达式,2.4.4 逻辑运算符,(1)要判断X是否在区间a,b,应写成a=X And X=b (2)如果两个数值型的数据进行And、Or、Not和Xor运算时,则先把数值转换为二进制数,然后对两个二进制数逐位进行逻辑运算。5 And 8的运算
24、结果为0,2.4 运算符与表达式,2.4.4 逻辑运算符,0000000000000000,0000000000000101 AND 0000000000001000,5 And 8的运算结果为0,2.4 运算符与表达式,2.4.5 表达式,表达式由变量、常量、运算符和圆括号按一定的规则组成。表达式的运算结果类型由数据和运算符共同决定。乘号是“*”,既不能省略也不能用“.”代替。表达式中只能使用圆括号,且优先级最高。优先级:算术运算符关系运算符逻辑运算符。在算术运算中,如果表达式具有不同的数据精度,则运算结果的数据类型采用精度高的数据类型;当Long型数据与Single型数据运算时,结果为Si
25、ngle型数据。,MENU,2.5 常用内部函数,2.5.1 转换函数,2.5 常用内部函数,2.5.1 转换函数,2.5 常用内部函数,2.5.2 格式输出函数(Format),2.5 常用内部函数,2.5.3 字符串操作函数,s为“123.2”,c为“中国人民共和国Zhong”。,2.5 常用内部函数,2.5.4 日期函数,郑州航院计算机科学与应用系,2.5 常用内部函数,2.5.4 日期函数,1Day函数,使用Day函数时,需要用Microsoft.VisualBasic命名空间对其进行限制。Dim Mydate As DateMydate=#5/12/2003# Debug.Write
26、Line(Microsoft.VisualBasic.Day(Mydate)运行结果:12,2.5 常用内部函数,2.5.4 日期函数,2DateAdd函数,DateAdd (Interval,Number,DateValue)完成Date型数据的加运算,并返回计算结果;Interval表示所要添加时间间隔的DateInterval枚举值或者字符串表达式;Number是一个Double型的浮点数,指定加的数据;DateValue是Date型的数据。,2.5 常用内部函数,2.5.4 日期函数,2DateAdd函数 (Interval参数的设置值 ),2.5 常用内部函数,2.5.4 日期函数,
27、DateInterval.Day、DateInterval.DayOfYear和DateInterval.Weekday可以被视为等效。DateAdd函数不返回无效日期,如果出现参数的值无效,则发生错误。 Dim d As Date d = #2/24/1996# Debug.WriteLine(DateAdd(“y“, -5, d)DateAdd函数还可以写成 DateAdd(DateInterval.DayOfYear, -5, d),2DateAdd函数 (Interval参数的设置值 1),2.5 常用内部函数,2.5.4 日期函数,3DateDiff函数,DateDiff(Inter
28、val,Date1,Date2,DayOfWeek,WeekOfYear)(1)Interval的设置与DateAdd函数中的Interval的设置相同;(2)Date1和Date2都是Date型的数据,用于计算Date2与Date1之间的差值;(3)DayOfWeek是FirstDayOfWeek的枚举值,用来指定周的第一天,如果省略该参数,则使用FirstDayOfWeek.Sunday;(4)WeekOfYear是FirstWeekOfYear的枚举值,用来指定年的第一周,如果省略该参数,则使用FirstWeekOfYear.Jan1。,2.5 常用内部函数,2.5.4 日期函数,Dim
29、 d As Dated = #2/24/1996#Debug.WriteLine(DateDiff(DateInterval.Year, d, Now) 程序运行结果为:9,3DateDiff函数,2.5 常用内部函数,如果在程序中要使用这些方法,必须先在代码的开头引入Math类,即在Public Class Form1语句的上面添加语句Imports System.Math。如果不添加这条语句,则使用这些方法时必须加上System.Math类。System.Math.Tan(30 / 180 * 3.142),2.5.5 System.Math的方法,2.5 常用内部函数,2.5.5 System.Math的方法,a=-12.8,b=5.47,x=3.142,2.5 常用内部函数,2.5.6 Rnd函数,Rnd函数返回一个0,1)区间的Single值,其格式为:Rnd (number) 要产生一个n,m之间的随机数,可以用公式来完成:Int(m-n+1)*Rnd+n) 求2,100)之间的随机数:Int(98*Rnd+2) 求2,100之间的随机数:Int(99*Rnd+2),BACK,Thank you!,