第3章 数据类型和变量.doc

上传人:da****u 文档编号:1087087 上传时间:2018-12-03 格式:DOC 页数:32 大小:545KB
下载 相关 举报
第3章 数据类型和变量.doc_第1页
第1页 / 共32页
第3章 数据类型和变量.doc_第2页
第2页 / 共32页
第3章 数据类型和变量.doc_第3页
第3页 / 共32页
第3章 数据类型和变量.doc_第4页
第4页 / 共32页
第3章 数据类型和变量.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、第 3 章 数据类型和变量从本章开始,将循序渐进地讲解 C#语言的基本语法元素和语法规则。使用编程语言解决问题的基础是数据结构与算法,而描述一个数据结构的基础就是数据类型。本章将介绍 C#语言中是怎样描述我们日常所遇到的数据、C# 语言的数据类型可分为两类:数值类型和引用类型。除了这两种基本类型外,指针类型只在非安全代码中有效。数值类型和引用类型的区别在于数值类型的变量直接存储它们的数据信息,而引用类型的变量则只存储它们对数据的引用(数据的存储地址) ,这两种数据类型在应用程序中各有其职责和使用格式,我们必须很好地掌握,为 C#编程打下一个良好的基础。本章学习重点: 掌握变量和常量的定义及使用

2、 掌握 C#的数值类型和引用 类型数据的定义格式和使用特征 熟悉数据类型转换机制我们知道算法处理的对象是数据,而数据是以某种特定形式存在的(如整数、字符等形式) 。 C#语言将数据分为不同的类型,它们分别表示不同范围、不同精度、不同用途的数据。将数据分类是由于不同类型的数据在计算机内占用的内存空间大小不同、运算速度不同。为了有效利用计算机的内存资源和达到最佳的程序运行效果,需要根据不同形式数据的大小和特征来选择最合适表示它们的数据类型。这在程序代码中是通过给数据指定一个存储单元变量,并声明此变量的数据类型(它规定了在计算机中将用多大的存储单元来存储该数据)来实现的。 C#中也是以变量或常量的形

3、式来命名数据的存储单元,而且每个变量或常量都对应一定的数据类型。C#语言数据类型体系如图 3.1 所示。 用 户 自 定 义 结 构 类 型 (struct) 整 数 类 型 (byte、 sbyte、 long、 ulong、 short、 ushrt 、 it、 it) 简 单 类 型 浮 点 数 类 型 (flat、 doble) 十 进 制 数 类 型 (ecimal) 字 符 类 型 (char) 布 尔 型 (bol) 枚 举 类 型 (enum) 结 构 类 型 引 用 类 型 数 值 类 型 数 据 类 型 接 口 (interface) 数 组 (ary) 代 理 (delg

4、ate) 指 针 类 型 (仅 用 于 非 安 全 代 码 中 ) clas 类 object string 图 3.1 C#的数据类型第 3 章 数据类型和变量 433.1 变量和常量常量是指在程序员运行过程中,其值不能被改变的量。变量是计算机内存中被命名的数据存储单元,其中存储的值是可以改变的。在程序中通过变量名来引用其中存储的信息,如图 3.2 所示。变量名实际上是一个符号地址,在对程序进行编译时由系统给每一个变量分配一个真正的内存地址。在程序中通过变量取值,实际上就是通过变量名找到相应的内存地址,再从中读取数据或存入数据。 6 存 储 单 元 变 量 名 变 量 值 a 图 3.2 内

5、存中的数据存储3.1.1 变量1. 变量名和其他高级语言一样,用来标识变量名、常量名、对象名、过程名等的有效字符序列称为标识符,简单地说,标识符就是一个名字。C#对变量命名的最低要求是它应该能标识并区别变量类型、变量作用范围、常量、对象以及过程,并且它应当便于理解和使用。以下从对变量的命名给予说明,其他标识符的命名与此类似。在 C#中,变量名必须遵守以下规则: 首字符必须是字母,或下划线(但不推荐) 。 第 2 个字符开始可以包含任意个字母、数字和下划线,但不能包含空格、标点符号、运算符等其他符号。 区分大小写。C#区分大小写,所以 year、Year 和 YEAR 代表了 3 个不同的变量。

