• 【C语言篇】☞ 5. 分支结构、循环结构


    分支结构:

    if 语句:

    1. 第一种:如果条件表达式成立就执行小括号后面大括号中的语句

    if(条件表达式){

        语句;

        ...

    1. 第二种:如果条件表达式成立就执行if后面小括号后面大括号中的语句,否则就执行else后面大括号中语句

             这里至少有一个代码会被执行

    if(条件表达式){ 

        语句;

        ...

    }else{

        语句;

        ...

    }

    1. 第三种:

    if(条件表达式1){

        语句;

        ....

    }else if(条件表达式2){

        语句;

        ....

    }else if(条件表达式3){

        语句;

        ....

    }

    ....

    else{

        语句;

        ....

    }

    特点:

    • 这么多代码块中最多只有一个代码块会被执行
    • 当程序执行条件表达式3时候,说明其前面的所有表达式都不成立
    • 如果if语句中有else 那么必有一个代码块会被执行到

     if语句的特点:

    • 都是if开头
    • 可以有任意个else if
    • 最多只能有一个else语句
    • 如果if语句后面只有一条语句,那么if后面的大括号是可以省略的(通常开发也不这么干)

     

    if嵌套:if语句内部可以嵌套其他if语句

    总结: if语句也是语句,只要能够写语句的地方都可以写if语句

    if(条件表达方式){

        语句;

        ...

        if(条件表达式){

            语句;

            ...

        }

        语句;

        ....

    }

     

    省略大括号的if语句:当if后面只有一条语句的时候,那么if后面的大括号可以省略

     

     switch语句: 

    1. 表达式

    表达式计算的结果一定是整型值(short,int,long,char字符是特殊的整型),不能是浮点型,也不能是字符串。

    2. case

    1) 必须是常量,不能是变量

    2) 一个case只能对象一个常量值

    3) 常量值必须是整型

    4)case后的值不可以重复(每个case值不能重复)

    5)每个case后面可以跟0~n多条语句

    3. default

    • 可以有,也可以没有,也可以随便放
    • default并不一定非得放在最后一个分支,也可以放中间或前面。一般情况下,都放在最后。
    • 无论default写到什么地方, 它都会最后执行(只有前面所有的case都不满足的情况才会执行)只要某一个case满足, 那么后面所有的case和default都会失效。

     

    注意点:

    • case 后面的常量不可以重复
    • break 作用:结束switch语句
    • switch 语句只有遇到break 或者 switch后面大括号才会结束
    • 当switch与某一个case匹配了,那么后面的所有case都失效了
    • case 后面只能一个常量或者常量表达式
    • switch 后面的小号中只能是整形表达式

    /*

     case 1:

     int a = 2;

     break;

     */

    // 如果在case中定义了新的变量,必须用大括号{}包住

    case 0:

    {

        int a = 2;

        break;

    }

     

    switch (month) {

        case 12:

        case 1:

        case 2:

            printf("冬季 ");

            break;

        case 3:

        case 4:

        case 5:

            printf("春季 ");

            break;

        case 6:

        case 7:

        case 8:

            printf("夏季 ");

            break;

        case 9:

        case 10:

        case 11:

            printf("秋季 ");

            break;

        default:

            printf("不要放弃治疗 ");

            break;

    }

     

    /*

      1、当某个变量只有几个固定的取值时候,使用switch会更加简洁

      2、如果是区间[-无穷,1] [10,+无穷] 就用if  if(x <= 1 || x >= 10)

     */

     

    案例:

    /**  加减乘除计算器 (提示:录入1+2输出1+2=3*/

    int test() {   

        int num1,num2; //定义两个变量,表示操作数

        char operator; //定义一个char类型变量,表示要进行操作

        printf("请按照如下格式录入(1 + 1) "); //提示用录入

        scanf("%d %c %d",&num1,&operator,&num2);

        int result;

        switch (operator) {

            case '+':

                result = num1 + num2;

                break;

            case '-':

                result = num1 - num2;

                break;

            case '*':

                result = num1 * num2;

                break;

            case '/':

                if (num2 == 0) {

                    printf("除数不能为零 ");

                    return 0;

                }

                result = num1 / num2;

                break;

            default:

                printf("你录入格式错误 ");

                break;

        }

        printf("%d %c %d = %d ",num1,operator,num2,result);

        return 0;

    }

     

    循环结构:

      循环是一次又一次的执行相同的代码块

      循环:用来处理一些重复执行的操作

     

    写循环的具体步骤:

     1、确定需要重复执行的操作

     2、确定循环终止的条件:

        1) 在循环开始之前,需要做点事(定义一个循环控制变量并将其初始化)

        2) 确定循环约束条件

        3) 在每一次循环结束的时候或在循环中,要去改变循环控制变量的值,让它不断接近约束条件

     

     

    最简单的死循环

     

    • while (1);
    • for(;;); // for(;1;); 注意:for循环中的条件表达式默认为真

      

      

    do whilewhile的区别:

        while如果条件表达式一开始就不满足, 那么循环体永远不会被执行

                 

        do while如果条件表达式一开始就不满足, 同样会执行一次循环体

        也就是说: 无论条件表达式是否满足, do while始终会执行一次循环体

     

     

  • 相关阅读:
    【BZOJ】【1412】【ZJOI2009】狼和羊的故事
    【POJ】【2987】Firing
    【BZOJ】【1324】王者之剑
    【POJ】【2125】Destroying the Graph
    bzoj4870: [Shoi2017]组合数问题(DP+矩阵乘法优化)
    bzoj3810: [Coci2015]Stanovi(记忆化搜索)
    bzoj2120: 数颜色(BIT套主席树+set/分块)
    bzoj2144: 跳跳棋(二分/倍增)
    bzoj4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
    bzoj4773: 负环(倍增floyd)
  • 原文地址:https://www.cnblogs.com/bossren/p/6369961.html
Copyright © 2020-2023  润新知