C语言入门篇(三)

梦里梦外; 2023-10-13 07:20 133阅读 0赞

前言
  人生会面临各种岔路口,选择适合自己的路才是最好的。

分支语句

  • 什么是语句?
    1. if语句
    • 1.1 悬空else
    • 1.2 if书写形式对比
    • 1.3 练习
    1. switch语句
    • 2.1 在switch语句中的break
    • 2.2 default子句
    • 2.3 练习
  • 结束语

什么是语句?

C语句可分为以下五类:

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

本篇文章后面介绍的是控制语句。
  控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
  可分成以下三类:
  1.条件判断语句也叫分支语句: if语句、 switch语句;
  2.循环执行语句: do while语句、while语句、 for语句;
  3.转向语句: break语句、goto语句、continue语句、 return语句。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. 3 + 5;//表达式语句
  5. ;//空语句
  6. printf("iloyo.");//函数调用语句
  7. return 0;
  8. }

1. if语句

if语句的语法结构:

  1. if(表达式)
  2. 语句1;
  3. else
  4. 语句2;
  5. //单分支-if语句可以不加else
  6. if(表达式)
  7. 语句;
  8. //多分支
  9. if(表达式1)
  10. 语句1;
  11. else if(表达式2)
  12. 语句2;
  13. else
  14. 语句3
  15. //嵌套使用
  16. if(表达式1)
  17. 语句1;
  18. else
  19. {
  20. if(表达式2)
  21. 语句2;
  22. else
  23. 语句3
  24. }

如果表达式的结果为真,则语句执行
在C语言中:0表示假,非0表示真。

如果条件成立,要执行多条语句,应该使用代码块:{ }

  1. #include<stdio.h>
  2. int main()
  3. {
  4. if(表达式)
  5. {
  6. 语句列表1;
  7. }
  8. else
  9. {
  10. 语句列表2;
  11. }
  12. return 0;
  13. }

实例:

  1. //代码1
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int age;
  6. scanf("%d", &age);
  7. if (age < 18)
  8. printf("未成年");
  9. return 0;
  10. }
  11. //代码2
  12. #include<stdio.h>
  13. int main()
  14. {
  15. int age ;
  16. scanf("%d", &age);
  17. if (age < 18)
  18. printf("未成年\n");
  19. else
  20. printf("成年\n");
  21. return 0;
  22. }

假设人的一生可分为:幼年(1-10岁)、青年(11-35岁)、中年(36-60岁)、老年(61- 岁)。已知一个人的年龄,如何知道ta处于人生哪个阶段呢?

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int age = 20;
  5. //int age;
  6. //scanf("%d",&age);
  7. if (age >= 1 && age <= 10)
  8. printf("幼年");
  9. else if(age>10&&age<=35)
  10. printf("青年");
  11. else if(age>35&&age<=60)
  12. printf("中年");
  13. else
  14. printf("老年");
  15. return 0;
  16. }

1.1 悬空else

下面是一个悬空的else语句,本意是与第一个if语句匹配,输出结果应该是“haha”,为什么会出错呢?
在这里插入图片描述
原因一:默认情况下,if只能控制一条语句,若想控制多条语句,就要加上{ },else同上。
原因二:if-else 就近原则,else是与离它最近的if匹配的。
改正如下:

  1. #include <stdio.h>
  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. }

1.2 if书写形式对比

下面的代码2和代码4更好,逻辑更加清晰,不容易出错。

  1. //代码1
  2. if (condition)
  3. {
  4. return x;
  5. }
  6. return y;
  7. //代码2
  8. if(condition)
  9. {
  10. return X ;
  11. }
  12. else
  13. {
  14. return y;
  15. }
  16. //代码3
  17. int num = 1;
  18. if(num == 5)
  19. {
  20. printf("hehe\n");
  21. }
  22. //代码4
  23. int num = 1;
  24. if(5 == num)
  25. {
  26. printf("hehe\n");
  27. }
  • 当常量与变量判断相等时,把常量放在“==“”左边,避免出错
  • 函数体中,只要碰到return就返回,后面语句不再执行
  • 养成良好的代码风格,在笔试中才不会丢分

1.3 练习

1.判断一个数是否为奇数
2.输出1-100之间的奇数

