第2章C变量、数据类型和表达式_第1页
第2章C变量、数据类型和表达式_第2页
第2章C变量、数据类型和表达式_第3页
第2章C变量、数据类型和表达式_第4页
第2章C变量、数据类型和表达式_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 2 章章 变量、数据类型和表达式变量、数据类型和表达式声明并使用变量声明并使用变量 了解了解C#C#的主要数据类型的主要数据类型理解值类型理解值类型 使用表达式进行数学运算使用表达式进行数学运算 掌握不同数据类型的转换方法掌握不同数据类型的转换方法 本章学习目标本章学习目标 2.1 变量变量 2.2 常量常量 2.3 C# 数据类型数据类型 2.4 类型转换类型转换 2.5 运算符和表达式运算符和表达式第第 2 章章 变量、数据类型和表达式变量、数据类型和表达式命名规范命名规范 :变量名是必须以字母、下划线或开头;除开头字母外,变量名只能由字母、数字和下划线组成,而不能包含空格、标点符号

2、、运算符等其它符号;变量名不能与C#中的关键字名称相同;变量名不能与C#中的库函数名称相同。2.1.1 命名变量命名变量随堂练习随堂练习以下以下4个变量名中,合法的变量名个变量名中,合法的变量名是是_。(1) &adw (2) Good bye (3) _list (4) 关于变量命名的一般建议:关于变量命名的一般建议:变量名应具有描述性质变量名应具有描述性质.NET Framework有两种命名约定,分别为有两种命名约定,分别为PascalCase和和camelCase。一般使用。一般使用camelCase命名方式,即用单词组合给变量命名,名称命名方式,即用单词组合给变量命名,名称中

3、第一个单词以小写字母开头,其余均以大中第一个单词以小写字母开头,其余均以大写字母开头,除开头字母外,其余字母都是写字母开头,除开头字母外,其余字母都是小写。如:小写。如:areaOfCircle。 C#的变量名对大小写敏感的变量名对大小写敏感2.1.1 命名变量命名变量变量使用原则:先声明,后使用变量使用原则:先声明,后使用变量声明方法:变量声明方法:数据类型数据类型 变量名;变量名;2.1.2 声明变量声明变量2.1 变量变量 2.2 常量常量 2.3 C# 数据类型数据类型 2.4 类型转换类型转换 2.5 运算符和表达式运算符和表达式第第 2 章章 变量、数据类型和表达式变量、数据类型和

4、表达式2.2 常量常量 定义:常量就是其值固定不变的量定义:常量就是其值固定不变的量常量的类别:常量的类别:静态常量静态常量和和动态常量动态常量2.2 常量常量 静态常量声明静态常量声明修饰符修饰符 const 常量名常量名=常量值常量值;public const int MAX_VALUE = 10;2.2 常量常量 静态常量声明静态常量声明修饰符修饰符 const 常量名常量名=常量值常量值;动态常量声明动态常量声明修饰符修饰符 readonly 常量名常量名=常量值常量值; public const int MAX_VALUE = 10;public readonly int MIN_V

5、ALUE = 10; 静态常量和动态常量的区别静态常量和动态常量的区别 静态常量动态常量定义声明的同时要设置常量值既可以在声明的时候设置常量值,也可以在类的构造函数中进行设置类型限制不能通过new进行初始化的值类型既可以是值类型,也可以是引用类型内存消耗不分配内存分配内存对于类对象对于所有类的对象,常量的值是一样的对于类的不同对象,常量值可以不同2.2 常量常量 2.1 变量变量 2.2 常量常量 2.3 C# 数据类型数据类型 2.4 类型转换类型转换 2.5 运算符和表达式运算符和表达式第第 2 章章 变量、数据类型和表达式变量、数据类型和表达式2.3.1 C# 数据类型概述数据类型概述

6、C#数据类型数据类型值类型值类型值类型描述简单类型有符号整数:sbyte, short, int, long无符号整数:byte, ushort, uint, ulongUnicode 字符:charIEEE 浮点数:float, double十进制数:decimal布尔值:bool枚举类型enum E .结构类型struct S .2.3.1 C# 数据类型概述数据类型概述 类(类(class) 接口(接口(interface) 引用类型引用类型数组(数组(array) 字符串(字符串(string )2.3.1 C# 数据类型概述数据类型概述 值类型与引用类型区别值类型与引用类型区别为变量

