已阅读5页,还剩65页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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 是原代码中书写的数字或字符串 表示一个明确类型的明确的 固定的值 因为字面量是写进源代码的 所以它们的值必须在编译期可知 个别预定义类型有自己的字面量形式 bool有两个字面量 true false对于引用类型变量 字面量null表示变量没有被设置内存中的引用例子 Literals sln 6 整数字面量 整数字面量是最常用的字面量 它们被书写为十进制数字序列 并且 没有小数点带有可选的后缀 指明整数的类型例如 下面四个字面量 都是整数256 依据后缀 都被编译解释为不同的整数类型256 整型256L 长整型256U 无符号整型256UL 无符号长整型 7 实数字面量 实数字面量的组成如下 10进制数字一个可选的小数点一个可选的指数部分一个可选择的后缀 如下所示 floatf1 256F doubled1 256 714 doubled2 3548 doubled3 6 328 26 8 字符字面量 字符字面量由单引号内的字符表示组成 字符字面量可以是下面的任意一种 单个字符 一个简单转义序列 一个十六进制转义序列或一个Unicode转义序列 字符字面量是类型是char简单转义序列是一个反斜杠后面跟着单个字符十六进制转义序列是一个反斜杠 后面跟着一个大写或小写的x 后面跟着多至四个十六进制数字Unicode转义序列是一个反斜杠 后面跟着一个大写或小写的u 后面跟着多至四个十六进制数字 9 字符字面量 例如 charc1 d 单个字符charc1 n 简单转义序列charc1 x0061 十六进制转义序列charc1 u005a 转义序列 10 字符串字面量 字符串字面量使用双引号标记 有两种字符串字面量类型 规则字符串字面量逐字字符串字面量 11 字符串字面量 规则字符串字面量由双引号内的字符序列组成 它包含 字符简单转义序列十六进制和Unicode转义序列逐字字符串字面量的书写如同规则字符串字面量 但以一个 字符为前缀 它有如下特征 逐字字面量与规则字符串字面量区别在于转义字符串不会被求值 在双引号内的所有东西 包括通常被认为是转义序列的东西 都被严格按字符串列出的那样打印逐字字面量的唯一例外是相邻的双引号组 它们被解释为单个双引号字符例子 StringLiteral sln 12 3 1 3运算符 运算符是用来完成一个动作的特定语言的语法记号 1 简单算术运算符2 求余运算符3 关系比较运算符和相等比较运算符4 递增运算符和递减运算符5 条件逻辑运算符6 逻辑运算符7 赋值运算符8 条件运算符9 一元算术运算符10 typeof运算符 13 简单算术运算符 简单算术运算符执行基本四则算术运算 这些运算符都是二元左结合运算符 14 求余运算符 求余运算符 用第二个操作数除第一个操作数 忽略商 并返回余数 求余运算符是二元左结合运算符 0 3 01 3 12 3 23 3 04 3 1 15 求余运算符 求余运算符还可以用于实数以得到实余数 0 0f 1 5f 00 5f 1 5f 0 51 0f 1 5f 11 5f 1 5f 02 0f 1 5f 0 52 5f 1 5f 1 16 关系比较运算符和相等比较运算符 关系比较运算符和相等比较运算符是二元运算符并结合 比较它们的操作数并返回bool值 17 比较操作和相等性操作 当比较大多数引用类型的相等性时 只有引用被比较 如果引用相等 也就是说 如果它们指向内存中相同的对象 那么相等性比较为true 否则为false 这称为浅比较 18 比较操作和相等性操作 在图的左边 a和b两者的引用是相同的 所以比较返回true在图的右边 引用不相同 所以即使两个AClass对象的内容完全相同 比较也会返回false 19 比较操作和相等性操作 string类型对象也是引用类型 但它的比较方式不同 比较字符串的相等性时 比较它们的长度和大小写敏感的内容 如果两个字符串有相同的长度和相同大小写敏感的内容 那么相等性比较返回true 即使它们占有不同的内存 这称为深比较委托也是引用类型 并且也使用深比较 20 递增运算符和递减运算符 递增运算符对操作数加1 递减运算符对操作数减1 这些运算符是一元的 并有两种形式 前置形式和后置形式 21 递增运算符和递减运算符 22 条件逻辑运算符 逻辑运算符用于比较或否定它们的操作数的逻辑值 并返回结果逻辑值 逻辑与 AND 和逻辑或 OR 运算符是二元运算符 逻辑非 NOT 是一元运算符 23 条件逻辑运算符 bVal 1 1 bVal为false 24 条件逻辑运算符 条件逻辑运算符运用 短路 shortcircuit 模式操作 意思是 如果计算Expr1之后结果已经确定了 那么它会跳过Expr2的值 boolbVal bVal 1 2 true 25 逻辑运算符 按位逻辑运算符通常用于设置比特 bit 形式的方法参数 这些运算符除按位非以外 都是二元左结合运算符 按位非是一元运算符 26 逻辑运算符 bytex 12 y 10 sbytea a x a 13 27 赋值运算符 赋值运算符对运算符右边的表达式求值 并用该值设置运算符左边的变量表达式 赋值运算符是二元结合运算符 赋值运算符如下表所示 28 赋值运算符 29 条件运算符 条件运算符是一种强大且简洁的方法 基于条件的结果 返回两个值之一 条件运算符是三元运算符 条件运算符语法如下所示 它有一个测试表达式和两个结果表达式 Condition Expression1 Expression2Condition必须返回一个bool型值如果Condition求值为true 那么Expression1被求值并返回 否则 Expression2被求值并返回 30 条件运算符 intVar x y 5 10 条件运算符可以和if else结构相比 例如 if x y intVar 5 else intVar 10 31 一元运算符 一元运算符设置数字值的符号 一元运算符简单返回操作数的值一元负运算符返回0减操作数得到的值 32 typeof运算符 typeof运算符返回作为它的参数的任何类型的System Type类型 通过这个对象 可以得到类型的特征 对任何已知类型 只有一个System Type对象 Typeof运算符是一元运算符 例子 TypeofSample sln 33 3 1 4运算符的优先级 运算规则 优先级高的运算符在优先级低的运算符之前求值 优先级相同时自左向右求值 34 3 2流程控制 Bohm和Jacopini的工作证明 任何程序流程均可以用如下三种控制结构实现 1顺序结构2选择结构3循环结构 35 3 2 1顺序结构 通常 程序中的语句是按照编写时写入的顺序一条接一条地执行的 这一过程称为顺序执行 sequentialexecution 顺序执行的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开始的各个分支 switch语句被执行时 表达式首先被计算 根据它的值 其中某个case分支可以被执行 switch语句中的每个分支都以case和一个值开始 这个值必须是常量 而不能是不确定的变量 42 3 2 2选择结构 switch语句与if语句的比较 当需要在多个条件中选择时 简洁的switch语句要比if的嵌套语句更方便 switch语句要输入的关键字少 switch语句 视觉清晰 并且更容易维护 不必担心分支的分隔规则 因为switch语句的每一个分支都是用分号结束 switch语句更容易维护 因为增加一个分支时要做的只是插入几行 通过表达式的选择switch语句更易说明哪个值对应哪个要执行的分支 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循环的起始条件检查为flase 则一次循环也不执行 while循环条件检查是先于循环中其他语句执行的 而do while循环的条件检查则位于循环体语句序列的尾部 因此 循环体至少要执行一次 即使循环条件在第一次检查时就为假也是如此 46 do while循环的语法如下 do if flag true else flag false while flag true 47 3 for循环for循环是计数步进循环 计数变量跟踪通过循环的重复次数 循环的重复是从计数器的开始值到预定的终止值 根据每次通过循环时计数器的变化 增或者减 又可以将for循环分为增量for循环和减量for循环 48 for循环的一般语法如下 for 初值表达式 布尔表达式 步进表达式 语句 49 3 2 4跳转语句 当控制流到达跳转语句时 程序执行被无条件转移到程序的另一部分 跳转语句有 breakcontinuereturngotothrow 50 break语句 break语句被用到switch语句中 它还能被用在下列语句类型中 forforeachwhiledo 51 continue语句 continue语句导致程序执行转到类型循环的最内层封装循环 innermostenclosingstatement 的顶端 52 3 2 5using语句 某些类型的非托管对象有数量限制或很耗费资源 对这些对象来说 重要的是在代码使用完它们后 尽可能快地释放它们 然而 using语句有助于简化该过程并确保这些资源被适当地处置 资源是一个实现了System IDisposable接口的类或结构 IDisposable接口含有单独一个名称为Dispose的方法 53 3 2 5using语句 使用资源的阶段如下所示 分配资源使用资源处置资源 54 3 2 5using语句 如果正在使用资源的那部分代码中产生一个意外的运行时错误 那么处置资源的代码可能得不到执行 55 资源的包装使用 using语句帮助减少意外的运行时错误带来的潜在问题 它整洁地包装了资源的使用 有两种形式的using语句 第一形式如下 圆括号内的代码分配资源statement是使用资源的代码using语句隐式产生处置该资源的代码 56 资源的包装使用 意外的运行时错误称为异常 处理可能的异常的标准方法是把可能导致异常的代码放进一个try块中 并把任何无论有没有异常都必须执行的代码放进一个finally块中 57 资源的包装使用 这种形式的using语句确实是这么做的 它执行下列内容 分配资源把statement放进try块创建资源的Dispose方法的调用 并把它放进finally块 58 using语句的示例 在这个示例中 使用using语句两次 一次对名称为TextWriter的类 一次对名称为TextReader的类 它们都来自System IO命名空间 两个类都实现了IDisposable接口 这是using语句的要求 例子 UsingStatement sln 59 多个资源和嵌套 using语句还可以被用于相同类型的多个资源 资源声明用逗号隔开 例子 UsingStatementNesting sln 60 using语句的另一种形式 using语句的另一种形式如下 在这种形式中 资源在using语句之前声明 61 using语句的另一种形式 虽然这种形式也能确保对资源的使用结束后Dispose方法总是被调用 但它不能防止在using语句已经释放了它的非托管资源之后使用该资源 把它留在一种不一致的状态 因此 它提供了较少的保护 而且不推荐使用 62 using语句的另一种形式 63 3 3算法 算法的英文单词为 Algorithm lg ri m 这个单词一直到1957年之前 在 韦氏新世界词典 中还未出现 我们只能找到带有它的古代涵义的 Algorism 算术 指的是用阿拉伯数字进行算术运算的过程 一本早期的德文数学词典 数学大全辞典 给出了另一个单词 Algorithmus 的如下定义 在这个名称之下 组合了四种类型的算术计算的概念 即加法 乘法 减法 除法 64 五个重要的特征 确切性 Noambiguity 算法的每一步骤必须有确切的定义 而不应该有二义性 例如 在算法中不能出现诸如 赋值为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年安顺市供销绿色农产品有限公司普定县分公司招聘备考题库及答案详解(易错题)
- 昌吉学院2026年面向社会公开招聘编制外工作人员备考题库及1套完整答案详解
- 2026年湖北省妇幼保健院招聘79人备考题库及参考答案详解
- 2026年亚东县林业和草原局公开招聘庞达木材检查站工作人员的备考题库及答案详解(夺冠系列)
- 临海市教育系统(初中)面向2026年普通高校毕业生公开招聘教师备考题库及完整答案详解1套
- 人工智能技术支持下的教师自我反思与教研模式优化策略教学研究课题报告
- 浙江省舟山市普陀区2025年中考二模数学试卷【含答案】
- 护理查房跨学科合作
- 合格考前一天的课件
- 宿舍心理信息员培训
- 2025北京市实验动物上岗证试题及答案
- 铁路车皮装卸合同范本
- 2025国家粮食储备局考试真题与答案
- 建筑与市政工程无障碍规范详细解读
- 2025年汽车后市场汽车维修行业技术更新换代趋势可行性研究报告
- 服装行业财务知识培训课件
- 2025深圳生物会考试卷及答案
- 火炬设计计算书
- 危废仓库储存安全培训课件
评论
0/150
提交评论