博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》

❤️感谢大家点赞收藏⭐评论✍,您的三连就是我持续更新的动力❤️

小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1、if语句
    • 1.1 if语句的语法格式:
    • 1.2 if语句的执行流程
    • 1.3 if …else 语句
    • 1.4 级联式if语句
    • 1.5 “悬空else” 的问题
  • 2、switch语句
  • 3、while循环
    • 3.1 while语句的格式
    • 3.2 while语句的执行流程
    • 3.3 while语句的实践
  • 4、for循环
    • 4.1 for语句的格式
    • 4.2 for语句的执行流程
    • 4.3 for语句的实践
    • 4.4 for语句和while语句的对比
  • 5、do…while循环
    • 5.1 do…while语句的格式
    • 5.2 do…while语句的执行流程
    • 5.3 do…while语句的实践
  • 6、break和continue
  • 7、goto语句
  • 8. C语言必刷题

1、if语句

if 语句允许程序通过测试表达式的值从两种选项中选择一种。

1.1 if语句的语法格式:

if(表达式)语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0表示假,非0表示真。也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行

1.2 if语句的执行流程

1.3 if …else 语句

语法格式:

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

1.4 级联式if语句

编程时常常需要判断一系列的条件,一旦其中某一个条件为真就立刻停止。“级联式”if语句常常时编写这类系列判定的最好方法。
例如:下面这个级联式if语句用来判定n是小于0、等于0、大于0

if(n<0)printf("%d小于0\n",n);elseif(n==0)printf("%d等于0\n",n);elseprintf("%d大于0\n",n);

虽然第二个 if 语句式嵌套在第一个if语句内部的。通常不会对他对进行缩进,而是把每个else都与最初的 if 对齐:

if(n<0)printf("%d小于0\n",n);else if(n==0)printf("%d等于0\n",n);elseprintf("%d大于0\n",n);

级联式 if 语句独特的书写形式:

if(表达式)语句else if(表达式)语句else if(表达式)语句...else语句

1.5 “悬空else” 的问题

当 if 语句嵌套时,千万要当心著名的“悬空else”的问题。
思考下面这个例子:

#include int main(){int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");elseprintf("haha\n");return 0;}

程序运行结果是什么呢?
很多人认为 a = 0,不等于1,程序执行else子句,打印haha,但是你运行程序的时候,输出结果:什么都没有打印。

这就是悬空else的问题,如果有多个 ifelse 的时候,else 总是跟最近的未配对的 if 匹配。
如果代码改成下面这样更容易理解了

#include int main(){int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");elseprintf("haha\n");}return 0;}

或者如果我们希望else确定和第一个if匹配,可以把代码改成这样。

#include int main(){int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");}else{printf("haha\n");}return 0;}

只要带上适当的大括号,代码的逻辑就会更加清晰,所以大家以后子啊写代码的时候要注意括号的使用,让代码的可读性更高。

注:if 和 else 语句默认都只控制一条语句,想要控制多条语句需要加上{},构成复合语句。

2、switch语句

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构
switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。
switch 的语法格式:

switch(表达式){case 常量表达式:语句case 常量表达式:语句 ...case 常量表达式:语句default :语句}

switch 的组成部分:

  • 控制表达式switch 后面必须跟着圆括号括起来的整形表达式。C语言把字符当成整数来处理,因此在 switch 语句中可以对字符进行判定。但是,这不适用于浮点数和字符串。
  • 分支标号:每个分支的开头都有一个标号,格式如下:

case 常量表达式:

常量表达式很像普通的表达式,只是不能包含变量和函数调用。因此,5是常量表达式,5 + 10 也是常量表达式,但 n + 10 不是常量表达式(除非n是表示常量的宏)。分支标号中常量表达式的值必须是整数(字符也可以)

  • 语句:每个分支标号的后边可以任意数量的语句,并且不需要用花括号把这些语句括起来。每组语句的最后一条通常是break 语句。

C语言不允许有重复的分支标号,但对分支的顺序没有要求,特别是 default 分支不一定要放置在最后。
default 的作用:
switch 语句不要求一定有 default 分支。如果 default 不存在,而且控制表达式的值和任何一个分支标号都不匹配的话,控制会直接传给 switch 语句后面的语句。

3、while循环

循环是重复执行其他语句(循环体)的一种语句。

3.1 while语句的格式

while(表达式)语句

3.2 while语句的执行流程


首先执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

3.3 while语句的实践

练习:在屏幕上打印1~10的值
代码:

#includeint main(){int i = 1;while (i <= 10){printf("%d ", i);i++;}return 0;}

运行结果:

4、for循环

4.1 for语句的格式

for(声明或者表达式1;表达式2;表达式3)语句

表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整

4.2 for语句的执行流程


首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行训话语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环

4.3 for语句的实践

练习:在屏幕上打印1~10的值
代码:

#includeint main(){int i = 0;for (i = 1; i <= 10; i++){printf("%d ", i);}return 0;}

运行结果:

4.4 for语句和while语句的对比

5、do…while循环

5.1 do…while语句的格式

do{语句}while(表达式);

whilefor 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
do...while 循环则是先直接进入循环体,执行循环鱼护,然后在执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

5.2 do…while语句的执行流程


do...while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,在判断表达式的结果是!=0,则继续循环,执行循环;判断表达式的结果==0,则循环结束。
所以在do...while 语句中循环体是至少执行一次的,这是do...while 循环比较特殊的地方。

5.3 do…while语句的实践

练习:在屏幕上打印1~10的值
代码:

#includeint main(){int i = 1;do{printf("%d ", i);i++;} while (i<=10);return 0;}

运行结果:

6、break和continue

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环。

  • break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执行。
  • continue 的作用是跳出本次循环 continue 后边的代码

7、goto语句

C语言提供了一种非常特别的语法,就是goto 语句和跳转标号,goto 语句可以实现在同一个函数内跳转到设置好的标号处。
标号只是放置在语句开始处的标识符:

标识符:语句

goto语句格式

goto 标识符;

例如:

#includeint main(){printf("hehe\n");goto next;printf("haha\n");next:printf("跳过haha的打印\n");return 0;}

运行结果:

goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以能不用尽量不去使用;但是goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用goto 就非常的方便了。

for(...){for(...){for(...){if(1)goto next;}}}next: //...

本来for 循环也使用break 跳出,但是break 只能跳出一次循环,这里就要用3个break 才可以跳出循环,所以这种情况使用goto语句就更快捷。

8. C语言必刷题

  1. 打印1~100之间的奇数
  2. 9*9乘法表