1. 控制流
一个完整的程序控制流包含下面三种控制流:
- 顺序流程
- 分支流程
- 循环流程
我们之前看过的程序都是顺序流程的。顺序流程自上而下,依次执行。
现在有一个需求:
要求我们输入一个整数。如果这个数值在2到10之间,那么输出yes,否则什么都不做。
让我们考虑一下,这个流程属于三种流程中的哪一种呢?
这个需求中出现了一个测试条件:2到10之间。如果满足条件则走向一个流程,否则就走向另一个流程。
这种情况,程序之中出现了岔路口,那么这个流程应该是属于分支流程。
2. C语言中的分支流程
if (测试条件)
条件为真的流程
我们把输入的整数的变量命名为x,那么x应该满足条件2<=x<=10
。将条件填入if语句中测试条件的括号内。
if (2<=x<=10)
printf("yes\n");
我们这样写条件对了吗?
在运算符那里已经讨论过了,这样的写法是不正确的。
例如,x的值为1。子表达式2 <= 1
为假,即表达式结果为0。C语言中在计算表达式结果时,会使用0表示假,1表示真。
接着计算表达式,0 <= 10
。条件满足,表达式结果为1。if的测试条件结果为1,即真。那么它将输出yes。
很显然,条件被写错了。我们的本意是要让子表达式2 <= x
与x <= 10
同时成立。因此,需要在两个表达式中间加上逻辑运算符与&&。
if (2<=x && x<=10)
printf("yes\n");
当x为0时,子表达式2 <= 0
为假,子表达式0 <= 10
为真。整个表达式为假。
当x为5时,子表达式2 <= 5
为真,子表达式5 <= 10
为真。整个表达式为真。
完整代码如下:
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
if (2<=x && x<=10)
printf("Yes\n");
return 0;
}