c#程序设计 第二章 数据类型与流程控制.ppt_第1页
c#程序设计 第二章 数据类型与流程控制.ppt_第2页
c#程序设计 第二章 数据类型与流程控制.ppt_第3页
c#程序设计 第二章 数据类型与流程控制.ppt_第4页
c#程序设计 第二章 数据类型与流程控制.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 数据类型与流程控制,本章及随后的几章,在很多方面与 JAVA 类似,因此会讲的比较快。 课上只讲解要点或需要注意的地方,基本不举实例,需要大家课后仔细看书。 学习时,重点关注与 C+,Java 不同之处,本章主要内容,2.1 数据类型 2.2 不同数据类型之间的转换 2.3 常量与变量 2.4 运算符与表达式 2.5 控制台应用程序与格式化输出 2.6 C#流程控制语句,2.1 数据类型,C#数据类型分为两类:值类型和引用类型。 值类型:包括简单类型、枚举类型、结构类型、可空类型。 引用类型: 包括类、接口、数组、委托。 一般把引用类型的变量称为对象。,值类型与引用类型区别,值类型和引

2、用类型的区别,关于基本数据类型,本质上 C# 的每个数据类型都是 System 名称空间中的一个类。 比如:32位整数类是 System.Int32 16 位无符号整数类是 System.Uint16 可以象定义一个对象一样,其语法为: 类名 对象名; 例如: System.Int32 X ; 或省略 System, 改为 Int32 X ;,为方便起见,类似 Java 的基本数据类型,C# 为每种数据类型定义了一个“别名” 比如:System.Int32,别名为int System.Uint16,别名为uint 因此,System.Int32 X;可改为 int X; System.Uint

3、16 Y;可改为 uint Y; 后续的几种数据类型全部是别名,编程时变量的定义习惯上也是使用别名,2.1.2 整型,C# 提供了八种整型,都是值类型: sbyte:1 字节有符号 byte: 1 字节无符号 short: 2 字节有符号 ushort:2 字节无符号 int: 4 字节有符号,最常用,默认类型 uint: 4 字节无符号 long: 8 字节有符号, long y = 235L ; ulong:8 字节无符号,2.1.3 浮点类型,float:4字节浮点数,常用。例如:35.0f double:8字节浮点数,常用。例如:2.7E+23 decimal:16字节浮点数,特殊的浮

