1
C语言程序设计
1.4.3.4 3.3.4 if语句嵌套

3.3.4 if语句嵌套

C语言允许if语句嵌套,if的内嵌语句可以是另一条三种形式之一的if语句。

例如:在a〉=b的条件下,判断a,c中的最大值:

img223

上例是在if流程中嵌套了if else流程。使用if语句嵌套时,应注意if与else的配套关系,以免发生二义性。

例如:用if语句完成一个分段函数计算:

img224

程序写为:

img225

执行结果是错误的,问题出在写程序时必须清楚else子句究竟和哪一个if配对。C语言采用的是最邻近配对原则,else子句总是与离它最近的if配对,而此例中尽管形式上写成了else子句与第一个if配对,但从语法上else子句是与第二个if配对的,所以出现错误。这种情况出现时,可采用复合语句的方法来解决。

例如:程序改写为:

img226

采用复合语句后,从语法上规定了程序段第3~6行已是第一个if语句的一条完整的内嵌语句,是一个if流程,因此不能再与else子句配对,从而使得else子句与较远的第一个if语句配对。请从if语句嵌套的角度分析一下上节例3-3和例3-4的情况。

常见的编程错误3.1

img227 在关系运算符==的位置使用赋值运算符。

img228 使if else语句进行错误的选择。

img229 嵌套的if语句没有包含大括号,也没有应用缩进格式书写。

img230 在逻辑运算符&&和||的位置分别使用了单个的&或|的按位运算符。

img231 在程序中忘记界定语句块的一个或两个花括号,则会导致语法或逻辑错误。

img232 在单分支选择的if语句条件后放置分号将导致逻辑错误,而在双分支选择的if else语句条件后放置分号将导致语法错误。

良好的编程习惯3.1

img233 在限定函数体的花括号之间把整个函数体缩进一级。这样可以使程序的函数结构更清晰,使程序更易于阅读和纠错。

img234 如果有多级缩进,那么每级相对上级缩进的空格幅度应保持一致。