7、分配内存的方式的不同。C#将分配给变量的内存空间分成两种:堆和栈。 值类型值类型在栈中分配内存,当声明一个值类型变量时,会在栈中自动分配此变量类型占用的内存空间,并存储这个变量所包含的值。 引用类型引用类型的变量则在栈中分配一个内存空间,这个内存空间包含了对另一个存储位置的引用,这个存储位置在堆内,其中存放了引用类型变量的实际值。2.3.1 C# 数据类型概述数据类型概述 值类型与引用类型区别值类型与引用类型区别2.3.1 C# 数据类型概述数据类型概述 值类型值类型 引用类型引用类型变量中存放变量中存放 真正的数据真正的数据 指向数据的引用指针指向数据的引用指针内存空间配置内存空间配置 堆栈

8、堆栈 受管制的堆受管制的堆内存需求内存需求 较少较少 较多较多执行效率执行效率 较快较快 较慢较慢内存释放时间点内存释放时间点 执行超过变量执行超过变量 由垃圾回收机制自动处理由垃圾回收机制自动处理 定义的作用域时定义的作用域时 可以为可以为nullnull 不可以不可以 可以可以整数类型整数类型 浮点类型浮点类型 十进制类型十进制类型 布尔类型布尔类型 字符类型字符类型 2.3.2 简单类型简单类型 1、整数类型、整数类型 C#整数类型及其取值范围整数类型及其取值范围 1、整数类型、整数类型 int i=123; /也可以写为:也可以写为:System.Int32 i=123; long m

9、yLong=123L; 没有后缀的按照以下顺序解析成能够存储该值的第一个数没有后缀的按照以下顺序解析成能够存储该值的第一个数 据类型:据类型:intint、uintuint、longlong、ulongulong。 具有后缀具有后缀u u的按照以下顺序解析成能够存储该值的第一个数的按照以下顺序解析成能够存储该值的第一个数 据类型:据类型:uintuint、ulongulong 具有后缀具有后缀l l的按照以下顺序解析成能够存储该值的第一个数的按照以下顺序解析成能够存储该值的第一个数 据类型:据类型:longlong、ulongulong。 float myFloat=2.3F;double m

10、yDouble=2.7E+23;decimal myMoney=300.5m; Float常数后缀为常数后缀为F或或f; Double常数后缀为常数后缀为D或或d; Decimal常数后缀为常数后缀为M或或m,该类型主要用于金融货币领域,该类型主要用于金融货币领域2、浮点类型、浮点类型 浮点类型及其取值范围浮点类型及其取值范围 3、布尔类型、布尔类型 布尔类型表示现实中的布尔类型表示现实中的“真真”或或“假假”这两个概这两个概念,主要用来进行逻辑判断。在念,主要用来进行逻辑判断。在C#中,分别采用中,分别采用true和和false这两个值来表示这两个值来表示“真真”和和“假假”。 char m

11、yChar=A; char myChar=我我; char myChar=u0041; / A的的Unicode表示表示4、字符类型、字符类型字符类型采用国际上公认的字符类型采用国际上公认的Unicode标准字符集标准字符集UnicodeUnicode转义序列:转义序列:用用“u”u”后面跟所要表示的字符在后面跟所要表示的字符在UnicodeUnicode字符集中的字符集中的1616进制值形式表示一个字符,如进制值形式表示一个字符,如u0041u0041表示字符表示字符A C#C#转义字符转义字符字符类型(续)字符类型(续)5、枚举类型、枚举类型 enum Season Spring, Sum

12、mer, Autumn, Winter;Season currentSeason; enum days Sunday,Monday,Tuesday,Wednesday, Thursday,Friday,Saturday枚举类型为一组在逻辑上密不可分的枚举类型为一组在逻辑上密不可分的整数整数提供便于提供便于记忆的符号记忆的符号每个枚举值在内存中都以每个枚举值在内存中都以基本类型基本类型值的形式存储。默认情况下,枚举的值的形式存储。默认情况下,枚举的基本类型是基本类型是int,基本类型值以,基本类型值以0开始,各个值之间以开始,各个值之间以1为增量递增。为增量递增。也可以使用冒号指定另一种基础类型

13、,如:也可以使用冒号指定另一种基础类型,如: enum Months:byte Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday ;注意:注意: 枚举的基本类型可以是枚举的基本类型可以是byte,sbyte,short,ushort,int,uint,long,ulong。 可以在声可以在声 明枚举类型的同时,重新给枚举值赋值,例如:明枚举类型的同时,重新给枚举值赋值,例如: enum Months Monday=1,Tuesday=2,Wednesday=3,Thursday=4, Friday=5,Saturday=6, Su