6、 变量名不能与 C#关键字名相同。关键字 (见附录)是 C#语言的特殊标识符,用户最好不要使用,否则容易降低程序的清晰度。 但在 C#中,如在关键字前加上前缀 ,则可以使它变为合法的变量名。 变量名不能与 C#中的类库名相同。以下是一些 C#变量名:Person (合法) yearly-cost (合法) int (int 是 C#关键字, 但有前缀合法)myclass (class 是 C#关键字,但作为变量名的一部分,合法)-this (合法,但不推荐) checking#this (非法,包含非法字符 #) float (非法,是一个 C#关键字) 5day (非法,第 1 个字符是数字

7、)C#编程及应用程序开发教程44通常,变量名只要符合上述规则即可,但在实际应用中,为了保证程序具有良好的风格(思路清晰、容易阅读 ),变量名最好使用具有实际意义的英文单词进行组合,即尽可能做到“见名知意”。例如,变量名 circle-redius,这是使用分隔符将变量名中的单词隔开便于理解。常用的变量名表示方法有 3 种。 Pascal 表示法:用单词的前缀或后缀来指定变量的类型和作用范围。格式:Noun 或 NounVerb其中:每个字的第一个字母大写,而其余字母小写。这种格式的作用是:由变量名指定变量是什么或它要做什么,即对变量的功能加以明确说明。例如:CircleRedius 可表示“圆

8、半径”变量,这个变量可用于存放某个圆半径的数据。 骆驼表示法(Camel Notation):以小写字母开头,以后的单词都以大写字母开头,如 myBook、theFox、sizeOfChar 等。 匈牙利表示法:这种方法是一名匈牙利程序员发明的,且他在微软工作了多年,此命名法就是通过微软的各种产品和文档传出来的,所以多数微软程序员都使用它。匈牙利命名法的格式是:变量名=属性名+ 类型+对象描述即一个变量名由 3 部分组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。这种方法已流行于现代软件开发环境中,如 Windows 中的类库和函数库。如:iMyCar 表示整型变量,cMyCar

9、表示字符变量等。表 3.1 所 示 是 一 些 推 荐 使 用 的 构 成 变 量 名 的 3 部 分 名 称 的 缩 写 , 可 以 挑 选 使 用 。表 3.1 匈牙利命名法的前缀缩写属性部分 类型部分 描述部分全局变量 g_ 指针 p 初始化 Init常量 c_ 布尔型 b 临时变量 Tmp类成员变量 m_ 浮点型 f 目的对象 Dst无符号型 u 源对象 Src窗口 Wnd一般来说,在程序中我们应该使用描述性的变量名,且采用并坚持使用一种表示方法,不要全部使用大写字母。小资料:C#使用 Unicode 编码 。Unicode 是一个 16 位完整的国际标准字符集。因为 C#计划在世界范

10、围内都可以编写程序,因此,它需要使用一个可以描述世界上所有的语言的字符集Unicode 字符集。 C#支持 Unicode 字符集,这意味着可以存储和使用任何语言中的字母来命名变量。当然,使用 Unicode 对第 3 章 数据类型和变量 45于像英语、德语、西班牙语或法语这样 的语言来说,效率是比较低的,这些语言的字符都是用 8 位表示的,所以为了全球可移植性需要付出一定的代价。1988 年,苹果公司和施乐公司建立了一个字符表示法 标准,称 为 Unicode。这是一个用双字节表示一个字符的字符集标准,从而将原有的 单字节字符标准和双字节字符标准统一成双字节标准。 设计Unicode 的主要

11、目的,是为了对世界上所有语言的字符进行控制。在 Unicode 中,任何一个字符都必须使用两个字节(16 位)来表示,所以 Unicode 字符集一共可以表示 65535 个字符,足以涵盖世界上大多数语言的字符集。目前已经有阿拉伯文、中文拼音、俄文、希腊文等多种 语言被分配了代码区域,大约 35000 个代码点,如表 3.2 所示。还有约 29000 个待分配。另外, 还有约 6000 个代码点供个人使用。我们关注的是 ASCII 区。该区域中的字符同 ASCII 字符是一一对应 的。在 书写一个 ASCII 字符的Unicode 编码时,只需在十六进制编码前加 2 个“0”就可以了。如字符

12、“a”,它的 ASCII 编码是 61(十六进制),而写成 Unicode 编码就应是 0061(也是十六进制)。表 3.2 部分 Unicode 区域16 位 Unicode 码 区 域 16 位 Unicode 码 区 域0000007F ASCII 0300036F 通用区标志008000FF 拉丁文 1 040004FF 西里尔字母0100017F 欧洲拉丁文 0530058F 亚美尼亚文018001FF 扩充拉丁文 059005FF 西伯来文025002AF 标准汉语拼音 060006FF 阿拉伯文02B002FF 修改型字符 0900097F 梵文C#语言是一种使用 Unicode

