C和C++从零开始系列(二)

今天说一下 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 函数的作者没有对空指针的判断,将以上的顺序调换会引起错误。

猜你喜欢

转载自www.cnblogs.com/danielhu/p/12045302.html