网站大量收购独家精品文档,联系QQ:2885784924

C++Primer第6章.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CPrimer第6章

第6章 1. 通常情况下,语句是顺序执行的。但除了最简单的程序外,只有顺序执行往往并不够。C++定义了一组控制语句,允许有条件地执行或重复执行某些功能。If和switch提供了条件分支结构,而for, while, do while则支持重复执行的功能。后几种称为循环语句。 2. 表达式后面加上分号就是表达式语句。空语句常用于在循环条件判断部分就能完成全部循环工作的情况。使用空语句时应加上注释,以便任何读这段代码的人都知道该语句是有意省略的。但不能随便用空语句。这个程序将会是无限次的循环。与缩进的意义相反,此自增语句并不是循环的一部分。循环体为空语句。 对象或类的定义或声明被称为声明语句。 3. 块标识了一个作用域。一个名字只从其定义处到该块的结尾可见。 比如在for或while循环中,常用块语句。 4. 在语句的控制结构中定义的变量,仅在定义它们的块语句结束前有效。其作用域限制在语句体内。语句体本身就是一个块语句。其中也可能包括其它块。它是一个局部变量。其作用域局限在语句内部。被称为语句作用域。在条件表达式中定义的变量必须初始化。该条件检验的就是初始化对象的值。如果程序需要访问某个控制结构中的变量,那么这个变量必须在控制语句外部定义。 早期的C++版本以不同的方式处理for语句中定义的变量的作用域。将for语句头定义的变量视为在for语句之前定义。允许在for语句的作用域外访问控制变量。 对地在控制语句中定义的变量,限制其作用域的一个好处是,这些变量名可以重复使用而不必担心它们的当前值在每一次使用时是否正确。对于作用域外的变量,是不可能用到其在作用域内的残留值 的。 5. 其中的condition部分必须用圆括号括起来。它可以是一个表达式,或一个初始化声明。 如果在条件表达式中定义了变量,变量必须初始化。将已初始化的变量值转换为bool值后,该bool值决定条年是否成立。变量类型可以是任何可转为bool型的类型,它可以是算术类型或指针类型。至于一个类类型是否能用在条件表达式中取决于类本身。我们学过的类类型中,IO类型可用作条件,但vector,string一笛膜不可用作条件。 6. 上程序用于找出ivec中的元素的最小值,并记录该最小值出现的次数。在上例中,statement2本身是一个if语句,所以出现了else if的形式。 对于if语句还有一个重要的复杂问题没有考虑。上例中,没有一个if分支能直接处理元素值大于minVal的情况。从逻辑上来说,可以忽略这些元素,如果该元素比当前已找到的最小值大,就没什么要做的。但通常需要使用if语句为三种不同情况提供执行的内容。即如果一个值大于、小于或等于其他值时,可能都需要执行特定的步骤。为此,重写循环,显式处理这三种情况。 7. 这样三路测试精确地控制了所有情况。但是,简单地把前两个情况用一个嵌套if语句实现将会产生问题。 8. 出现这种情况往往称为悬垂else问题。产生于一个语句包含的if子句多于else子句时,对于每一个else,究竟它们归属于那个if. 在C++中,通过将else匹配给最后出现的沿未匹配的if子句来解决。可以通过花括号将内层的if语句括起来成为复合语句,从而迫使这个else子句与外层的if匹配。 有些编程风格建议总是在if后面使用花括号。这样做可以避免日后修改代码时产生混乱和错误。至少,无论if或while后面是简单语句,还是任意其他语句,使用花括号都是一个比较好的做法。 9. 深层嵌套的if-else语句往往在语法上是正确的,但在逻辑上却没有正确地反映程序员的意图。错误的else-if匹配往往容易被忽略,或对语句做其他修改,很难保证正确。Switch语句提供了一种更方便的方法来实现深层嵌套的if/else逻辑。 以下程序用于统计五个元音在文本里分别出现的次数。 break用于将控制跳出switch,继续执行switch后面的第一个语句。 存在一个普遍的误解:以为程序只会执行匹配的case标号相关联的语句。实际上,程序从该点开始执行,并跨越case边界继续执行其他语句,直到switch结束或遇到break语句为止。对于switch结构,漏写break是常见的程序错误。 尽管没有严格要求在switch结构的最后一个标号后指定break,但为了安全起见,最好在每个标号后提供一个break.即使是最后一个标号也一样。 故意省略case后面的break是很罕见的,因此应提供一些注释说明其逻辑。 default:子句提供了相当于else子句的功能,如果所有case与switch表达式的值都不匹配,且default标号存在,则执行default标号后面的语句。那怕没有语句要在def

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档