今天说一下 C和C++ 的if 条件语句。
在实际编程中,会经常有逻辑判断,比如,输入的数值参数中,如果是奇数,输出This is uneven. 如果是偶数,输出 This is even.
我们在C中这么来写:
1 int main() 2 { 3 int x; 4 printf("Please input a number x="); 5 scanf("%d", &x); 6 if (x % 2 == 0) 7 printf("This is even\n"); 8 else 9 printf("This is uneven\n"); 10 }
第6行 使用 if 判断,如果 % 2 等于0,说明是偶数。
第8行,else 和第6行的 if 配对,不满足 %2 等于0,说明是偶数。
这里有个题外的基础点, "%" 是模运算,取余数的意思。
1. if 条件使用 () 封装
2. 如果条件语句后只有一句代码,可以不用{} 封装,如果有多条语句,需要使用 {} 来封装。
3. 如果有多种可能,需要使用 else if 后接条件。
接下来,我们要对 if 条件升级。如果输入的数字是偶数,并且小于10,输出This is even less than 10
如果输入数字是奇数并且小于20,输出This is uneven less than 20
否则,输入 Other situation.
代码如下:
1 int main() 2 { 3 int x; 4 printf("Please input a number x="); 5 scanf("%d", &x); 6 if (x < 10 && x % 2 == 0) 7 printf("This is even less than 10\n"); 8 else if (x < 20 && x % 2 != 0) 9 printf("This is uneven less than 20\n"); 10 else 11 printf("Other situation\n"); 12 }
1. 多个条件在一起判断,要求都满足的时候,使用 && 连接,如果满足一个即可,使用 || 连接。
2. 如果是 &&, 第一个条件求值为false,第二个表达式不再执行
3. 如果是 ||, 第一个条件求值为true,第二个表达式不再执行
以上特性被称为短路求值(short evaluation). Visual Basic 不属于短路求值语言。
举个例子,
if (x > 10 && x++)
以上代码中,如果 x 是下于10 的值,x++ 这句语句不会被执行
if (x > 10 || ++x == 3)
以上代码在 x 等于2时,表达式求值为真,会执行 if 分支的语句。
短路求值的应用非常广泛,灵活使用短路求值的特性,能提高程序效率。
第二个例子中,如果 条件语句需要调用别的函数计算,
if (fun1(x) && fun2(x))
如果 fun2 的计算逻辑比 fun1 简单,那么强烈建议把它写为
if (fun2(x) && fun1(x))
如果 fun2的结果返回为 false 时, fun1 不再被调用。这样程序执行效率会更高。
特别是有对指针变量的判断时
if (p != NULL && fun1(p))
如果 fun1 函数的作者没有对空指针的判断,将以上的顺序调换会引起错误。