5-1. 分支结构(if语句)

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

1. 控制流

一个完整的程序控制流包含下面三种控制流:

  1. 顺序流程
  2. 分支流程
  3. 循环流程

我们之前看过的程序都是顺序流程的。顺序流程自上而下,依次执行。

顺序流程


现在有一个需求:

要求我们输入一个整数。如果这个数值在2到10之间,那么输出yes,否则什么都不做。


2到10之间

让我们考虑一下,这个流程属于三种流程中的哪一种呢?

这个需求中出现了一个测试条件:2到10之间。如果满足条件则走向一个流程,否则就走向另一个流程。

这种情况,程序之中出现了岔路口,那么这个流程应该是属于分支流程。

满足输出yes

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 <= xx <= 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;
}