(四)语句形式 -- 4 if语句

4. if语句

C语言中表示条件执行的最简单办法就是使用if语句,它有以下两种形式:

这个范例中的condition部分是一个布尔表达式,语句部分可以是简单语句,也可以是程序块。

条件表达式为TRUE时所执行的程序块叫做if语句的then子句,条件为FALSE时执行的程序块叫做else子句。


  • 悬空else问题(dangling-else problem)
    由于if语句中的else子句是可有可无的, 所以有时会造成歧义,这种情况叫做悬空else问题。

消除悬空else问题:在if语句中使用程序块
if/else分块规则 - 对任何需要多行或需要else子句的if语句来说,都应该用大括号将在if语句控制下的各个独立的程序块括起来。


if语句必以如下四种形式之一出现:
(1) 单行if语句:条件极短。
(2) 多行if语句:语句被划分为一个程序块。
(3) if-else语句:将受控于if语句的语句划分为两个程序块,哪怕每块只有一条语句。
(4) 级联if语句:表达一系列的条件测试。


4.1 单行if语句

当if语句没有else子句,而主体部分只有一条简单语句,而且短得可以与if本身放在一行时,可以采用简单的单行if语句格式。

如:

if (value==Sentinel) break;

4.2 多行if语句

当if语句的主体有多条语句或有一条较长的语句使之不能与if放在一行时,这些语句将被划分为一个程序块。


4.3 if/else语句

为了避免悬空else问题,带有else子句的if语句主体将用大括号划分为两个程序块。

代码示例

#include <stdio.h>

/* Classify a number by its sign. */

main() {
    
    

    int n;
    printf("Which number? ");
    scanf("%d", &n);
    if (n > 0) {
    
    
        printf("%d is positive.", n);
    } else if (n == 0) {
    
    
        printf("%d is zero.", n);
    } else {
    
    
        printf("%d is negative.", n);
    };
}

4.4 级联if语句

当实际有两种以上情况时,if语句的一个十分重要而特殊的用法:

这种方式的特征在于if语句的else部分是由对另一个可选条件的测试构成的。
这样的语句叫做级联if语句(cascading if statement),它可以有任意个else if子句。


4.5 ?:运算符

?: 运算符在运用时分成两部分且带三个操作数。其一般形式为:

(condition) ? expression1 : expression2

首先计算条件值。
如果条件结果为TRUE, 则计算expression1的值,并将它作为整个表达式的值;
如果条件结果为FALSE,则整个表达式的值为expression2的值。


可以把?:运算符看作以下if语句的缩略形式:

if (condition) {
    
    
	value=expression1;
} else {
    
    
	value=expression2;
};

其中,存储在变量value中的值即为整个?:表达式的值。


例如,可以用?:运算符将xy中值较大的一个赋值给max

max = (x > y) ? x : y;

使用场景:

使用?:运算符的一种最常见的情况是,调用printf进行输出时,输出结果可能因为某个条件而略有不同。

另一个例子就是用?:运算符以自然语言方式输出布尔变量的值。如:

printf("errorFlag=%s\n"(errorFlag) ? "TRUE" : "FALSE");


参考
《C语言的科学和艺术》 —— 第4章 语句形式

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108902707