• 03.分支语句和循环语句


    目录

    一、什么是语句?

    二、分支语句(选择结构)

    (一)if语句

    1.简介

     2.悬空else

    3.练习

     (二)switch语句

    1.简介

    2.default子句

     3.练习

     三、循环语句

    1.while循环

    1)基础知识

     2)while语句中的break和continue

    2.for循环 

    1)语句

    2)break和continue在for循环中

    3)for语句的循环控制变量 

    4)一些for循环的变种

    2.do...while循环 

    1)do语句的语法

    2)执行流程

    ​3)do语句的特点

    4)do while循环中的break和continue

    3.goto语句()


    C语句是一门结构化的程序语言

    1.顺序结构

    2.选择结果

    3.循环结构

    一、什么是语句?

    C语句可分为以下五类:

    1. 表达式语句(1+1=2即就是表达式)

    2. 函数调用语句

    3. 控制语句

    4. 复合语句

    5. 空语句

    控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。 可分成以下三类:

    1. 条件判断语句也叫分支语句:if语句、switch语句;

    2. 循环执行语句:do while语句、while语句、for语句;

    3. 转向语句:break语句、goto语句、continue语句、return语句。 

    二、分支语句(选择结构

    (一)if语句

    1.简介

    情形:

    如果你好好学习,你就可以去看张艺兴的演唱会

    如果你一边玩一边学习,你就可以看金玟庭

    如果你不好好学习,你就只能去看张翰

    这就是选择语句

    if语句的语法结构

    语法结构:
    if(表达式)
        语句;


    if(表达式)
        语句1;
    else
        语句2;


    //多分支    
    if(表达式1)
        语句1;
    else if(表达式2)
        语句2;
    else
        语句3;
     

    1. #include
    2. int main()
    3. {
    4. int age = 0;
    5. scanf("%d", &age);
    6. if(age<18)
    7. {
    8. printf("未成年\n");
    9. }
    10. }
    1. #include
    2. int main()
    3. {
    4. int age = 0;
    5. scanf("%d", &age);
    6. if(age<18)
    7. {
    8. printf("未成年\n");
    9. }
    10. else
    11. {
    12. printf("成年\n");
    13. }
    14. }
    1. #include
    2. int main()
    3. {
    4. int age = 0;
    5. scanf("%d", &age);
    6. if(age<18)
    7. {
    8. printf("少年\n");
    9. }
    10. else if(age>=18 && age<30)
    11. {
    12. printf("青年\n");
    13. }
    14. else if(age>=30 && age<50)
    15. {
    16. printf("中年\n");
    17. }
    18. else if(age>=50 && age<80)
    19. {
    20. printf("老年\n");
    21. }
    22. else
    23. {
    24. printf("老寿星\n");
    25. }
    26. }

    #include
    int main()
    {
        if(表达式)
       {
            语句列表1;
       }
        else
       {
            语句列表2;
       }
        return 0;
    }

    if后执行多条语句,后面记得加大括号

    ///if语句不带括号,只能控制一条语句

    ///else就近匹配

    ///if语句最好带括号,一面出现混乱

    ///记得缩进

    ///if后面”==“(判断不是赋值)

    /如果表达式的结果为真,则语句执行

    C语言的真假:0表示假,其余都是真

    int arr3[5];//未初始化

    int arr1[5]={1,2,3,4,5};//初始化 

     2.悬空else

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 2;
    6. if(a == 1)
    7. if(b == 2)
    8. printf("hehe\n");
    9. else
    10. printf("haha\n");
    11. return 0;
    12. }

    改正:

    //适当的使用{}可以使代码的逻辑更加清楚。
    //代码风格很重要

    //else的匹配:else是和它离的最近的if匹配的。

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = 2;
    6. if(a == 1)
    7. {
    8. if(b == 2)
    9. {
    10. printf("hehe\n");
    11. }
    12. }
    13. else
    14. {
    15. printf("haha\n");
    16. }
    17. return 0;
    18. }

    3.练习

    1)判断一个数是否为奇数

    1. int main()
    2. {
    3. int num = 0;
    4. scanf("%d", &num);
    5. //判断是否为奇数
    6. if (num % 2 == 1)
    7. printf("奇数\n");
    8. else
    9. printf("不是奇数\n");
    10. return 0;
    11. }

    2) 输出1-100之间的奇数

        1. 循环先产生1~100的数字
        2. 判断产生的数字是否为奇数
        3. 是奇数打印

    1. int main()
    2. {
    3. int i = 1;
    4. while (i <= 100)
    5. {
    6. if (i % 2 == 1)
    7. {
    8. printf("%d ", i);
    9. }
    10. i++;
    11. }
    12. return 0;
    13. }

     (二)switch语句

    ///case是入口,break是出口

    switch语句也是一种分支语句。 常常用于多分支的情况。

    1.简介

    1)情形:

    输入1,输出星期一
    输入2,输出星期二
    输入3,输出星期三
    输入4,输出星期四
    输入5,输出星期五
    输入6,输出星期六
    输入7,输出星期日

    2)switch语句

    switch(整型表达式)
    {
        语句项;
    }

    3)在switch语句中的 break

    在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

    1. #include
    2. int main()
    3. {
    4. int day = 0;
    5. scanf("%d", &day);
    6. switch (day)
    7. {
    8. case 1:
    9. printf("星期一\n");
    10. break;
    11. case 2:
    12. printf("星期二\n");
    13. break;
    14. case 3:
    15. printf("星期三\n");
    16. break;
    17. case 4:
    18. printf("星期四\n");
    19. break;
    20. case 5:
    21. printf("星期五\n");
    22. break;
    23. case 6:
    24. printf("星期六\n");
    25. break;
    26. case 7:
    27. printf("星期天\n");
    28. break;
    29. }
    30. return 0;
    31. }

    更改需求:

    1. 输入1-5,输出的是“weekday”;

    2. 输入6-7,输出“weekend”

    break语句 的实际效果是把语句列表划分为不同的分支部分。 

    case后面一定要记得添加break

    case n//不可以,必须为整型和常变量

    2.default子句

    如果表达的值与所有的case标签的值都不匹配怎么办?
    其实也没什么,结构就是所有的语句都被跳过而已。
    程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
    但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
    你可以在语句列表中增加一条default子句,把下面的标签default---写在任何一个 case 标签可以出现的位置。
    当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
    所以,每个switch语句中只能出现一条default子句。
    但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

    1. #include
    2. //switch代码演示
    3. int main()
    4. {
    5. int day = 0;
    6. switch (day)
    7. {
    8. case 1:
    9. case 2:
    10. case 3:
    11. case 4:
    12. case 5:
    13. printf("weekday\n");
    14. break;
    15. case 6:
    16. case 7:
    17. printf("weekend\n");
    18. break;
    19. default:
    20. printf("错了");
    21. break;
    22. }
    23. return 0;
    24. }

     ///case语句执行同一个语句

    //无break,default也执行

     3.练习

    1. #include
    2. int main()
    3. {
    4. int n = 1;
    5. int m = 2;
    6. switch (n)
    7. {
    8. case 1:
    9. m++;
    10. case 2:
    11. n++;
    12. case 3:
    13. switch (n)
    14. {//switch允许嵌套使用
    15. case 1:
    16. n++;
    17. case 2:
    18. m++;
    19. n++;
    20. break;
    21. }
    22. case 4:
    23. m++;
    24. break;
    25. default:
    26. break;
    27. }
    28. printf("m = %d, n = %d\n", m, n);
    29. return 0;
    30. }

    原因:

     三、循环语句

    1.while循环

    1)基础知识

    while

    for

    do while

    当条件满足的情况下,if语句后的语句执行,否则不执行。
    但是这个语句只会执行一次。
    由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
    那我们怎么做呢?
    C语言中给我们引入了: while 语句,可以实现循环。

    //while 语法结构
    while(表达式)
     循环语句;

    //表达式为真,执行循环语句

    !=0(为真) 

    1. #include
    2. int main()
    3. {
    4. int i = 1;
    5. while (i <= 10)//判断
    6. {
    7. printf("%d ", i);//打印
    8. i = i + 1;//调整
    9. }
    10. return 0;
    11. }

     判断/打印/调整

     2)while语句中的break和continue

    (1)break介绍

    1. #include
    2. int main()
    3. {
    4. int i = 1;
    5. while (i <= 10)
    6. {
    7. if (i == 5)
    8. break;
    9. printf("%d ", i);
    10. i = i + 1;
    11. }
    12. return 0;
    13. }

    1. #include
    2. int main()
    3. {
    4. int i = 0;
    5. while (i <=10)
    6. {
    7. i++;
    8. if (i == 5)
    9. continue;
    10. printf("%d ", i);
    11. }
    12. return 0;
    13. }

     //除了没有5,其余都有

    总结:

    break在while循环中的作用:

    其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

    (2)continue介绍 

    总结:
    continue在while循环中的作用就是:
    continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
    而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

    2.for循环 

    1)语句

    for(表达式1; 表达式2; 表达式3)
        循环语句;

    表达式1
    表达式1为初始化部分,用于初始化循环变量的。
    表达式2
    表达式2为条件判断部分,用于判断循环时候终止。
    表达式3
    表达式3为调整部分,用于循环条件的调整。

    实际的问题:
    使用for循环 在屏幕上打印1-10的数字。

    1. for(表达式1; 表达式2; 表达式3)
    2. 循环语句;
    3. #include
    4. int main()
    5. {
    6. int i = 0;
    7. //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
    8. for(i=1; i<=10; i++)
    9. {
    10. printf("%d ", i);
    11. }
    12. return 0;
    13. }

    现在我们对比一下for循环和while循环。
    可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较
    远,这样
    查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

    1. int i = 0;
    2. //实现相同的功能,使用while
    3. i=1;//初始化部分
    4. while(i<=10)//判断部分
    5. {
    6. printf("hehe\n");
    7. i = i+1;//调整部分
    8. }
    9. //实现相同的功能,使用while
    10. for(i=1; i<=10; i++)
    11. {
    12. printf("hehe\n");
    13. }

    2)break和continue在for循环中

    我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

    但是还是有些差异:

    1. //代码1
    2. #include
    3. int main()
    4. {
    5. int i = 0;
    6. for(i=1; i<=10; i++)
    7. {
    8. if(i == 5)
    9. break;
    10. printf("%d ",i);
    11. }
    12. return 0;
    13. }
    14. //代码2
    15. #include
    16. int main()
    17. {
    18. int i = 0;
    19. for(i=1; i<=10; i++)
    20. {
    21. if(i == 5)
    22. continue;
    23. printf("%d ",i);
    24. }
    25. return 0;
    26. }

    3)for语句的循环控制变量 

    建议:

    1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

    2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法

    1. int i = 0;
    2. //前闭后开的写法
    3. for(i=0; i<10; i++)
    4. {}
    5. //两边都是闭区间
    6. for(i=0; i<=9; i++)
    7. {}

    4)一些for循环的变种

    1. #include
    2. int main()
    3. {
    4. //代码1
    5. for(;;)
    6. {
    7. printf("hehe\n");
    8. }
    9. //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
    10. 题。
    11. //代码2
    12. int i = 0;
    13. int j = 0;
    14. //这里打印多少个hehe?
    15. for(i=0; i<10; i++)
    16. {
    17. for(j=0; j<10; j++)
    18. {
    19. printf("hehe\n");
    20. }
    21. }
    22. //代码3
    23. int i = 0;
    24. int j = 0;
    25. //如果省略掉初始化部分,这里打印多少个hehe?
    26. for(; i<10; i++)
    27. {
    28. for(; j<10; j++)
    29. {
    30. printf("hehe\n");
    31. }
    32. }
    33. //代码4-使用多余一个变量控制循环
    34. int x, y;
    35. for (x = 0, y = 0; x<2 && y<5; ++x, y++)
    36. {
    37. printf("hehe\n");
    38. }
    39. return 0;
    40. }

    赋值为0时,则不进行循环

    1. //请问循环要循环多少次?
    2. #include
    3. int main()
    4. {
    5. int i = 0;
    6. int k = 0;
    7. for(i =0,k=0; k=0; i++,k++)
    8. k++;
    9. return 0;
    10. }

    2.do...while循环 

    1)do语句的语法

    1. do
    2. 循环语句;
    3. while(表达式);

    2)执行流程

    查看源图像
    3)do语句的特点

    循环至少执行一次,使用的场景有限,所以不是经常使用。

    4)do while循环中的break和continue

    //rand&srand用法

    (8条消息) C语言中的rand()函数_TLpigff的博客-CSDN博客_rand函数

    1. #include
    2. int main()
    3. {
    4. int i = 1;
    5. do
    6. {
    7. if(5 == i)
    8. break;
    9. printf("%d ", i);
    10. i=i+1;
    11. }while(i<=10);
    12. return 0;
    13. }
    14. #include
    15. int main()
    16. {
    17. int i = 1;
    18. do
    19. {
    20. if(5 == i)
    21. continue;
    22. printf("%d ", i);
    23. i=i+1;
    24. }while(i<=10);
    25. return 0;
    26. }

    3.goto语句()

    C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

    例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

    1. for(...)
    2. for(...)
    3. {
    4. for(...)
    5. {
    6. if(disaster)
    7. goto error;
    8. }
    9. }
    10. error:
    11. if(disaster)
    12. // 处理错误情况

    //三成循环,要三个break,直接用goto可以直接跳出三个循环 

     1.goto的用例

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. char input[20] = {0};
    7. system("shutdown -s -t 60");
    8. again:
    9. printf("请注意你的电脑在1分内关机,如果输入:不关机,去取消关机\n");
    10. scanf("%s", input);
    11. //判断
    12. if (strcmp(input, "不关机") == 0)
    13. {
    14. printf("这就取消关机\n");
    15. system("shutdown -a");
    16. }
    17. else
    18. {
    19. goto again;//gotp()语句
    20. }
    21. return 0;
    22. }

    goto只能在同一个函数内部跳转,不能跨函数跳转  

    2.循环语句

    1. #include
    2. #include
    3. int main()
    4. {
    5. char input[10] = {0};
    6. system("shutdown -s -t 60");
    7. while(1)
    8. {
    9. printf("请注意你的电脑在1分内关机,如果输入:不关机,去取消关机!\n请输入:>");
    10. scanf("%s", input);
    11. if(0 == strcmp(input, "不关机"))
    12. {
    13. system("shutdown -a");
    14. break;//跳出循环
    15. }
    16. }
    17. return 0;
    18. }

     (8条消息) 《C语言》while(1)的两个作用_bellediao的博客-CSDN博客_c语言while

  • 相关阅读:
    数据结构概述
    锅总浅析Prometheus 设计
    多实例tomcat+nginx实现负载均衡
    计算机毕业设计(附源码)python租车信息管理系统
    LCD和LED屏幕的工作原理总结
    PbootCMS 应用快速迁移至浪潮信息 KeyarchOS 云服务器
    C语言编程题(四)有符号数与无符号数相加
    【JavaWeb】第七章 Tomcat
    镭神激光雷达和相机联合标定
    【博客443】OVS架构组成
  • 原文地址:https://blog.csdn.net/m0_47017197/article/details/127677646