当前位置:   article > 正文

C语言学习笔记[21]:分支语句if...else

C语言学习笔记[21]:分支语句if...else

C语言是结构化的程序设计语言

  • 顺序结构
  • 选择结构
  • 循环结构

分支语句对应的就是选择结构,循环语句对应的就是循环结构

分支语句

  • if...else
  • switch

循环语句

  • while
  • for
  • do...while

goto语句

语句

C语言中由分号隔开的就是一条语句,比如:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("Hello, world!\n");
  5. 3 + 5;
  6. ;//空语句
  7. return 0;
  8. }

分支语句

if语句

语法结构

  1. if(表达式)
  2. 语句;
  3. //表达式中的值为真则执行语句,为假则不执行
  4. if(表达式)
  5. 语句1;
  6. else
  7. 语句2;
  8. //表达式中的值为真,则执行语句1,为假则执行语句2

C语言中如何表示真假?

非0 是 真  例如 -1 为真

0 是 假

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int age = 10;
  5. if(age >= 18)
  6. printf("成年");
  7. else
  8. printf("未成年");
  9. return 0;
  10. }

通过age的值判断应该执行哪些语句

if和else后面默认只跟一条语句

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int age = 20;
  5. if(age >= 18)
  6. printf("成年\n");
  7. else
  8. printf("未成年\n");
  9. printf("不能喝酒\n");
  10. return 0;
  11. }

 

所以如果想让if和else控制多条语句,则要给语句加上大括号

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int age = 20;
  5. if(age >= 18)
  6. printf("成年\n");
  7. else
  8. {
  9. printf("未成年\n");
  10. printf("不能喝酒\n");
  11. }
  12. return 0;
  13. }

if...else语句的多分支情况

为什么明明age的值是60,还打印出青年呢?

因为 18 <= age < 26 这个写法是错误的,程序执行到这会先判断 18 <= age,这是成立的所以18 <= age 被替换成 1,替换后的 1 < 26 也成立,所以整个表达式为 真,最终输出青年

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int age = 20;
  5. if(age < 18)
  6. printf("少年\n");
  7. else if(age >= 18 && age < 26)
  8. printf("青年\n");
  9. else if(age >= 26 && age < 40)
  10. printf("中年\n");
  11. else if(age >= 40 && age < 60)
  12. printf("壮年\n");
  13. else if(age >= 60 && age < 100)
  14. printf("老年\n");
  15. else
  16. printf("老不死\n");
  17. return 0;
  18. }

悬空else

判断如下代码的结果:

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

运行结果什么都没打印,这就是else匹配的问题

else是和离他最近的if匹配

而上述代码中的else应该和if(b == 2)匹配,但是if(a == 1)不成立,则无法进入if(b == 2)这里,所以什么都没打印

由此可知,代码的书写风格非常重要

if书写格式的对比

  1. if(condition){
  2. reutrn x;
  3. }
  4. return y;
  1. if(condition)
  2. {
  3. return x;
  4. }
  5. else
  6. {
  7. return y;
  8. }

这两个代码本质是一样的,因为return运行以后,后面的代码就不执行了

但是第二种代码风格更好

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num = 1;
  5. if(num == 5)
  6. {
  7. printf("1\n");
  8. }
  9. return 0;
  10. }
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num = 1;
  5. if(5 == num)
  6. {
  7. printf("1\n");
  8. }
  9. return 0;
  10. }

这两个代码本质也是一样的,num == 5和5 == num相比,5 == num可以防止少写一个等号,从而导致if后面的表达式恒为 真

判断一个数是奇数还是偶数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. //判断一个数是否为奇数
  5. int num = 0;
  6. printf("请输入一个数字:");
  7. scanf("%d", &num);
  8. if(num % 2 == 1 || num % 2 == -1)
  9. {
  10. printf("%d是奇数\n", num);
  11. }
  12. else
  13. {
  14. printf("%d是偶数\n", num);
  15. }
  16. return 0;
  17. }

输出1~100之间的所有奇数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. //输出1~100之间的奇数
  5. int i = 0;
  6. while(i <= 100)
  7. {
  8. if(i % 2 == 1)
  9. {
  10. printf("%d ", i);
  11. }
  12. i++;
  13. }
  14. return 0;
  15. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/800773
推荐阅读
相关标签
  

闽ICP备14008679号