4、点数,精度高,适用于金融、货币等需要高精度数值的领域。其类型指定符为M(或m)。 例如: decimal y = 9999999999999999999999999m;,2.1.4 布尔型,与 java 没什么差别,不多说了 用 bool 表示,只有两个值true和false。 例如: bool isExist = false; bool b = (i0 /错误,2.1.5 字符型与字符串类型,这部分同样和 JAVA 类似 字符型 char:为单个Unicode字符,用单引号引起来 。 例如: char cha; 字符串 string :为单个字符的组合,用双引号将字符串引起来。 例如:str

5、ing str=“hello”; char和string类型的常量均可以使用转义符(P20 表2-5)。,关于 string 的几点说明,string 实际上是 System.String 类的别名,本质是引用类型,可以直接使用 String 类中声明的各种字符串操作方法。 String类在字符串的处理上,存在一个“效率”问题,在下一章我们会介绍和 StringBuilder类的区别。 字符串常量可以通过使用 “”符号,强制规定不使用转义字符。 例如:string myFile = “C:netfileName.cs”,2.2 值类型之间的数据转换,关于数据类型的转换,在语法上与C/C+ 有些

6、不同,但基本原则和 Java 类似。 有两种转换方式:隐式转换与显式转换; 如果是不同值类型之间的转换,可以使用System.Convert 类。 强制类型转换的主要方法: ( int ) X ; Int32.Parse ( X ) ; 使用 System 中的 Convert 类进行转换。,强制类型转换,各种数据类型类(引用类型)都有相应的 Parse(x) 方法,可以将符合要求的参数 x 转换为本类型的对象。 例如: Double.Parse(25) System.Convert 类本身有许多 ToXXX () 形式的方法(此处 XXX 为某种引用数据类型),可以将参数转换为指定类型,转换

7、失败会抛出异常。 例如:bool MyBool = Convert.ToBoolean(“true”); int MyInt = Convert.ToInt32(“1234567”);,书中对转换规则做了简要介绍,基本原则就是“短”的类型可以转“长”的类型。 但 C# 数据类型的转换规则比教材讲得要复杂得多。 这部分相当重要,对于强类型的编程语言(C/C+,C#,VB.NET,JAVA 都是强类型的,VB 是弱类型的),数据类型转换是程序员常用又极容易犯大错误的地方,一定要特别小心,反复验证。,2.2.2 装箱与拆箱,Object 类:所有类的基类。 当值类型与object类型互相转换时,称为

8、装箱与拆箱。 装箱:将值类型转换为 object 类型 int i=123; object o = i; 拆箱:将object类型转换为值类型 int k = (int)o;,2.3 常量和变量,C#中提供 2 种类型的常量: 使用 const 关键字声明 const常量是在编译时设置其值并且永远不能更改其值的字段,在对程序进行编译时把所有const 常量全部替换为常数。 使用 readonly 关键字声明 readonly关键字在程序运行期间只能初始化“一次”的字段,初始化以后,用readonly声明的字段的值就不能再更改。,const 与 readonly 的区别,const 常量在编译时

9、初始化,而 readonly 常量在运行时初始化,。 const 常量只能在声明中赋值,readonly 常量既可在声明中赋值,也可在构造函数中赋值。 严格来说 readonly 应该看成是“只读”的变量。 使用 readonly 的好处是,我们可以根据不同情况,为其赋予不同的初始值。,变量,变量用来表示一个数值、一个字符串值或者一个类的对象。 变量存储的值可能会发生更改,但变量名称保持不变。 C#定义了7类变量,分别是:静态变量、实例变量、数组元素、值参数、引用参数、输出参数和局部变量。,变量的持续时间和作用域,和 Java 类似,C# 定义的变量按作用域划分有: 语句块级的(如循环变量 i

10、 ) 方法(函数)级的 类一级的(类的数据成员变量)带 public, private 等访问范围修饰符 类的静态数据成员 static,不管类创建了多少个对象,static 变量的值只有一个 全局变量,C# 似乎没有全局变量。实际上在纯面向对象的语言里,全局变量是不必要的,使用全局变量会破坏类的独立性和重用性,这不符合面向对象的思想。,匿名类型的变量,匿名类型的变量就是程序员不必指定“局部”变量的类型,统统用var来表示类型即可。 虽然在LINQ表达式或者foreach语句中,使用匿名类型的变量比较方便,但是我们不建议大家使用 var,严格限制数据类型较为安全。 注:LINQ(Languag

11、e INtegrated Query)Framework 中新增加的语言级集成查询,可应用于所有信息源 的查询处理。,2.4 运算符和表达式,C#的运算符、表达式与 C+ 和 Java 类似。 特别之处: typeof 运算符:获取类型的 Type 对象。 例如:System.Type type = typeof (int) ; is 运算符:检查对象是否为某类的实例,是则返回true。类似 java 的 instanceof 运算符。 例如:if ( o is Class1) a = (Class1) o ; as 运算符:返回类型为 T 的 x,如果 x 不为T,则返回 null。 例如:

12、Class1 c = b as Class1; if (b != null) ,2.5 控制台应用程序与格式化输出,控制台(System.Console类) 控制台输出:以字符串形式输出到标准输出设备,即显示器的控制台窗口。 Console.Write (); /不回车换行 Console.WriteLine(); /结束后回车换行 控制台输入 Console.ReadKey(); 标准输入流读取用户按下的字符或功能键。 Console.ReadLine(); 从标准输入流读取一行字符。,字符串的格式化输出,格式输出的一般形式为 N , M: 格式码 其中, :表示其中的内容为可选项。 N:从

