C#程序设计语言基础——结构化程序设计.ppt_第1页
C#程序设计语言基础——结构化程序设计.ppt_第2页
C#程序设计语言基础——结构化程序设计.ppt_第3页
C#程序设计语言基础——结构化程序设计.ppt_第4页
C#程序设计语言基础——结构化程序设计.ppt_第5页
已阅读5页,还剩144页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/8/12,1,第4章 C#程序设计语言基础 结构化程序设计,2020/8/12,2,内容概要,4.1 C#程序的基本原理 4.2 C#预定义类型 4.3 运算符和表达式 4.4 语句和程序结构,2020/8/12,3,4.1.1 一个C#程序 4.1.2 C#程序的基本结构 4.1.3 标识符 4.1.4 关键字 4.1.5 输入和输出 4.1.6 转义字符,4.1 C#程序的基本原理,2020/8/12,4,本程序实现一个欢迎界面的功能。 首先程序提示用户输入姓名; 然后显示“欢迎某某进入C#的世界”; 最后显示一段鼓励的话。,4.1.1 一个C#程序,2020/8/12,5,1、

2、在解决方案“Hello World”中添加一个新项目“Welcome”,如图。,4.1.1 一个C#程序,2020/8/12,6,2、在“Welcome”项目的Class1.cs中添加C#代码,如下所示。 using System; namespace Welcome class Program static void Main(string args) Console.Write(请输入您的姓名:); string name = Console.ReadLine(); Console.WriteLine(欢迎0进入C#的世界!, name); Console.WriteLine(毛主席他老人

3、家说过:“好好学习t天天向上!n我们一定要紧记他老人家t的教诲!); ,4.1.1 一个C#程序,2020/8/12,7,3、将“Welcome”设为启动项目; 4、生成可执行程序; 5、开始执行,即可出现如前图所示的运行画面。,4.1.1 一个C#程序,2020/8/12,8,4.1.2 C#程序的基本结构,using System; namespace Welcome class Program static void Main(string args) Console.Write(“请输入您的姓名:”); string name = Console.ReadLine(); Console

