需提前看:初识C语言(5)C语言一些基本常识,

目录

分支语句

if语句

单if语句使用

 if else语句

if else if else语句

switch语句

switch基本结构

 break作用

default作用

循环语句

while语句

while语句结构

 while语句中break应用

 while语句中continue应用

for语句

for语句结构

for语句的省略写法

for循环中的break和continue

do while 语句

do while 语句结构

do while 语句中的break和continue


分支语句

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的{}中的所有内容都会被打印。

还需要注意的一点就是,如果{}上面没有条件语句,{}是没有意义的

C语言分支循环语句_开发语言

 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,就输出周末。结果如下

C语言分支循环语句_#include_02

很多人可能还没有理解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;
}

结果如下

C语言分支循环语句_#include_03

程序就直接跳到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;
}

结果我们看到什么都没有输出

C语言分支循环语句_while语句_04

循环语句

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;
}

 输出结果

C语言分支循环语句_while语句_05

 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;
}

根据上面代码,我们运行结果如下

C语言分支循环语句_c++_06

 可以看到,程序就输出了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;
}

我们执行上面代码,结果是

C语言分支循环语句_while语句_07

而假如我们把这个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只能结束一次循环,而这次循环就是最接近他的那个。

C语言分支循环语句_c++_08

 至于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判断。

C语言分支循环语句_c语言_09

 这个时候有人会有疑惑,我的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永远成立,从而进入一个死循环。

 

C语言分支循环语句_c语言_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;
}