zoukankan      html  css  js  c++  java
  • C语言进阶——分支语句06

    if分支语句分析:

    if语句用于根据条件选择执行语句

    else不能独立存在且总是与在它之前的最近if相匹配

    esle语句后可以连接其他if语句

    用法如下:

    if(condition)
    {
        //statement 1      
    }
    
    else
    {
        //statement  2
    }

    if语句中零值比较的注意点:

    bool型变量应该直接出现在条件中,不要进行比较,这样做更加规范,当然比较的话也没错。

    bool b=TRUE;
    if(b)
    {
       //statement  1
    }
    
    else
    {
       //statement  2
    }

    变量和0值比较的时候,0值应该出现在比较符号的左边,这样可以有时候我们将==写成了=,这个时候编译器就会给我们报错,好让我们快速找到bug的根源,但是如果你将0值写在右边的话,啥奥谢一个等号,编译器是不会报错的。

    int i = 1;
    if(0 == i)
    {
       //statement  1
    }
    
    else
    {
       //statement  2
    }

    float型变量不能直接和0值进行比较,需要定义精度。

    #define EPSINON 0.000000001
    
    float f=0.0;
    if((-EPSINON<=f)&&(f<=EPSINON))
    {
       //statement  1
    }
    
    else
    {
       //statement  2
    }

    switch语句分析:

    • switch语句对应单个条件多个分支的情形
    • case语句必须要有break,否则会导致分支重叠
    • default语句必须要加上,以处理特殊情况(这里讲一个小例子,有一个团队,的switch语句没有写default,但是在他们先前的思考中,一定是可以匹配到一种情况的,但是由于机器断电,或者短路路等等原因,导致没有一个case可以匹配上,这个时候就出现bug了,由于是机器问题,所以没有办法将这个bug复现,只能到现场调试)
    • case语句中的值只能是整型或者字符型
    • case语句的排列顺序,按照字母或者数字顺序排列各条语句,正常情况放在前面,异常情况放在后i面,default可以随便放,用于处理真正的默认情况。

    代码程序 1:

    #include <stdio.h>
    
    void f1(int i)
    {
        if( i < 6 )
        {
            printf("Failed!
    ");
        }
        else if( (6 <= i) && (i <= 8) )
        {
            printf("Good!
    ");
        }
        else
        {
            printf("Perfect!
    ");
        }
    }
    
    void f2(char i)
    {
        switch(i)
        {
            case 'c':
                printf("Compile
    ");
                break;
            
            case 'd':
                printf("Debug
    ");
                break;
            
            case 'o':
                printf("Object
    ");
                break;
                
            case 'r':
                printf("Run
    ");
                break;
            
            default:
                printf("Unknown
    ");
                break;
                
        }
    }
    
    int main()
    {
        f1(5);
        f1(9);
        f1(7);
        
        f2('o');
        f2('d');
        f2('e');
    
        return 0;
    }

    这个示例程序,向我们展示了,switch和if的用法

    示例程序2:

    #include <stdio.h>
    
    void f1(int i)
    {
        switch( i < 6 )
        {
            case 1:
                printf("Failed!
    ");
                break;
            
            default:
                switch( (6 <= i) && (i <= 8) )
                {
                    case 1:
                        printf("Good!
    ");
                        break;
                        
                    default:
                        printf("Perfect!
    ");
                        break;
                }
                break;
        }
    }
    
    void f2(char i)
    {
        if( 'c' == i )
        {
            printf("Compile
    ");
        }
        else if( 'd' == i )
        {
            printf("Debug
    ");
        }
        else if( 'o' == i )
        {
            printf("Object
    ");
        }
        else if( 'r' == i )
        {
            printf("Run
    ");
        }
        else
        {
            printf("Unknown
    ");
        }
    }
    
    int main()
    {
        f1(5);
        f1(9);
        f1(7);
        
        f2('o');
        f2('d');
        f2('e');
    
        return 0;
    }

    这个示例程序改写了上面的示例程序1,将switch用if分支语句改写,将if语句用switch语句改写,这说明这两种分支语句是可以互换的。

    小结:

    • if语句适用于复杂逻辑进行判断的情形中
    • switch语句适用于对离散值进行判断的情形中
    • if语句和switch语句在功能上可以相互替换
    • if语句对于“按片”分支判断的情形 更加简洁
    • switch语句对于多分支判断的情形更加简洁
  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9210286.html
Copyright © 2011-2022 走看看