4、.WriteLine(欢迎0进入C#的世界!,name); Console.WriteLine(毛主席他老人家说过:“好好学习t天天向上!n我们一定要紧记他老人家t的教诲!); /程序结束,导入 System 命名空间,声明 Welcome 命名空间,声明 Program 类,程序入口,返回类型为Void,程序代码,文件保存为 Program.cs,2020/8/12,9,4.1.2 C#程序的基本结构,1、命名空间(namespace) using System语句表示导入System命名空间,类似于Windows系统的文件夹,包含类和对象资源; C#程序是用namespace来组织代码,任

5、何一个类或其他资源都是指定的命名空间的内容。命名空间的定义语法: namespace 命名空间的名称 / 该名称空间的所有类都放在这里。 要访问某个命名空间中的类或对象,必须用如下语法: 命名空间. 类名,2020/8/12,10,4.1.2 C#程序的基本结构,导入namespace后,程序中即可以直接使用该命名空间中的类和对象。例如,Console即为System命名空间中包含的系统类库中定义好的一个类,它代表系统控制台,即字符界面的输入和输出。 由于Console类位于System命名空间中,所以实际上用户在访问Console类时,完整的写法应该是: System.Console 由于导

6、入了System命名空间,在程序中可以直接使用Sytem命名空间中的所有类或对象,System.Console被简化为Console。 此外,可以将用户自定义类置入namespace中,以便以后在其他程序中导入使用。如本例中的“Welcome”。,2020/8/12,11,4.1.2 C#程序的基本结构,2、类(class) C#要求其程序中的每一个元素都要属于一个类; 程序中class Program声明了一个类,类名Program。程序功能就是依靠它来完成; C#程序由大括号“”和“”构成,程序中每一对大括号“ ”构成一个语句块。大括号成对出现,可以嵌套,即块内可以出现子块,嵌套深度不受限

7、制,可以嵌套任意层,但一定要保证“”和“”成对出现,否则,程序就是错误的。 注意:C#程序中的语句以“;”表示结束。,2020/8/12,12,4.1.2 C#程序的基本结构,3、Main( )方法 名字为Main( )的静态方法就是程序的入口; 注意点: 当程序执行时,就直接调用这个方法; 方法的执行从左括号“”开始,到右括号“”结束; 在C#程序中,程序的执行总是从Main( )方法开始的; 一个C#程序中不允许出现两个或两个以上的Main( )方法; C#中Main( )方法必须包含在一个类中。,2020/8/12,13,4.1.2 C#程序的基本结构,3、Main( )方法 stati

8、c void Main() /. static int Main() /. return 0; static void Main(string args) /. static int Main(string args) /. return 0;,2020/8/12,14,4.1.2 C#程序的基本结构,4、注释 在程序编写过程中常常要对程序中比较重要或需要注意的地方做些说明,通常是采用注释的方式将这些说明写在程序中。 在C#语言中,提供了两种注释方法: (1)行注释:每一行中“/”后面的内容作为注释内容,该方式只对本行生效; (2)块注释:需要多行注释的时候,在第一行之前使用“/*”,在末尾一

9、行之后使用“*/”,也就是说被“/*”与*/所包含的内容都作为注释内容。,2020/8/12,15,4.1.2 C#程序的基本结构,4、注释 using System; namespace Hello class program static void Main() /* 声明一个DateTime 变量t并将当前日期赋给t */ DateTime t=DateTime.Today; string str_Time; / 声明一个字符串变量str_Time str_Time=t.ToLongDateString(); Console.WriteLine(当前日期是:0,str_Time); ,2

10、020/8/12,16,4.1.2 C#程序的基本结构,5、注意事项(总结) C#语言对大小写是敏感的; 使用缩进,帮助说明语句所处的层次; C#程序会忽略空白间隔和回车符,以“;”作为语句结尾; 可以使用注释帮助排版代码,例如用 /=来分割代码块。 一个程序不允许出现两个甚至两个以上的Main( )方法; C#程序中源代码被包含在“”与“”之间,必须一一对应。,2020/8/12,17,4.1.3 标识符,标识符(identifier)是一串字符,在程序中作为各种标识,用来为程序中的语言成分命名; 程序中的语言成分如:类型、变量、方法、对象等; C#是区分大小写的; 总的命名原则是标识符的可

11、读性要好。 C#的标识符需要遵循一定规则。,2020/8/12,18,4.1.3 标识符,C#的标识符有如下规则: (1)一个合法的C#标识符,是以字母或者下划线开头、其后可以跟任意个字母、数字或者下划线 。 以下就是合法的C#标识符: _this MyComputer001 StarT_Of_Program A7dll 下面所列出的是非法的标识符: 6ya (以数字开头) m# (“#”号既不是字母和下划线,也不是数字) Abc-abc(不能包含“-”) class(关键字) (2) C#的标识符严格区分大小写,即使两个标识符的区别仅仅字母的大小写不同,也认为是两完全不同的标识符。如:xyz

12、和xYz是两个不同的标识符。,2020/8/12,19,4.1.3 标识符,C#的标识符有如下规则: (3) 关键字也可以作为标识符,只要在关键字前加上前缀。 例如:Main void 都是非法的标识符,因为它们都是关键字。但是,关键字出现在标识符中,作为标识符的组成部分,却是允许的。 例如: Avoid void3 bcMain 在C#中可以使用一个很特殊的字符作为标识符的前缀(也就是以开头的标识符),只能作为标识符的开头字符,不能出现在标识符字符序列的其他位置上。通过给关键字加“”前缀,它们就变成合法的标识符了; 例如: void static,2020/8/12,20,4.1.4 关键字

13、,关键字是系统预定义的标识符,又称为保留字。 包括命令、方法名、系统类名等等。常见的保留字如下:,2020/8/12,21,4.1.5 输入和输出,一般情况下,数据输入和输出的方式有两种: 从控制台输入和输出; 从文件中输入和输出。 控制台(console)输入/输出主要通过命名空间System中的类Console(控制台类)来实现:提供了从控制台读写字符的基本功能。 输入:Console类的Read方法和ReadLine方法; 输出:Console类的Write和WriteLine方法。,2020/8/12,22,控制台输入和输出,输出: System.Console.WriteLine(H

14、ello World!); using System; Console.WriteLine(Hello World!); 输入: System.Console.ReadLine(); /读取一行字符,返回该字符,不接受回车r换行符n System.Console.Read(); /读取一个字符,返回该字符的ASCII码;如果没有数字,返回-1;接受回车换行符,2020/8/12,23,输入输出示例-1,using System; class ConsoleIO static void Main(string args) Console.Write(“请输入:”); /Write()输出结果无结

15、束符 /也就是无换行 int a = Console.Read(); Console.WriteLine(“通过Read()方法得到a=” + a); /WriteLine()输出,结果有结束符,有换行. Console.WriteLine(通过Read()方法得到a= + (char)a); ,2020/8/12,24,输入输出示例-2,/控制台输入输出函数的例子 using System; class ConsoleIO2 static void Main(string args) Console.Write(请输入:); string s = Console.ReadLine(); Co

16、nsole.WriteLine(你输入的内容为: + s); ,2020/8/12,25,字符串格式输出,/部分数值格式输出方式的例子 using System; class Formating public static void Main() Console.WriteLine(在宽度为的空间里靠左对齐:0,-10, 99); Console.WriteLine(在宽度为的空间里靠右对齐:0,10, 99); Console.WriteLine(在宽度为的空间里靠左对齐:0,-10, LLL); Console.WriteLine(在宽度为的空间里靠右对齐:0,10, RRR); Cons

17、ole.WriteLine(货币- 0:C 1:C4, 88.8, -888.8); Console.WriteLine(10进制整数- 0:D5, 88); Console.WriteLine(科学计数- 0:E, 888.8); Console.WriteLine(固定小数点- 0:F3, 888.8888); Console.WriteLine(浮点数- 0:G, 888.8888); Console.WriteLine(数字格式- 0:N, 8888888.8); Console.WriteLine(16进制格式- 0:X4, 88); Console.ReadLine(); ,int

18、 val1 = 0; int val2 = val1; val2 = 123; string val3 = 一个占位符例子; Console.WriteLine(Values: 0, 1,这是2, val1, val2,val3);,运行结果如何呢?,2020/8/12,26,将数值、日期或字符串等类型数据转换为适合显示的字符串格式。 可以将数值格式化为十六进制、科学记数法或者由用户指定的标点符号分隔成组的一系列数字; 可以将日期和时间格式化为适合于特定的国家、地区或区域性; 可以将枚举常量格式化为它的数值或名称。,复合格式化,2020/8/12,27,格式项的标准形式为: index , a

19、lignment : formatString 大括号“”和“” 必须成对的使用,用来在输出字符串中插入变量。 index(“索引”组件):是一个从零开始的整数,指示对象列表中要格式化的元素索引,即参数说明符为0的格式项格式化列表中的第一个值,参数说明符为1的格式项格式化列表中的第二个值,依次类推。如果由索引指定的对象是空引用,则格式项将被空字符串()替换。 Alignment(“对齐”组件):是一个带符号的整数,它指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”

20、为负数,字段的格式化数据为左对齐。如果需要填充,则使用空白。如果指定“对齐”,就需要使用逗号。 formatString(“格式字符串”组件):由标准或自定义格式说明符组成,是格式化代码的可选字符串(Xn),如果不指定“格式字符串”,则使用常规(“G”)格式说明符。如果指定formatString,则必须使用冒号。,复合格式化,2020/8/12,28,标准数字格式字符串用于格式化通用数值类型。标准格式字符串采取“Axx”形式,其中“A”为单个字母字符(被称为格式说明符),“xx”是可选的整数(被称为精度说明符)。,1 标准数字格式字符串,2020/8/12,29,1 标准数字格式字符串举例,

21、2020/8/12,30,数字格式字符,1. 货币格式 货币格式C或者c的作用是将数据转换成货币格式,在格式字符C或者c后面的数字表示转换后的货币格式数据的小数位数。例如: double k=1234.789; Console.WriteLine(“0,8:c”, k); /结果是¥1234 Console.WriteLine(“0,10:c4”, k); /结果是¥1234.7890,2020/8/12,31,数字格式字符,2. 整数数据类型格式 格式字符D或者d的作用是将数据转换成整数类型格式,在格式字符D或者d后面的数字表示转换后的整数类型数据的位数。这个数字通常是正数,如果这个数字大于

22、整数数据的位数,则格式数据将在首位前以0补齐,如果这个数字小于整数数据的位数,则显示所有的整数位数。例如: int k=1234; Console.WriteLine(“0:D”, k); /结果是1234 Console.WriteLine(“0:d3”, k); /结果是1234 Console.WriteLine(“0:d5”, k); /结果是01234,2020/8/12,32,数字格式字符,3. 科学计数法格式 格式字符E或者e的作用是将数据转换成科学计数法格式,在格式字符E或者e后面的数字表示转换后的科学计数法格式数据的小数位数,如果省略了这个数字,则显示7位有效数字。例如: i

23、nt k=123000; double f=1234.5578; Console.WriteLine(“0:E”, k); /结果1.230000E+005 Console.WriteLine(“0:e”, k); /结果1.230000e+005 Console.WriteLine(“0:E”, f); /结果1.2345578E+003 Console.WriteLine(“0:e”, f); /结果1.2345578e+003 Console.WriteLine(“0:e4”, k); /结果1.2300e+005 Console.WriteLine(“0:e4”, f); /结果1.2

24、346e+003,2020/8/12,33,数字格式字符,4. 浮点数据类型格式 格式字符F或者f的作用是将数据转换成浮点数据类型格式,在格式字符F或者f后面的数字表示转换后的浮点数据的小数位数,其默认值是2,如果所指定的小数位数大于数据的小数位数,则在数据的末尾以0补充。例如: int a=123000; double b=1234.5578; Console.WriteLine(“0,-8:f”,a); /结果是123000.00 Console.WriteLine(“0:f”,b); /结果是1234.56 Console.WriteLine(“0,-8:f4”,a); /结果是1230

25、00.0000 Console.WriteLine(“0:f3”,b); /结果是1234.558 Console.WriteLine(“0:f6”,b); /结果是1234.5578,2020/8/12,34,数字格式字符,5. 通用格式 格式字符G或者g的作用是将数据转换成通用格式,依据系统要求转换后的格式字符串最短的原则,通用格式可能使用科学计数法来表示,也可能使用浮点数据类型的格式来表示。例如: double k=1234.789; int j=123456; Console.WriteLine(“0:g”, j); /123456 Console.WriteLine(“0:g”,k)

26、; /1234.789 Console.WriteLine(“0:g4”,k); /1235 Console.WriteLine(“0:g4”, j); /1.235e+05,2020/8/12,35,数字格式字符,6. 自然数据格式 格式字符N或者n的作用是将数据转换成自然数据格式,其特点是数据的整数部分以每三位用“,”分隔,在格式字符N或者n后面的数字表示转换后的格式数据的小数位数,其默认值是2。例如: double k=211122.12345; int j=1234567; Console.WriteLine(“0:N”,k); /211,122.12 Console.WriteLin

27、e(“0:n”, j); /1,234,567 Console.WriteLine(“0:n4”, k); /211,122.1235 Console.WriteLine(“0:n4”, j); /1,234,567.0000,2020/8/12,36,标准数字格式字符串举例,double MyDouble = 123; int MyInt = 100; string FormatStr = String.Format(MyInt = 0,10,MyDouble = 1,10:C02, MyInt,MyDouble); Console.WriteLine(FormatStr); FormatS

28、tr = String.Format(MyInt = 0,-10:X,MyDouble = 1,-10:C02, MyInt,MyDouble); Console.WriteLine(FormatStr);,2020/8/12,37,2 日期与时间格式字符串举例,using System; using System.Globalization; class StrFormat static void Main(string args) DateTime dt = DateTime.Now; Console.WriteLine(dt); String format = d, D, f, F, g

29、, G, m, r, s, t, T, u, U, y, dddd, MMMM dd yyyy, ddd, MMM d yy, dddd, MMMM dd, M/yy, dd-MM-yy ; String date; for (int i = 0; i format.Length; i+) date = dt.ToString(formati, DateTimeFormatInfo.InvariantInfo); Console.WriteLine(String.Concat(formati, = , date); ,2020/8/12,38,4.1.6 转义字符,改变原有字符的意义,使其转换

30、为其他语义。 格式:反斜杠+指定字符 例如:n 常用的转义字符如下所示,2020/8/12,39,转义序列表,/ said Hello to me string e = said Hello to me; string f = said Hello to me; / serversharefile.txt string g = serversharefile.txt; string h = serversharefile.txt;,用连接字符串文字时,字符串文字中的转义符不具备转义的作用。,2020/8/12,40,转义字符示例,/转义字符 using System; class ESCCha

31、racter static void Main(string args) Console.WriteLine(毛主席他老人家说过:好好学习t天天向上.n我们一定要谨遵他老人家的u005C教诲u005C!); ,2020/8/12,41,4.2 C#的预定义类型,1、内置数据类型 2、变量 3、常量 4、文字 5、常用数据类型 6、数据类型转换,2020/8/12,42,1 内置数据类型,2020/8/12,43,1 内置数据类型,2020/8/12,44,1 内置数据类型,1、整数类型:sbyte、byte、short、ushort、int、uint、long、ulong 存储空间大小 是否有

32、符号 2、浮点类型:float、double 取值范围不同 精度不同 3、小数类型:decimal 精度比浮点型高 取值范围比浮点型小 4、布尔类型:bool 不能将整型转化为布尔型 5、字符类型:char,2020/8/12,45,C# 类型和 .NET 类型对照,返回对象的类型: MyObj.GetType( ) 或 typeof(MyObj),int x = 123; System.Int32 x = 123;,2020/8/12,46,C# 的类型系统,C# 中的数据类型分为两个基本类别: 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构 引用类

33、型 表示指向数据的指针或引用(C#中不提倡使用指针类型) 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串(string)、对象(object),2020/8/12,47,C#两种数值类型,2020/8/12,48,static void Main(string args) / 声明一个值类型的整型数据类型 int val = 100; Console.WriteLine(该变量的初始值为 0, val); Test(val); / 由于该数据类型属于值类型,所以将恢复其初始值 Console.WriteLine(该变量的值此时为 0, val); stati

34、c void Test(int getVal) int temp = 10; getVal = temp * 20; ,将 val 的初始值传递给 Test() 方法,被传递的 val 在 Test() 方法内被改变,不反映已经改变的 val 值,而保留原始值,例1:传递值类型,2020/8/12,49,static void Main(string args) DataTypeDemo objTest = new DataTypeDemo(); objTest.Val = 100; / 传递属于引用类型的对象 Test(objTest); / 由于该数据类型属于引用类型,所以会考虑新处理的值

35、 Console.WriteLine(变量的值为 0, objTest.Val); static void Test(DataTypeDemo dataTest) int temp = 10; dataTest.Val = temp * 20; ,将 DataTypeTest 的引用传递给 Test(),被传递的 val 在 Test() 中改变,反映已经改变的 val 值,不保留原始值,class DataTypeDemo public int Val; ,例2:传递引用类型,2020/8/12,50,1 内置数据类型,装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型 利用装箱和拆

36、箱功能,可通过允许值类型的任何值与Object类型的值相互转换,将值类型与引用类型链接起来,2020/8/12,51,int val = 100; object obj = val; Console.WriteLine (“对象的值 = 0, obj);,int val = 100; object obj = val; int num = (int) obj; Console.WriteLine (num: 0, num);,拆箱,装箱,被装过箱的对象才能被拆箱,装箱和拆箱,2020/8/12,52,2 变量,变量:运行时值可变的数据标识符。 C#中的变量主要有7种:静态变量、实例变量、数组元

37、素、值参数、引用参数、输出参数、局部变量等。 语法:访问修饰符 数据类型 变量名;,Public,Private,Protected,int,string,float,2020/8/12,53,2 变量,class A public static int sVar; / 静态变量,属于整个类,类名.变量名 int iVar; / 实例变量,属于类的一个实例,实例名.变量名 int aElem = 3,5,9; / 数组元素 void F(int vPar,ref int rPar, out int oPar) /值、引用、输出参数 int locVar = 1; / 局部变量 oPar = v

38、Par + rPar+; ,2020/8/12,54,3 常量,常量:运行时值不变的数据的标识符,用关键字const创建。 语法: 访问修饰符 const 数据类型 常量名 = 常量值;,int,string,float,Public,Private,Protected,2020/8/12,55,3 常量,/常量是不用static修饰符的静态成员 class test public const int A=1; public const int B=A+1; / 一个常量可以依赖于其他常量 public const int X=1,Y=2, Z=3; class Maintest static

39、 void Main() Console.WriteLine(0,1, test.A, test.B); ,常量访问方式:类名.常量名,2020/8/12,56,3 常量,static void Main(string args) / PI常量PI const float _pi = 3.14F; / 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980; / 钟摆的长度 int length = 40; / 钟摆的周期 double period = 0; / 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(le

40、ngth / _gravity); Console.WriteLine (钟摆的周期为 0 秒, period); ,声明常量,在表达式中使用常量,2020/8/12,57,4 文字,int litInt = 123; / 整数 char litChar = F; / 字符 string litStr = student; / 字符串 int a = 123u, b = 123L, c = 123b; / 分别表示32位无符号整数,/64位有符号整数和8位byte型整数 float f = 0.235E4; / 浮点数文字,0.235104 decimal d = 10.23m; / 128位

41、实数,后缀为“m”或“M”,不带后缀的整型文字,被默认为int类型,如果超出int范围,则依次与uint、long、ulong匹配; 如果带有后缀l或L,则首先认为是long,如果超出long的范围,则与ulong匹配; 不带后缀的实数类型的文字默认为double型。 如果自动的匹配都不成功,则产生编译时错误。,2020/8/12,58,5 常用数据类型,(1)整数类型 (2)浮点数类型 (3)decimal类型 (4)布尔类型 (5)枚举类型,2020/8/12,59,(1)整数类型,2020/8/12,60,using System; public class CharTest publi

42、c static void Main(string args) char myChar = C; Console.WriteLine(用字符赋值: + myChar); / C myChar = x0057; / 十六进制前缀 Console.WriteLine(用16进制数赋值: +myChar); / W myChar = u0070; / Unicode前缀 Console.WriteLine(用Unicode字符赋值: +myChar); / p myChar = Convert.ToChar(57); / 转换 Console.WriteLine(用转换方式赋值: +myChar);

43、 / 9 int a=123;string str; str = a.ToString(); / 整型转字符串 Console.WriteLine(str); / 123 int b = int.Parse(str); / 字符串转整形 Console.WriteLine(b); / 123 ,字符类型(例1),2020/8/12,61,using System; public class CharMethodTest public static void Main( ) char chA = A; char ch1 = 1; Console.WriteLine(A 比D小:+ chA.Com

44、pareTo(D); / -3 Console.WriteLine(chA和 ch1相等?+ chA.Equals(ch1); / false Console.WriteLine(t 是控制符? + Char.IsControl(t); / true Console.WriteLine(, 是字母? + Char.IsLetter(,); / false Console.WriteLine(u 是小写字母? + Char.IsLower(u); / true Console.WriteLine(“. 是标点符号? ”+ Char.IsPunctuation(.); / true ,字符结构的方

45、法(例2),2020/8/12,62,(2)浮点数类型,浮点数分为32位单精度浮点数和64位双精度浮点数,CTS中的名称是Single和Double,C#中的别名是float和double。 默认情况下,赋值运算符右侧的实数被视为 double。因此,应使用后缀 f 或 F 初始化浮点变量,例如: float x = 3.5; / 引起编译错误。 float x = 3.5F; / OK,2020/8/12,63,(3)decimal类型,decimal类型是一种实型,但不是浮点型。虽然它所占的字节数比double还大,但是表示的数值范围却小。 decimal类型表示的数精度较高,适于财务计算

46、。 实数被视为 decimal 类型,使用后缀 m 或 M decimal x = 893.5m; double d = Decimal.Todouble(x);,2020/8/12,64,布尔类型(bool)数值只有两个: true false C#中放弃了C+中认为非零整数为true的写法 bool x=2;/错误 if(x)/x为整数,错误,(4)布尔类型,2020/8/12,65,(5)枚举类型,enum 枚举名: 基础类型 枚举成员声明,枚举成员声明,枚举成员声明 例:enum WeekDays : int Sun,Mon,Tue,Wed,Thu,Fri,Sat ;,值类型中有两个复

47、合型类型:枚举和结构。 枚举类型有三个要素:枚举对象名、枚举成员和基础类型。 枚举成员是一组字段,即,一组逻辑上相关联的常数,称为命名常数; 基础类型是某一种内置的整数类型,即,必须是byte、sbyte、short、ushort、int、uint、long 或 ulong中的一种,int类型是默认的基础类型。,2020/8/12,66,枚举类型的关联值,枚举成员和基础类型之间存在对应关系,默认的情况下,成员按照排列的顺序,依次赋以0、1、2、3 等整数值,这样的值称为关联值。关联值可以由程序员显式地指定。 枚举类型的关联值集和它的基础类型值集相同。,enum WeekDays Sun,Mon

48、,Tue,Wed,Thu,Fri,Sat ; 这个数据类型表示了一个星期内七天的枚举,其中Sun的值为0,Sat的值为6。用户也可以自定义枚举元素的值。例如: enum WeekDaysSat=1,Sun=2,Mon=3,Tue=4,Wed=5,Thu=6,Fri=7;,2020/8/12,67,枚举类型 例,class EnumTest enum 直辖市 北京市=3, 上海市=2, 天津市=4,重庆市=1 static void Main(string args) 直辖市 City=直辖市.北京市; int order=(int)直辖市.天津市; /关联值 Console.WriteLine

49、(“直辖市中天津的人口是第0名”,order); / 4 / Enum.GetName在指定枚举中检索具有指定值的常数(关联值)的名称。 Console.WriteLine(“人口最多的城市是0”,Enum.GetName(typeof(直辖市),1); /重庆 for (int i=1;i=4; i+)Console.WriteLine(City); City=City+1; / 北京、天津、5、6 (关联值依次加1) for (int i=1;i=4; i+) City= (直辖市)i; Console.WriteLine(City); / 重庆、上海、北京、天津 ,2020/8/12,6

50、8,6 数据类型转换,具有相同数据类型的对象才能够互相操作; 为了进行不同类型数据的运算(如整数和浮点数的运算等),需要把数据从一种类型转换为另一种类型,即进行类型转换。 C#有两种转换方式: 隐式转换:无需指明转换,编译器自动将操作数转换为相同的类型。 显式转换:需指定把一个数据转换成其他类型。,2020/8/12,69,6 数据类型转换,(1)隐式转换 两个不同类型的操作数进行运算时,编译器会试图对其进行自动类型转换,使两者变为同一类型。 int x = 123456; long y = x; 不同的数据类型具有不同的存储空间,如果试图将一个需要较大存储空间的数据转换为存储空间较小的数据,

51、就会出现错误。 int result; long val1=1; long val2=2; result=val1 + val2;,2020/8/12,70,6 数据类型转换,(2)显式转换 又叫做强制类型转换,即需要明确要求编译器完成的转换。通常有以下几种方式: 1、使用目的类型的转换方法(目的类的方法): string str1 = “123”; int int1 = Int32.Parse(str1); 2、使用源类型的转换方法(源类的方法): int int1 = 123; string str1 = int1.ToString( ); 3、使用强制类型转换方式: int int1 =

52、 123; short sot1 = (short)int1;,2020/8/12,71,6 数据类型转换,(2)显式转换 4、使用Convert类的方法: string str1 = “123”; int int1 = Convert.ToInt32(str1); int int1 = 123; string str1 = Convert.ToString(int1 ); int int1 = 123; short sot1 = Convert.ToInt16(int1);,2020/8/12,72,4.3 运算符和表达式,4.3.1 运算符 4.3.2 表达式 4.3.3 运算的优先级和结

53、合性,2020/8/12,73,4.3.1 运算符,运算符是表示各种不同运算的符号,参与运算的数据称为操作数。 只有一个操作数的称为“一元运算符”,比如“+”运算符、“-”运算符等。 有两个操作数的运算符称为“二元运算符”,如“+”运算符、“-”运算符等。 C#中有一个“三元运算符”,即“?:”运算符,它有三个操作数。 C#的运算符可以分为:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和其他运算符。,2020/8/12,74,C# 的算术运算符,2020/8/12,75,自增自减运算符(例),using System; class Program static void

54、 Main(string args) int x = 10; int y = x+; Console.WriteLine(0,1, x, y); y = +x; Console.WriteLine(0,1, x, y); ,2020/8/12,76,C# 的赋值运算符,2020/8/12,77,C# 的关系运算符,2020/8/12,78,C# 的逻辑运算符,2020/8/12,79,C# 的位运算符,2020/8/12,80,按位取反运算符(),“”运算符是一元运算符,它对二进制数进行按位取反,即将二进制数的0转换为1,1转换为0。 例如对整数1进行按位取反操作,结果可表示为: 1: 000

55、00000 00000000 00000000 00000001 1: 11111111 11111111 11111111 11111110 对整数-1的取反操作为: -1: 11111111 11111111 11111111 11111111 -1:00000000 00000000 00000000 00000000 很明显, 1和-1的值不相等,并且1和-1的值也不相等,这说明取反是位运算,它和数值运算并不相同。,2020/8/12,81,按位与、或、异或( class OptIsExample public static void Main() Console.WriteLine(

56、1 is int); Console.WriteLine(1 is float); Console.WriteLine(1.0 is float); Console.WriteLine(1.0 is double); ,is操作符被用于动态地检查运行时对象类型是否和给定的类型兼容。运算“e is T”的结果,其中,e是一个表达式,T是一个类型,返回值是一个布尔值。,2020/8/12,86,is 运算符,using System; class Program static void Main(string args) int i = 1; double f = 1.1d; object o =

57、 1; Console.WriteLine(i is int); Console.WriteLine(i is float); Console.WriteLine(i is object); Console.WriteLine(f is float); Console.WriteLine(f is double); Console.WriteLine(f is object); Console.WriteLine(o is int); Console.WriteLine(o is double); ,2020/8/12,87,new 运算符,new操作符用于创建一个新的类型实例。它有三种形式:

58、 对象创建表达式,用于创建一个类类型或值类型的实例。 数组创建表达式,用于创建一个数组类型实例。 代理创建表达式,用于创建一个新的代理类型实例。 例: class A; A a = new A; int int_arr = new int10; delegate double DFunc(int x); DFunc f = new DFunc(5);,2020/8/12,88,typeof 运算符,typeof操作符用于获取类型的System.Type对象。 例: using System; class Program static void Main(string args) Console.WriteLine(typeof(int); Console.WriteLine(typeof(System.Int32); Console.WriteLine(typeof(float); Console.Wri

温馨提示

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

评论

0/150

提交评论