14、nday=7; 枚举类型(续)枚举类型(续) 6、结构类型、结构类型 把一系列相关的变量组织成单一实体的过程,称把一系列相关的变量组织成单一实体的过程,称为生成结构的过程。这个单一实体的类型就叫做为生成结构的过程。这个单一实体的类型就叫做结构类型,每一个变量称为结构的成员。结构类型,每一个变量称为结构的成员。struct PhoneBookpublic string name;public string phone;public string address; PhoneBook p1;7、值类型的默认值、值类型的默认值sbyte、byte、short、ushort、int、uint、long

15、、ulong,默,默认值为认值为0。char类型默认值是类型默认值是u0000float类型默认值是类型默认值是0.0Fdouble类型默认值是类型默认值是0.0Ddecimal类型默认值是类型默认值是0.0Mbool类型默认值是类型默认值是false2.1 变量变量 2.2 常量常量 2.3 C# 数据类型数据类型 2.4 类型转换类型转换 2.5 运算符和表达式运算符和表达式第第 2 章章 变量、数据类型和表达式变量、数据类型和表达式2.4.1 隐式类型转换隐式类型转换 2.4.2 显式类型转换显式类型转换2.4.3 装箱和拆箱装箱和拆箱2.4.4 Convert类类2.4 类型转换类型转

16、换 隐式数值转换隐式数值转换 隐式枚举转换隐式枚举转换2.4.1 隐式类型转换隐式类型转换 1、隐式数值转换、隐式数值转换 隐式数值转换:隐式数值转换:一般是从一般是从低精度到高精度低精度到高精度从从短类型到长类型短类型到长类型示例代码:隐式数值转换示例代码:隐式数值转换using System;class typeConversion public static void Main() byte x=16; Console.WriteLine(x=0,x); ushort y=x; Console.WriteLine(y=0,y); y=65535; Console.WriteLine(y=

17、0,y); float z=y; Console.WriteLine(z=0,z); 2、隐式枚举转换、隐式枚举转换 隐式枚举转换隐式枚举转换: :允许把十进制整数允许把十进制整数0 0转换成任何枚转换成任何枚举类型,而其他的整数则不存在这种隐式转换。举类型,而其他的整数则不存在这种隐式转换。 示例代码:隐式枚举转换示例代码:隐式枚举转换using System;enum WeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;class enumConvertion public static void Main() W

18、eekday day0; Console.WriteLine(day); 显式数值转换显式数值转换 显式枚举转换显式枚举转换 2.4.2 显式类型转换显式类型转换 显示类型转换的语法显示类型转换的语法(目标类型)源数据(目标类型)源数据即,将把即,将把“源数据源数据”的值转换为的值转换为“目标类型目标类型”的值。的值。例如:例如: short x=7; byte y=(byte)x; 1、显式数值转换、显式数值转换 显式数值转换显式数值转换是指当不存在相应的隐式数值转换时,是指当不存在相应的隐式数值转换时,从一种数值类型到另一种数值类型的转换。从一种数值类型到另一种数值类型的转换。示例代码:显

19、式数值转换示例代码:显式数值转换using System;class explicitConvert static void Main() byte byteValue; short shortValue=281; byteValue=(byte)shortValue; Console.WriteLine(shortValue=0,shortValue); Console.WriteLine(byteValue=0,byteValue); 281的二进制值是的二进制值是100011001,而,而byte类型是类型是8位的二进制,所以转换后会将位的二进制,所以转换后会将100011001的最的最

20、高位丢失,保留低高位丢失,保留低8位,即位,即00011001,也就是,也就是十进制的十进制的25。在进行显式数值转换时,要注意源变量类型与在进行显式数值转换时,要注意源变量类型与目标类型值的范围进行比较,以免出现错误。目标类型值的范围进行比较,以免出现错误。 从从sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double或或decimal转换为任何转换为任何枚举类型枚举类型从任何枚举类型转换为从任何枚举类型转换为sbyte、byte、short、ushort、int、uint、long、ulong、char、float、doub

21、le或或decimal 从任何枚举类型转换为任何其他枚举类型从任何枚举类型转换为任何其他枚举类型 2、显式枚举转换、显式枚举转换 显式枚举转换包括以下内容:显式枚举转换包括以下内容:float、double和和decimal类型的值保留整数部类型的值保留整数部份,并且不进行四舍五入份,并且不进行四舍五入示例代码:显式枚举转换示例代码:显式枚举转换using System;enum WeekdaySunday,Monday,Tuesday,Wednesday,Thursday, Friday,Saturday;class explicitEnumConvert public static voi

