zoukankan      html  css  js  c++  java
  • C语言选择结构

    前面的代码都是按照顺序结构进行设计。在开发系统的时候有时候需要实现:当年龄大于 18 岁的时候,执行 A,否则执行 B。就要用选择结构。
    C 语言为实现选择结构提供了 2 种语句:
    (1) if 选择语句。
    (2) switch 选择语句。

    (一) if 语句

    if 语句是通过判断给定的条件是否为真,来决定是否执行指定的代码,if 语句常用的形式有 3 种。

    1. if 语句的第一种形式

    if(表达式) 语句

    if(表达式)
    {
    语句块
    }
    (1) 表达式一般是比较表达式、或逻辑表达式。
    (2) 语句可以是单行语句,也可以是复合语句(语句块)。
    如果表达式运算结果为真(非 0 为真),则执行 if 后面的语句,如果为假(0 为假)直接跳过
    该语句(语句块)。

    //if 语句应用
    #include<stdio.h>
    int main()
    {
        int age=8;
        if(age>18)
        {
        	printf("年龄大于 18
    ");
        }
        printf("执行结束
    ");
        getchar();
        return 0;
    }
    

    当 if 语句后面指定的语句只有一行时,花括号{ }可以省略不写,例如:

    #include<stdio.h>
    int main()
    {
        int age=8;
        if(age>18)
        	printf("年龄大于 18
    ");
        printf("执行结束
    ");
        getchar();
        return 0;
    }
    

    不过为了使程序更加清晰、避免出错,建议读者无论 if 语句后面指定的语句有多少行,都加上花括号{ }。

    2. if 语句的第二种形式

    if(表达式)
    {
    语句 1
    }//这里不要写分号,因为不是一个独立的代码结构
    else
    {
    语句 2
    }
    该语句的执行过程为:如果表达式结果为真(非 0),执行 if 后面{ }中的语句 1。如果为假(0),则执行 else 后面{ }中的语句 2。也就是说 if 与 else 后面的语句只能有一个被执行。

    #include<stdio.h>
    int main()
    {
        int age=10;
        if(age>18)
        {
        	printf("成年人
    ");
        }
        else
        {
        	printf("未成年人");
        }
        getchar();
        return 0;
    }
    

    3. if 语句的第三种形式

    if(表达式 1)
    {
    语句 1;
    }
    else if(表达式 2)
    {
    语句 2;
    }
    ……
    else if(表达式 m)
    {
    语句 m;
    }
    else
    {
    语句 n;
    }

    这种形式的 if 语句也被称为 if…else if…esle 语句,该语句的执行过程为:依次判断表达式的值,当其中一个表达式结果为真(非 0),执行其后面对应的语句,然后直接跳出整个 if语句。如果所有的表达式都是假,则执行 else 后面的语句,然后跳出整个 if 语句。

    #include<stdio.h>
    int main(void)
    {
        int age=16;
        if(age<0)
        {
        	printf("年龄不正确
    ");
        }
        else if(age<6)
        {
        	printf("%s
    ","小婴儿");
        }
        else if(age<18)
        {
        	printf("%s
    ","小鲜肉");
        }
        else if(age<50)
        {
        	printf("%s
    ","大叔");
        }
        else
        {
        	printf("%s
    ","老爷爷");
        }
        getchar();
        return 0;
    }
    

    else 也可以省略,那么就是如果上面的每个 if 都不匹配,就什么都不做。

    (二) if 语句常见错误

    1. 常见错误 1

    //if 语句后面多加了分号,出错代码:
    #include<stdio.h>
    int main()
    {
        int age=10;
        if(age>18); //错误写法
        {
        	printf("年龄大于 18
    ");
        }
        printf("执行结束");
        getchar();
        return 0;
    }
    

    第 5 行 if 后面多加了分号。前面讲过 C 语言中单独的分号也是一条语句,叫做空语句。因此,系统会将左侧第 5 行当做一个完整的 if 语句看待,当条件为真时执行后面的空语句。而第 6-8 行,则当做普通的语句块,所以无论 if 条件是真、是假,该语句块都会被执行。

    2. 常见错误 2

    在 if 语句中,将比较运算(==)错误写成了赋值运算符(=),例如:

    #include<stdio.h>
    int main()
    {
        int a=0;
        if(a=0) //出错代码
        {
        	printf("a 等于 0
    ");
        }
        else
        {
        	printf("a 不等于 0
    ");
        }
        getchar();
        return 0;
    }
    

    这样 a=0 就是赋值表达式,值就是赋值之后的值 0,也就是 if(a=0)永远是“假”。
    为了避免失误写错,有人习惯这样写相等判断:
    if(0==a)
    这样万一写错成了 if(0=a)那么就会有编译错误导致编译失败,就能提前发现问题了。

    (三) if 语句嵌套

    if 语句嵌套指的是在 if 语句中再嵌套使用 if 语句。以第一种形式 if 语句为例:
    if(表达式 1)
    {
    if(表达式 2) //if 语句嵌套
    {
    语句;
    }
    }

    下面通过例子来理解 if 语句嵌套使用。

    #include<stdio.h>
    int main()
    {
        int age=35;
        if(age>18) //外层 if 语句
        {
            printf("age 大于 18");
            if(age>30) //内层 if 语句
            {
                printf("age 大于 30");
            }
        }
        getchar();
        return 0;
    }
    

    看起来很复杂,其实只要知道“每一级嵌套都是一个小世界”,在看外层嵌套的时候,把内层的嵌套看成一个语句就行了,分析内部嵌套的时候再忽略外部的嵌套。

    (五) switch 语句

    C 语言提供了另外一种多分支处理语句:switch 语句。

    1. switch 语句形式

    switch 语句的一般形式:
    switch(表达式)
    {
    case 字面量表达式 1: 语句 1;
    break;
    case 字面量表达式 2: 语句 2;
    break;
    ……
    case 字面量表达式 n: 语句 n;
    break;
    default: 语句 n+1;
    }

    【说明】

    1. switch 小括号中表达式的运算结果必须是整数类型(包括字符类型),比如:long、int、short、char 等等。不能是 float 等其他类型。
    2. case 后面的字面量表达式运算结果也必须是整数类型。
    3. switch 下面的花括号内是一个语句块。语句块中包含多个以 case 开头、break 结尾的行、最多一个以 default 开头的行出现在语句块的结束部分,并且只能出现一次。
    4. 当表达式的值与 case 后面的值相等时,就执行该 case 后面的语句,接着执行下一行的break,然后退出整个switch语句,switch中其他语句都不再执行,这一点和if…else if…else语句有点类似。
    5. 如果表达式的值与所有 case 后面的值都不匹配时,则执行 default 后面的语句,然后退出 switch。
    6. switch 中的“case 字面量”只是一个标记,一旦 switch 表达式的值与其中一个 case后面字面量匹配时,就会从该 case 行一直执行下去,直到遇到 break 才停止,然后退出 switch语句块。因此写 case 的时候结尾不要忘了写 break。

    switch 中只要有一个 break 语句被执行,就会直接结束整个 switch 语句块。

  • 相关阅读:
    如何让touchmove之后不触发touchend的事件
    解决alert在ios版微信中显示url的问题(重写alert)
    meta常用标签总结
    HTTP状态码
    前端用到的一些功能
    判断鼠标从哪个方向进入--jQuery
    jsonp是什么
    数据结构与算法之链表-javascript实现
    数据结构之栈-JavaScript实现栈的功能
    数据结构之列表-javascript实现
  • 原文地址:https://www.cnblogs.com/wangyueping/p/14497598.html
Copyright © 2011-2022 走看看