• C语言学习:5、C语言程序的选择结构


    前面所见到的程序示例都有一个特点,就是太简单,都是从上到下,一波流,这样的代码显然是不能应用于实际生活的。生活中有各种选择和判断,C语言也是如此。

    if语句

    所谓选择与判断,就是,如果怎样,那么就怎样,翻译成C语言就是

    程序示例1:

    1. if (//如果怎样)
    2. {
    3. //就怎样
    4. }
    5. else {
    6. //否则就怎样
    7. }

    接下来看一个简单的可以执行的代码

    程序示例2:

    1. #include
    2. int main()
    3. {
    4. int a = 100;
    5. int b = 55;
    6. int c = a - b;
    7. if (c > 0)
    8. {
    9. printf("a > b\n"); //如果c>0,就打印a>b
    10. }
    11. else
    12. {
    13. printf("a < b\n"); //如果c<0,就打印a
    14. }
    15. return 0;
    16. }

    显然,结果打印的是a>b, else后面的语句没有执行,这就是C语言的选择结构,根据条件来选择执行哪些语句。

    if... else...只有两条路可选,在实际生活中肯定是不够的,如果有多个备选项怎么办,也就是说有多路分支的C语言代码怎么写?用多个if else 不就行了

    程序示例3:

    1. #include
    2. int main()
    3. {
    4. int a = 100;
    5. int b = 55;
    6. int c = a - b;
    7. if (c > 0)
    8. {
    9. printf("a > b\n"); //如果c>0,就打印a>b
    10. }
    11. else if(c==0)
    12. {
    13. printf("a == b\n"); //如果c==0,就打印a==b
    14. }
    15. else
    16. {
    17. printf("a < b\n"); //如果c<0,就打印a
    18. }
    19. return 0;
    20. }

    显然,结果打印的是a>b, else if后面的雨具是没有执行的。

    程序练习:输入三个数x, y, z,打印最小的那个数

    思路:

    1、定义一个中间变量m;

    2、比较x和y的大小,将较小的那个赋值给m;

    3、比较m和z的大小,将较小的那个赋值给m;

    4、m中保存的就是3个数中最小的那个了

    程序示例4:

    1. #include
    2. int main()
    3. {
    4. int x, y, z,m;//C语言是可以一下子定义多个变量的
    5. printf("请输入x的值\n");
    6. scanf_s("%d",&x);
    7. printf("请输入y的值\n");
    8. scanf_s("%d", &y);
    9. printf("请输入z的值\n");
    10. scanf_s("%d", &z);
    11. if (x <= y)
    12. {
    13. m = x;
    14. }
    15. else
    16. {
    17. m = y;
    18. }
    19. if (m <= z)
    20. {
    21. m = m;
    22. }
    23. else
    24. {
    25. m = z;
    26. }
    27. printf("最小的数是 %d\n", m);
    28. return 0;
    29. }

    这个代码可以实现功能,但是太长了,又臭又长,可以精简下,如程序示例5所示

    程序示例5:

    1. #include
    2. int main()
    3. {
    4. int x, y, z,m;//C语言是可以一下子定义多个变量的
    5. printf("请输入3个整数\n");
    6. scanf_s("%d%d%d",&x,&y,&z);
    7. if (x <= y)
    8. {
    9. m = x;
    10. }
    11. else
    12. {
    13. m = y;
    14. }
    15. if (m > z)
    16. {
    17. m = z;
    18. }
    19. printf("最小的数是 %d\n", m);
    20. return 0;
    21. }

    程序练习:根据学生成绩给出相应的等级

    1、先判断输入的分数是否正确,分数区间是0-100;

    2、如果数据正确,进一步判断等级;

    3、如果数据不正确,打印提示信息;

    程序示例6:

    1. #include
    2. int main()
    3. {
    4. int score;
    5. printf("请输入分数\n");
    6. scanf_s("%d",&score);
    7. if ((score>=0)&&(score <=100))
    8. {
    9. if ((score > 90) && (score <= 100))
    10. {
    11. printf("分数等级为A\n");
    12. }
    13. else if ((score >= 80) && (score < 90))
    14. {
    15. printf("分数等级为B\n");
    16. }
    17. else if ((score >= 70) && (score < 80))
    18. {
    19. printf("分数等级为C\n");
    20. }
    21. else if ((score >= 60) && (score < 70))
    22. {
    23. printf("分数等级为D\n");
    24. }
    25. else
    26. {
    27. printf("分数等级为E\n");
    28. }
    29. }
    30. else
    31. {
    32. printf("分数不正确,请重新输入\n");
    33. }
    34. return 0;
    35. }

    switch语句

    前面用if else 来判断,写起来麻烦,读起来也麻烦,有个看起来更简洁高效的语法,就是switch语句

    switch的语法如下

    程序示例7:

    1. switch (m)
    2. {
    3. case x: //m == x
    4. //do something
    5. break; //break就是跳出switch
    6. case y: //m == x
    7. //do something
    8. break;
    9. case z://m == x
    10. //do something
    11. break;
    12. ...
    13. default://默认情况,执行default下面的语句
    14. ...
    15. }

    程序练习:看代码吧,不解释

    程序示例8:

    1. #include
    2. int main()
    3. {
    4. int a = 1;
    5. int b = 2;
    6. char symb;
    7. printf("请输入运算符号\n");
    8. scanf_s("%c", &symb);
    9. switch (symb)
    10. {
    11. case '+':
    12. printf("%d + %d = %d\n",a,b, a+b);
    13. break;
    14. case '-':
    15. printf("%d - %d = %d\n", a, b, a - b);
    16. break;
    17. case '*':
    18. printf("%d * %d = %d\n", a, b, a * b);
    19. break;
    20. default:
    21. printf("未定义的符号\n");
    22. }
    23. return 0;
    24. }

    switch语句的几个知识点:

    1、switch只适用于离散的变量和整数值

    2、case对应着分着,只有匹配成功,才执行case后面的语句

    3、case后面的语句执行完之后,要通过break跳出switch,不然就要执行下一个case语句了

    4、default不要也可以

  • 相关阅读:
    不容易解的题10.5
    【Node.JS 】服务器相关的概念
    5.【刷爆LeetCode】删除公共字符(多方法、多思路)
    Allegro如何添加泪滴操作指导
    c语言入门---预处理
    JVM类的声明周期
    聚丙烯酸负载小鼠血清白蛋白(MSA)/大鼠血清白蛋白(RSA)/小麦麦清白蛋白;PAA-MSA/RSA
    Java.lang.Class类 getDeclaredMethod()方法有什么功能呢?
    Matlab最小二乘平面拟合(SVD方法)—点云处理及可视化第3期
    php+sql后台实现从主表迁出至副表(数据超万条)
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132738016