13、零开始的整数,表示第几个参数。 M:可选整数,表示最小长度。若参数 N 的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,则默认为零。 格式码:可选的格式化代码字符串。,常用格式码及举例(P28 表2-8),字符串的格式化输出,对于字符串来说,可以直接利用格式化输出得到希望的格式,例如: string s = string.Format(0, 30, ); /s得到的结果为30个空格的字符串 string s1 = string.Format(0, -20, 15); /s1得到的结果为左对齐长度为20的字符串,数字的格式化输出,常用格式举例: 1) 在To

14、String中使用d格式。 int i = 12345; / i.ToString(d)表示将i按照实际整数宽度转换为字符串 string str = i.ToString(d); Console.WriteLine(str); /结果12345 / i.ToString(d8)表示将i转换为字符串,宽度为8位,不够8位左边用0填充 string str1 = i.ToString(d8); Console.WriteLine(str1); /结果00012345,数字的格式化输出,2) 在string.Format中使用d格式。 int i = 123; double j = 123.45;

15、 / 0,7:d表示第0个参数,宽度7位,不够7位左边用空格填充,d表示十进制整数 string s1 = string.Format(the value is 0,7:d,i); Console.WriteLine(s1); /结果 the value is 123 / 0,7:f3表示第0个参数,总宽度7位,其中小数部分占3位,不够7位左边填空格 / f表示浮点数 string s2 = string.Format(the value is 0,7:f3,j); Console.WriteLine(s2); /结果 the value is 123.450,数字的格式化输出,3) 在ToS

16、tring中使用f格式。 double i = 12345.6789; / f2表示浮点数小数部分为2位,多余部分四舍五入,不够2位时右边补零 string str = i.ToString(f2); Console.WriteLine(str); /结果 12345.68 string str1 = i.ToString(f6); Console.WriteLine(str1); /结果 12345.678900,数字的格式化输出,4) 在ToString中使用n格式。 double i = 12345.6789; / n表示整数部分从小数点向左每3位用逗号分隔开,小数部分2位,多余部分四舍

17、五入 string str = i.ToString(n); Console.WriteLine(str); /结果 12,345.68 / n4表示整数部分从小数点向左每3位用逗号分隔开,小数部分4位,多余部分四舍五入 string str1 = i.ToString(n4); Console.WriteLine(str1); /结果 12,345.6789,数字的格式化输出,5) 在ToString中使用p格式。 double i = 0.126; / p表示百分数形式 string s = string.Format(the value is 0:p,i); Console.WriteL

18、ine(s); /结果 the value is 12.60% string str = i.ToString(p); Console.WriteLine(str); /结果 12.60%,日期和时间的格式化输出,DateTime dt = new DateTime(2006,5,25); / yy表示年占两位,M表示月占1位,超出1位按实际位数 / d表示日占1位,超出1位按实际位数 string str = dt.ToString(yy.M.d); Console.WriteLine(str); /结果 06.5.25 /yyyy表示年占4位,M表示月占1位,超出1位按实际位数,其他按原字

19、符输出 string str1 = dt.ToString(yyyy年M月); Console.WriteLine(str1); /结果 2006年5月,2.6 C#流程控制语句,流程控制的形式: 顺序 分支 循环 异常捕获 如果一个逻辑块包含两条或两条以上的语句序列,必须使用大括号将语句括起来。,2.6.1 条件分支语句,if语句:根据布尔表达式的值(true或者false)选择要执行的语句序列,使用时要注意else应和最近的if语句匹配。 三种形式: if ifelse ifelse ifelse,2.6.1 条件分支语句(续),switch 语句也叫case语句 switch语句与C+和

