《第312章C程序设计基础.ppt》由会员分享,可在线阅读,更多相关《第312章C程序设计基础.ppt(47页珍藏版)》请在三一办公上搜索。
1、第3章C#程序设计基础,3.1 标识符3.2 C#中数据类型3.3 C#中的变量和常量3.4 结构类型和枚举类型3.5 C#运算符和表达式3.6 C#中常用类和结构,3.1 标识符,C#的标识符名称必须遵守以下规则:(1)所有的标识符只能由字母、数字和下划线这3类字符组成,且第一个字符必须为字母或下划线。(2)标识符中不能包含空格、标点符号、运算符等其他符号。(3)标识符严格区分大小写。(4)标识符不能与C#关键字名相同。(5)标识符不能与C#中的类库名相同。,a12_c,1abc,3.2 C#中数据类型,C#中数据类型分类,3.2.1值类型 值类型的变量内含变量值本身,C#的值类型可以分为简
2、单类型、结构类型和枚举类型。下面仅介绍简单类型。,1.整数类型,2.实数类型,3 字符类型,例如,可以采用如下方式字符变量赋值:char c=H;/字符H char c=x0048;/字符H,十六进制转义符(前缀为x)char c=u0048;/字符H,Unicode表示形式(前缀为u)char c=r;/回车,转义字符 在表示一个字符常数时,单引号内的有效字符数量必须且只能是一个,而且不能是单引号或者反斜杠()。,4.布尔类型 布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是bool。,3.2.2 引用类型引用类型也称为参考类型。和值类型相比,引用类型的变量不直接存储所包含的值,而
3、是指向它所要存储的值。类似C中的指针。,1.object类 object是C#中所有类型(包括所有的值类型和引用类型)的基类,C#中的所有类型都直接或间接地从object类中继承而来。因此,对一个object的变量可以赋予任何类型的值。float f=1.23;object obj1;/定义obj1对象 obj1=f;object obj2=China;/定义obj2对象并赋初值,2.string类 C#还定义了一个string类,表示一个Unicode字符序列,专门用于对字符串的操作。同样,这个类也是在.NET Framework的命名空间System中定义的,是类System.String
4、的别名。字符串在实际中应用非常广泛,利用string类中封装的各种内部操作,可以很容易完成对字符串处理。例如:string str1=123+abc;/+运算符用于连接字符串 char c=Hello World!2;/运算符可以访问string中的单个字符,c=e string str2=China;string str3=China;/字符串的另一种表示形式,用引起来。bool b=(str2=str3);/=运算符用于两个字符串比较,b=true,3.2.3 类型转换 数据类型在一定条件下是可以相互转换的,如将int型数据转换成double型数据。C#允许使用两种转换的方式:隐式转换和显
5、式转换。1.隐式转换 隐式转换是系统默认的、不需要加以声明就可以进行的转换。,2.显式转换 显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式转换时才使用。格式如下:(类型标识符)表达式 其作用是将“表达式”值的类型转换为“类型标识符”的类型。例如:(int)1.23/把double类型的1.23转换成int类型,结果为1 需要提醒注意以下几点:(1)显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型,转换就无法进行。(2)对于从float、double、decimal
6、到整型数据的转换,将通过舍入得到最接近的整型值,如果这个整型值超出目标类型的范围,则出现转换异常。,【例3.1】设计一个控制台程序说明类型转换的应用。,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;/隐式类型转换 c1=(char)i;/强制类型转换 Conso
7、le.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);,3.2.4 装箱和拆箱 1.装箱转换装箱转换是指将一个值类型的数据隐式地转换成一个对象类型的数据。例如,下面语句就执行了装箱转换:int i=8;object obj=i;或object obj=(object)i;2.拆箱转换拆箱转换是指将一个对象类型的数据显式地转换成一个
8、值类型数据。例如,下面语句就执行了拆箱转换:object obj=2;int i=(int)obj;拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。,3.3 C#中的变量和常量3.3.1 变量1.变量定义 在C#程序里使用某个变量之前,必须要告诉编译器它是一个什么样的变量,因此要对变量进行定义。定义变量的方法如下:访问修饰符 数据类型 变量名=初始值;例如:string name=王华;int age=20;也可以同时声明一个或多个给定类型的变量,例如:int a=1,b=2,c=3;,2.理解值类型的变量 如果一个变量的值是普通的类型,那么这个C#变量就是值类型的变量。值类
9、型的变量直接把值存放在变量名标记的存储位置上。当定义一个值类型变量并且给它赋值的时候,这个变量只能存储相同类型的数据。所以,一个int类型的变量就只能存放int类型的数据。另外,当把值赋给某个值类型的变量时,C#会首先创建这个值的一个拷贝,然后把这个拷贝放在变量名所标记的存储位置上。例如:int x;int y=2;x=y;,3.理解引用类型的变量 引用表示所使用的是变量或对象的地址而不是变量或对象本身。当声明引用类型变量时,程序只是分配了存放这个引用的存储空间。要想创建对象并把对象的存储地址赋给该变量,就需要使用new操作符。例如:MyClass var;/MyClass是已定义的类或类型
10、var=new MyClass();数组示例:int a=new int3 1,2,3;for(int i=0;i 3;i+)Console.Write(0,ai);,3.3.2 常量1.直接常量 直接常量是指把程序中不变的量直接硬编码为数值或字符串值,例如,以下都是直接常量:100/整型直接常量 1.23e5/浮点型直接常量,2.符号常量 符号常量是通过关键字const声明的常量,包括常量的名称和它的值。常量声明的格式如下:const 数据类型 常量名=初始值;其中,“常量名”必须是C#的合法标识符,在程序中通过常量名来访问该常量。“类型标识符”指示了所定义的常量的数据类型,而“初始值”是所
11、定义的常量的值。例如:const double PI=3.14159265;,3.4 结构类型和枚举类型3.4.1 结构类型1.结构类型的声明 结构类型由若干“成员”组成的。数据成员称为字段,每个字段都有自已的数据类型。声明结构类型的一般格式如下:struct 结构类型名称 字段访问修饰符 数据类型 字段1;字段访问修饰符 数据类型 字段2;.字段访问修饰符 数据类型 字段n;,例如,以下声明一个具有姓名和年龄的结构体类型Student:struct Student/声明结构类型Student public int xh;/学号 public string xm;/姓名 public stri
12、ng xb;/性别 public int nl;/年龄 public string bh;/班号;,2.结构类型变量的定义 声明一个结构类型后,可以定义该结构类型的变量(简称为结构变量)。定义结构变量的一般格式如下:结构类型 结构变量;例如,在前面的结构类型Student声明后,定义它的两个变量如下:Student s1,s2;,3.结构变量的使用1)访问结构变量字段访问结构变量字段的一般格式如下:结构变量名.字段名 例如,s1.xh表示结构变量s1的学号,s2.xm表示结构变量s2的姓名。结构体变量的字段可以在程序中单独使用,与普通变量完全相同。2)结构变量的赋值 结构变量的赋值有两种方式。
13、结构变量的字段赋值:使用方法与普通变量相同。结构变量之间赋值:要求赋值的两个结构变量必须类型相同。例如:s1=s2;这样s2的所有字段值赋给s1的对应字段。,【例3.2】设计一个控制台程序说明结构类型的应用。,using System;namespace Proj3_2 class Program struct Student/结构类型声明应放在Main函数的外面 public int xh;/学号 public string xm;/姓名 public string xb;/性别 public int nl;/年龄 public string bh;/班号,static void Main(
14、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赋给s2 s2.xh=108;s2.xm=王华;Console.WriteLine(学号:0,姓名:1,性别:2,年龄:3,班号:4,s2.xh,s2.xm,s2.xb,s2.nl,s2.bh);,3.4.2 枚举类型枚举类型也是一种自定义数据类型,它
15、允许用符号代表数据。枚举是指程序中某个变量具有一组确定的值,通过“枚举”可以将其值一一列出来。1.枚举类型的声明 枚举类型使用enum关键字声明,其一般语法形式如下:enum 枚举名枚举成员1,枚举成员2,其中,enum是结构类型的关键字。例如,以下声明一个名称为color的表示颜色的枚举类型:enum Color Red,Green,Blue,White,Black在声明枚举类型后,可以通过枚举名来访问枚举成员,其使用语法如下:枚举名.枚举成员,2.枚举成员的赋值 在声明的枚举类型中,每一个枚举成员都有一个相对应的常量值,默认情况下C#规定第1个枚举成员的值取0,它后面的每一个枚举成员的值按
16、加1递增。例如,前面Color中,Red值为0,Green值为1,Blue值为2,依次类推。可以为一个或多个枚举成员赋整型值,当某个枚举成员赋值后,其后的枚举成员没有赋值的话,自动在前一个枚举成员值之上加1作为其值。例如:enum Color Red=0,Green,Blue=3,White,Black=1;则这些枚举成员的值分别为0、1、3、4、1。,3.枚举类型变量的定义 声明一个枚举类型后,可以定义该枚举类型的变量(简称为枚举变量)。定义枚举变量的一般格式如下:枚举类型 枚举变量;例如,在前面的枚举类型Color声明后,定义它的两个变量如下:Color c1,c2;,1)枚举变量的赋值枚
17、举变量赋值的语法格式如下:枚举变量=枚举名.枚举成员例如:c1=Color.Red;2)枚举变量的访问 枚举变量像普通变量一样直接访问。,3.5 C#运算符和表达式,3.5.1 算术运算符,3.5.2 字符串运算符 字符串运算符只有一个,就是加号(+)。它除了作为算术运算符之外,还可以将字符串连接起来,变成合并的新字符串。例如:string s=Hello;s=s+,World.;Console.WriteLine(s);/输出:Hello,World.,3.5.3 赋值运算符 赋值运算符(=)用于改变变量的值,它先求出右侧表达式的结果,然后再将结果赋给左侧的变量。,3.5.4 关系运算符,3
18、.5.5 逻辑运算符,3.5.6 位运算符,3.5.7 条件运算符 条件运算符是一个三元运算符,每个操作数同时又是表达式的值。由条件运算符构成的表达式称为条件表达式。条件运算符的使用格式如下:表达式1?表达式2:表达式3 它的计算方式为,先计算“表达式1”(必须为布尔值)的值,如果其值true,则“表达式2”的值作为整个表达式的最终结果;否则“表达式3”的值作为整个表达式的值。例如,以下表达式返回a和b中的最大值:max=ab?a:b计算过程是,当ab,max=a;否则max=b。,3.5.9 运算符的优先级 运算符的优先级是指在表达式中哪一个运算符应该首先计算。C#根据运算符的优先级确定表达
19、式的求值顺序:优先级高的运算先做,优先级低的操作后做,相同优先级的操作从左到右依次做,同时用小括号控制运算顺序,任何在小括号内的运算最优先进行。,3.6 C#中常用类和结构,C#中一切都是对象。,3.6.1 String类,string类型是.NET Framework中的String类的别名。string类型定义了相等运算符(=和!=)用于比较两个string对象,叧外,+运算符用于连接字符串,运算符可以用来访问string中的各个字符。,【例3.7】设计一个控制台程序求用户输入的子串在主串中位置。,using System;namespace Proj3_6 class Program s
20、tatic void Main(string args)String mstr,sstr;Console.Write(输入主串:);mstr=Console.ReadLine();Console.Write(输入子串:);sstr=Console.ReadLine();Console.WriteLine(主串长度=0,子串长度=1,mstr.Length,sstr.Length);if(String.Compare(mstr,sstr)!=0)/使用静态方法 Console.WriteLine(位置:0,mstr.IndexOf(sstr);else Console.WriteLine(两个字
21、符串相同);,3.6.2Math类 Math类位于System命名空间中,它包含了实现C#中常用算术运算功能的方法,这些方法都是静态方法,可通过“Math.方法名(参数)”来使用。,3.6.3 Convert类Convert类位于System命名空间中,用于将一个值类型转换成另一个值类型。这些方法都是静态方法,可通过“Convert.方法名(参数)”来使用。,3.6.4 DateTime结构DateTime结构类位于System命名空间中,DateTime值类型表示值范围在公元0001年1月1日午夜12:00:00到公元9999年12月31日晚上11:59:59之间的日期和时间。可以通过以下语
22、法格式定义一个日期时间变量:DateTime 日期时间变量=new DateTime(年,月,日,时,分,秒);例如,以下语句定义了2个日期时间变量:DateTime d1=new DateTime(2009,10,1);DateTime d2=new DateTime(2009,10,1,8,15,20);其中,d1的值为2009年10月1日零点零分零秒,d2的值为2009年10月1日8点15分20秒。,【例3.8】设计一个控制台程序说明DataTime结构的使用。,using System;namespace Proj3_7 class Program static void Main(s
23、tring args)DateTime d1=DateTime.Now;/定义当前日期时间变量 DateTime d2=new DateTime(2009,10,1);/定义一个日期时间变量 Console.WriteLine(d1:0,d1);int i=d1.Year;/求d1的年 int j=d1.Month;/求d1的月 int k=d1.Day;/求d1的日 int h=d1.Hour;/求d1的时 int m=d1.Minute;/求d1的分 int s=d1.Second;/求d1的秒,Console.WriteLine(d1:0年1月2日3时4分5秒,i,j,k,h,m,s);Console.WriteLine(d2:0,d2);Console.WriteLine(相距时间:0,d2-d1);DateTime d3=d1.AddDays(100);/d3为d1的100天后的日期 Console.WriteLine(d3:0,d3);Console.WriteLine(DateTime.IsLeapYear(i);/静态方法调用 Console.WriteLine(DateTime.IsLeapYear(d2.Year);,