13、 编码格式存储字符的语言,它提供了两种表示字符的方法: 直接写字符如:在需要写字符“a ”的地方,直接写“a” 。 用 Unicode 字符转义序列表示一个字符用 4 个十六进制数字组成一个 Unicode 编码,格式如下:u hex-digit hex-digit hex-digit hex-digit其中: hex-digit代表一个十六进制数字例如:“ a”的 Unicode 编码为:u0061“D”的 Unicode 编码为:u0044在任何一段文字中,可以用 Unicode 编码代替任何实际的字符。如:“computer”可以表示为:u0063omputer 或 u0063u006f

14、u006du0071u0075u0074u0064u0072开发应用程序时应考虑使用 Unicode 的主要原因有: 可以比较容易地在不同语言之间交换数据 可以使自己编写的二进制文件支持所有的语言版本 提高应用程序的运行效率目前,在 Windows 2000 中,所有的核心函数都要求使用 Unicode 字符。欲了解 Unicode 的详细C#编程及应用程序开发教程46情况,可访问 www.unicode.org 网站。2. 使用变量C#也同样规定在程序中所有用到的变量都必须在程序中定义,即遵守“先定义后使用”或“先声明后使用”的原则。定义(声明) 变量的作用是:定义的变量名和数据类型将告诉编

15、译器要为变量分配多少内存空间,以及变量中要存储什么类型的值。因为针对不同类型的数据,计算机将会为其分配不同大小的存储空间。有了变量名和变量类型,一个变量的定义才是完整的。定义变量的一般格式: 属性 修饰符 数据类型 变量名 1,变量名 2,。,变量名 n;其中: 内的内容可有可无,可根据需要添加。 属性是 C#特有的特性,将在后续章节中介绍。 修饰符是指访问修饰符,这部分内容也将在后续章节中介绍。 数据类型名是指变量的类型,在接下来的几节中,我们将介绍 C#中的变量类型。 变量名是给变量取的名称。例如:要声明一个存放整数的变量,声明如下:int num ;可以在一个语句里声明多个同一类型的变量

16、,方法是在类型名后写上多个变量名,中间用逗号隔开。例如:byte myage, myheight; /2 个 8 位无符号整型long area, width, length; /3 个 64 位带符号整型 3. 给变量赋值变量本身只是一个能保存某种类型的具体数据的内存单元,对于程序而言,可以使用变量名来访问这个具体的内存单元。变量的赋值,就是将数据保存到变量中的过程。在 C#中,给一个变量赋值的格式: 变量名=表达式;变量赋值的功能是:计算表达式的值,然后将这个值赋予变量。例如:要将数字 10 存储到 num 变量,必须坚持先定义后使用的原则,所以完整的代码为:int num ; /定义变量

17、 num num=5 ; /给变量 num 赋值说明: 这里的表达式可以是数学表达式,如 4-2、6*a*(x+y)等都是表达式。另外,在计算机语言中,单个常数或变量,也可算作一个表达式,由单个常数或变量构成的表达式的值,就是这个常量或变量本身。 在程序中,可以给一个变量多次 赋值。变量的当前值等于最后一次给该变量所赋的值。如:num=3; /这时的 num 等于 3第 3 章 数据类型和变量 47num=3*5; /这时的 num 等于 15num=num+3; /这时的 num 等于前一次的值 15 再加 3,即等于 18 可以在程序的任何地方定义变量,只要在使用 该变量之前必须 定义它,

18、就是合法的。【例 3.1】给变量赋值。using System;class GetValuepublic static void Main()int number;number=10;Console.WriteLine(“nmy number =0” , number);number=number+1;Console.WriteLine(“nmy number =0 now“ , number);程序输出如下:my number =10my number =11 now4. 初始化变量在定义变量的同时,可以对变量赋值,称为变量的初始化。在 C#中,对变量进行初始化的格式如下:数据类型 变量名=

19、表达式;例如:int num=5; /定义一个 int 型变量 num,并将其赋予初始值 5。也可以在同一行定义多个变量,并给它们赋值,用逗号分开:int num1=12 , num2=34;另一种定义变量并赋初值的方法:在 C#中,每种值类型均有一个隐式的默认构造函数(又称为缺省构造子)来初始化该类型的默认值,缺省构造子会返回一个零 -初始化的实例,即所谓数值类型的默认值,表 3.3 中默认值均是零的各种位模式的值。与 C+中的用法一样,可以使用 new 操作符,调用 C#数值类型的默认构造函数并对变量赋以默认值。表 3.3 简单类型C#类型 说 明 .NET 类型 字 节 数 取值范围 默

