《C#程序设计教程(第2版) 第3章 数据类型、运算符与表达式ppt课件.ppt》由会员分享,可在线阅读,更多相关《C#程序设计教程(第2版) 第3章 数据类型、运算符与表达式ppt课件.ppt(69页珍藏版)》请在三一办公上搜索。
1、第3章 数据类型、运算符与表达式,内容提要: C#的主要数据类型以及类型标识符 数据类型的转换 常量和变量、变量的赋值 C#常用的运算符目的要求: 掌握C#的主要数据类型、常量和变量、变量的赋值 掌握C#常用的各类运算符重点难点: 类型转换、常量和变量、算术运算符(+、-) 、复合赋值运算符、逻辑运算符、条件运算符,3.1 数据类型,C#中数据类型主要分为两大类:值类型和引用类型。这里我们先讲解这两种类型,然后再讨论数据类型之间的转换。3.1.1 值类型 C#中值类型包括三种:简单类型、结构类型和枚举类型。不同的类型是不同数据的集合,不同的类型在C#中用不同的类型标识符来表示。这里我们只介绍简
2、单类型,结构类型和枚举类型将在后面介绍。 简单类型包括整数类型、浮点类型、小数类型、字符类型和布尔类型等。,1整数类型 整数类型的数据值只能是整数,计算机语言所提供的数据类型有一定的范围。,2. 浮点类型 浮点类型的数据包含两种:单精度浮点型(float)和双精度浮点型(double),其区别在于取值范围和精度的不同。 float类型是32位宽,double类型是64位宽。 单精度:取值范围在+ 1.510-45 3.41038之间,精度为7 位数。双精度:取值范围为+5.0-324 1.710308之间,精度为 1516位数。,3 小数类型 小数类型(decimal)占用16个字节(128位
3、),主要为了满足需要高精度的财务和金融计算机领域。 小数类型数据的取值范围和精度如下: 取值范围在+ 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类型的数值
4、36,刚开始学习,不可能一下子掌握这么多数值类型,先牢记以下几种: int型 :凡是要表示带符号的整数时,先考虑使用int型; uint型 :凡是需要不带符号的整数时,先考虑使用uint型; double型:凡是需要做科学计算,并且精度要求不是很高 时,考虑使用double型。,4. 字符类型 字符类型的类型标识符是char,采用Unicode字符集。 凡是在单引号中的一个字符,就是一个字符常数, 如: 你、 A、 ?、 6、2 注意: 在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,并且不能是单引号或者反斜杠()。,为了表示单引号和反斜杠等特殊的字符常数,C#提供了转义符。,C
5、#常用的转义符,如 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的值
6、为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+str
7、2; /这相当于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(“1t2t3); Console.WriteLine(“*t*t*”); ,例:using System
8、;class StringDemo public static void Main( ) string str1=“A string”; string str2=Another string.; Console.WriteLine(“0n1”,str1,str2); ,运行结果如下:,(2)逐字字符串常数 逐字字符串常数以开头,后跟一对双引号,在双引号中放入字符。如: “电子高专” “This is a book.” 逐字字符串常数同常规字符串常数的区别: 在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。 注意:如果要包含双引号(),就必须在一行中使用
9、两个双引号()。,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; /T
10、om 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 类型转换 数据类型在一定条件下是可以相互转换的
11、。 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转换为整数
12、,将通过舍 入得到最接近的整型值,如果这个整型值超出目标 域,则出现转换异常。 比如: (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
13、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=1t
14、j=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;
15、double r=5.2; double s=PI*r*r; Console.Write(“面积=0”,s);,3.2 常量与变量,常量特点: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变量的定义 在定义
16、变量时,首先必须给每一个变量起名,称为变量名,变量名代表存储地址。 变量的类型决定了存储在变量中的数值的类型。 变量定义格式: 类型标识符 变量名1,变量名2,,例:double fsum;string strName;char b;int x;注意:C#规定,任何变量在使用前,必须先定义, 后使用。,2变量的赋值 变量的赋值,就是将数据保存到变量所代表的存储单元中的过程。 格式: 变量名=表达式; 意义:计算表达式的值,然后将这个值赋予变量。例: double nAverage; int nAgeSum; nAgeSum=210; /给nAgeSum变量赋予数值210,在程序中,可以给一个变
17、量多次赋值。变量的当值等于最近一次给变量所赋的值。 如: 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; /错误, 不能字符串赋予整型变量,在定义变量的同时,可以对变量赋值,称为变
18、量的初始化。 对变量进行初始化的格式如下: 类型标识符 变量名=表达式; 例: 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#的算术运算符同数学中的
19、算术运算符是很相似的。,表 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=11
20、0.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; clas
21、s 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(“Va
22、l1/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#的赋值运算符,可以把表达式的值通过
23、复合赋值运算符赋予变量,这时复合赋值运算右边的表达式是作为一个整体参加运算的。例: 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
24、; 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#的逻辑运算符,当需
25、要多个判定条件时,可以很方便地使用逻辑运算符将关系表达式连接起来。 例: xy&x0 如果表达式中同时存在着多个逻辑运算符,逻辑非的优先级最高,逻辑与的优先级高于逻辑或。 例: 32|!(5-36)&ab,5. 位运算符 (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
26、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) “”运算符 二进制位全部按位右移。 例:7的二进制表示: 00000111 71结果是00000011(十进制是3),6. 条件运算符 格式: 操作数1?操作数2:操作数3 含义:进行条件运算时,首先判断问号前面的布尔值是true还是fal
27、se,如果是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) s
28、izeof运算符 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。由于赋值运算符的结合性是自
29、右至左的,所以y=x=8*8+3和 y=(x=8*8+3)是等价的。,3关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是布尔类型,即真(true)或假(false)。 例如: x=8; y=6; z=xy+3; /结果为false a=xy /结果为false,4逻辑表达式 用逻辑运算符将关系表达式或者逻辑值连接起来的式子称为逻辑表达式。逻辑表达式的值只能取true或false。 三个逻辑运算符的运算顺序为“逻辑非”最高,其次是“逻辑与”,最后为“逻辑或”。 例如: !(36)|(5=9)|(7=1),/结果为true,5条件表达式 由条件运算符和表达式组成的
30、式子称为条件表达式。 例如: 83?5:2; 其结果为5,因为83为true,则整个表达式的值为“:”前面表达式的值,这里是常数5。,练习:判断题:已知a=3, b=4, 则+(a+b)的结果为8。( )整数除法会产生一个整数商,其小数部分会被舍去。( )若变量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
31、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 ,结果:,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 ,结果:,本章作业: 1. 习题3的1、2、3 、4 。,实验报告: 实验二,