C#程序设计教程(第2版)-第3章-数据类型、运算符与表达式ppt课件.ppt
第第3章章 数据类型、运算符与表达式数据类型、运算符与表达式内容提要:内容提要: C#的主要数据类型以及类型标识符的主要数据类型以及类型标识符 数据类型的转换数据类型的转换 常量和变量、变量的赋值常量和变量、变量的赋值 C#常用的运算符常用的运算符目的要求:目的要求: 掌握掌握C#的主要数据类型、常量和变量、变量的赋值的主要数据类型、常量和变量、变量的赋值 掌握掌握C#常用的各类运算符常用的各类运算符重点难点:重点难点: 类型转换、常量和变量、算术运算符类型转换、常量和变量、算术运算符(+、-) 、复合赋值运算、复合赋值运算符、逻辑运算符、条件运算符符、逻辑运算符、条件运算符 C#中数据类型主要分为两大类:值类型和引用类中数据类型主要分为两大类:值类型和引用类型。这里我们先讲解这两种类型,然后再讨论数据类型。这里我们先讲解这两种类型,然后再讨论数据类型之间的转换。型之间的转换。3.1.1 值类型值类型 C#中值类型包括三种:简单类型、结构类型和枚中值类型包括三种:简单类型、结构类型和枚举类型。不同的类型是不同数据的集合,不同的类型举类型。不同的类型是不同数据的集合,不同的类型在在C#中用不同的类型标识符来表示。这里我们只介绍中用不同的类型标识符来表示。这里我们只介绍简单类型,结构类型和枚举类型将在后面介绍。简单类型,结构类型和枚举类型将在后面介绍。 简单类型包括整数类型、浮点类型、小数类型、简单类型包括整数类型、浮点类型、小数类型、字符类型和布尔类型等。字符类型和布尔类型等。 1整数类型整数类型 整数类型的数据值只能是整数,计算机语言所提供的整数类型的数据值只能是整数,计算机语言所提供的数据类型有一定的范围。数据类型有一定的范围。 2. 浮点类型浮点类型 浮点类型的数据包含两种:浮点类型的数据包含两种:单精度浮点型(单精度浮点型(float)和)和双精度浮点型(双精度浮点型(double),),其区别在于取值范围和精度的其区别在于取值范围和精度的不同。不同。 float类型是类型是32位宽,位宽,double类型是类型是64位宽。位宽。 单精度:取值范围在单精度:取值范围在+ 1.510-45 3.41038之间,精度为之间,精度为7 位数。位数。双精度:取值范围为双精度:取值范围为+5.0-324 1.710308之间,精度为之间,精度为 1516位数。位数。 3 小数类型小数类型 小数类型小数类型(decimal)占用占用16个字节个字节(128位)位),主要为了,主要为了满足需要高精度的财务和金融计算机领域。满足需要高精度的财务和金融计算机领域。 小数类型数据的取值范围和精度如下:小数类型数据的取值范围和精度如下: 取值范围在取值范围在+ 1.010-28 7.91028之间,精度为之间,精度为29位数。位数。 注意注意:小数类型数据的后面必须跟小数类型数据的后面必须跟m或者或者M后缀来表示它是后缀来表示它是decimal类型的,如类型的,如3.14m、0.28m等,否则就会被解释成标准等,否则就会被解释成标准的浮点类型数据,导致数据类型不匹配。的浮点类型数据,导致数据类型不匹配。 例:例: 138f 代表代表float类型的数值类型的数值138.0 518u 代表代表uint类型的数值类型的数值518 36897123ul 代表代表ulong类型的数值类型的数值36897123 22.1m 代表代表decimal类型的数值类型的数值22.1 12.68 代表代表double类型的数值类型的数值12.68 36 代表代表int类型的数值类型的数值36 刚开始学习,不可能一下子掌握这么多数值类型,先牢刚开始学习,不可能一下子掌握这么多数值类型,先牢记以下几种:记以下几种: int型型 :凡是要表示带符号的整数时,先考虑使用:凡是要表示带符号的整数时,先考虑使用int型;型; uint型型 :凡是需要不带符号的整数时,先考虑使用:凡是需要不带符号的整数时,先考虑使用uint型;型; double型:凡是需要做科学计算,并且精度要求不是很高型:凡是需要做科学计算,并且精度要求不是很高 时,考虑使用时,考虑使用double型。型。 4. 字符类型字符类型 字符类型的类型标识符是字符类型的类型标识符是char,采用采用Unicode字符集。字符集。 凡是在单引号中的一个字符,就是一个字符常数,凡是在单引号中的一个字符,就是一个字符常数, 如:如: 你你、 A、 ?、 6、2 注意注意: 在表示一个字符常数时,单引号内的有效字符在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,并且不能是单引号或者反斜杠数量必须且只能是一个,并且不能是单引号或者反斜杠()。)。 为了表示单引号和反斜杠等特殊的字符常数,为了表示单引号和反斜杠等特殊的字符常数,C#提提供了转义符。供了转义符。转义符转义符字符名称字符名称单引号单引号双引号双引号反斜杠反斜杠0空字符(空字符(Null)a发出一个警告发出一个警告 b倒退一个字符倒退一个字符f换页换页n新的一行新的一行r换行并移到同一行的最前面换行并移到同一行的最前面t水平方向的水平方向的Tabv垂直方向的垂直方向的Tab C#常用的转义符常用的转义符如如 Console.WriteLine(“Hello,”+”+”打印出单引号打印出单引号“+”“);例例: using System; class StrDemo static void Main( ) Console.WriteLine(“FirstLinenSecondLine”); Console.WriteLine(“AtBtC”); Console.WriteLine(“DtEtF”); 5布尔类型布尔类型 布尔类型的类型标识符是布尔类型的类型标识符是bool。 布尔类型常数只有两种值:布尔类型常数只有两种值:true(代表(代表“真真”)和)和false(代表(代表“假假”)。)。 布尔类型数据主要应用在流程控制中。布尔类型数据主要应用在流程控制中。 例:例: bool b=53; /b的值为的值为true; b=false; 3.1.2 引用类型引用类型 1. object类类 object类是系统提供的基类型,是所有类型的基类,类是系统提供的基类型,是所有类型的基类,C#中中所有的类型都直接或间接派生于对象类型。所有的类型都直接或间接派生于对象类型。 对于任一个对于任一个object变量,均可以赋以任何类型的值。变量,均可以赋以任何类型的值。 double d=3.14; object obj1; obj1=d; obj1=k; 对于对于object类型的变量,声明必须使用类型的变量,声明必须使用object关键字。关键字。 2. string类类 一个字符串是被双引号包含的一系列字符。一个字符串是被双引号包含的一系列字符。 string类是专门用于对字符串进行操作的。类是专门用于对字符串进行操作的。 如:如: string str1=中国,;中国,; string str2=你好!;你好!; string str3=str1+str2; /这相当于这相当于str3=中国,你好!中国,你好! char c=str30; /取出取出str3的第一个字符,即的第一个字符,即“中中”字。字。 C#支持两种形式的字符串常数。支持两种形式的字符串常数。(1)常规字符串常数)常规字符串常数 如:如: “this is a test” “C#程序设计教程程序设计教程” 例:例: using System; class StrDemo static void Main( ) Console.WriteLine( First0linenSecond0line ); Console.WriteLine( 你好你好a ); Console.WriteLine(“1“1t2t3 ); Console.WriteLine(“*t*t*”); 例:例:using System;class StringDemo public static void Main( ) string str1=“A string”; string str2=Another string.; Console.WriteLine(“0n1”,str1,str2); 运行结果如下:运行结果如下:(2)逐字字符串常数)逐字字符串常数 逐字字符串常数以逐字字符串常数以开头,后跟一对双引号,在双引开头,后跟一对双引号,在双引号中放入字符。如:号中放入字符。如: “电子高专电子高专” “This is a book.” 逐字字符串常数同常规字符串常数的区别逐字字符串常数同常规字符串常数的区别: 在逐字字符串常数的双引号中,每个字符都代表其最在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。原始的意义,在逐字字符串常数中没有转义字符。 注意注意:如果要包含双引号(),就必须在一行中使用如果要包含双引号(),就必须在一行中使用两个双引号()。两个双引号()。string str1; /定义字符串类型定义字符串类型string str2= hello, world ; /规则字符串常数:规则字符串常数:hello, worldstring str3= hello, world ; /逐字字符串常数:逐字字符串常数:hello, world string str4= hello t world ; /hello worldstring str5= hello t world ; /hello t worldstring str6=“He said Hello to you ; /Tom said Hello to youstring str7=“He said Hello to you ; /Tom said Hello to you例:例: using System; class Test static void Main( ) Console.WriteLine( This is a verbatim string literal that spans several lines. ); Console.WriteLine( Here is some tabbed output: 1 2 3 4 5 6 7 8 ); Console.WriteLine( Programmers say, I like C#); 运行结果如下:运行结果如下:3.1.3 类型转换类型转换 数据类型在一定条件下是可以相互转换的。数据类型在一定条件下是可以相互转换的。 C#允许使用两种转换的方式:隐式转换和显式转换。允许使用两种转换的方式:隐式转换和显式转换。 1. 隐式转换隐式转换 隐式转换是系统默认的、不需要加以声明就可以进行的隐式转换是系统默认的、不需要加以声明就可以进行的转换。转换。 隐式数据转换的使用方法如下:隐式数据转换的使用方法如下: int i=518; /a为整型数据为整型数据 long b=i; /b为长整型数据为长整型数据 float f=i; /f为单精度浮点型数据为单精度浮点型数据 2显式转换显式转换 显式转换又叫显式转换又叫强制类型转换强制类型转换,显式转换要明确指定转换类型。,显式转换要明确指定转换类型。 显式转换格式:显式转换格式: (类型标识符类型标识符)表达式表达式意义为:意义为:将表达式的值的类型转换为类型标识符的类型。将表达式的值的类型转换为类型标识符的类型。 比如:比如: (char)65 /把把int类型的类型的65转换成转换成char类型类型注意:注意:(1)显式转换可能会导致错误。)显式转换可能会导致错误。 (2)对于将)对于将float,double, decimal转换为整数,将通过舍转换为整数,将通过舍 入得到最接近的整型值,如果这个整型值超出目标入得到最接近的整型值,如果这个整型值超出目标 域,则出现转换异常。域,则出现转换异常。 比如:比如: (int)6.28m / 转换的结果为转换的结果为6 (int) 3e25f /将产生溢出错误将产生溢出错误3.1.4 装箱和拆箱装箱和拆箱 1装箱转换装箱转换 装箱转换装箱转换是指将一个值类型的数据是指将一个值类型的数据隐式地隐式地转换成一个对象类型转换成一个对象类型(object)的数据。)的数据。 例如:下面的两条语句就执行了装箱转换:例如:下面的两条语句就执行了装箱转换: int i=518; object obj=i; 例:在程序中执行装箱转换。例:在程序中执行装箱转换。 using System; class BoxingDemo static void Main( ) Console.WriteLine(执行装箱转换:执行装箱转换:); int k=200; object obj=k; k=300; Console.WriteLine(obj=0,obj); Console.WriteLine(k=0, k); 2拆箱转换拆箱转换 和装箱相反,和装箱相反,拆箱转换拆箱转换是指将一个对象类型的数是指将一个对象类型的数据据显式地显式地转换成一个值类型数据。转换成一个值类型数据。 例如:例如: object obj=228; int k=(int)obj; 例:在程序中使用拆箱转换。例:在程序中使用拆箱转换。 using System class UnboxingDemo static void Main( ) int k=228; object obj=k; /装箱转换装箱转换 int j=(int ) obj; /拆箱转换拆箱转换 Console.WriteLine(k=0tobj=1tj=2, k, obj, j); 该程序执行后,输出结果如下该程序执行后,输出结果如下: k=228 obj=228 j=228练习练习:1( )是)是decimal类型数据类型数据 A123L B1234 C1234F D1234M2已知大写字母已知大写字母A的的ASCII码是码是65,小写字母,小写字母a的的ASCII码码 是是97,则十六进制字符常量,则十六进制字符常量u0042表示(表示( ) A字符字符a B字符字符A C字符字符b D字符字符B 3.2.1 常量常量 在在C#中,常量在程序的运行过程中其值是中,常量在程序的运行过程中其值是不能改变不能改变的,例如,数字的,例如,数字100就是一个常量,这样的常量一般被称就是一个常量,这样的常量一般被称作常数。作常数。 声明常量的格式:声明常量的格式: const 类型标识符类型标识符 常量名常量名 = 表达式;表达式; 例:例: const double PI=3.14159265; double r=5.2; double s=PI*r*r; Console.Write(“面积面积=0”,s); 3.2 常量与变量常量与变量常量特点:常量特点:l l 在程序中,常量只能被赋予初始值。在程序中,常量只能被赋予初始值。l l 定义常量时,表达式中的运算符对象只允许出现常量和定义常量时,表达式中的运算符对象只允许出现常量和常数,不能有变量存在。常数,不能有变量存在。 例如:例如: int b=18; const int a=26; const int k=b+10; /错误,表达式中不允许出现变量错误,表达式中不允许出现变量 const int d=a+23; /正确,因为正确,因为a是常量是常量 a=56; /错误,不能修改常量的值错误,不能修改常量的值 3.2.2 变量变量 变量是程序运行过程中用于存放数据的变量是程序运行过程中用于存放数据的存储单元存储单元。 变量的值在程序的运行过程中可以改变。变量的值在程序的运行过程中可以改变。 1变量的定义变量的定义 在定义变量时,首先必须给每一个变量起名,称为变量名,在定义变量时,首先必须给每一个变量起名,称为变量名,变量名代表变量名代表存储地址存储地址。 变量的类型决定了存储在变量中的数值的类型。变量的类型决定了存储在变量中的数值的类型。 变量定义格式:变量定义格式: 类型标识符类型标识符 变量名变量名1,变量名,变量名2,例:例:double fsum;string strName;char b;int x;注意:注意:C#规定,任何变量在使用前,必须先定义,规定,任何变量在使用前,必须先定义, 后使用。后使用。2变量的赋值变量的赋值 变量的赋值,就是将数据保存到变量所代表的存储单元变量的赋值,就是将数据保存到变量所代表的存储单元中的过程。中的过程。 格式:格式: 变量名变量名=表达式;表达式; 意义:计算表达式的值,然后将这个值赋予变量。意义:计算表达式的值,然后将这个值赋予变量。例例: double nAverage; int nAgeSum; nAgeSum=210; /给给nAgeSum变量赋予数值变量赋予数值210 在程序中,可以给一个变量多次赋值。变量的当值等在程序中,可以给一个变量多次赋值。变量的当值等于于最近一次最近一次给变量所赋的值。给变量所赋的值。 如:如: nAgeSum=68; /这时这时nAgeSum等于等于68 nAgeSum=36+24; /这时这时nAgeSum等于等于60 nAgeSum= nAgeSum+40; /这这时这这时nAgeSum等于等于100 在对变量进行赋值时,表达式的值的类型必须同变量在对变量进行赋值时,表达式的值的类型必须同变量的类型的类型相同相同。 string sName; int nScore; sName=Jack; /正确正确 sName=Tom; /正确正确 nScore=98; sName=5; /错误错误, 不能将整数赋予字符串对象不能将整数赋予字符串对象 nScore=Hello; /错误错误, 不能字符串赋予整型变量不能字符串赋予整型变量 在定义变量的同时,可以对变量赋值,称为变量在定义变量的同时,可以对变量赋值,称为变量的初始化。的初始化。 对变量进行初始化的格式如下:对变量进行初始化的格式如下: 类型标识符类型标识符 变量名变量名=表达式;表达式; 例:例: string str=“This is a book”; 3变量的初始化变量的初始化练习:练习: 判断题:判断题: 1. C#规定所有变量必须先声明后使用。(规定所有变量必须先声明后使用。( ) 2双精度浮点数类型双精度浮点数类型double由由8个字节组成。个字节组成。( ) 3. 执行执行const int a=10; a=a+1; 这两条语句后这两条语句后, a的值为的值为11。 ( ) 填空题:填空题: 1使用变量使用变量a存放数据存放数据-389,则将变量声明为(,则将变量声明为( )类型)类型 最合适。最合适。3.3 运算符和表达式运算符和表达式 3.3.1 运算符运算符 运算符是表示各种不同运算的符号。运算符是表示各种不同运算的符号。 1算术运算符算术运算符 算术运算符用于对操作数进行算术运算。算术运算符用于对操作数进行算术运算。C#的算术运算符的算术运算符同数学中的算术运算符是很相似的。同数学中的算术运算符是很相似的。表表 C#算术运算符算术运算符 例:例: using System; class ModDemo static void Main( ) int iresult,irem; double dreult,drem; iresult=10/3; irem=10%3; dresult=10.0/3.0; drem=10.0%3.0; Console.WriteLine(10/3=0t 10%3=1, iresult, irem); Console.WriteLine(10.0/3.0=0t10.0%3.0=1,dresult, drem); 程序的输出如下所示:程序的输出如下所示:10/3=3 10%3=110.0/3.0=3.33333333333333 10.0%3.0=1 特殊的算术运算符:特殊的算术运算符:+(自增运算符自增运算符) -(自减速运算符自减速运算符) 作用:作用:使变量的值自动增加使变量的值自动增加1或者减少或者减少1。 例如,例如,x=x+1; 可以被写成可以被写成 +x; /前缀格式前缀格式 或者或者 x+; /后缀格式后缀格式 例:例: x=8; y=+x; 在这种情况下,在这种情况下,x和和y被赋值为被赋值为9。 但是,如果代码如下所写:但是,如果代码如下所写: x=8; y=x+; 那么那么y被赋值为被赋值为8, x被赋值为被赋值为9 。 当一个自增或自减运算符在它的操作数前面时,当一个自增或自减运算符在它的操作数前面时,C#将在取将在取得操作数的值前执行自增或自减操作。得操作数的值前执行自增或自减操作。 如果运算符在操作数的后面,如果运算符在操作数的后面,C#将先取得操作数的值,然将先取得操作数的值,然后进行自增或自减运算。后进行自增或自减运算。 例:例: using System; class Test static void Main( ) int x=5; int y=x-; Console.WriteLine(y=0, y); y=-x; Console.WriteLine(y=0, y); 结果:结果: y=5 y=3 注意:注意:+、 -只能用变量,而不能用于常量或表达式,例如只能用变量,而不能用于常量或表达式,例如5+或或-(x+y)都是错误的。都是错误的。例:例: using System; class count static void Main() int Val1=2; int Val2=3; Console.WriteLine(“Val1*Val2=0”, Val1*Val2); Console.WriteLine(“Val1/Val2=0”, Val1/Val2); Console.WriteLine(“Val1%Val2=0”, Val1%Val2); Console.WriteLine( +Val1); Console.WriteLine(-Val2); Console.WriteLine(Val1+); Console.WriteLine(Val2-); 结果:结果:2赋值运算符赋值运算符 赋值运算符用于将一个数据赋予一个变量,赋值操作符的赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。变量所指示的内存空间中。 例如例如: int x=8; x=x+x; x=16-x;表表 C#的赋值运算符的赋值运算符 可以把表达式的值通过复合赋值运算符赋予变量,这可以把表达式的值通过复合赋值运算符赋予变量,这时复合赋值运算时复合赋值运算右边的表达式右边的表达式是作为一个是作为一个整体整体参加运算的。参加运算的。例例: int a=8,b=3; a%=b*2-5; /*相当于相当于a%=(b*2-5),它与,它与 a=a%(b*2-5)是等价的。是等价的。*/ 对变量可以进行连续赋值。对变量可以进行连续赋值。 例例: int z=3; x=y=z; /等价于等价于x=(y=z)。3. 关系运算符关系运算符 关系运算符用于比较两个值的大小,关系运算的关系运算符用于比较两个值的大小,关系运算的结果结果不是不是true就是就是false。 例:例: bool a=a5-2 / a的值为的值为false表表 C#的关系运算符的关系运算符例:例:using System;class RelaOpr static void Main( ) int a=50; int x=30; int y=60; int b; b=x+y; bool j; j=a=b-40; Console.WriteLine(“a=b is 0”, j); 该程序运行后,输出结果为:该程序运行后,输出结果为: a=b is True 4逻辑运算符逻辑运算符 逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算运算结果是布尔类型结果是布尔类型。 逻辑非(逻辑非(!):):运算的结果是原先的运算结果的运算的结果是原先的运算结果的逆逆。 逻辑与(逻辑与(&):):只有两个运算对象只有两个运算对象都为都为true,结果结果才为才为true;只要其中有一个是;只要其中有一个是false,结果就为,结果就为false。 逻辑或(逻辑或(| ):):只要两个运算对象中有只要两个运算对象中有一个是一个是true,结结果果就为就为true,只有两个条件均为,只有两个条件均为false,结果才为,结果才为false。 表表 C#的逻辑运算符的逻辑运算符 当需要多个判定条件时,可以很方便地使用逻辑运算当需要多个判定条件时,可以很方便地使用逻辑运算符将关系表达式连接起来。符将关系表达式连接起来。 例例: xy&x0 如果表达式中同时存在着多个逻辑运算符,如果表达式中同时存在着多个逻辑运算符,逻辑非的逻辑非的优先级最高,逻辑与的优先级高于逻辑或。优先级最高,逻辑与的优先级高于逻辑或。 例例: 32|!(5-36)&ab5. 位运算符位运算符 (1) “”运算符运算符 把二进制数的把二进制数的0转换为转换为1,1转换为转换为0。 例:例:6的二进制表示:的二进制表示:00000110 6的结果:的结果: 11111001 (2) “&”运算符运算符 0&0=0 0&1=0 1&0=0 1&1=1 例:例:7的二进制表示:的二进制表示: 00000111 11的二进制表示:的二进制表示:00001011 “&”运算的结果是:运算的结果是: 00000011 即:即:7&11=3 (3) “|”运算符运算符 0| 0=0 0|1=1 1|0=1 1|1=1 例:例:7的二进制表示:的二进制表示: 00000111 11的二进制表示:的二进制表示:00001011 “|”运算的结果是:运算的结果是: 00001111 即:即:7&11=15 (4) “”运算符运算符 00=0 01=1 10=1 11=0 例:例:7的二进制表示:的二进制表示: 00000111 11的二进制表示:的二进制表示:00001011 “”运算的结果是:运算的结果是: 00001100 即:即:711=12 (5) “”运算符运算符 二进制位全部二进制位全部按位左移按位左移,高位高位被被丢弃丢弃,低位低位顺序顺序补补0。 例:例:7的二进制表示:的二进制表示: 00000111 7”运算符运算符 二进制位全部二进制位全部按位右移按位右移。 例:例:7的二进制表示:的二进制表示: 00000111 71结果是结果是00000011(十进制是(十进制是3) 6. 条件运算符条件运算符 格式:格式: 操作数操作数1?操作数操作数2:操作数操作数3 含义:进行条件运算时,首先含义:进行条件运算时,首先判断问号前面的布尔值判断问号前面的布尔值是是true还是还是false,如果是,如果是true,则值等于,则值等于操作数操作数2的值的值;如果为如果为false,则值等于,则值等于操作数操作数3的值的值。 例如:条件表达式例如:条件表达式“68?15+a:39”,由于,由于68的值为的值为false,所以整个表达式的,所以整个表达式的值是值是39。 7. 其他运算符其他运算符 (1) 字符串连接符(字符串连接符(+) 就是将两个字符就是将两个字符串连接在一起串连接在一起,形成新的字符串。,形成新的字符串。 比如:比如: “abc”+“efg” /结果是结果是abcefg “36812”+“3.14” / 结果是结果是368123.14 (2) is运算符运算符 is运算符用于检查表达式是否指定的类型,如果是,结运算符用于检查表达式是否指定的类型,如果是,结果为果为true,否则结果为,否则结果为false。例如:例如: int k=2; bool isTest=k is int; /isTest=true (3) sizeof运算符运算符 sizeof运算符用于获得值类型数据在运算符用于获得值类型数据在内存占用的字节数内存占用的字节数。例如:例如: int a=sizeof(double); /a=8 3.3.2 表达式表达式 表达式是运算符、常量和变量等组成的符号序列。表达式是运算符、常量和变量等组成的符号序列。 1算术表达式算术表达式 算术表达式是用算术运算符将运算对象连接起来的符合算术表达式是用算术运算符将运算对象连接起来的符合语法规则的式子。语法规则的式子。 自增运算符和自减运算符的优先级别高于其他的算术运自增运算符和自减运算符的优先级别高于其他的算术运算符。算符。 例如表达式例如表达式8+x+,应看作,应看作8+(x+)。如果。如果x的原值是的原值是6,则表达式则表达式8+x+的值是的值是14,运算结束后,运算结束后x的值是的值是7。 2赋值表达式赋值表达式 由赋值运算符将变量和表达式连接起来的式子称为赋由赋值运算符将变量和表达式连接起来的式子称为赋值表达式。值表达式。 例如:例如: y=x=8*8+3 这个赋值表达式的值是这个赋值表达式的值是67。由于赋值运算符的结合性。由于赋值运算符的结合性是自右至左的,所以是自右至左的,所以y=x=8*8+3和和 y=(x=8*8+3)是等价的。是等价的。 3关系表达式关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是布尔类型,即真达式。关系表达式的值是布尔类型,即真(true)或假或假(false)。 例如:例如: x=8; y=6; z=xy+3; /结果为结果为false a=xy&z; /结果为结果为false 4逻辑表达式逻辑表达式 用逻辑运算符将关系表达式或者逻辑值连接起来的式用逻辑运算符将关系表达式或者逻辑值连接起来的式子称为逻辑表达式。逻辑表达式的值只能取子称为逻辑表达式。逻辑表达式的值只能取true或或false。 三个逻辑运算符的运算顺序为三个逻辑运算符的运算顺序为“逻辑非逻辑非”最高,其次最高,其次是是“逻辑与逻辑与”,最后为,最后为“逻辑或逻辑或”。 例如:例如: !(36)|(5=9)|(7=1) /结果为结果为true5条件表达式条件表达式 由条件运算符和表达式组成的式子称为条件表达式。由条件运算符和表达式组成的式子称为条件表达式。 例如:例如: 83?5:2; 其结果为其结果为5,因为,因为83为为true,则整个表达式的值为,则整个表达式的值为“:”前前面表达式的值,这里是常数面表达式的值,这里是常数5。 练习:练习:判断题判断题:1. 已知已知a=3, b=4, 则则+(a+b)的结果为的结果为8。( )2. 整数除法会产生一个整数商,其小数部分会被舍去。(整数除法会产生一个整数商,其小数部分会被舍去。( )3. 若变量若变量a为整型,则表达式为整型,则表达式“a is int”的结果为的结果为true。 ( )选择题选择题1. 已知已知 int a; string b=”123”; bool c; 则有错误的表达式为(则有错误的表达式为( ) Aa= =10&c Bc120 C2*a+1 Db+”456”2表达式表达式 “abcde”= =”abcde”+”2006”的值为(的值为( ) ATrue2006 Btrue Cfalse D0读程序,写结果:读程序,写结果: 1. using System; Class Demo static void Main( ) double x=10.0, y=3.0; byte b; int i; char ch; i=(int)(x/y); Console.WriteLine(“(int)(x/y)=0”,i); i=100; b=(byte)i; Console.WriteLine(“b=0”,b); i=257; b=(byte)i; Console.WriteLine(“b=0”,b); b=66; ch=(char)b; Console.WriteLine(“ch=0”,ch); 结果:结果: 2. using System; class LogicalOperator static void Main( ) int i=1; int j=2; bool k1,k2,k3; k1=ij&i+j; Console.WriteLine(“k1=0,i=1”,k1,i); k2=ij|i+j; Console.WriteLine (“k2=0,i=1”,k2,i); bool k3=ij+|xy&!true; Console.WriteLine (“k3=0, i=1”, k3,j); 结果:结果: 3. using System; class Demo3 static void Main( ) int a=10,b=20,c; bool k1,k2,k3; k1=a is int; k2=a=b; c=k1?a+:-b; k3=k1|k2&!k1; Console.WriteLine(k1=0 k2=1 k3=2,k1,k2,k3); Console.WriteLine(a=0 b=1 c=2,a,b,c); byte t1=150,t2=110,t3; Console.WriteLine(t3); 结果:结果:本章作业:本章作业: 1. 习题习题3的的1、2、3 、4 。实验报告:实验报告: 实验二实验二