什么是变量(Variable)
变量是计算机编程中的一个重要概念。变量是一个可以存储值的字母或名称。当你编程时,可使用变量来存储数字,例如建筑物的高度,或者存储单词,例如人的名字。简单地说,可使用变量表示程序所需的任何信息。
你可能会问:“既然我可以使用信息,为什么要用变量?” 因为变量可以随着程序的运行而改变其表示的值。例如,你可以写个程序来跟踪罐子里糖豆的数目。因为糖是要被吃掉的,所以罐里糖豆的数目可能会随着时间的推移而改变。你可以使用一个变量来表示不同时间的糖豆数目,而无需在每次糖豆数目变化时重新修改程序。
将信息存储于变量中
使用变量有三个步骤:
?声明变量(declare the variable)。告诉程序变量的名称和类型。
?给变量赋值(assign the variable)。赋予变量一个要保存的值。
?使用变量(user the variable)。在程序中获得变量中所存储的值。
声明变量
声明变量时,必须决定其名称和存储其中的数据的类型(data type) 。
使用Dim 和As 这两个关键字来声明变量,如下所示。
Dim aNumber As Integer
这行代码的意思是要使用一个名为aNumber 的变量,并且希望它所存储的值的数据类型为整数(Integer)。
因为aNumber 是一个整数(Integer) 数据类型,所以它只能存储整数。例如要存储42.5 这样带有小数的数字,则需使用双精度浮点数(Double) 数据类型。如果要存储单词或句子,需使用字符串(String) 数据类型。另外一种在此值得一提的数据类型是布尔(Boolean),它可存储True 或False 值。
下面是关于如何声明变量的更多示例。
Dim aDouble As Double
Dim aName As String
Dim YesOrNo As Boolean
给变量赋值
使用= 符号给变量赋值,如下例所示。这时候,这个= 符号我们称之为赋值变量运算符(assignment operator)。
aNumber = 42
这行代码的值为42,它存储在先前声明的名为aNumber 的变量中。
声明变量并给变量赋个缺省值
你可以用一行代码声明变量,然后用另一行代码给变量赋值。比如:
Dim aNumber As Integer
aNumber = 42
但是,如果尝试在赋值前使用变量,可能导致错误。
因此,最好在同一行代码中声明变量和并给变量赋值。即使还不知道变量将要存储什么值,也可以给变量赋个缺省值(default value) 。上面的两行代码就可以写成:Dim aNumber As Integer = 42
更多代码示例:
Dim aDouble As Double = 0
Dim aName As String = "default string"
Dim YesOrNo As Boolean = True
通过用同一行代码声明变量并给变量赋个缺省值,可以避免可能发生的错误。以后你仍可以使用赋值方法为变量赋给不同的值。
试一试
在本练习中,你要写一个小程序来创建四个变量并为其赋值,然后在一个消息框(message box) 窗口中显示每个值。首先我们将创建存储代码的项目。
创建项目
打开Visual Studio
在文件(File) 菜单上,单击新建项目(New Project)。
在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。
在名称(Name) 框中键入Variables,再单击确定(OK)。
Visual Basic 将为程序创建文件并打开窗体设计器(Form Designer)。
下一步,我们将创建变量。
创建变量并显示它们的值
双击该窗体。
代码编辑器(Code Editor) 打开并显示名为Form1_Load 的代码节。这节代码,称为过程(Procedure),包含在窗体首次加载到内存中时执行的指令。
在Form1_Load 过程中,键入以下代码。
Dim anInteger As Integer = 42
Dim aDouble As Double = 39.345677653
Dim aString As String = "I like woyouxian."
Dim aBoolean As Boolean = True
此代码声明四个变量:Integer、Double、String 和Boolean,并给它们赋默认值。
提示
键入代码时,您可能会注意到:在键入As 后,光标下会出现一个单词列表。此功能称为智能感应(Intellisense)。利用这一功能,您只需键入一个单词的前几个字母,便可以在列表中选择相应的单词。完成选择后,就可以按Tab 键完成单词。
注意
每当在程序中表示实际文本时,必须用双引号"" 将文本括起来。这会告诉程序将文本解释为实际文本而不是变量名。如果在实际文本中还包含双引号,你则用两个双引号代替。比如Dim aString As String = "I like ""b l a b l a""!"
给Boolean 变量赋True 或False 值时,则无需用双引号将其括起来,因为True 和False 是Visual Basic 关键字,其本身有特殊的含义。
然后在上一步写的代码下键入以下代码。
MsgBox(anInteger)
MsgBox(aDouble)
MsgBox(aString)
MsgBox(aBoolean)
End
前四行代码使用MsgBox 函数告诉程序在新窗口中显示上一步给每个变量所赋的值。最后一行使用End 语句告诉程序在执行完此过程后结束。
运行程序
选择调试(Debug) 菜单中的开始调试(Start Debugging) 运行程序。或者直接按快捷键F5 运行程序。
在出现的每个窗口上单击确定(OK)。注意每个变量的值依次显示,然后程序结束。程序结束后,你可以返回并更改代码中给变量所赋的值,然后再次运行应用程序,你会看到显示的新值。
编者:woyouxian[at]gmail[点]com
参考:微软MSDN Visual Basic Guided Tour --> Representing Words, Numbers, and Values with Variables
时间:2006-11-29
数据类型(Data Type) 概要
Visual Basic 2005 中的数据类型(Data Type) 不仅决定了可存储在变量中的值或数据的种类,而且决定了如何存储该数据。为什么会有不同的数据类型?不妨这样考虑:假定你有三个变量,前两个保存数字,第三个保存名称,你可以使用前两个变量执行算术运算,但不能对名称执行算术运算。可见,为一个变量指定数据类型可以更容易地确定在哪些情况下能够(或者不能够)使用该变量。
注意
其他编程元素,比如常数(Constant)、属性(Proerpty) 和函数(Function) 中也会用到数据类型。在以后章节中,你将学习更多有关数据类型的其他用法。
用于数字的数据类型
大多数计算机程序都以某种形式来处理数字。由于存在多种不同的数字表示方法,因此,Visual Basic 2005 提供了多种数字数据类型以便更有效地处理数字。
最常用的数字数据类型是Integer,该类型用于表示整数,即不带小数的数字。选择表示整数的数据类型时,除非存储在变量中的数字大于二十亿左右,你才需要使用Long 数据类型,否则使用Integer 更为有效。
并不是所有的数字都是整数。例如,两个整数相除所得的结果经常是一个整数加上一个小数(9 除以2 等于4.5)。Double 数据类型用于表示带小数的数字。
注意
还有其他数字数据类型,如Decimal、Short、SByte 和UInteger;这些类型通常用于极其庞大的程序中,对这些程序来说,要考虑内存使用或内存速度。作为初学者,你现在只需了解基本的数字数据类型即可。
有关常用的数字数据类型使用,请参见数据类型中整数和浮点数的使用。
用于文本的数据类型
大多数程序还要处理文本,包括向用户显示信息或者捕获用户输入的文本。文本通常以String 数据类型进行存储,这种数据类型可包含一系列的字母、数字、空格和其他字符。
String 的长度是任意的,它可以是一个句子、一个段落、一个字符,还可以什么都没有(即一个空字符串)。
对于始终仅表示一个字符的变量,还可以使用Char 数据类型。如果只需在一个变量中保存一个字符,可以使用数据类型Char 而不是String。
有关String 数据类型的使用,请参见数据类型中字符串的使用。
其他数据类型
除文本和数字以外,程序有时还需要存储其他类型的信息,如True 或False 值、日期或对程序有特殊含义的数据。
对于可表示为True/False、Yes/No、On/Off 的值,Visual Basic 提供了布尔(Boolean) 数据类型。Boolean 变量可保存两个可能值之一:True 或False。
虽然可以将日期或时间表示为数字,但Date 数据类型可以使日期或时间的容易计算,如计算到您的生日还有几天,或者到午饭时间还差几分钟。
有关Date 数据类型的使用,请参见数据类型中日期的使用。
如果需要在一个变量中存储多种类型的数据,可以使用复合数据类型(composite data type)。复合数据类型包括数组(Array)、结构(Structure) 和类(Class)。在后面的课程中,你会了解到有关这些复合数据类型的更多信息。
最后,在有些情况下需要存储的数据类型在不同的时间可能有所不同。Object 数据类型允许你先声明变量,以后再定义该变量的数据类型。在后面的课程中,你会了解到有关Object 数据类型的更多信息。
数据类型中整数和浮点数的使用
运用Visual Basic 处理数字时,要用到两种类型的数字:整型和浮点型。整型只能表示整数,浮点型主要用于表示带有小数的数字,虽然浮点数也可以表示整数。
常见的整型数学运算
废话少说,先做一个整数变量的计算示例你就大致明白了。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入IntegerMath,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnIntMath,将其Text 属性改为Math Test。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnIntMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnIntMath.Click
End Sub
在上述代码中插入一些代码,扩充成如下:
Private Sub btnIntMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnIntMath.Click
'Declare variable
Dim intNumber As Integer
'Set number, add numbers, and display results
下面依次列示了减法,乘法和除法的简写运算符
intNumber -= 8
intNumber *= 8
intNumber /= 8
整形运算的问题
整形运算的主要问题就是对小数部分无能为力。假设我们写了如下代码:'Try multiplying numbers...
intNumber = 6
intNumber = intNumber * 10.23
这些代码虽然可以运行,但是得不到预想的结果,因为变量intNumber 被定义为只能接收整数,所以结果是一个经过四舍五入的最接近这个值的整数。6 乘以10.23 应该等于61.38,但是intNumber 的返回值却是61。
类似的问题也会出现在除法运算中,比如下列代码:
'Try dividing numbers...
intNumber = 12
intNumber = intNumber / 5
12 除以 5 应该等于2.4,但是intNumber 的返回值却是2。
遇到有关小数的运算,我们应该用下面讲述的浮点运算。
浮点运算
先做一个有关浮点运算的示例吧。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入Floating-Pt Math,再单击确定(OK)。
在窗体Form 1 里添加一个按钮(Button) 控件,然后在相关属性(Properties) 窗口内将其Name 属性改为btnFloatMath,将其Text 属性改为 Double Test。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:
Private Sub btnFloatMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFloatMath.Click
End Sub
在其中加入代码,扩充成如下:
Private Sub btnFloatMath_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFloatMath.Click
'Declare variable
Dim dblNumber As Double
'Set number, multiply numbers, and display results
dblNumber = 45.34
dblNumber *= 4.333
MessageBox.Show("Multiplication test... " & dblNumber, "Floating Points")
'Set number, divide numbers, and display results
dblNumber = 12
dblNumber /= 7
MessageBox.Show("Division test... " & dblNumber, "Floating Points")
End Sub
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
你会注意到,在上述代码中,我们将变量dblNumber 定义成双精度的浮点数(Double),而不是整数(Integer) 类型。执行上述代码,得出的运算结果是带有小数的数值。
提示
之所以叫浮点数,主要是因为它存储数字的方式类似于科学计数法。当用科学计数法表示某个数时,可以表示为1-10 之间的某个数乘以10 的幂次方。
例如,10001 被表示为1.0001 * 104,0.0010001 被表示为1.001*10-3。可以看出,小数点”浮动“到第一个数字后面。这种表示法的优点在于不管是大数还是小数,都可以用相同的精度来表示。浮点数变量以相同的方式存储在计算机里,不过不是10 幂次方,而是2 的幂次方。
双精度浮点数和单精度浮点数
前面的示例中我们用了双精度浮点数(Double)的数据类型。在Visual Basic 中,还提供单精度浮点数(Single) 的数据类型。
这两者主要在精度上有区别。双精度浮点数能精确表示
1.79769313486231570E+308 到-4.94065645841246544E-324 范围的负数和
从4.94065645841246544E-324 到 1.79769313486231570E+308 范围的正数。单精度浮点数能够精确表示从-3.4028235E+38 到-1.401298E-45 的负数和从
1.401298E-45 到3.4028235E+38 的正数。
单精度浮点数的精度没有双精度那么高,但是所需内存少,运算速度快。
提示
如果对精度要求不高,则应该尽量避免使用双精度浮点数,而应该使用单精度浮点数。这一点在一些大型应用程序中非常重要。如果在定义变量时,单精度浮点数就足够了,但是却使用了双精度浮点数,会大大减慢程序的运行。
如果某个变量只需要整数类型就足够了,应避免用浮点数。因为整数的运算速度更快。
大多数程序需要处理文本,比如向用户显示信息或者捕获用户输入的文本。文本通常以字符串(String) 数据类型(Data Type) 进行存储,这种数据类型可包含一系列的字母、数字、空格和其他字符。String 的长度是任意的,它可以是一个句子、一个段落、一个字符,还可以什么都没有(即一个空字符串)。
简言之,String 就是字符的集合。表示String 时,一定要用双引号将其围起来。比如:strData = "Hello, world!"
否则程序会误将String 当做变量名或者程序语法的一部分。下面的一个示例,演示了最简单的字符串的用法。
Dim strTwo As String
Dim strResults As String
'Set the string values
strOne = "Hello"
strTwo = ", world!"
'Concatenate the strings
strResults = strOne & strTwo
'Display the results
MessageBox.Show("The result is " & strResults, "Strings")
以上示例帮助你记住& 符号,连接字符串就是用这个符号。
字符串长度
用Length 属性(Property) 可以得到字符串的长度。还是举个例子说明吧。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入StringLength,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnLength,将其Text 属性设为Length。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnLength_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnLength.Click
End Sub
在其间加入如下代码:
'Declare variable
Dim strData As String
'Get the text from the TextBox
strData = "Hello,World!"
'Display the length of the string
MessageBox.Show(strData.Length & " character(s)", "Strings")
这个示例中,我们看到,首先定义一个字符串变量strData,并给strData 赋值,然后用strData.Length 得到该字符串的长度。
截取字符串的一部分
用Substring 这个方法(Method) 可以得到字符串的某一部分。我们按如下步骤作个示例,演示Substring 的用法。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入StringSplit,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnSplit,将其Text 属性设为Split。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnSplit_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSplit.Click
End Sub
在其间加入如下代码:
'Declare variable
Dim strData As String
'Get the text from the TextBox
strData = "I like https://www.doczj.com/doc/ca8048746.html,/html and woyouxian."
'Display the first three characters
MessageBox.Show(strData.Substring(0, 3), “Strings”)
'Display the middle three characters
MessageBox.Show(strData.Substring(3, 3), “Strings”)
'Display the substring without first 6 characters
MessageBox.Show(strData.Substring(6), “Strings”)
代码中的strData.Substring(0, 3) 表示从第 0 个字符串算起,取后面的3 个字符,即第1,2,3 个字符。
代码中的strData.Substring(3, 3) 表示从第 3 个字符算起,取后面的 3 个字符,即第4,5,6个字符。
代码中的strData.Substring(6) 表示从第 6 个字符算起,取后面的所有字符。
替换字符串的某一部分
用Replace 这个方法可以替换字符串的某一部分。比如:
strNewData = strData.Replace ("https://www.doczj.com/doc/ca8048746.html,/html", "https://www.doczj.com/doc/ca8048746.html,")
表示将变量strData 字符串中将所有https://www.doczj.com/doc/ca8048746.html,/html 替换成https://www.doczj.com/doc/ca8048746.html,,将
替换后的值赋给变量strNewData。
Replace 方法有两个参数,前一个参数表示要被替换掉的字符串,后一个参数表示用来替换的字符串。
我们做个示例演示一下Replace 方法的用法。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入StringReplace,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnReplace,将其Text 属性设
为Replace。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnReplace_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnReplace.Click
End Sub
在其间加入如下代码:
Dim strData As String
Dim strNewData As String
strData = "I like https://www.doczj.com/doc/ca8048746.html,/html and https://www.doczj.com/doc/ca8048746.html,/html and woyouxian."
strNewData = strData.Replace("https://www.doczj.com/doc/ca8048746.html,/html", "https://www.doczj.com/doc/ca8048746.html,")
MessageBox.Show(strNewData, "Strings")
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按
快捷键F5 运行。
会弹出一个消息框,消息框中你会看到https://www.doczj.com/doc/ca8048746.html,/html 被替换成了https://www.doczj.com/doc/ca8048746.html,。按确认(OK) 即可关闭消息框。
数据类型中日期的使用
日期(Date) 也是一种常用的数据类型(Data Type)。Date 可包含年月日小时分钟秒的信息。日期的大小范围是从0001 年1 月1 日到9999 年12 月31 日。
日期的缺省值是0001 年1 月1 日0:00:00。
如何表示日期
在表示日期时,你必须用## 将日期围起来。如下:
theDate = #12/2/2006 2:10:00 PM#
上面这句代码表示将一个2006 年12 月2 日下午 2 点10 分的日期值赋给
theDate 这个变量。
注意
你必须以m/d/yyyy 的格式表示日期,不管你计算机上的区域和日期如何设置(Control Panel 中Regional and Language Options 里可设) 。
这样的显示是为了避免程序出错。比如你在程序中用#3/4/1998# 表示1998 年 3 月4 日,假使将你这个程序装在其它机器上,而这台机器上的日期设置却是dd/mm/yyyy,那你这个日期表示就变成了1998 年4 月3 日。我们再将你的程序装在另外一个机器上,该机器上的日期设置是yyyy/mm/dd,结果就变成了0003 年4 月1998 日,这是个无效日期,会导致程序编译错误。
这里稍微解释一下刚才所用日期格式的表示,m 表示月份,d 表示日期,y 表示年份。
我们做个简单示例,演示一下如何表示日期。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入ShowDate,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnShow,将其Text 属性设为Show。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnShow_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShow.Click
End Sub
在其间加入如下代码:
'Declare variable
Dim theDate As Date
'Set the date value
theDate = #12/2/2006 2:10:00 PM#
'Display the results
MessageBox.Show(theDate, "Show Date")
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
会弹出一个消息框,消息框中显示了所赋值的日期。按确认(OK) 即可关闭消息框。
如何表示当前日期
用Now 可以表示当前日期。将上面的示例修改一下,将
theDate = #12/2/2006 2:10:00 PM#
改成
theDate = Now
便可以得到当前日期。这个日期是你程序所运行的机器上的当前日期。
如何分别得到日期的年、月、日、小时、分钟、秒等信息
用Year 属性可以得到日期的年份值。
用Month 属性可以得到日期的月份值。
用Day 属性可以得到日期的日值。
用Hour 属性可以得到日期的小时值。
用Minute 属性可以得到日期的分钟值。
用Second 属性可以得到日期的秒值。
用DayOfWeek 属性可以知道该日期是一个星期的第几天。
注意
DayOfWeek 从0 算起,星期天用0 表示,星期一用1 表示,依次类推,星期六用6 表示。
用DayOfYear 属性可以知道该日期是一年的第几天。
下面一个示例,演示了上述属性的用法。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入ShowDateProp,再单击确定(OK)。
单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnShow,将其Text 属性设为Show。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnShow_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShow.Click
End Sub
在其间加入如下代码:
Dim theDate As Date = Now
Dim intYear As Integer = theDate.Year
Dim intMonth As Integer = theDate.Month
Dim intDay As Integer = theDate.Day
Dim intHour As Integer = theDate.Hour
Dim intMin As Integer = theDate.Minute
Dim intSec As Integer = theDate.Second
Dim intDayWeek As Integer = theDate.DayOfWeek
Dim intDayYear As Integer = theDate.DayOfYear
MessageBox.Show(theDate, "show date")
MessageBox.Show("Year: " & intYear, "show date properties")
MessageBox.Show("Month: " & intMonth, "show date properties")
MessageBox.Show("Day: " & intDay, "show date properties")
MessageBox.Show("Hour: " & intHour, "show date properties")
MessageBox.Show("Minute: " & intMin, "show date properties")
MessageBox.Show("Second: " & intSec, "show date properties")
MessageBox.Show("Day of Week: " & intDayWeek, "show date properties") MessageBox.Show("Day of Year: " & intDayYear, "show date properties")
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
运行以后,会弹出一系列对话框,分别显示当前日期的年、月、日、小时、分钟、秒的部分,还会显示该日期是一个星期的第几天,是一年的第几天。
如何对日期进行加减运算
用AddYears 方法可以为指定日期加减年数。
用AddMonths 方法可以为指定日期加减月数。
用AddDays 方法可以为指定日期加减日数。
用AddHours 方法可以为指定日期加减小时数。
用AddMinutes 方法可以为指定日期加减分钟数。
用AddSeconds 方法可以为指定日期加减秒数。
上述方法的用法是一样的,只不过加减的部分不一样。我们选AddDays 作示例,其它方法的使用参照这个示例就行了。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入ShowDateMethod,再单击确定(OK)。
单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnShow,将其Text 属性设为Show。然后双击该按钮,出现Click 事件处理程序头尾两行代码,如下:Private Sub btnShow_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShow.Click
End Sub
在其间加入如下代码:
Dim theDate As Date = Now
dim newDate As Date
newDate = theDate.AddDays(50)
MessageBox.Show(newDate, "show new date")
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
你会看到弹出对话框里的日期比当前日期多加了50天。
AddDays () 里的参数可以是整数也可以是负数。比如:
AddDays(50) '表示加 50 天
AddDays(-50) '表示减 50 天
过程(Procedure) - 子例程(Sub) 和函数(Function)
什么是过程(Procedure)
过程是可以从其它代码块中运行的自我包含的代码块。简单地说,就是通知程序执行某项操作的一段代码。
你在前面课程中的示例,已经使用到了过程,比如MessageBox.Show 就是一个内置过程,该过程用来弹出一个消息对话框。
Visual Basic 2005 提供了很多内置过程来执行常见的操作,但是总会有一些情况,你希望程序执行内置过程无法处理的操作。这时候,你就需要自己编写过程来完成此任务。另外,自己编写过程也有利于你代码的复用。
过程有两种,一种叫子例程(Subroutine),我们通常叫做Sub;另外一种叫函数,通常叫Function。
子例程(Sub)
用Sub 表示子例程开始,用End Sub 表示子例程结束。下面的一段代码就是一个子例程:
Private Sub ShowYearOfNow
Dim theDate As Date = Now
MessageBox.Show(theDate.Year, "Show Year")
End Sub
我们用下面的示例,演示如何调用这个子例程。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入Procedure,再单击确定(OK)。单击工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnCall,将其Text 属性设为Call。然后双击该按钮,显示代码编辑器(Code Editor)。加入代码,使其显示如下Public Class Form1
Private Sub btnCall_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCall.Click
ShowYear()
End Class
在上述代码中,函数GetYear 有返回值,返回值数据类型为Integer。
用 Function 表示函数开始,用End Function 表示函数结束,并且函数的返回值应指定其数据类型,例如Function GetYear() As Integer 的As Integer 指定了函数返回值是Integer 类型的。
Sub 和Function 的区别
两者区别在于,Sub 只执行操作,没有返回值;Function 不但执行操作,并且有返回值。Sub 和Function 中的参数
有时你要为过程提供一些信息。通过参数,你可以将这些信息传递给过程。比如你可以写一个函数,给予两个参数,一个参数是长,一个参数是宽,然后求出面积。
Private Function GetArea(ByVal length As Integer, _
ByVal width As Integer) As Integer
Return length * width
End Function
在过程声明中,参数在紧跟着过程名的括号中声明。每个参数一般都有ByVal 关键字,如果你不添加ByVal 关键字,Visual Basic 会自动添加它。As 关键字用来声明参数的数据类型。
If...Then...Else 条件语句
在生活中,我们要作各种各样的决定。比如,今天我做个决定:如果我钱包里的钱多于100 元,我就去买大闸蟹,不到100 元呢,我就随便买点蔬菜吧。
在编程中,你可能也希望程序提供这样的判断能力,如果符合某个条件(即当条件为True 时),就执行某些代码,反之,则执行其它代码。在Visual Basic 中,提供了这样的决策结构。其中最常用的,就是If...Then...Else 语句。
If...Then...Else 语句
If...Then...Else语句基本结构如下:
If ... Then
...
Else
...
End if
我们用文字解释一下上面的语句,文字解释在括号里,如下:
If(如果) ...(符合某些条件) Then(就)
...(执行代码)
Else(反之)
...(执行其它代码)
End if (结束)
我们举个实际的示例。
打开Visual Studio。在文件(File) 菜单上,单击新建项目(New Project)。在新建项目(New Project) 对话框的模板(Templates) 窗格中,单击Windows 应用程序(Windows Application)。在名称(Name) 框中键入IfStatement,再单击确定(OK)。选中工具箱(Toolbox) 里的复选框(CheckBox) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为chkSite,将其Text 属性
设为https://www.doczj.com/doc/ca8048746.html,。
选中工具箱(Toolbox) 里的标签(Label) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为lblText,将其Text 属性设为Text。选中工具箱(Toolbox) 里的按钮(Button) 控件,按住鼠标将其拖放到Form 1 上。然后在属性(Properties) 窗口内将其Name 属性改为btnShow,将其Text 属性设为Show。
然后双击该按钮,显示代码编辑器(Code Editor)。加入代码,使其显示如下:Private Sub btnShow_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShow.Click
If chkSite.Checked Then
lblText.Text = "You selected " & chkSite.Text
Else
lblText.Text = "You did not select " & chkSite.Text
End If
End Sub
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
勾上 CheckBox,然后按Show 按钮,会出现You selected https://www.doczj.com/doc/ca8048746.html,;如果反选CheckBox (将CheckBox 的勾去掉),然后按Show 按钮,会出现You did not select https://www.doczj.com/doc/ca8048746.html,。
没有Else 的If 语句
有些时候,你可能希望程序在符合某些条件时执行某些代码,不符合条件时什么也不做。我们可以将上面的If...Then...Else 语句简化成如下:
If...Then
...
End if
修改上面的示例代码如下:
Private Sub btnShow_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnShow.Click
If chkSite.Checked Then
lblText.Text = "You selected " & chkSite.Text
End if
End Sub
选择调试(Debug) 菜单中的开始调试(Start Debugging),运行该程序。或者直接按快捷键F5 运行。
勾上CheckBox,然后按Show 按钮,会出现You selected https://www.doczj.com/doc/ca8048746.html,;如果反选CheckBox (将CheckBox 的勾去掉),然后按Show 按钮,你会发现,什么也没有改变,标签上的文字依然是You selected https://www.doczj.com/doc/ca8048746.html,,因为,我们去掉了else 后的代码,所以当CheckBox 没有打勾时,什么也没有做。
比较运算符(Comparison Operators)
在If 和其它条件语句中,我们会经常遇到各种比较运算符,下面是常用的比较运算符:比较运算符比较运算符说明比较运算符示例
= 等于25 = 25 'True
26 = 25 'False
> 大于26 > 25 'True 24 > 25 'False
< 小于24 < 25 'True 26 < 25 'False
<> 不等于24 <> 25 'True
25 <> 25 'False
>= 大于等于25 >= 25 'True
26 >= 25 'True 24 >= 25 'False
<= 小于等于25 <= 25 'True 24 <= 25 'True 26 <= 25 'False
逻辑运算符(Logical Operators) 中的And 和Or
刚才我们的示例中的条件是个简单的条件,即CheckBox 是否被选中。在某些时候,我们需要更复杂的条件,比如:
If a > b And a > c Then
这句代码表示:必须同时符合两个表达式,即a > b 的同时,也必须 a > c,条件才为True。再比如:
If a > b Or a > c Then
这句代码表示:只要符合其中一个表达式即可,或者符合a > b,或者符合a > c,条件
就为True。
这两句代码分别用到了两个逻辑运算符,一个是And,表示两个表达式是“且”的关系;一
个是Or,表示两个表达式是“或者”的关系。
可执行多重选择的ElseIf 语句
如果要测试的条件不止一个,就需要使用ElseIf 语句。语句结构如下:
If...Then
...
ElseIf...Then
...
Else
End Function
这个计算员工奖金(bonus) 的函数(Function) 有两个参数,一个是performance,即员工的表现,另外一个是salary,即员工的工资。员工的表现有5 等,分别用1,2,3,4,5 来表示。这个示例用了Select...Case 语句,意思是当员工performance 为1 时,员工的奖金是工资乘以0.1;当员工performance 为 2 时,员工的奖金是工资乘以0.3;当员工performance 为 3 时,员工的奖金是工资乘以0.7;员工performance 为 4 时,员工的奖金是工资乘以0.9;员工performance 为 5 时,员工的奖金是工资乘以1.2。
通过这个示例,你可以了解Select...Case 语句的结构。如下:
Select ... (某个表达式,比如一个变量)
Case... (某个值)
...(执行代码)
Case... (某个值)
...执行代码
End Select
你可以使用任意数目的Case 语句增加要比较的值。
Visual Basic 按照在Select...Case 结构中出现的顺序,将表达式的值和Case 语句中的值进行比较。如果发现有一个Case 的值匹配,就执行该Case 相应的代码,执行完之后,不会再执行其它Case 语句,直接就到End Select 了。
Case Else 语句
如果表达式不符合Case 语句的任何值,可以用Case Else 语句来应付例外情况。比如
上个示例中,除了1 到5 的数值外,假设员工performance 为0 或者大于6 如何处理?
你可以改写程序,如下:
Function bonus(ByVal performance As Integer, _
ByVal salary As Decimal) As Decimal
Select performance
Case 1
Return salary * 0.1
Case 2
Return salary * 0.3
Case 3
Return salary * 0.7
Case 4
Return salary * 0.9
Case 5
Return salary * 1.2
Case Else
Return 0
End Select
19.1.1《变量与函数》教学反思 本节课是八年级学生初步接触函数的入门课,必须让学生准确认识变量与常量的特征,初步感受现实世界各种变量之间相互联系的复杂性,同时感受到数学研究方法的化繁为简,知道在初中阶段主要研究两个变量之间的特殊对应关系。 函数定义的关键词是:“两个变量”、“唯一确定”、“与其对应”;函数的要点是:1 有两个变量,2 一个变量的值随另一个变量的值的变化而变化,3 一个变量的值确定另一个变量总有唯一确定的值与其对应;函数的实质是:两个变量之间的对应关系;学习函数的意义是:用运动变化的观念观察事物。与学习进行仔细的研究,有助于函数意义的理解,但是,不可能在一课的学时内真正理解函数的意义,继续布置作业:每个同学列举出几个反映函数关系的实例,培育学生用函数的观念看待现实世界,最后,我还说明了,函数的学习,是我们数学认识的第二个飞跃,代数式的学习,是数学认识的第一次飞跃:由具体的数、孤立的数到一般的具有普遍意义的数,函数的学习,是由静止的不变的数到运动变化的数。 在函数概念的教学中,应突出“变化”的思想和“对应”的思想。从概念的起源来看,函数是随着数学研究事物的运动、变化而出现的,他刻画了客观世界事物间的动态变化和相互依存的关系,这种关系反映了运动变化过程中的两个变量之间的制约关系。因此,变化是函数概念产生的源头,是制约概念学习的关节点,同时也是概念教学的一个重要突破口。教师可以通过大量的典型实例,让学生反复观察、反复比较、反复分析每个具体问题的量与量之间的变化关系,把静止的表达式看动态的变化过程,让他们从原来的常量、代数式、方程式和算式的静态的关系中,逐步过渡到变量、函数这些表示量与量之间的动态的关系上,使学生的认识实现 为了快速明了的引出课题,课前让学生收集一些变化的实例,从学生的生活入手,开门见山,来指明本节课的学习内容。本课的引例较为丰富,但有些内容学生解决较为困难,于是我采取了三种不同的提问方式:1.教师问,学生答; 2.学生自主回答; 3.学生合作交流回答。为了较好的突出重点突破难点,在处理教学活动过程中,让学生思考每个变化活动中反映的是哪个量随哪个量的变化而变化,并提出一个量确定时另一个量是否唯一确定的问题,在得出变量和常量概念的同时渗透函数的概念.为了更好的让学生理解变量和常量的意义,由“问题中分别涉及哪些量?哪些量是变化的,哪些量是始终不变的?”一系列问题,在借助生活实例回答的过程中,归纳总结出变量与常量的概念,并能指出具体问题中的变量与常量。函数的概念是把学生由常量数学的学习引入变量数学的学习的过程,学生初步接触函数的概念,难以理解定义中“唯一确定”的准确含义,我设置了以下二个问题:1.在前面研究的每个问题中,都出现了几个变量?它们之间是相互影响,相互制约的。2.在二个变量中,一个量在变化的过程中每取一个值,另一个量有多少个值与它对应?来理解具体实例中二个变量的特殊对应关系,初步理解函数的概念。为了进一步让学生理解“唯一对应”关系,借助函数图像,使学生直观的感受二个变量之间特殊对应关系-----唯一对应。通过这种从实际问题出发的探究方式,使学生体验从具体到抽象的认识过程,及时给出函数的定义。再从抽象转化到实际应用中去,加深学生对函数概念的理解。为了加强学生辨析函数的能力,我准备了一道思考题,Y2=X中对于X的每一个值Y都
switch中case中变量定义的问题 2014年09月05日?综合?共 851字?字号小中大?评论关闭 今天写C代码时在case中定义了变量变异处错误,代码如下 #include
此时编译通过了,结果也正确。 下面是个人理解: 由于switch的几个case语句在同一个作用域(因为case 语句只是标签,它们共属于一个swtich语句块),所以如果在某个case下面声明变量的话,其他的case 语句也能看到,这样的话就可能导致错误,例如在地一段代码中的case 1后面还有个case 2的话,且case 2中使用了case 1定义的变量i的话,那么如果运行时n = 2,switch直接跳转到case2内部,这样就出现了i没有初始化的事情了(变量的声明是在编译阶段,而变量的赋值则是在运行时),如果能够运行的话,则在case 2中,i的初始值将是一个未知值。所以编译器直接避免这种事情的发生,就让其编译无法通过。 而很明显加上花括号之后,i的作用域就很明确了。 另外,switch(expression)其中expression的结果必须是整型(字符、短整、长整),case constant-expression中constant-expression必须是一个整型值,不能是任何表达式。
若变量均已正确定义并赋值,以下合法的C语言赋值语句是(c)。 A、x+n=I; B、x==5; C、x=n/2.5; D、5=x=4+1; 下述错误的C语言常量是:( c). A、0xf B、5. C、090 D、.25 根据下面的程序,使a=123,c1='o',c2='k'哪一种是正确的键盘输入方法?(b )。(规定用字符串[CR]表示回车,U表示空格) main() {int a; char c1,c2; scanf("%d%c%c", &a,&c1,&c2); } A、123UoUk[CR] B、123ok[CR] C、123Uok[CR] D、123oUk[CR] 已知键入a=4,b=3,执行下面程序输出的结果是( b). main() { int a,b,s; scanf("%d%d",&a,&b); s=a; if(a>b) s=b; s=s*s; printf("%d\n", s); } A、13 B、9 C、16 D、15 执行下面程序段后,i的值是( a). int i=10; switch(i) {case 9: i+=1; case 10: i--; case 11: i*=3; case 12: ++i; } A、28 B、10 C、9 D、27 以下不是无限循环的语句为(d)。
A、while(1){x++;} B、for(;;x++=i); C、for(i=10;;i--) sum+=i; D、for(y=0,x=1;x>++y;x=i++) i=x 下面程序段运行的结果是(a ). x=-1; do{ x=x*x; }while (!x); A、循环执行一次 B、有语法错误 C、死循环 D、循环执行两次 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是(a)。 A、3 B、无确定值 C、4 D、2 若定义int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g; 则数值为4的表达式是 ( d). A、a[4] B、a[g-c] C、a['d'-'c'] D、a['d'-c] 以下叙述中正确的是(c)。 A、可以在一个函数中定义另一个函数 B、main()函数必须放在其它函数之前 C、构成C程序的基本单位是函数 D、所有被调用的函数一定要在调用之前进行定义 下述函数的功能是(c ). int fun(char *x) { char *y=x; while(*y++); return y-x-1; } A、比较两个字符串的大小 B、求字符串存放位置 C、求字符串的长度 D、将字符串x连接到字符串y后面 有关"文件包含"命令说法,下列叙述正确的是( a). A、将预处理的结果作为一个源程序编译,得到一个目标文件. B、一个 include 命令可指定多个被包含文件. C、将预处理的结果作为多个文件编译. D、被包含的文件可以是源文件或目标文件. 在声明语句:int *f();中,标识符f代表的是(a)。 A、一个返回值为指针型的函数名 B、一个用于指向函数的指针变量 C、一个用于指向一维数组的行指针 D、一个用于指向整型数据的指针变量