20、Java均不完全相同。 switch语句常用形式为: switch (表达式) case 常量表达式1: 语句序列1 case 常量表达式2: 语句序列2 default: 语句序列 ,2.6.1 条件分支语句(续),常量表达式 switch条件表达式的值和每个case后的常量表达式可以是string、int、char、enum或其它值类型。 语句序列 每个case后的语句序列可以用大括号括起来,也可以不用,但是每个case块的最后一句一定要是break语句,或者是goto语句。 switch语句的执行顺序 a) 如果switch语句的条件表达式的值和某一个case标记后指定的值相等,则转到该

21、case标记后的语句序列执行; b)若switch语句的条件表达式的值和任何一个case标记后指定的值都不相等,则跳到default标记后的语句序列执行;,2.6.1 条件分支语句(续),c)若switch语句下面没有default标记,则跳到switch语句的结尾。 注意: a) 要求每个语句序列的最后一条语句必须是break语句,但是有一个情况例外:如果某个case块为空,则会从这个case块直接跳到下一个case块上。 b) 如果case后有语句,则此case的顺序怎么放都无所谓,甚至可以将default子句放到最上面。因此,在一个switch中,不能有相同的两个case标记。,例.使用

22、switch语句完成对成绩等级的评定,using System; namespace SwitchExample public class Program public static void Main() Console.Write(请输入成绩:); /从键盘接收一行字符 string str = Console.ReadLine(); /转换为整型,注意此语句可能会产生异常,一般需要异常处理 int i = Int32.Parse(str.Trim(); /或者int.Parse() 或者 Convert.ToInt32 () if (i 100 | i 0) Console.WriteL

23、ine(成绩不在0-100范围内); ,else switch (i / 10) /整除 case 10: Console.Write(满分,); goto case 9; case 9: Console.WriteLine(优秀); break; case 8: case 7: Console.WriteLine(良好); break; case 6: Console.WriteLine(及格); break; default: Console.WriteLine(不及格); break; Console.ReadLine(); ,2.6.2 循环语句,包括: for语句 while语句 d

24、o-while语句 foreach语句,用于对集合、数组进行操作。,2.6.2 循环语句(续),for语句 一般形式: for (初始值;循环条件;循环控制) 语句序列 ,例.使用for语句控制循环体,public static void Main() Console.Clear(); Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Red; Console.Beep(); for (int i = 1; i 10; i += 2) Console.SetCursorPosi

25、tion(40 - i / 2, i); for (int j = 0; j i; j+) Console.Write(*); Console.WriteLine(); Console.ReadLine(); ,2.6.2 循环语句(续),while语句 一般形式: while (条件) 语句序列 循环体内的程序可能会执行多次,也可能一次也不执行。,2.6.2 循环语句(续),do-while 一般形式: do 语句序列 while (条件); 循环体内的程序至少会执行一次,然后再判断条件是否为true,如果条件为true,则继续循环。,2.6.2 循环语句(续),foreach语句 fore

26、ach语句用于逐个提取集合中的元素,并对集合中每个元素执行语句序列中操作的场合。一般形式为: foreach ( 类型 标识符 in 表达式 ) 语句序列 注意:循环变量是一个只读型的局部变量。,2.6.2 循环语句(续),判断下列语句是否正确,并说明原因 int myInt=1,2,3; foreach(int test in myInt) test+; Console.WriteLine(test); ,2.6.3 跳转语句,1.break语句 功能:退出最近的封闭switch、while、do-while、for或foreach语句。 格式: break;,【例】循环接收和输出键盘输入的

27、每一行的值,当接收的内容为空字符串时退出。,using System; namespace BreakExample public class Program public static void Main() for (; ; ) Console.Write(请输入一个字符串(直接回车退出):); string s = Console.ReadLine(); if (s = ) break; Console.WriteLine(你输入的是: 0., s); Console.ReadLine(); ,2.6.3 跳转语句 (续),2.continue语句 功能:将控制传递给下一个while、do-while、for或foreach,继续执行下一次循环。 格式: continue ;,2.6.3 跳转语句 (续),3.goto语句 仅在下面两种情况下才可能会使用goto语句: (1)用于switch语句中从一个ca

温馨提示

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

评论

0/150

提交评论