版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#.NET程序设计实用教程程序设计实用教程1第二章第二章C#程序设计基础程序设计基础 2学习目标学习目标u掌握掌握C#的基本数据类型的基本数据类型u掌握掌握C#各种运算符表达式的用法;各种运算符表达式的用法;u理解理解C#控制台程序的基本结构;控制台程序的基本结构;u会使用会使用IF、WHILE、FOR等语句编写等语句编写程序;程序;u掌握数组的使用方法;掌握数组的使用方法;u了解异常处理方法。了解异常处理方法。3第二章第二章 C#程序设计基础程序设计基础u2.1 C#基本数据类型基本数据类型u2.2 常量、变量与表达式常量、变量与表达式u2.3 选择结构选择结构u2.4 循环结构循环结构u
2、2.5 数组数组u2.6 异常处理异常处理4u2.1.1 值类型值类型u2.1.2 引用类型引用类型2.1 C#基本数据类型基本数据类型52.1 C#基本数据类型基本数据类型 数据类型 值类型 引用类型 简单类型 结构类型 枚举类型 整数类型 字符类型 布尔类型 实数类型 sbyte byte short ushort int uint long ulong floate double decimal 类 委托 数组 接口 C#中数据类型分类图中数据类型分类图 62.1.1值类型值类型 值类型的变量内含变量值本身,值类型的变量内含变量值本身,C#的值类型可以分为的值类型可以分为简单类型、结构类
3、型和枚举类型。下面介绍简单类型。简单类型、结构类型和枚举类型。下面介绍简单类型。 71简单类型(简单类型(Simple Type)(1) 整数类型整数类型8(2) 实数类型实数类型9(3 )字符类型字符类型 例如,可以采用如下方式字符变量赋值:例如,可以采用如下方式字符变量赋值: char c=H ; / 字符字符H char c=x0048; / 字符字符H,十六进制转义符(前缀为,十六进制转义符(前缀为x) char c=u0048; / 字符字符H,Unicode表示形式(前缀为表示形式(前缀为u) char c=r; / 回车,转义字符回车,转义字符 在表示一个字符常数时,单引号内的有
4、效字符数量必须且只能在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,而且不能是单引号或者反斜杠(是一个,而且不能是单引号或者反斜杠()。)。10(4)布尔类型布尔类型 布尔类型数据用于表示逻辑真和逻辑假,布尔类型的布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是类型标识符是bool。 11uint age=23ulong number=-33uulong number1=55ufloat score=89.5fudecimal price=123.456muchar answer=yubool isright=true122枚举类型(枚举类型(Enum Type)枚举类
5、型是一种值类型,它用于声明一组命名的枚举类型是一种值类型,它用于声明一组命名的常数。常数。(1)枚举类型的声明形式:)枚举类型的声明形式:访问修辞符访问修辞符 enum 枚举名:基础类型枚举名:基础类型 枚举成员枚举成员 注:注:u 基础类型必须能够表示该枚举中定义的所有枚举数值。基础类型必须能够表示该枚举中定义的所有枚举数值。u 枚举声明可以显式地声明枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或或 ulong 类型作为对应的基础类型。类型作为对应的基础类型。u 没有显式地声明基础类型的枚举声明意味着所对应的基础类型是没有显式地声明基础
6、类型的枚举声明意味着所对应的基础类型是int。13(2)枚举成员枚举成员 枚举成员是该枚举类型的命名常数。任意两个枚枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围个枚举成员的常数值必须在该枚举的基础类型的范围之内。之内。 示例示例: public enum TimeofDay:uint Morning=-3, Afternoon=-2, Evening=-1 产生编译时错
7、误,原因是常数值产生编译时错误,原因是常数值 -1、-2 和和 3 不在基础整型不在基础整型 uint 的范围内。的范围内。 14u(3)枚举成员默认值枚举成员默认值 在枚举类型中声明的第一个枚举成员它的默值为零。在枚举类型中声明的第一个枚举成员它的默值为零。 以后的枚举成员值是将前一个枚举成员(按照文本顺以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加序)的值加 1 得到的。这样增加后的值必须在该基础得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错类型可表示的值的范围内;否则,会出现编译时错误。误。 示例示例: public enum TimeofDay
8、:uint Morning, Afternoon, Evening Morning的值为的值为0,Afternoon的值为的值为1,Evening的值为的值为2。15(4)为枚举成员显示赋值为枚举成员显示赋值 允许多个枚举成员有相同的值允许多个枚举成员有相同的值 没有显示赋值的枚举成员的值,总是前一个枚举成员没有显示赋值的枚举成员的值,总是前一个枚举成员的值的值+1. 示例示例 public enum Number a=1, b, c=1, d b的值为的值为2,d的值为的值为2. 注意:以上枚举值都不能超过它的基础类型范围。否则会报错注意:以上枚举值都不能超过它的基础类型范围。否则会报错.1
9、6(5)枚举类型与基础类型的转换枚举类型与基础类型的转换 基础类型不能隐式转换为枚举类型基础类型不能隐式转换为枚举类型 枚举类型也不能隐式转换为基础类型枚举类型也不能隐式转换为基础类型示例示例: public enum Number a, b, c, d class Test public static void Main() int i=Number.a; Number n; n=2 /错误,要强制类型转换错误,要强制类型转换(int)Number.a/错误错误,要强制类型转换要强制类型转换(Number)217u(6)System.Enum类型类型 System.Enum 类型是所有枚举类
10、型的抽象基类型是所有枚举类型的抽象基类类,并且从并且从 System.Enum 继承的成员在任何枚举继承的成员在任何枚举类型中都可用。类型中都可用。 System.Enum 本身不是枚举类型。相反,它本身不是枚举类型。相反,它是一个类类型,所有枚举类型都是从它派生的。是一个类类型,所有枚举类型都是从它派生的。 System.Enum 从类型从类型System.ValueType派生派生18u(7)使用枚举类型示例:使用枚举类型示例: using System; public enum TimeofDay Morning, Afternoon, Evening 19class Test stat
11、ic void WriteGreeting(TimeofDay timeofDay) switch(timeofDay) case TimeofDay.Morning: Console.WriteLine(good morning); break; case TimeofDay.Afternoon: Console.WriteLine(good afternoon); break; case TimeofDay.Evening: Console.WriteLine(good evening); break; 20u static void Main() WriteGreeting(Timeof
12、Day.Morning); WriteGreeting(TimeofDay.Evening); WriteGreeting(TimeofDay.Afternoon); 213结构类型结构类型结构类型是指把各种不同类型数据信息组合在结构类型是指把各种不同类型数据信息组合在一起形成的组合类型。一起形成的组合类型。 声明结构类型的一般语法格式如下:声明结构类型的一般语法格式如下:struct 标识符标识符 结构成员定义;结构成员定义;22例:例:以下声明一个具有姓名和年龄的结构体类型以下声明一个具有姓名和年龄的结构体类型Student:struct Student /定义名为定义名为Student的
13、结构类型的结构类型/定义结构的数据成员定义结构的数据成员 long no; string name; int age; string university; /定义结构的方法成员定义结构的方法成员 void structmethod( ) /方法可执行代码方法可执行代码 3结构类型结构类型23 声明一个结构类型后,可以定义该结构类型的变量(简声明一个结构类型后,可以定义该结构类型的变量(简称为结构变量)。称为结构变量)。创建结构类型的变量的一般形式如下:创建结构类型的变量的一般形式如下: 结构名结构名 标识符;标识符;如:如:Student s1,s2;说明:结构名为已声明的结构类型的名称,标
14、识符必须是说明:结构名为已声明的结构类型的名称,标识符必须是C#合法的标识符,它用来表示结构类型的变量。合法的标识符,它用来表示结构类型的变量。 3结构类型结构类型24结构变量的使用结构变量的使用1)访问结构变量字段)访问结构变量字段访问结构变量字段的一般格式如下:访问结构变量字段的一般格式如下: 结构变量名结构变量名.字段名字段名 例如,例如,s1.no表示结构变量表示结构变量s1的学号,的学号,表示结构变表示结构变量量s2的姓名。的姓名。 结构体变量的字段可以在程序中单独使用,与普通变量完结构体变量的字段可以在程序中单独使用,与普通变量完全相同。全相同。2)结构变量的赋值)结
15、构变量的赋值 结构变量的赋值有两种方式。结构变量的赋值有两种方式。 结构变量的字段赋值:使用方法与普通变量相同。结构变量的字段赋值:使用方法与普通变量相同。 结构变量之间赋值:要求赋值的两个结构变量必须类型相结构变量之间赋值:要求赋值的两个结构变量必须类型相同。例如:同。例如: s1=s2;这样这样s2的所有字段值赋给的所有字段值赋给s1的对应字段。的对应字段。 25u 下面一个简单示例:下面一个简单示例:struct IPAddress public byte b1,b2,b3,b4; Class Test IPAddress myIP; myIP.b1=192; myIP.b2=168;
16、myIP.b3=1; myIP.b4=11; Console.Write(“0.1”,myIP.b1, myIP.b2); Console.Write(“0.1”,myIP.b3, myIP.b4);26【例例】 设计一个控制台程序说明结构类型的应用。设计一个控制台程序说明结构类型的应用。using System;namespace Proj3_2 class Program struct Student /结构类型声明应放在结构类型声明应放在Main函数的外面函数的外面 public int xh; /学号学号 public string xm; /姓名姓名 public string xb
17、; /性别性别 public int nl; /年龄年龄 public string bh; /班号班号 27 static void Main(string args) Student s1,s2;/定义两个结构类型变量定义两个结构类型变量 s1.xh = 101; s1.xm = 李明李明; s1.xb = 男男; s1.nl = 20; s1.bh = 07001; Console.WriteLine(学号学号:0,姓名姓名:1,性别性别:2,年龄年龄:3, 班号班号:4, s1.xh, s1.xm, s1.xb, s1.nl, s1.bh); s2 = s1;/将结构变量将结构变量s1
18、赋给赋给s2 s2.xh = 108; s2.xm = 王华王华; Console.WriteLine(学号学号:0,姓名姓名:1,性别性别:2,年龄年龄:3, 班号班号:4, s2.xh, s2.xm, s2.xb, s2.nl, s2.bh); 282.1.2 引用类型引用类型u引用类型是将数据保存在堆上的存储方式。当引用类型是将数据保存在堆上的存储方式。当将一个数据给引用类型时,它被保存在堆上的将一个数据给引用类型时,它被保存在堆上的变量中。引用类型的大小不固定,为了可以快变量中。引用类型的大小不固定,为了可以快速地搜索引用类型数据的值,通过将其地址保速地搜索引用类型数据的值,通过将其地
19、址保存在堆栈上,可以通过地址找到真正数据的所存在堆栈上,可以通过地址找到真正数据的所在。引用类型很抽象,就像一个门牌号,可以在。引用类型很抽象,就像一个门牌号,可以根据门牌号找到所在的房子。根据门牌号找到所在的房子。u引用类型一般包括类、接口、委托和数组等。引用类型一般包括类、接口、委托和数组等。29引用类型实例引用类型实例class Study public int x = 15; /类的变量,默认为类的变量,默认为15class Program static void Main(string args) /引用类型的演示引用类型的演示 Study A1 = new Study(); Stu
20、dy A2 = A1; A2.x = 25; /值类型的演示值类型的演示 int B1 = 35; int B2 = B1; B2 = 45; Console.WriteLine(A1.x= + A1.x + ,A2.x= + A2.x); /引用类型结果引用类型结果 Console.WriteLine(B1= + B1 + ,B2= + B2); /值类型结果值类型结果 Console.Read(); 302.2 常量、变量与表达式常量、变量与表达式u2.2.1 常量常量u2.2.2 变量变量u2.2.3 运算符与表达式运算符与表达式u2.2.4 运算符的优先级与结合性运算符的优先级与结合性
21、u2.2.5 类型转换类型转换312.2.1 常量常量u常量就是在程序的运行期间其值不会改变的量,常量就是在程序的运行期间其值不会改变的量,通常分为直接常量和符号常量。通常分为直接常量和符号常量。u直接常量直接常量l(1)整型常量l(2)实型常量l(3)字符常量l(4)字符串常量l(5)布尔常量321直接常量直接常量(1)整型常量)整型常量C#语言整型常量的三种表示形式:语言整型常量的三种表示形式: l十进制整数,如十进制整数,如12, -314, 0。 l八进制整数,要求以八进制整数,要求以0开头,如开头,如012 l十六进制数,要求十六进制数,要求0 x或或0X开头,如开头,如0 x12
22、C#语言的整型常量默认为语言的整型常量默认为int型,如:型,如:int i =3;声明声明long型常量可以后加型常量可以后加 l 或或 L ,如:,如:long l = 3L;33(2)实型常量)实型常量C#浮点类型常量有两种表示形式:浮点类型常量有两种表示形式:l十进制数形式:必须含有小数点,例如:十进制数形式:必须含有小数点,例如: 3.14 314.0 .314 l科学记数法形式:如:科学记数法形式:如: 3.14e2 3.14E2 314E2 C#浮点型常量默认为浮点型常量默认为double型,如要声明一个型,如要声明一个常量为常量为float型,则需在数字后面加型,则需在数字后面
23、加f或或F,如:,如: double d = 3.14; float f = 3.14f;1直接常量直接常量34(3)字符常量)字符常量u字符常量是用单引号括起来的单个字符,如:字符常量是用单引号括起来的单个字符,如: char c = A;uC#字符采用字符采用Unicode编码,每个字符占两个编码,每个字符占两个字节,因而可用十六进制编码形式表示字节,因而可用十六进制编码形式表示char c1 = u0061;uC#语言中还允许使用转义字符语言中还允许使用转义字符来将其后的来将其后的字符转变为其它的含义字符转变为其它的含义char c2 = n; /代表换行符代表换行符1直接常量直接常量3
24、51直接常量直接常量36(4)字符串常量)字符串常量 字符串常量是用双引号括起的零个或多个字符序列。字符串常量是用双引号括起的零个或多个字符序列。C#支持两种形式的字符串常量,一种是常规字符串,另一种是支持两种形式的字符串常量,一种是常规字符串,另一种是逐字字符串。逐字字符串。1)常规字符串。双引号括起的一串字符,可以包括转义字)常规字符串。双引号括起的一串字符,可以包括转义字符。例如符。例如: ”China,Beijingn” “d:myfilef1.txt” / 表示字符串表示字符串d:myfilef1.txt1直接常量直接常量372)逐字字符串。在常规的字符串前面加一个)逐字字符串。在常
25、规的字符串前面加一个,就形成,就形成了逐字字符串,它的意思是字符串中的每个字符均表示本了逐字字符串,它的意思是字符串中的每个字符均表示本意,不使用转义字符。如果意,不使用转义字符。如果在字符串中需用到双引号,则在字符串中需用到双引号,则可连写两个双引号来表示一个双引号。可连写两个双引号来表示一个双引号。例如:例如:C:windowsMicrosoft / 与与 C:windowsMicrosoft 含义相同含义相同 He saidHello to me / 与与He saidHello to me 含义相同含义相同38(5)布尔常量)布尔常量uboolean类型适于逻辑运算,一般用于程序流类型
26、适于逻辑运算,一般用于程序流程控制。程控制。uboolean类型数据只允许取值类型数据只允许取值true或或false,不可以不可以0或非或非0的整数替代的整数替代true和和false。 1直接常量直接常量392. 符号常量符号常量u符号常量通常用来保存一个固定值,例如,在符号常量通常用来保存一个固定值,例如,在程序设计中,圆周率程序设计中,圆周率“PI”是一个固定的值,那是一个固定的值,那么,在程序开始时,就可以将其定义为一个常么,在程序开始时,就可以将其定义为一个常量。量。u常量的定义语法如下所示,其中,常量的定义语法如下所示,其中,“const”是是定义常量的关键字,同时还要将定义常量
27、的关键字,同时还要将变量名大写变量名大写。const 类型名称类型名称 常量名常量名 = 常量表达式常量表达式;如:如:const double PI=3.1415926; 402.2.2 变量变量1变量命名规则变量命名规则u变量必须以字母(包括汉字)或者变量必须以字母(包括汉字)或者_(下划线)开头,(下划线)开头,后面跟字母、数字和下划线的组合,后面跟字母、数字和下划线的组合,不能包含空格、不能包含空格、小数点以及各种符号。小数点以及各种符号。u组成变量名的字符数不要太长,应控制在组成变量名的字符数不要太长,应控制在330个字个字符。符。u标识符严格区分大小写。标识符严格区分大小写。nam
28、e,Nameu标识符不能与标识符不能与C#关键字名相同。关键字名相同。如:如:int,object等等不能用作变量名。不能用作变量名。除非标识符是以除非标识符是以作为前缀的。作为前缀的。u标识符不能与标识符不能与C#中的类库名相同中的类库名相同u变量名在同一范围内必须是唯一的。变量名在同一范围内必须是唯一的。41合法的变量标识符:合法的变量标识符:_namec_sharpvar1var2var2var1非法的标识符:非法的标识符:1var c_# var2 var1 以数字以数字1开头开头 包括了字母、数字和下划线以外的字符包括了字母、数字和下划线以外的字符# 包括了字母、数字和下划包括了字母
29、、数字和下划线以外的字符(空格)线以外的字符(空格) 42u在在C#程序里使用某个变量之前,必须要告诉程序里使用某个变量之前,必须要告诉编译器它是一个什么样的变量,因此要对变量编译器它是一个什么样的变量,因此要对变量进行定义。进行定义。u在在C#中声明变量使用下述语法:中声明变量使用下述语法: 类型类型 标识符标识符;n例如:int a,b,c; 注意:注意:C#编译器需要用某个初始值对变量进行编译器需要用某个初始值对变量进行初始化,之后才能在操作中引用该变量初始化,之后才能在操作中引用该变量 。如果。如果检测到局部变量在初始化之前就使用了它的值,检测到局部变量在初始化之前就使用了它的值,就会
30、产生错误。就会产生错误。2.2.2 变量变量432.变量的初始化变量的初始化例如:例如: float f11.25, f23.6, f3;C#有两种方法可确保变量在使用前进行了初始化:有两种方法可确保变量在使用前进行了初始化:(1)变量是类或结构中的字段,如果没有显示初始化,)变量是类或结构中的字段,如果没有显示初始化,在默认状态下创建这些变量时,其值是在默认状态下创建这些变量时,其值是0.(2)方法的局部变量必须在代码中显示初始化之后才能)方法的局部变量必须在代码中显示初始化之后才能在语句中使用它们的值。在语句中使用它们的值。443.变量的作用域变量的作用域u只要字段所属的类在某个作用域内,
31、其字段也在该作只要字段所属的类在某个作用域内,其字段也在该作用域内。用域内。u局部变量存在于表示声明该变量的块语句或方法结束局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内。的封闭花括号之前的作用域内。u在在for,while或类似语句中声明的局部变量存在于该或类似语句中声明的局部变量存在于该循环体内。循环体内。(1)局部变量的作用域冲突。)局部变量的作用域冲突。同名的局部变量不能在同一作用域内声明两次。同名的局部变量不能在同一作用域内声明两次。int x=20;int x=30;45正确的局部变量作用域正确的局部变量作用域u class Programu u publ
32、ic static int Main()u u for (int i = 0; i = 0; i-)u u Console.Write(i);u u Console.ReadKey();u return 0;u u u 46错误的变量作用域声明错误的变量作用域声明upublic static int Main()u u int j = 20;u for (int i = 0; i 10; i+)u u int j = 30;u Console.Writeline(j+i);u u 47(2)字段和局部变量的作用域冲突)字段和局部变量的作用域冲突 把声明为类级的变量看做字段,把在方法中声把声明为
33、类级的变量看做字段,把在方法中声明的变量看做局部变量。明的变量看做局部变量。namespace test class VarTest static int j = 20; public static void Main() int j = 30; Console.Writeline(j); 48u运算符运算符1 算术运算符算术运算符2 字符串运算符字符串运算符3 赋值运算符赋值运算符4 逻辑运算符逻辑运算符5 位运算符位运算符6 条件赋值运算符条件赋值运算符2.2.3 运算符与表达式运算符与表达式491 算术运算符算术运算符u算术运算符算术运算符: +,*,/,%,+,-l有关有关 /: 15
34、/4 15/3 15/2 15.0/2l有关有关 %:第一个数为:第一个数为0或或0.0 且第二个数不为零时,则且第二个数不为零时,则结果为结果为0或或0.0;若;若%的两侧有负数,则运算结果取决的两侧有负数,则运算结果取决于第一个数;于第一个数;l例如:例如:100%3 100%-3 -100%-3 -100%3l有关有关%的含义:的含义: 偶数偶数 a %2, 整除整除 a%7(如:(如:1001000的自的自然数中能够被然数中能够被7整除的数)整除的数), 个位个位 a%10l有关有关+, -: a=5; a+; b=a*2 a=5; b = + a *2; a=5; b = a+ *2
35、;502 字符串运算符字符串运算符l+ 除用于算术加法运算外,还可用于除用于算术加法运算外,还可用于对字符串进行连接操作对字符串进行连接操作int i = 300 +5;string s = hello, + world!;l+运算符两侧的操作数中只要有一个是运算符两侧的操作数中只要有一个是字符串字符串(String)类型,系统会自动将另类型,系统会自动将另一个操作数转换为字符串然后再进行连接一个操作数转换为字符串然后再进行连接string s = hello, +300 + 5 + 号号;/输出:输出:hello, 3005号号513 赋值运算符赋值运算符u赋值运算符就是常见的赋值运算符就是
36、常见的“=”,它可以为数值型、,它可以为数值型、枚举、类等所有的类型赋值。使用枚举、类等所有的类型赋值。使用“=”的语法的语法如下所示:如下所示:u变量变量 = 值;值;u其中,其中,“=”左边一般为变量的名称,左边一般为变量的名称,“=”右边右边为固定的值、已经知道的变量或新实例化的类。为固定的值、已经知道的变量或新实例化的类。52一般二元运算符都可以和赋值运算符在一起构成复合赋值运算,如表所示。534关系运算符与关系表达式关系运算符与关系表达式545逻辑运算符逻辑运算符u与:与:C#中的符号为中的符号为“&”,表示必须满足两个条,表示必须满足两个条件。语法为件。语法为“表达式表达式1 &
37、表达式表达式2”。u或:或:C#中的符号为中的符号为“|”,表示满足两个条件中,表示满足两个条件中的任意一个即可。语法为的任意一个即可。语法为“表达式表达式1 | 表达式表达式2”。u非:非:C#中的符号为中的符号为“!”。表示取当前表达式结果。表示取当前表达式结果的相反结果。如果当前表达式为的相反结果。如果当前表达式为“true”,则计算,则计算结果为结果为“false”。语法为。语法为“! 表达式表达式”。556位运算符位运算符u& 按位与:将两个值的二进制进行与操作。只按位与:将两个值的二进制进行与操作。只有两个二进位均为有两个二进位均为1时,结果位才为时,结果位才为1,否则为,否则为0
38、u|按位或:将两个值的二进制进行或操作。只按位或:将两个值的二进制进行或操作。只要两个二进制位中有一个为要两个二进制位中有一个为1,结果位就等于,结果位就等于1,否则为否则为0u按位异或按位异或u取反取反u 右移:将变量的二进制位往右移动右移:将变量的二进制位往右移动56577条件赋值运算符及表达式条件赋值运算符及表达式u条件运算符由符号条件运算符由符号“?”与与“:”组成,通过操作三组成,通过操作三个操作数完成运算,其一般格式为:个操作数完成运算,其一般格式为:逻辑表达式逻辑表达式 ? 表达式表达式1:表达式:表达式2u在条件赋值表达式在运算时,首先运算在条件赋值表达式在运算时,首先运算“逻
39、辑逻辑表达式表达式”的值,如果为的值,如果为true,则运算结果为,则运算结果为“表达式表达式1”的值,否则运算结果为的值,否则运算结果为“表达式表达式2”的值。的值。如:条件表达式如:条件表达式43?1:2的值为的值为1; 条件表达式条件表达式34?1:2的值为的值为2。58上面运算符的优先级最高,下面的最低;同一行运算上面运算符的优先级最高,下面的最低;同一行运算符的优先级相同,在实际表达式中这些运算符的优先级符的优先级相同,在实际表达式中这些运算符的优先级由结合性原则来决定由结合性原则来决定2.2.4 运算符的优先级运算符的优先级59运算符的优先级是指在表达式中哪一个运算符应该首先计运算
40、符的优先级是指在表达式中哪一个运算符应该首先计算。算。 C#根据运算符的优先级确定表达式的求值顺序:优先级根据运算符的优先级确定表达式的求值顺序:优先级高的运算先做,优先级低的操作后做,相同优先级的操作高的运算先做,优先级低的操作后做,相同优先级的操作从左到右依次做,同时用从左到右依次做,同时用小括号小括号控制运算顺序,任何在小控制运算顺序,任何在小括号内的运算最优先进行。括号内的运算最优先进行。 60 数据类型在一定条件下是可以相互转换的,如将数据类型在一定条件下是可以相互转换的,如将int型数据型数据转换成转换成double型数据。型数据。C#允许使用两种转换的方式:隐式转换允许使用两种转
41、换的方式:隐式转换和显式转换。和显式转换。1. 隐式转换隐式转换 隐式转换是系统默认的、不需要加以声明就可以进行的转换。隐式转换是系统默认的、不需要加以声明就可以进行的转换。2.2.5 类型转换类型转换61u隐式转换通常运用在以下三种情况:隐式转换通常运用在以下三种情况:u(1)对于同一种类型,小范围类型到大范围)对于同一种类型,小范围类型到大范围类型的转换类型的转换nsbyte sbn = 123; short shn = sbn; u(2)无符号整型到有符号整型的转换)无符号整型到有符号整型的转换nuint un = 123; long ln = un; u(3)整型(包括有符号整型和无符
42、号整型)整型(包括有符号整型和无符号整型)到浮点型的转换到浮点型的转换nint n = 123; float f = n; 622. 显式转换显式转换 显式转换又叫强制类型转换,与隐式转换相反,显式转换显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式需要用户明确地指定转换类型,一般在不存在该类型的隐式转换时才使用。格式如下:转换时才使用。格式如下: (类型标识符类型标识符)表达式表达式 其作用是将其作用是将“表达式表达式”值的类型转换为值的类型转换为“类型标识符类型标识符”的的类型。例如:类型。例如: (int)1.23 /把把double
43、类型的类型的1.23转换成转换成int类型,结果为类型,结果为1 需要提醒注意以下几点:需要提醒注意以下几点: (1)显式转换可能会导致错误。进行这种转换时编译器将)显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型,转换就无法进行。类型不是一个合法的目标类型,转换就无法进行。 (2)对于从)对于从float、double、decimal到整型数据的转换,将到整型数据的转换,将通过舍入得到最接近的整型值,如果这个整型值超出目标类通过舍入得到最接近的整型值,如果这个整型值
44、超出目标类型的范围,则出现转换异常。型的范围,则出现转换异常。 63【例例】 设计一个控制台程序说明类型转换的应用。设计一个控制台程序说明类型转换的应用。using System;namespace Proj3_1 class Program static void Main(string args) int i=65,i1,i2; double d = 66.3456,d1,d2; char c = A,c1,c2; Console.WriteLine(i=0:d5,d=1:f,c=2, i, d, c); i1 = (int)d; /强制类型转换强制类型转换 d1 = i;/隐式类型转换隐
45、式类型转换 c1 = (char)i; /强制类型转换强制类型转换 Console.WriteLine(i1=0:d5,d1=1:f,c1=2, i1, d1, c1); i2 = c; /隐式类型转换隐式类型转换 d2 = (int)d; /强制类型转换强制类型转换,转换成整数后再隐式转为转换成整数后再隐式转为double类型类型 c2 = (char)d; /强制类型转换强制类型转换 Console.WriteLine(i2=0:d5,d2=1:f,c2=2, i2, d2, c2); 64u 格式项都采用如下形式:u index,alignment:formatString u u 其中
46、index指索引占位符,这个肯定都知道;u ,alignment按字面意思显然是对齐方式,以,为标记;u :formatString就是对输出格式的限定,以:为标记。u u alignment:可选,是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。u u formatString:由标准或自定义格式说明符组成.u 65类型转换(续)类型转换(续)数值类
47、型数据和字符串类型数据之间的转换数值类型数据和字符串类型数据之间的转换l字符串类型数据字符串类型数据数值类型数据数值类型数据 int n; float x;n = int.Parse(123); /字符串字符串123转化为整数转化为整数123x = float.Parse(“5.345678”); /字符串字符串“5.345678”转化为单转化为单 精度浮点数精度浮点数5.345678n = Convert.ToInt16(“123”); /字符串字符串“123”转化为整数转化为整数 123l数值类型数据数值类型数据字符串类型数据字符串类型数据 int n=123; string s1;s1
48、= n.ToString(); /将整数将整数123转化为字符串转化为字符串12366装箱和拆箱装箱和拆箱 1. 装箱转换装箱转换装箱转换是指将一个值类型的数据隐式地转换成一个引用装箱转换是指将一个值类型的数据隐式地转换成一个引用类型的数据。例如,下面语句就执行了装箱转换:类型的数据。例如,下面语句就执行了装箱转换:int i=8;object obj=i;或或object obj=(object)i;2. 拆箱转换拆箱转换拆箱转换是指将一个引用类型的数据显式地转换成一个拆箱转换是指将一个引用类型的数据显式地转换成一个值类型数据。例如,下面语句就执行了拆箱转换:值类型数据。例如,下面语句就执行
49、了拆箱转换:object obj=2;int i=(int)obj;拆箱转换需要(而且必须)执行显式转换,这是它与装箱拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。转换的不同之处。67u注意:注意:当一个当一个“装箱装箱”操作把值类型转换为一个操作把值类型转换为一个引用类型时,不需要显式地强制类型转换;引用类型时,不需要显式地强制类型转换;u而拆箱操作把引用类型转换到值类型时,由于而拆箱操作把引用类型转换到值类型时,由于它可以强制转换到任何可以相容的值类型,所它可以强制转换到任何可以相容的值类型,所以必须显式地强制类型转换。以必须显式地强制类型转换。683. C#用户自定义
50、类型转换用户自定义类型转换u public static implicit operator string(someStringClass s)u u .u uu 用户自定义转换用户自定义转换 所有的用户自定义转换都是静态的,要使用所有的用户自定义转换都是静态的,要使用static关键字关键字 用户自定义转换分显示和隐示,它们用用户自定义转换分显示和隐示,它们用implicit(隐式转换)(隐式转换)或或 explicit(显示转换)关键字声明。(显示转换)关键字声明。 static 访问修辞符访问修辞符 转换修辞符转换修辞符 operator 转换类型转换类型(参数参数)69u示例示例:us
51、ing System;struct Number private int value; public Number(int value) this.value = value; /用户自定义整型到用户自定义整型到Number型的隐式转换型的隐式转换 static public implicit operator Number(int value) return new Number(value); / 用户自定义从用户自定义从Number型到整型的显示转换型到整型的显示转换 static public explicit operator int(Number n) return n.value
52、; /用户自定义从用户自定义从Number类型到类型到string类型的隐式转换类型的隐式转换 static public implicit operator string(Number n) return n.ToString(); uclass Test static public void Main() Number n; n= 10; Console.WriteLine(int)n); /隐式转换到隐式转换到string Console.WriteLine(n); 702.3 选择结构选择结构u 2.3.1 if语句语句l1 、单分支、单分支if语句语句l2、双分支、双分支ifelse
53、语句语句l3、多分支、多分支if语句语句u 2.3.2 switch语句语句712.3.1 if语句语句1、单分支、单分支if语句语句语法形式如下:语法形式如下:if (表达式表达式) 语句;语句;说明:如果表达式的值为说明:如果表达式的值为true(即条件成立即条件成立),则,则执行后面执行后面if语句所控制的语句块;否则什么都语句所控制的语句块;否则什么都不执行。不执行。72u2、双分支、双分支ifelse语句语句语法如下:语法如下:if (表达式表达式) 语句块语句块1; else 语句块语句块2; 说明:如果表达式的值为说明:如果表达式的值为true(即条件成立即条件成立),则执行后,
54、则执行后面面if语句所控制的语句块语句所控制的语句块1;如果表达式的值为;如果表达式的值为false(即条件不成立即条件不成立),则执行,则执行else语句所控制的语语句所控制的语句块句块2;然后再执行下一条语句。;然后再执行下一条语句。2.3.1 if语句语句733、多分支、多分支if语句语句在在ifelse语句中可以嵌套使用多层语句中可以嵌套使用多层ifelse语句,如:语句,如:if (表达式表达式1) if(表达式表达式2) if(表达式表达式3) 语句语句1; else 语句语句2; else 语句语句3; else 语句语句4;2.3.1 if语句语句74例:首先输入一个成绩,然后
55、判断该成绩是优、良、中、及格还是不及格。例:首先输入一个成绩,然后判断该成绩是优、良、中、及格还是不及格。class Test static void Main( ) Console.Write(请输入考试成绩请输入考试成绩: );double score=double.Parse(Console.ReadLine( ); if (score = 90) Console.WriteLine(成绩为优成绩为优); else if (score = 80) Console.WriteLine(成绩为良成绩为良); else if (score = 70) Console.WriteLine(成绩为
56、中成绩为中); else if (score = 60) Console.WriteLine(成绩为及格成绩为及格); else Console.WriteLine(成绩为不及格成绩为不及格); 2.3.1 if语句语句752.3.2 switch语句语句u switch语句的一般格式如下:语句的一般格式如下:switch (表达式表达式) case 常量表达式常量表达式1: 语句语句1; break; case 常量表达式常量表达式2: 语句语句2; break; case 常量表达式常量表达式n: 语句语句n; break; default: 语句语句n+1; break;76u说明:说明
57、:switch语句也是一个多条件判断语句,当代码语句也是一个多条件判断语句,当代码执行到此语句时,根据执行到此语句时,根据“case”语句的条件,语句的条件,逐个判断变量的值,满足条件的,则进入相对逐个判断变量的值,满足条件的,则进入相对应的应的“case”代码段,如果不满足任何代码段,如果不满足任何“case”条件,则进入条件,则进入“default”语句,执行默认代码语句,执行默认代码段。段。switch语句的语法如下所示,其中,每语句的语法如下所示,其中,每个个“case”代码段内都必须带有一个代码段内都必须带有一个“break;”语句,用来从当前分支条件中跳出。语句,用来从当前分支条件
58、中跳出。2.3.2 switch语句语句772.4 循环结构循环结构u2.4.1 while语句语句u2.4.2 do-while语句语句u2.4.3 for语句语句u2.4.4 foreach语句语句u2.4.5 跳转语句跳转语句782.4.1 while语句语句uwhile语句的语法如下:语句的语法如下: while (条件条件) 循环体语句;循环体语句; 792.4.1 while语句语句u下面的实例用下面的实例用whlie语句实现输出语句实现输出0到到99。class WhileClass static void Main() int i = 0; while (i 100) Cons
59、ole.WriteLine(i); i+; Console.Read(); 802.4.2 do-while语句语句u一般形式:一般形式: do 循环体语句;循环体语句; while (表达式表达式); 81u注意注意while语句与语句与do-while语句的区别:语句的区别:uwhile语句是语句是“先判断再执行先判断再执行”,do-while语语句是句是“先执行后判断先执行后判断”。do-while循环体里的循环体里的语句,至少执行一次;语句,至少执行一次;while语句循环体里的语句循环体里的语句可能一次都不执行。语句可能一次都不执行。 2.4.2 do-while语句语句822.4.3 for语句语句ufor语句的使用语法如下所示。语句的使用语法如下所示。for(表达式表达式1;表达式;表达式2;表达式;表达式3) 循环体语句;循环体语句; 83for语句的执行过程为:语句的执行过程为:(1)首先计算表达式)首先计算表达式1的值。的值。(2)判断表达式)判断表达式2的值是的值是true还是还是false,若表,若表达式达式2的值为的值为false,则转而执行步骤(,则转而执行步骤(4););若表达式若表达式2的值是的值是true,则执行循环体中的语,则执行循环体中的语句,然后求表达式句,然后求表达式3的值。的值。(3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国水电基础局有限公司三公司项目专职安全员招聘30人笔试历年参考题库附带答案详解
- 2025中化明达(福建)地质勘测有限公司招聘7人笔试历年参考题库附带答案详解
- 安徽省芜湖市27中2025-2026年八年级下期中语文试卷(含答案)
- 2025-2026学年新疆伊犁州伊宁县南通高级中学下学期期中模拟测试高一英语试卷(含答案)
- 2026年农产品代销合同协议
- 2026六年级下《比例》知识点梳理
- 2025工程(施工设计服务)合同
- 新苏教版三年级数学下册第一单元第7课《角的测量》教案
- 引水隧洞衬砌专项施工方案
- 2026年营运车辆过户合同(1篇)
- 口腔癌的口腔护理
- 购货合同模板写
- DL-T596-2021电力设备预防性试验规程
- NB-T11092-2023水电工程深埋隧洞技术规范
- 专题1.5 整式的乘除章末拔尖卷(北师大版)(解析版)
- 钢结构吊装专项施工方案(钢结构厂房)
- 天津市各地区2022年中考化学一模试题汇编-实验题
- HGT4134-2022 工业聚乙二醇PEG
- 国开2023秋《人文英语3》第5-8单元作文练习参考答案
- 煤矿班组长培训课件
- 《唐诗三百首》导读课(二稿)
评论
0/150
提交评论