zhyDaDa的个人站点

* 对应课程: 3.1.1 \~ 3.2.4
目录
做判断
关系运算
优先级
否则的话
if再探
判断嵌套
级联的if-else if
多路分支 switch-case


做判断

条件判断用if, 语法如下

if(condition){
    code;
}

关系运算

计算两个值的关系称为 关系运算
| 运算符 | 意义 |
| :—–: | :——–: |
| == | 相等 |
| != | 不相等 |
| >``>= | 大于(等于) |
| <``<= | 小于(等于) |

注意:
当两个值的关系与关系运算符的预期
+ 相符, 结果为整数1
+ 不符, 结果为整数0

优先级

所有 关系运算符 的优先级 比 算术运算
但是, 比 赋值运算符

7 >= 3 + 4 中先计算 3 + 4
int r = a > 0 中先计算 a > 0

判断相等与否的 ==!= 的优先级比其他关系运算符
连续的关系运算从左到右进行的

5>3 == 6>4 两个比较的结果都是1, 最后判断相等, 结果为1
6>5>4 先计算6>5得到结果1, 接着运算1>4, 因此结果为0
a == b>0 先计算b>0, 再判断其结果与a是否一致

否则的话

与其他语言一样, 加一个else

if(condition){
    code 1;
}else{
    code 2;
}

if再探

if语句后面 未必 要带上花括号{}
如果要执行的只有一行语句, 可以不用花括号

判断嵌套

观察一下两组代码

/* find_max_1 */
int a, b, c;
scanf("%d %d %d", &a, &b, &c);

int max = 0;

if ( a>b ) {
    if( a>c ) {
        max = a;
    } else {
        max = c;
    }
} else {
    if ( b>c ) {
        max = b;
    } else {
        max = c;
    }
}

printf("The max is %d\n", max);
/* find_max_2 */
int a, b, c;
scanf("%d %d %d", &a, &b, &c);

int max = 0;

if ( a>b )
    if( a>c )
        max = a;
    else
        max = c;
else
    if ( b>c )
        max = b;
    else
        max = c;

printf("The max is %d\n", max);

两者在 语法上 完全相同
但对于阅读代码的人来说会造成困扰
这里需要注意两点:
1. 即便有缩进, 也不能暗示嵌套关系
2. else会按就近原则去找最近的if

第二种写法显然存在着巨大的出错风险
因此作为良好的编程习惯:

if或者else后面总是加上{}
即便只有一条语句

级联的if-else if

if (condition_1){
    code_1;
} else if (conditon) {
    code_2;
} else {
    code_3
}

尽量别在级联的分支中做”实际操作”
即, 最好是 “单一出口”

多路分支 switch-case

switch (condition) {
    case c_1:
        code_1;
        break;
    case c_2:
        code_2;
        break;
    case c_3:
        code_3;
        break;
    default: 
        code_4;
}

注意:
+ condition 只能是整数型的结果
+ 各个 c_i 可以是常数, 也可以是由常数构成的表达式, 但一定有确切结果
+ case只是一个路标, 在运行完ta对应的代码后并不会使得分支结构跳出, 只有break可以
+ 一般来说, casebreak都是配对的

Avatar photo
我是 zhyDaDa

前端/UI/交互/独立游戏/JPOP/电吉他/游戏配乐/网球/纸牌魔术

发表回复