上篇文章我们聊到了C语言的数据形式及其输入输出,这篇我们来聊一聊C语言中的流程控制。流程控制是我们今后做嵌入式开发编程中必不可少的一环,像我们平时玩的51,32等,要实现某一功能一定会涉及流程,所以我们就来简单聊一聊。
if和else 语句
流程控制中最最最基础的就是if...else语句,单用一个if语句称其为单分支控制的条件语句,其实现形式:if(表达式P) 语句A,例如if (a > b) max = a;这里涉及到了关系运算符,括号里的>就是关系运算符,还包括< <= >= == != ,分别代表啥意思我就不过多解释了,但是尤其要注意的是:==不要写成了=。我们来关注一下括号里的表达式:可想而知如果要执行if后面的语句,括号里的表达式一定要成立,也没啥好讲的,重点讲一下含有逻辑运算符的表达式,关于逻辑表达式:
逻辑运算符 | 类型 | 优先级 |
! | 单目 | 最高 |
&& | 双目 | 较高 |
|| | 双目 | 较低 |
具体应用我们直接上代码:
这个程序大家应该都看得懂,重点关注一下if(!a)这个语句,if语句要执行要满足其括号里的表达式为真,所以!a要为真,故a要为假,初学时会感觉有点绕,理一下逻辑就好了。
用到if当然也少不了else,简单的if...else语句不难,不满足if就else,无非就两种情况,这也称双分支控制的条件语句,这里面呢有一个叫条件表达式的东西,例如if (a>b) printf("max=%d",a); else printf("max=%d",b);可以简化为:max = a > b?a:b; printf("max = %d",max);要注意的是条件运算符是C语言中唯一的三目运算符。
前面都不是很难,重点来看一下用于多分支控制的条件语句,就是含有else if的语句,我们回到上一个程序:
我们把原来代码中第二的第三个if换成else if,输入0和6对比一下之前的输出结果:可以发现没有了非运算,我们再稍加修改:
我们把原来第二个else if语句和第三个互换一下位置,对比一下输出结果,我们不难发现:只要有第一个条件满足了就不会继续执行下去了,这就是多个else if语句和多个if语句的差别。
switch...case 语句
switch...case语句其实和if...else if语句差不多,即满足了其中一个条件就会结束,一般要讨论的情况大于三种我们就会选择switch...case语句,case后面必须接一个常量,且常量与case直接要用空格隔开,常量后面再加冒号,比如case 1:、case 2:等。我们在代码上看看:
应该不是很难理解,就是要注意一个case要以break结束。
if...else if语句和switch...case语句理解起来是一样的,但是实际使用起来还是有不一样的:
图一使用的switch...case语句,图二使用的if...elseif语句,很明显图一可以用if...else if语句来替换,但是图二可以用switch...case语句来替换吗,很明显图二用switch...case语句明显复杂了许多,所以我们平时自己做项目的时候要根据自己的情况而定。
while和do...while语句
while是一个循环语句,属于当型循环。这里和if有的相似,如果要进入循环,那么while(表达式)中括号里的表达式要为真,上代码:
这是一个求最小公倍数和最大公约数的程序,可见得只有满足while括号里的表达式才会执行循环,一旦表达式不满足就会跳出while,执行中括号后面的语句。
do...while也是一个循环,属于直到型循环。它会先执行一遍循环体中的语句,再判断循环控制表达式是否为真,所以不管循环条件为真还是为假,循环内的语句都会被执行一遍。要注意的是do...while语句while()后面要加分号!可能是我在嵌入式这块还没走太深哈哈哈哈,没怎么用到过do...while语句,所以我们也就一笔带过了哈。
for语句
for语句是C语言中第三中循环语句,一般形式:for(初始化表达式;循环控制表达式;增值表达式),要注意的是for语句三个表达式之间的分隔符是分号,有且只有两个,既不能多又不能少。好了话不多说,上代码:
这个程序是水仙花数,不了解的小伙伴可以去查一查。其中n=100就是初始化循环次数,n<1000是循环条件,n++是增值表达式,它还可以这样写:
这里要稍微注意一下n的值,虽然条件是n<1000,但是最后打印n的值的时候,n=1000,因为就算结束了循环,n++还会执行一次。
break和continue语句
我们直接看代码:
这是continue语句
这是break语句
显然易见:break语句是直接将循环终止,从循环语句后的第一条语句开始继续执行;而continue语句只是跳过continue语句后面尚未执行的语句,开始下一次循环。
注意,在嵌套循环的情况下,break语句和continue语句只对包含它们的最内层的循环语句起作用,不能用break语句跳出多重循环。
好了,以上就是本篇文章的所以内容啦,总结的比较简单,若有不足之处希望各位大佬批评指正。