目录
什么是语句?
C语言的语句可以分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
本篇文章要说的分支与循环就是控制语句(控制它是否被执行)。
分支语句
分支语句主要有if语句和switch语句两种。
if语句
if语句有单分支和多分支两种
单分支的格式为
//如果判断条件为真,则执行if里的语句,否则执行else里的语句
if(判断条件){
执行语句;
}
else{
执行语句;
}
这里需要注意的是0为假,非0为真,而布尔型数据的true和false的值为1和0,有时容易将比较两者大小是否相等的"=="判断写成”=“赋值语句返回值为非0也会被计算机识别为真。
多分支的格式为
//表达式会依次判断if和else if语句的判断条件是否为真,如果为真则执行,然后跳出条件判断,否则向下判断
if(判断条件){
执行语句;
}
else if (第二个判断条件){
执行语句;
}
else if (第三个判断条件){
执行语句;
}
else if...
else{
执行语句;
}
这里由上面的代码不难看出,当有一个判断表达式为真就停止判断,否则就一直判断,
所以当执行到下一条判断条件的时候,上面的判断必然为假,所以后面的判断可以减去一些不必要的条件,来增加的代码的美观性。需要注意的是单分支if语句如果不加else if 的话。即使前面的表达式为真,也依然会向下执行。
switch语句
switch的结构为
//根据整型变量所存放的数据来判断执行哪段分支,与哪段case 值对应(case 后面的值可以任意设置),
//如果没有对应的值就执行default 里的语句
switch(整型数据变量){
case 1: 语句1; break;
case 2: 语句2; break;
case 3: 语句3; break;
...
default: 语句n; break;
}
需要注意case 后面的语句必须要加break跳出,否则就会依次向下执行,就不会达到分支的目的(我总容易犯这个错误),default 后面的语句如果最后一条的话可以选择不加,毕竟已经是最后一条语句了,但为了代码的美观性,还是觉得加上比较好
switch内的整型数据变量可以使用short, int, long, long long,char(可以通过ASCII码表转化为整型)
如果使用其他变量则会发生编译失败。
如果多行case 的值,执行的是相同的语句,可以这么写
case 1:
case 2:
case 3:
case 4: 语句体; break;
因为前面不加break语句的话会一直向下执行。
总结1
可以看出if语句适合判断条件为真与假的,分支相对比较少的判断,而switch语句适合分支较多,且可以用整型变量进行判断的分支。
循环语句
循环分为三种 for型循环,while型循环,do{...}while型循环。
for型循环
for型循环的主要格式如下
//下面代码表示的是以i为计数变量,i每次自增一个单位,一共自增n次(从0开始),每自增一次执行一次代码块,所以循环n次
for(int i=0;i<n;i++){
语句体;
}
其中for循环括号内的三段语句分别是初始化计数变量,判断循环执行条件,计数变量自增语句,当然这些语句是可以放在其他位置的,但是括号中的分号不可省略,如果不加循环执行条件,代表死循环,这种情况下一般都是无意义的。
while型循环
//如果执行条件为真,则执行循环,否则跳出循环
while(执行条件){
语句体;
}
这种格式跟if语句体有些类似,只不过它是循环,如果条件为真就一直执行,直到条件为假才跳出。
do{...}while型循环
//如果执行条件为真,则继续循环,否则跳出循环
do{
语句体;
}while(执行条件);
跟上一种循环不一样的是
while型循环是先判断执行条件是否为真,而do{...}while型循环是先执行语句体,然后再判断执行条件是否为真。
总结2
以上,我们不难发现for循环适用于已知循环次数的循环,而while循环适用于已知条件但不知道次数的循环,do{...}while适用于先执行循环语句,然后再判断执行条件的循环。
循环跳出语句
当然也可以说为循环跳出的关键字,差别不大。
有break和continue,goto三种。
break
break有破坏的意思,在C语言中表示永久跳出循环的意思,参考下面的代码。
for(int i=0;i<10;i++){
if(i==5) break;
printf("%d",i);
}
以上代码代表的意思是循环从0开始向上自增,当i的值为5的时候跳出循环,且是永久跳出,循环不会继续执行。所以输出的结果为01234。
break语句在上面说switch的时候见过,其实swtich我觉得本质上是一种循环,每段case 语句加上break才保证的多分支。
continue
continue有继续意思,在C语言中有跳出本次循环并执行下次循环的意思。
参考下面的代码
for(int i=0;i<10;i++){
if(i==5) continue;
printf("%d",i);
}
以上代码代表的意思是循环从0开始向上自增,当i的值为5的时候,跳出本次循环并执行下次循环
所以只有5不打印,输出结果为012346789。
continue可以用于switch中吗?
其实也是可以的,continue语句是跳出本次循环执行下次循环,这也意味着需要在进行一次switch判断,可以根据需该变量的值再判断一次,但是不建议容易乱,还是保持这switch那种条理清晰地分支便好。
goto
goto语句意思是去的意思,就是跳转到代码的某一行
如下:
int main(){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(i==5&&j==5) goto a;
}
}
a: return 0;
}
此代码也是循环从0开始执行,当j的值等于5时会直接跳转到 return 0的那行,(以a定义某一行,然后goto a;)。goto的好处是:相比break,continue,如果有多层嵌套循环的话可以省去多次break,直接goto达到全部跳出的目的,但是这种语句不建议使用,因为goto指令的级别较高,危险程度较高,盲目使用会导致很多难以预测的问题。
总结3
break语句是永久跳出循环,continue语句是跳出本次循环并执行下次循环,而goto语句是直接跳转到代码的某一行上,个人不建议使用,可能会触发一些bug。
循环和分支的嵌套
就是把循环和分支放在代码块里再执行一遍,往下推即可(写不动了)。
写在最后
本人是一个刚入门的菜鸟程序员,这篇文章只是我对所学知识的一点理解,如果有错误,还望各位大佬指正。