22、d Main() Weekday day; day=(Weekday)3; Console.WriteLine(day); float、double和和decimal类型的值保留整数部类型的值保留整数部份,并且不进行四舍五入。份,并且不进行四舍五入。如:如: day=(Weekday)2.6;则,变量则,变量day的枚举值为的枚举值为Tuesday2.4.3 装箱和拆箱装箱和拆箱装箱是将值类型转换为引用类型装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型拆箱是将引用类型转换为值类型 利用利用装箱装箱和和拆箱拆箱功能,可通过允许功能,可通过允许值类型值类型的任何的任何值与值与Objec

23、t类型的值相互转换,将类型的值相互转换,将值类型值类型与与引用引用类型类型链接起来链接起来 装箱装箱是数值类型隐式转换为是数值类型隐式转换为object类型或者任何该数类型或者任何该数值类型实现了的接口类型。装箱一个数值会值类型实现了的接口类型。装箱一个数值会分配一个对分配一个对象实例象实例,并把该数值拷贝到新对象中。,并把该数值拷贝到新对象中。例如:例如: int i=123; object o=i; / /装箱装箱 这条装箱语句执行的结果是在堆栈中创建了一个对象这条装箱语句执行的结果是在堆栈中创建了一个对象o,o,该该对象引用了堆上对象引用了堆上intint类型的数值,而该数值是赋给变量类

24、型的数值,而该数值是赋给变量i i的数值的数值的拷贝。的拷贝。i i和和o o两个变量的区别如图两个变量的区别如图2.12.1所示。所示。 1、装箱、装箱2 2、拆箱、拆箱 拆箱拆箱是显式地把是显式地把object类型转换成数值类型,或者把数值类型转换成数值类型,或者把数值类型实了的接口类型转换成该数值类型。类型实了的接口类型转换成该数值类型。 拆箱操作包括以下两个步骤:拆箱操作包括以下两个步骤: l l检查对象实例检查对象实例,确认它是给定数值类型的包装数值。,确认它是给定数值类型的包装数值。 l l把实例中的数值拷贝到数值类型的变量中。把实例中的数值拷贝到数值类型的变量中。 int val

25、 = 100;object obj = val;int num = (int) obj;Console.WriteLine (num: 0, num);值类型引用类型值类型被装过箱的对象才能被拆箱2.4.4 Convert类类Convert类是专门进行类型转换的类,它能够实现各种类是专门进行类型转换的类,它能够实现各种基本数据类型之间的相互转换。基本数据类型之间的相互转换。 示例代码:类型转换综合举例示例代码:类型转换综合举例using System;class exampleOfConvert static void Main(string args) short shortResult,

26、shortVal = 4; int integerVal = 67; long longResult; float floatVal = 10.5F; double doubleResult, doubleVal = 99.999; string stringResult, stringVal = 17; bool boolVal = true; doubleResult = floatVal * shortVal; Console.WriteLine(Implicit,- double:0 * 1 - 2, floatVal,shortVal,doubleResult); shortResu

27、lt = (short)floatVal; Console.WriteLine(Explicit,- short:0 - 1, floatVal,shortResult); stringResult = Convert.ToSingle(boolVal) + Convert.ToString(doubleVal); Console.WriteLine(Explicit,- string:0 + 1 - 2, boolVal,doubleVal,stringResult); Console.ReadKey();随堂练习随堂练习 1. 下面声明了一些数值类型的变下面声明了一些数值类型的变量量sho

28、rt s=10; int i=5; uint ui=50; long l=1000; double d=45.3;decimal m = 154;2. 试着分析下列哪些类型转换是试着分析下列哪些类型转换是正确的:正确的:s = ui; i = ui; s = l; l = s; m = d; d = m; l = d; m = i;随堂练习随堂练习 (续)(续)3. 试着写出以下这段程序的运行结果:试着写出以下这段程序的运行结果:using System;using System.Collections.Generic;using System.Text;namespace convert e

