06-分支语句

注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。

测试环境:Ubuntu 10.10

GCC版本:4.4.5

 一、if语句分析

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

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

3) else语句后可以连接其他if语句(else if)

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

    - bool型变量应该直接出现于条件中,不要进行比较

    - 变量和0值比较时,0值应该出现在比较符号左边(写成赋值时,编译器会报错)

    - float型变量不能直接进行0值比较,需要定义精度(重点查看

补充:

浮点数比较时自定义精度,需要注意精度不宜过高,float和double都有有效位数。

gcc4.4.5测试:float为小数点后7位,double为小数点后16位。

vs2015测试:float为小数点后7位,double为小数点后16位。

5) switch语句分析

1、switch语句对应单个条件多个分值的情形

2、case语句分支必须要有break,否则会导致分支重叠

3、default语句有必要加上,以处理特殊情况 

4、case语句中的值只能是整型或字符型(为了增加可读性,通常定义成枚举)

5、case语句的排列顺序

    - 按字母或数字顺序排列各条语句

    - 正常情况放在前面,异常情况放在后面

    - default语句只用于处理真正的默认情况

实例分析
if和switch使用示例
6-1.c
#include <stdio.h>

void f1(int i)
{
    if(i < 6)
    {
        printf("Failed!\n");
    }
    else if(( 6 <= i ) && ( i <= 8 ))    
    {
        printf("Good!\n");
    }
    else
    {
        printf("Perfect!\n");
    }
}


void f2(char i)
{
    switch(i)
    {
        case 'c':
        {
            printf("Compile\n");
            break;
        }            
        case 'd':
        {
            printf("Debug\n");
            break;
        }
        case 'o':
        {
            printf("Object\n");
            break;
        }
        case 'r':
        {
            printf("Run\n");
            break;
        }
        default:
        {
            printf("Unknown\n");
            break;
        }
    }
}


int main(void)
{
    f1(5);      //Failed!
    f1(9);      //Perfect!
    f1(7);      //Good!
    f2('o');    //Object
    f2('d');    //Debug
    f2('e');    //Unknown
   
    return 0;
}

操作:

1) gcc 6-1.c -o 6-1.out编译正确,打印结果:

Failed!
Unknown    
Good!    
Object    
Debug    
Unknown 

2) 修改代码,测试if……else终止行为:

#include <stdio.h>

void f1(int i)
{
    if(i < 6)
    {
        printf("Failed!\n");
    }
    else if(printf("2\n"), (6<=i)&&(i<=8))  
    {
        printf("Good!\n");
    }
    else
    {
        printf("Perfect!\n");
    }
}

void f2(char i)
{
    switch(i)
    {
        case 'c':
        {
            printf("Compile\n");
            break;
        }            
        case 'd':
        {
            printf("Debug\n");
            break;
        }
        case 'o':
        {
            printf("Object\n");
            break;
        }
        case 'r':
        {
            printf("Run\n");
            break;
        }
        default:
        {
            printf("Unknown\n");
            break;
        }
    }
}


int main(void)
{
    f1(5);      //Failed!
    f1(9);      //Perfect!
    f1(7);      //Good!
    f2('o');    //Object
    f2('d');    //Debug
    f2('e');    //Unknown
   
    return 0;
}

gcc 6-1.c -o 6-1.out编译正确,打印结果:

Failed!    //f1(5)
2          //f1(9)
Perfect!
2          //f1(7)
Good!
Object
Debug
Unknown

分析:

        Failed!打印完毕后,没有打印2。证明:if如果遇到匹配的正确条件,接下来的else if将不会匹配。

编程实验
有趣的角色对换
6-2.c
#include <stdio.h>

void f1(int i)
{
    switch(i < 6)    //这里的判断更换成条件语句
    {
        case 1:    //逻辑值:真(1)
        {
            printf("Failed!\n");
            break;
        }
        default:
        {
            switch(( 6 <= i ) && ( i <= 8 ))
            {
                case 1:    //逻辑值:真(1)
                {
                    printf("Good!\n");
                    break;
                }
                default:
                {
                    printf("Perfect!\n");
                    break;
                }
                           
            }break;
        }    
    }
}

void f2(char i)
{
    if('c' == i)
    {
        printf("Compile\n");
    }
    else if('d' == i)
    {
        printf("Debug\n");
    }
    else if('o' == i)
    {
        printf("Object\n");
    }
    else if('r' == i)
    {
        printf("Run\n");
    }
    else
    {
        printf("Unknown\n");
    }
}

int main(void)
{
    f1(5);      //Failed!
    f1(9);      //Perfect!
    f1(7);      //Good!
    f2('o');    //Object
    f2('d');    //Debug
    f2('e');    //Unknown

    return 0;
}

操作:

1) gcc 6-2.c -o 6-2.out编译正确,打印结果:

Failed!
Perfect!
Good!
Object
Debug
Unknown

小结:

1) if语句适用于复杂逻辑进行判断的情形中

2) switch语句适用于对离散值进行判断的情形中

3) if语句和switch语句在功能上可以相互替换

4) if语句对于“按片”分支判断的情形更加简洁

5) switch语句对于多分支判断的情形更加简洁

发布了40 篇原创文章 · 获赞 1 · 访问量 1776

猜你喜欢

转载自blog.csdn.net/piaoguo60/article/details/103152792