版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 程序控制与算法,2,3.1表达式与运算符 3.2流程控制 3.3算法,本章要点,3,3.1表达式与运算符,3.1.1表达式 3.1.2 字面量 3.1.3运算符 3.1.4运算符的优先级,4,3.1.1表达式,一个表达式就是一个能够返回值的简单结构。最简单的表达式是变量和常量。在C#中也可以通过使用运算符、方法调用以及类型转换等,建立复杂的表达式。 建立表达式没有通用的方法,因为要取决于所用的运算符 。,5,3.1.2 字面量,字面量(literal)是原代码中书写的数字或字符串,表示一个明确类型的明确的、固定的值。 因为字面量是写进源代码的,所以它们的值必须在编译期可知。个别预定义类
2、型有自己的字面量形式: bool有两个字面量:true/false 对于引用类型变量,字面量null表示变量没有被设置内存中的引用 例子:Literals.sln,6,整数字面量,整数字面量是最常用的字面量。它们被书写为十进制数字序列,并且: 没有小数点 带有可选的后缀,指明整数的类型 例如,下面四个字面量,都是整数256。依据后缀,都被编译解释为不同的整数类型 256 /整型 256L /长整型 256U /无符号整型 256UL / 无符号长整型,7,实数字面量,实数字面量的组成如下: 10进制数字 一个可选的小数点 一个可选的指数部分 一个可选择的后缀,如下所示: float f1 =
3、256F; double d1 = 256.714; double d2 = .3548; double d3 = 6.328-26;,8,字符字面量,字符字面量由单引号内的字符表示组成。字符字面量可以是下面的任意一种:单个字符、一个简单转义序列、一个十六进制转义序列或一个Unicode转义序列。 字符字面量是类型是char 简单转义序列是一个反斜杠后面跟着单个字符 十六进制转义序列是一个反斜杠,后面跟着一个大写或小写的x,后面跟着多至四个十六进制数字 Unicode转义序列是一个反斜杠,后面跟着一个大写或小写的u,后面跟着多至四个十六进制数字,9,字符字面量,例如: char c1 = d;
4、 /单个字符 char c1 = n; /简单转义序列 char c1 = x0061; /十六进制转义序列 char c1 = u005a; /转义序列,10,字符串字面量,字符串字面量使用双引号标记。有两种字符串字面量类型: 规则字符串字面量 逐字字符串字面量,11,字符串字面量,规则字符串字面量由双引号内的字符序列组成,它包含: 字符 简单转义序列 十六进制和Unicode转义序列 逐字字符串字面量的书写如同规则字符串字面量,但以一个字符为前缀,它有如下特征: 逐字字面量与规则字符串字面量区别在于转义字符串不会被求值。在双引号内的所有东西,包括通常被认为是转义序列的东西,都被严格按字符串
5、列出的那样打印 逐字字面量的唯一例外是相邻的双引号组,它们被解释为单个双引号字符 例子:StringLiteral.sln,12,3.1.3运算符,运算符是用来完成一个动作的特定语言的语法记号。 1.简单算术运算符 2.求余运算符 3.关系比较运算符和相等比较运算符 4.递增运算符和递减运算符 5.条件逻辑运算符 6.逻辑运算符 7. 赋值运算符 8. 条件运算符 9. 一元算术运算符 10. typeof运算符,13,简单算术运算符,简单算术运算符执行基本四则算术运算。 这些运算符都是二元左结合运算符。,14,求余运算符,求余运算符(%)用第二个操作数除第一个操作数,忽略商,并返回余数。求余
6、运算符是二元左结合运算符。 0 % 3 = 0 1 % 3 = 1 2 % 3 = 2 3 % 3 = 0 4 % 3 = 1,15,求余运算符,求余运算符还可以用于实数以得到实余数。 0.0f % 1.5f = 0 0.5f % 1.5f = 0.5 1.0f % 1.5f = 1 1.5f % 1.5f = 0 2.0f % 1.5f = 0.5 2.5f % 1.5f = 1,16,关系比较运算符和相等比较运算符,关系比较运算符和相等比较运算符是二元运算符并结合,比较它们的操作数并返回bool值。,17,比较操作和相等性操作,当比较大多数引用类型的相等性时,只有引用被比较。 如果引用相等
7、,也就是说,如果它们指向内存中相同的对象,那么相等性比较为true,否则为false,这称为浅比较,18,比较操作和相等性操作,在图的左边,a和b两者的引用是相同的,所以比较返回true 在图的右边,引用不相同,所以即使两个AClass对象的内容完全相同,比较也会返回false.,19,比较操作和相等性操作,string类型对象也是引用类型,但它的比较方式不同。比较字符串的相等性时,比较它们的长度和大小写敏感的内容。 如果两个字符串有相同的长度和相同大小写敏感的内容,那么相等性比较返回true,即使它们占有不同的内存,这称为深比较 委托也是引用类型,并且也使用深比较。,20,递增运算符和递减运
8、算符,递增运算符对操作数加1。递减运算符对操作数减1。这些运算符是一元的,并有两种形式:前置形式和后置形式。,21,递增运算符和递减运算符,22,条件逻辑运算符,逻辑运算符用于比较或否定它们的操作数的逻辑值,并返回结果逻辑值。逻辑与(AND)和逻辑或(OR)运算符是二元运算符。逻辑非(NOT)是一元运算符。,23,条件逻辑运算符,bVal = (1 = 1) / bVal为false,24,条件逻辑运算符,条件逻辑运算符运用“短路(short circuit)”模式操作,意思是,如果计算Expr1之后结果已经确定了,那么它会跳过Expr2的值。 bool bVal; bVal = (1 = 2
9、) / true,25,逻辑运算符,按位逻辑运算符通常用于设置比特(bit)形式的方法参数。这些运算符除按位非以外,都是二元左结合运算符,按位非是一元运算符。,26,逻辑运算符,byte x = 12, y = 10; sbyte a; a = x / a = -13,27,赋值运算符,赋值运算符对运算符右边的表达式求值,并用该值设置运算符左边的变量表达式。赋值运算符是二元结合运算符。赋值运算符如下表所示:,28,赋值运算符,29,条件运算符,条件运算符是一种强大且简洁的方法,基于条件的结果,返回两个值之一。条件运算符是三元运算符。 条件运算符语法如下所示,它有一个测试表达式和两个结果表达式:
10、 Condition ? Expression1 : Expression2 Condition必须返回一个bool型值 如果Condition求值为true,那么Expression1被求值并返回。否则,Expression2被求值并返回。,30,条件运算符,intVar = x y ? 5 :10; 条件运算符可以和ifelse结构相比。例如: if(x y) intVar = 5; else intVar = 10; ,31,一元运算符,一元运算符设置数字值的符号: 一元运算符简单返回操作数的值 一元负运算符返回0减操作数得到的值,32,typeof运算符,typeof运算符返回作为它的
11、参数的任何类型的System.Type类型。通过这个对象,可以得到类型的特征(对任何已知类型,只有一个System.Type对象)。Typeof运算符是一元运算符。 例子:TypeofSample.sln,33,3.1.4运算符的优先级,运算规则:优先级高的运算符在优先级低的运算符之前求值,优先级相同时自左向右求值。,34,3.2流程控制,Bohm和Jacopini的工作证明,任何程序流程均可以用如下三种控制结构实现: 1顺序结构 2选择结构 3循环结构,35,3.2.1顺序结构,通常,程序中的语句是按照编写时写入的顺序一条接一条地执行的,这一过程称为顺序执行(sequential execu
12、tion)。 顺序执行的C#代码通常以程序块为独立的单位。C#程序块是以一对大括号括起的任意数量的简单语句,程序块可以嵌套使用 。,36,3.2.2选择结构,C#提供的两种选择结构(也可称为条件控制结构): 1.if语句 2.switch语句,37,3.2.2选择结构,1.if语句,简单if语句,38,3.2.2选择结构,If-else语句,39,3.2.2选择结构,(3)嵌套的if语句,40,3.2.2选择结构,2.switch语句,41,3.2.2选择结构,2.switch语句 switch语句以关键字switch开始,后跟计算选择值的表达式,然后跟着关键字case开始的各个分支。 swi
13、tch语句被执行时,表达式首先被计算,根据它的值,其中某个case分支可以被执行。 switch语句中的每个分支都以case和一个值开始。这个值必须是常量,而不能是不确定的变量。,42,3.2.2选择结构,switch语句与if语句的比较: 当需要在多个条件中选择时,简洁的switch语句要比if的嵌套语句更方便。 switch语句要输入的关键字少; switch语句“视觉清晰”并且更容易维护; 不必担心分支的分隔规则,因为switch语句的每一个分支都是用分号结束; switch语句更容易维护,因为增加一个分支时要做的只是插入几行; 通过表达式的选择switch语句更易说明哪个值对应哪个要执
14、行的分支 。,43,3.2.3循环结构,循环结构(或称为重复结构)是使用条件表达式来控制一个(一组)动作的重复执行的。C#语言中支持的循环语句包括: 1. while循环 2. do-while循环 3. for循环,44,1. while 循环 While循环是最常用的程序设计结构之一,可以用它去模拟很多其他结构。While循环是最有用的程序设计工具之一,每个程序员都必须掌握它。 while 循环的一般语法如下: while (布尔表达式) 语句; ,45,2. do-while循环 当至少要执行一次或更多次循环时,使用do-while循环较方便。要记住,如果while循环的起始条件检查为f
15、lase,则一次循环也不执行。while循环条件检查是先于循环中其他语句执行的,而do-while循环的条件检查则位于循环体语句序列的尾部。因此,循环体至少要执行一次,即使循环条件在第一次检查时就为假也是如此。,46,do-while循环的语法如下: do if () flag = true; else flag = false; while (flag = true);,47,3. for循环 for循环是计数步进循环,计数变量跟踪通过循环的重复次数,循环的重复是从计数器的开始值到预定的终止值。根据每次通过循环时计数器的变化(增或者减),又可以将for循环分为增量for循环和减量for循环。
16、,48,for循环的一般语法如下: for ( 初值表达式 ; 布尔表达式 ; 步进表达式 ) 语句; ,49,3.2.4跳转语句,当控制流到达跳转语句时,程序执行被无条件转移到程序的另一部分。跳转语句有: break continue return goto throw,50,break语句,break语句被用到switch语句中,它还能被用在下列语句类型中: for foreach while do,51,continue语句,continue语句导致程序执行转到类型循环的最内层封装循环(innermost enclosing statement)的顶端:,52,3.2.5using语句,
17、某些类型的非托管对象有数量限制或很耗费资源。对这些对象来说,重要的是在代码使用完它们后,尽可能快地释放它们。然而,using语句有助于简化该过程并确保这些资源被适当地处置。 资源是一个实现了System.IDisposable接口的类或结构。IDisposable接口含有单独一个名称为Dispose的方法。,53,3.2.5using语句,使用资源的阶段如下所示: 分配资源 使用资源 处置资源,54,3.2.5using语句,如果正在使用资源的那部分代码中产生一个意外的运行时错误,那么处置资源的代码可能得不到执行。,55,资源的包装使用,using语句帮助减少意外的运行时错误带来的潜在问题,它
18、整洁地包装了资源的使用。 有两种形式的using语句。第一形式如下: 圆括号内的代码分配资源 statement是使用资源的代码 using语句隐式产生处置该资源的代码,56,资源的包装使用,意外的运行时错误称为异常。处理可能的异常的标准方法是把可能导致异常的代码放进一个try块中,并把任何无论有没有异常都必须执行的代码放进一个finally块中。,57,资源的包装使用,这种形式的using语句确实是这么做的,它执行下列内容: 分配资源 把statement放进try块 创建资源的Dispose方法的调用,并把它放进finally块,58,using语句的示例,在这个示例中,使用using语句
19、两次, 一次对名称为TextWriter的类,一次对名称为TextReader的类,它们都来自System.IO命名空间,两个类都实现了IDisposable接口,这是using语句的要求。 例子:UsingStatement.sln,59,多个资源和嵌套,using语句还可以被用于相同类型的多个资源,资源声明用逗号隔开。 例子:UsingStatementNesting.sln,60,using语句的另一种形式,using语句的另一种形式如下: 在这种形式中,资源在using语句之前声明。,61,using语句的另一种形式,虽然这种形式也能确保对资源的使用结束后Dispose方法总是被调用,
20、但它不能防止在using语句已经释放了它的非托管资源之后使用该资源,把它留在一种不一致的状态。因此,它提供了较少的保护,而且不推荐使用。,62,using语句的另一种形式,63,3.3 算法,算法的英文单词为“Algorithm” lgrim 。这个单词一直到1957年之前,在韦氏新世界词典中还未出现,我们只能找到带有它的古代涵义的“Algorism(算术)”,指的是用阿拉伯数字进行算术运算的过程。一本早期的德文数学词典数学大全辞典,给出了另一个单词“Algorithmus”的如下定义:“在这个名称之下,组合了四种类型的算术计算的概念,即加法、乘法、减法、除法”。,64,五个重要的特征: 确切
21、性(No ambiguity) 算法的每一步骤必须有确切的定义。而不应该有二义性,例如,在算法中不能出现诸如“赋值为100或1000”。 输入(Input) 有0个或多个输入,用于初始化运算对象。所谓0个输入是指无需输入条件,而算法本身定出了初始条件。 输出(Output) 没有输出的算法是毫无意义的。一个算法应该有一个或多个输出,以反映对输入数据加工后的结果。,65,可行性(Feasibility) 算法原则上能够精确地运行,而且对于算法中的每种运算,在原理上人们应该能用笔和纸做有限次运算后完成。 有穷性(Finite) 算法必须保证执行有限步之后结束。只具有前面四个特征的规则集合,称不上算法。例如,尽管操作系统能完成很多任务,但是它的计算过程并不终止,而是无穷无尽的执行、等
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英文追梦人的演讲稿
- 应聘不同部门演讲稿模板
- 踏青寻春演讲稿小学生
- 求职文职人员演讲稿
- 劳动我争先演讲稿
- 我的极品老板的演讲稿
- 背影中的忏悔演讲稿
- 鞭炮引起火灾演讲稿
- 有健康才有未来的演讲稿
- 争做诚信感恩人演讲稿
- 2026年内蒙古商贸职业学院单招职业技能测试题库带答案详解(考试直接用)
- 高职高专学生心理健康教育 第四版 课件 第第五讲 相伴适应路
- 心血管疾病健康知识科普
- 2026年莱芜职业技术学院单招综合素质笔试模拟试题含详细答案解析
- 农副产品营销培训课件
- 2025至2030中国商业遥感卫星数据服务定价策略与客户画像报告
- 压力性损伤预防和治疗指南
- 机电排灌培训
- 农业烘干设备租赁合同(2025年风险承担)
- 干细胞治疗临床沟通技巧规范
- 春节复工复产安全交底
评论
0/150
提交评论