29、num Color Red,Yellow,Blue,Green,Purple,Black,White ; class Program static void Main(string args) Color color_arr=new Color 3; int int_arr = new int1,2,3; color_arr0 = (Color)int_arr0; color_arr1 = (Color)int_arr1; color_arr2 = (Color)int_arr2; Console.WriteLine(The value of color_arr0 is :0, color_a

30、rr0); Console.WriteLine(The value of color_arr1 is :0, color_arr1); Console.WriteLine(The value of color_arr2 is :0, color_arr2); 2.1 变量变量 2.2 常量常量 2.3 C# 数据类型数据类型 2.4 类型转换类型转换 2.5 运算符和表达式运算符和表达式第第 2 章章 变量、数据类型和表达式变量、数据类型和表达式运算符类型运算符类型算术运算符算术运算符关系运算符关系运算符逻辑运算符逻辑运算符位操作符位操作符赋值运算符赋值运算符条件运算符条件运算符运算符的优先级

31、运算符的优先级2.5 运算符和表达式运算符和表达式 2.5.1 运算符类型运算符类型 运算符分为三类运算符分为三类 :一元运算符:一元运算符: 只使用一个操作数只使用一个操作数 二元运算符:二元运算符: 使用两个操作数使用两个操作数 三元运算符:三元运算符: 使用三个操作数使用三个操作数 2.5.2 算术运算符算术运算符 注意注意:“/”/”运算符的操作数如果是整数,则结果是整数;操作数为运算符的操作数如果是整数,则结果是整数;操作数为浮点型,则结果为实数。浮点型,则结果为实数。2.5.3 关系运算符关系运算符 2.5.4 逻辑运算符逻辑运算符 注意注意:逻辑运算符的操作数只能是布尔值、布尔变

32、量和逻辑表达式:逻辑运算符的操作数只能是布尔值、布尔变量和逻辑表达式,不可以是数值类型。,不可以是数值类型。2.5.5 位运算符位运算符 位运算符用位模式来操作整型数位运算符用位模式来操作整型数。注意注意:位运算符的操作数主要是整数。其中,:位运算符的操作数主要是整数。其中,& &和和| |的操作数也可以的操作数也可以是布尔型的,运算结果与逻辑运算符相同。但是它们的区别在于:是布尔型的,运算结果与逻辑运算符相同。但是它们的区别在于:逻辑运算符是短路的,位运算符是非短路的逻辑运算符是短路的,位运算符是非短路的示例代码:位运算符举例示例代码:位运算符举例using System;c

33、lass exampleOfConvert static void Main(string args) int x; x = 1 & 2; Console.WriteLine(x); bool x;x =true & false;Console.WriteLine(x); 2.5.6 赋值运算符赋值运算符C#的赋值运算符分为简单赋值运算符和复合赋值运算符的赋值运算符分为简单赋值运算符和复合赋值运算符 2.5.7 条件运算符条件运算符条件运算符条件运算符是唯一的三操作数运算符,也被称为是唯一的三操作数运算符,也被称为三元运算符三元运算符。格式:?:是要计算的布尔表达式是为“真”时

34、表达式返回的值是为“假”时表达式返回的值。2.5.8 运算符的优先级运算符的优先级 运算符从高到低的优先级顺序:运算符从高到低的优先级顺序: 本章学习了本章学习了C#语言基础:变量和数据类型,介绍语言基础:变量和数据类型,介绍了运算符和表达式以及数据类型转换,还介绍运了运算符和表达式以及数据类型转换,还介绍运算符的使用方法和基本的数据类型转换概念,这算符的使用方法和基本的数据类型转换概念,这些都是重要的基本知识需要熟练掌握。些都是重要的基本知识需要熟练掌握。 小结小结 习题习题1.判断正误,如果错误,请说明原因判断正误,如果错误,请说明原因(1)在使用变量之前必须先声明其数)在使用变量之前必须

35、先声明其数据类型。据类型。(2)C# 认为认为number和和NuMbEr 是同一个是同一个变量。变量。(3)算术运算符)算术运算符* *、/、%、+ +和和- -处于同处于同一优先级一优先级习题(续)习题(续)2.填空题填空题(1)如果)如果int X的初始值为的初始值为5,则执行表达式,则执行表达式X-=3之后,之后,X的值为的值为_。(2)_运算符将左右操作数相加的结运算符将左右操作数相加的结果赋值给左操作数。果赋值给左操作数。(3)存储)存储32位整型数的变量应当用关键字位整型数的变量应当用关键字_来声明。来声明。(4)常量通过关键字)常量通过关键字_进行声明。进行声明。(5)布尔型变量可以赋值为)布尔型变量可以赋值为_或或_。习题(续)习题(续)3.选择题选择题(1)算术表达式)算术表达式_进行计算。进行计算。A.自右至左自右至左

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论