分支语句
if语句
单if语句使用
if语句是C语言中最常见的,他的结构就是if(条件),如果条件成立就进入语句,否则就不进入。使用方法如下
int main() { int a = 0, b = 1; if (a<b) { //1 printf("1\n"); {//2 printf("a<b\n"); } } return 0; }
需要注意的一点是,当if(条件),条件成立的时候。我们才运行最靠近if的{内容}中的内容。什么意思呢?我们运行程序,发现打印出来了,1和a<b。这就说明,注释1的括号是最靠近if的{},所以注释1的{}中的所有内容都会被打印。
还需要注意的一点就是,如果{}上面没有条件语句,{}是没有意义的。
if else语句
如果我们想写两个对立的条件,难道写两个if语句吗?毫无疑问,这样显得很呆。于是C语言提供了if else语句,if(条件){内容1}else{内容2}。这个语句的特点就是,如果条件成立,执行内容1,如果条件不成立,执行内容2。示例如下
int main() { int a = 2, b = 1; if (a<b) { printf("a<b\n"); } else { printf("a>b\n"); } return 0; }
if else if else语句
既然有了if else语句,但是有时候我们又不可能只出现两种情况,于是C语言又提供了if else if else语句。
写法如下if(条件1){内容1}else if(条件2){内容2}else if(条件3){内容3}else{内容4},这个语句就是,进行判断条件1,如果条件1成立,执行内容1,之后的所有else if和else全部跳过。如果条件1不成立,进行条件2判断,条件2成立就执行内容2,依次类推,如果一直都不成立就执行else中的内容。
注意:如果不知道&&是什么的,可以看初识C语言(5)C语言一些基本常识。
#include <stdio.h> int main() { int a = 0, b = 1; if (a==0 && b==0) { printf("a=0 b=0\n"); } else if (a == 0 && b == 1) { printf("a=0 b=1\n"); } else if (a == 1 && b == 0) { printf("a=1 b=0\n"); } else { printf("a=1 b=1\n"); } return 0; }
switch语句
switch基本结构
有时候可能会出现多分支的情况,比如说,输入1,执行内容1。输入2,执行内容2。如果我们全部用if else if会显得很不美观。于是C语言提供了switch语句,用法如下
#include <stdio.h> int main() { int a = 2; switch (a) { case 1:printf("星期1\n"); break; case 2:printf("星期2\n"); break; case 3:printf("星期3\n"); break; case 4:printf("星期4\n"); break; case 5:printf("星期5\n"); break; default:printf("周末\n"); break; } return 0; }
这个意思就是说,如果变量a是1-5,就输出周一至周五,如果变量不是1-5,就输出周末。结果如下
很多人可能还没有理解switch语句是什么。以这个为例子,a是2,程序就直接跳到case 2:然后依次执行后面的所有内容!这个时候有人会有疑惑,明明这里只输出了一个星期2啊,怎么是从case2开始依次执行后面的所有内容呢?原因很简单,因为我们这里加了break;
break作用
我们看到,switch语句,每一个case后面都有一个break;我们尝试去掉break看看会发生什么
#include <stdio.h> int main() { int a = 2; switch (a) { case 1:printf("星期1\n"); case 2:printf("星期2\n"); case 3:printf("星期3\n"); case 4:printf("星期4\n"); case 5:printf("星期5\n"); default:printf("周末\n"); } return 0; }
结果如下
很明显,我们发现他输出了星期2—星期5和周末。这就是我们上面说的程序就直接跳到case 2:然后依次执行后面的所有内容!
现在我们知道了break的作用就是结束switch这个语句。
default作用
我们看到switch最后面有一个default,而这个default作用和if else中的else的作用一样。就是说,如果输入的变量a都不满足上面case的要求,他就执行default这个语句。看代码
#include <stdio.h> int main() { int a = 6; switch (a) { case 1:printf("星期1\n"); break; case 2:printf("星期2\n"); break; case 3:printf("星期3\n"); break; case 4:printf("星期4\n"); break; case 5:printf("星期5\n"); break; //default:printf("周末\n"); break; } return 0; }
结果我们看到什么都没有输出
循环语句
while语句
while语句结构
while语句比较简单,while(条件){内容},只要条件成立,内容就一直执行。所以我们需要一个让条件在内容中受到衰减,最后条件不满足。否则程序会一直进行下去(注意,在嵌入式写程序中,一定会有一个while(1)让程序一直跑下去,因为我们不能让程序停止)
这个地方a--。表示a这个变量在自己减1,比如说a现在是6,a--之后,a现在就是5了。
#include <stdio.h> int main() { int a = 6; while (a) { printf("a=%d\n", a); a--; //条件在内容中衰减,逐渐接近不满足条件 } return 0; }
输出结果
while语句中break应用
我们根据上面所学,可以知道break可以结束一个switch语句。但是break在C语言中作用不仅如此,他还可以结束当前的循环。
在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。
#include <stdio.h> int main() { int i = 1; while (i <= 10) { if (i == 5) break; //注意,当if后面没有加{}的时候,认为接下来的一个语句是if的内容,第二个语句不在if内容中。也就是说printf不是if语句的内容 printf("%d ", i); i = i + 1; } return 0; }
根据上面代码,我们运行结果如下
可以看到,程序就输出了1,2,3,4。但是没有输出5和接下来的数字。这就是因为break在作用。当i=5的时候,进入if语句,然后break结束当前while循环。需要注意,break只会匹配最近while或者switch。
#include <stdio.h> int main() { int i = 1, a = 2; while (a) { i = 1; a--; printf("a=%d\n ",a); while (i <= 10) { if (i >= 5) break; printf("i=%d ", i); i = i + 1; } } return 0; }
我们执行上面代码,结果是而假如我们把这个break放在外面看看会怎么样
#include <stdio.h> int main() { int i = 1, a = 2; while (a) { i = 1; a--; printf("a=%d\n ",a); while (i <= 10) { printf("i=%d ", i); i = i + 1; } if (i >= 5) break; } return 0; }
结果发现只有一个a=1,这就表明了,break只能结束一次循环,而这次循环就是最接近他的那个。
至于switch可以自己尝试使用以下,我再次就不再啰嗦了
int main() { int i = 1; while (i <= 10) { switch (i) { case 1:printf("i=1 "); break; case 2:printf("i=2 "); break; case 3:printf("i=3 "); break; case 4:printf("i=4 "); break; case 5:printf("i=5 "); break; case 6:printf("i=6 "); break; case 7:printf("i=7 "); break; case 8:printf("i=8 "); break; case 9:printf("i=9 "); break; case 10:printf("i=10 "); break; } i = i + 1; } return 0; }
while语句中continue应用
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
#include <stdio.h> int main() { int i = 1; while (i <= 10) { i = i + 1; if (i == 5) continue; printf("%d ", i); } return 0; }
打印出来结果,我们发现只有5没有被打印。这就解释了结束continue后面的语句,重新开始进行进行while判断。
这个时候有人会有疑惑,我的i一开始明明是1啊,为什么是从2开始打印的呢?我们可以看到,在while循环里面,我们先是i自增了一次,然后再打印的,所以是从2开始打印。
但是有人就说,如果我把i=i+1放在while语句的最后面不可以了吗?我们尝试一下
#include <stdio.h> int main() { int i = 1; while (i <= 10) { if (i == 5) continue; printf("%d ", i); i = i + 1; } return 0; }
结果如下,程序打印出4之后,就不动了。也不弹出 请按任意键继续. . .的提示,这是为什么呢?因为程序还在运行,所以没有弹出。
我们说了,结束continue后面的语句,重新开始进行进行while判断。但是因为i=i+1放在了continue后面,那么i=5成立的时候,i永远不会自增,这就导致i永远会是5,while语句的i<=10永远成立,从而进入一个死循环。
for语句
for语句结构
现在我们开始说for语句,这个语句比较重要,经常会用到!!!for语句的结构如下。
for(表达式1; 表达式2; 表达式3) 循环语句; 表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
其实for语句的作用和while语句类似,都是用于循环的。但是for语句有一个特点,他可以进行条件的调整和初始化,这样让程序更加具有阅读性。我们拿上面那个while做例子
//while示例 int i = 1; while (i <= 10) { i++; //自增,和i = i + 1;一个意思 } //for示例 int i; for(i=1;i<=10;i++) { }
根据两者对比,很明显看到for语句更加方便,特别是循环条件的调整,直接写在了for里面,方便查看。
for语句的省略写法
我们可以看到,一般定义变量的时候就已经初始化了,如果我们在for语句中的初始化部分和定义变量的初始化一样,是不是可以省略掉初始化部分?答案是可以的,其实for循环中,唯一不可省略的部分就是中间的判断部分。
//while示例 int i = 1; while (i <= 10) { i++; //自增,和i = i + 1;一个意思 } //for示例 int i=1; for(;i<=10;) //注意,第一个“;”必须写上!!!第三个";"可以省略 { i++; }
for循环中的break和continue
我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有些差异。
在break中,for和while区别不大。两个代码结果一样
#include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) break; printf("%d ", i); } return 0; } #include <stdio.h> int main() { int i = 1; while (i <= 10) { if (i == 5) break; printf("%d ", i); i = i + 1; } return 0; }
但是continue不一样,还是有些许的区别。我们对比两个代码发现,for循环中,可以成功打印除5以外的1-10所有数字。而while循环中,打印的是除5以外的2-11所有数字。
这个是为什么呢?因为while中是先进行i自增,再打印,所以是2-11的数字,并且i自增不能写在continue之后,不然会进入死循环。(上面讲了)但是for不一样,这个i的自增是执行完for里面的内容之后再进行的。这个i自增不属于for里面的内容,不会被continue给省略掉。
#include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%d ", i); } return 0; } #include <stdio.h> int main() { int i = 1; while (i <= 10) { i = i + 1; if (i == 5) continue; printf("%d ", i); } return 0; }
do while 语句
do while 语句结构
do while比较特殊,他是先执行内容再进行条件判断。这就表明了至少要循环一次,很少用,而且它的作用while都可以实现,了解一下即可。以下是他的结构:
do 循环语句; while(表达式);
这个语句也没什么可讲的,while语句就是先条件判断,再执行语句。do while就是先执行语句,再条件判断,条件判断成功重新执行一次语句,如果条件判断失败,跳出循环。这导致他至少执行一次命令。
通俗的话来说就是,while是一个听话的孩子,父母说可以做,他才做。而do while不一样,他喜欢先斩后奏,先打游戏,如果父母看见允许就继续打游戏,如果不同意,那起码打了一盘游戏再结束呗,不亏。
需要注意:当第一次进入do while语句之后,执行完语句,然后就可以相当于是在执行while语句了。还是讲个例子理解一下。
#include <stdio.h> int main() { int i = 10; do { printf("%d\n", i); }while(i<10); return 0; }
看这个代码,如果是while语句,那么他就不会执行。但是是do while,那么先执行一次语句,再和while语句一样,条件不成立,不执行语句。
do while 语句中的break和continue
do while中的break和continue与while一样。一样需要注意,i++要再continue前面。(只有for语句不需要注意这一点!)
//break示例 #include <stdio.h> int main() { int i = 1; do { if (5 == i) break; printf("%d\n", i); i++; } while (i<10); return 0; } //continue示例 #include <stdio.h> int main() { int i = 1; do { i++; if (5 == i) continue; printf("%d\n", i); } while (i<10); return 0; }