20、 认 值sbyte 8 位带符号整型 System. Sbyte 1 -128127 0byte 8 位无符号整型 System. Byte 1 0255 0sort 16 位带符号整型 System. Int16 2 -3276832767 0ushort 16 位无符号整型 System. Uint16 2 065535 0int 32 位带符号整型 System. Int32 4 -21474836482147483647 0uint 32 位无符号整型 System.int32 4 04294967295 0long 64 位带符号整型 System. Int64 8 -9223372

21、03685477580892233720368547758070LC#编程及应用程序开发教程48Ulong 64 位无符号整型 System. Uint64 8 018446744073709551615 0续表C#类型 说 明 .NET 类型 字 节 数 取值范围 默 认 值Char 字符型,无符号16 位整数 System. Char 2 065535 0Float 单精度浮点型 System. Single 4 1.5E-453.4E+38 0.0Fdouble 双精度浮点型 System. Double 8 5.0E-3241.7E+308 0.0DBool 布尔型:真或假的布尔值Sy

22、stem. Boolean 1 True, False Falsedecimal 28 位有效数字的十进制小数类型System. Decimal16 1.010-287.91028 0.0M【例 3.2】定义整型变量 a 和 b,并都初始化为 0(0 是 int 类型的默认值)。using System;class Integerstatic void Main() /调用 Main 方法int a=0;int b=new int(); /调用缺省构造子初始化变量Console.WriteLine(“value:0,1“ ,a, b); /输出语句输出结果:value: 0 , 0说明: b=

23、new int();语句等效于:b=0;,即也可以使用 new 运算符创建变量。int b;b=new int();可以用一个语句 进行定义和初始化 b:int b=new int();或 int b=0;小资料: 在 C+中使用构造函数和析构函数对类对象进行创建和撤消。构造函数用于创建类对象、初始化其成员,而析构函数用于撤消类对 象。根据变量定义,全局变量和静态变 量在定义(分配空间)时,将位模式清 0,局部变量在定义时,分配的内存空间内容保持原样,故为随机数。定 义对象时,情况就不一样了,对象的定义表示定义了现实世界的实体,因此,一旦建立对象,需有一个有意义的初始值, C+建立和初始化对象

24、的过程专门由类的构造函数来完成。 这个构造函数很特殊,只要 对象建立,它马上被调用,给对象分配空间和初始化。 在 C#中, new 关键字用作运算符有两种情况: new 运算符用于在堆上创建对象,并 调用构造函数,如:class1 Myclass=new Class1(); new 运算符用于创建值类型变量,并 调用默认的构造函数,如:int Myint=new int();第 3 章 数据类型和变量 495. 使用未初始化的变量如果使用未初始化的变量,将会发生什么情况呢?请看以下代码:using System;class Uninitialpublic static void Main()i

25、nt num;Console.WriteLine(“nmy number =0“ , num);结果程序不会编译,编译器将给出如下所示的错误信息:使用了未赋值的局部变量num。可见,C#不允许使用未被初始化的变量。提示: 在 C/C+等其他语言中,上述程序将被 编译。在 这种情况下,打印的 num 值是一个机器中的随机数,这是个无用的信息。而 C#能防止这种错误发 生。6. 变量的作用域和生存周期作用域定义了一个变量的可见性和生存周期。程序中的一个块就定义了一个作用域,作用域内定义的变量对于作用域外部定义的代码是不可见的。作用域可以嵌套,外层作用域封装内层作用域,即在外层作用域声明的对象对于内

26、层作用域内的代码是可见的。但是,反过来就不行了,在内层作用域定义的变量对于外层作用域的代码就是不可见的。例如:using System;class Scopepublic static void Main()int x; / x 可被 Main()内的所有代码识别x=10;if(x= =10) /开始新作用域int y=20; /y 只被这个块识别Console.WriteLine(“x and y:0,1“, x , y); /本处 x 和 y 都可被识别x=y*2;y=100; /错误,这里的 y 在它被定义的作用域之外,所以 y 不被识别Console.WriteLine(“x is “

27、,+x); /这里 x 仍能被识别该程序运行后会出错,原因就是语句 y=100; 因为 y 在它的块的外部是不可见的。说明: 变量在进入其作用域时创建,在离开其作用域时被释放,即一旦变量离开它的作用域,就不再保存它的值了。因此,一个变量的生存周期被限制在它自身的作用域内。另外,C#的作用域规则有一点与 C/C+不同,即在嵌套的内部作用域定义的变量不能和外部作用域中定 义的变量重名。例如,以下程序试图在内部作用域内和在外部作用域中分别定义同名的两个变量:using System;C#编程及应用程序开发教程50class SameNamepublic static void Main()int c