下划看答案

  1. //第一题
  2. #include<stdio.h>
  3. int main()
  4. {
  5. int n = 0;
  6. scanf("%d", &n);
  7. if (n % 2 == 1)
  8. {
  9. printf("%d是奇数\n",n);
  10. }
  11. else
  12. {
  13. printf("%d不是奇数\n",n);
  14. }
  15. return 0;
  16. }
  17. //第二题
  18. //代码1
  19. #include<stdio.h>
  20. int main()
  21. {
  22. int i = 1;
  23. while (i <= 100)
  24. {
  25. printf("%d ", i);
  26. i = i+2;
  27. }
  28. return 0;
  29. }
  30. //代码2
  31. #include<stdio.h>
  32. int main()
  33. {
  34. int i;
  35. for (i = 1; i <= 100; i++)
  36. {
  37. if (i % 2 != 0)
  38. {
  39. printf("%d ", i);
  40. }
  41. }
  42. return 0;
  43. }

2. switch语句

switch语句也是一种分支语句。
常常用于多分支的情况,在语法上不强调顺序。
语法结构:

  1. switch (整型表达式)
  2. {
  3. 语句项;
  4. }

什么是语句项?

  1. //由一些case语句组成,如:
  2. case 整型常量表达式:
  3. 语句;

比如:
  输入1,输出星期一
  输入2,输出星期二
  输入3,输出星期三
  输入4,输出星期四
  输入5,输出星期五
  输入6,输出星期六
  输入7,输出星期日
用if语句表示如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int day = 0;
  5. scanf("%d", &day);
  6. if (1 == day)
  7. printf("星期1\n");
  8. else if (2 == day)
  9. printf("星期2\n");
  10. else if (3 == day)
  11. printf("星期3\n");
  12. else if (4 == day)
  13. printf("星期4\n");
  14. else if (5 == day)
  15. printf("星期5\n");
  16. else if (6 == day)
  17. printf("星期6\n");
  18. else if (7 == day)
  19. printf("星期天\n");
  20. else
  21. printf("输入错误\n");
  22. return 0;
  23. }

switch语句表示:

  1. #include<stdio.h>
  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. }

如果用if…else if …else的形式表示就太复杂了,而switch语句在书写上就更简洁。

几种switch语句的书写方式:

  1. switch(常量)
  2. {
  3. case 常量1:
  4. printf(" ");
  5. break;
  6. case 常量2:
  7. printf(" ");
  8. break;
  9. }
  10. switch(常量)
  11. {
  12. case 常量1:
  13. case 常量2:
  14. printf(" ");
  15. break;
  16. case 常量3:
  17. printf(" ");
  18. }
  19. witch(常量)
  20. {
  21. defult:
  22. printf("输入错误");
  23. break
  24. case 常量1:
  25. case 常量2:
  26. printf(" ");
  27. break;
  28. case 常量3:
  29. printf(" ");
  30. break;
  31. }

2.1 在switch语句中的break

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

要求:输入1-5,输出的是”weekday”
   输入6-7,输出”weekend”

代码实现:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int day = 0;
  5. scanf("%d", &day);
  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("输入错误\n");
  21. break;
  22. }
  23. return 0;
  24. }

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

switch语句书写时,最好在最后一个case语句的后面加上一条break语句。
(可以避免出现在以前的最后一个case语句后面忘了添加break语句)

2.2 default子句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结果就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C语言中并不认为这是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签
 defaut:
写在任何一个case标签可以出现的位置。
当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。

每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

2.3 练习

看完上面的内容,你学会使用switch语句了吗?
来看看这段代码的结果是什么呢?

  1. #include <stdio.h>
  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)//switch允许嵌套使用
  14. {
  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. }

答案:
在这里插入图片描述


结束语

以上就是我对if语句和switch语句的分享,希望对你有所帮助。
  道阻且长,行则将至;行而不辍,未来可期。
  我们下一篇文章再见。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言入门(五)

    现实生活中,库函数并不能解决所有问题,于是就有了自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。statemen...

    相关 语言入门(四)

    > 前言 >   有的时候,我们可能需要多次执行同一块代码。 >   一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 >  

    相关 C语言入门(一)

    > 前言 >   欢迎各位小伙伴,这一篇,只是为了让我们对C语言有一个大概的认识,每个知识点并不会讲的很深,之后我也会持续更新博客,对这些知识进行拓宽,进行更细致的描述。

    相关 c语言基础()指针

    (一)为什么要使用指针: 1直接访问硬件(opengl显卡绘图) 2快速传递数据(指针表示地址) 3返回一个以上的值(返回一个数组或者结构体的指针) 4表示复杂的数据结