28、ount;for(count=0; count10; count=count+1)Console.WriteLine(“This is count: “ +count);int count; /非法!在 C/C+中完全合法,并隐藏了外层 count 变量。for(count=0; count2; count+)Console.WriteLine(“This program is in error!“);3.1.2 常量同变量不同,常量(Constant)是指在程序的运行过程中值不能改变的量。常量与变量都是数据的存储符号,二者完全相同,区别在于存放在变量中的值是可变的,而存在常量中的值是不变的。

29、要定义一个存储常数的变量,其一般格式为: 属性 修饰符 const 数据类型 常量名=表达式;属性、修饰符、数据类型和常量名的要求与上述的定义变量名的规则相同。但为使常量易于识别,常将常量名全部采用大写,在程序中也是通过常量名来访问该常量的。表达式的计算结果是所定义的常量的值。例如:const PI=3.14159;常量有如下特点: 在程序中,常量只能被赋予初始值,且在程序的运行过程中不允许再改变。 定义常量时,其表达式中的运算对象只能是常量和常数,不能有变量存在。小资料:在 C/C+语言中还 可以使用#define 来定义一个常量,如: #define PI 3.14159用这种方法定义的常

30、量叫符号常量。 这种定义常量的办法在 C#语言中不再有效。也就是说,在 C#中,常量只能按照上述用关键字 const 的方法来定义(这种方法也是 C+中提倡的)。3.2 数 值 类 型C#有非常复杂的类型系统,如图 3.1 所示。在 C#中,类型同变量之间的关系实际是“类”和“对象”间的关系。“类型”可以理解为面向对象理论中的“类”,而“类型”的“实例”(如 int 类型的一个变量) 就是面向对象理论中的“对象”。即在对 C#的变量进行操作时,要时刻牢记我们定义的变量就是一个“对象”,例如,整数 8 就是整数类型的一个对象。C#语言将每种数据类型的特性封装在若干个类中,并提供了若干个方法和属性

31、来描述各种数据类型的特性。C#语言的数值类型几乎就是 C/C+语言的全部数据类型,它包括了由整数类型、浮点数类型、小数类型、字符型、布尔型组成的简单类型和由结构、枚举等组成的构造类型。C#语言中具有数值类型的变量存储的是数值数据,而引用类型的变量则只存储数据的存第 3 章 数据类型和变量 51储单元地址。本节主要介绍数值类型中的简单类型,其他类型将在后续的相应章节中介绍。C#程序是运行在.NET 框架中公共语言运行时 CLR 上的,它提供的简单数据类型中的每一种都直接对应于 CLR 使用的一种数据类型,从而与.NET 框架中的类型有直接关系,这也是称其为简单类型的原因所在。所以简单数据类型的名

32、称都是.NET 框架中 System 命命名空间中定义的数据类型的别名,如表 3.3 所示。在实际应用中,如要使用对应的.NET 数据类型定义一个变量,完全可以用 C#的简单类型来代替。如:system.int32 a=5;与 int a=5;的效果是一样的,所以我们当然使用简单的表示方法。但要知道,简单的 C#数据类型将被转换为对应的 .NET 类型。【例 3.3】计算各种 C#数据类型所需的内存空间。由于此程序要涉及指针运算,此段代码是不安全代码,所以编译以下程序时,必须向编译器提供一些额外的信息,即编译命令必须加一个选项“/unsafe ”。设代码的源文件名为 sizes.cs,则在命令行方式下的命令为:csc /unsafe sizes.cs 如果使用的是 IDE 环境,则用户需要对项目的属性进行一些调整。打开 【解决方案资源管理器】,选中本例程序所在的项目,然后右击,从菜单中选择【属性】命令,从而打开【项目属性】对话框,如图 3.3 所示。图 3.3 设置项目可以运行于不安全环境下展开对话框左边的【配置属性】,并选择【生成】,这时将在对话框的右边显示相应的生成选项;再从对话框右边的【允许不安全代码块】选择 True,然后单击【确定】按钮,关闭对话框并保存所做的设置。程序代码如下:using System;class Sizes

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。