C语言的分支语句和循环语句详解

C语言的分支语句和循环语句详解,第1张

大家对c语言的分支语句和循环语句足够了解吗?让我们来探讨一下

分支语句:

1、if            2、switch

循环语句:

1、while      2、for            3、do while


 

目录


一、分支语句

1、 if语句

2、 switch语句

二 、循环语句

 1、 while语句

2、for循环

3、 do...while

 ​



一、分支语句 1、 if语句

语法结构:

第一种:if(表达式)

               语句;

第二种:if(表达式)

                语句1;

                else

                 语句2;

第三种:if(表达式1)

                语句1;

               else if(表达式2)

                  语句2;

                else

                 语句3;

上面的语法结构中,其实每个语句可以用大括号括起来,原因是如果if或者else后面要执行的可能不止一句,用大括号将所以要执行的语句括起来,这样就可以完美的执行代码,当然了,如果要执行的语句只有一条,那么可以如同语法结构那样不加大括号。


 

代码1:

#include
int main()
{
	int age = 10;
	if (age < 18) //如果表达式为真,执行if后面的语句
		printf("未成年\n");
	else          //如果表达式为假,执行else后面的语句
		printf("成年\n");
	return 0;
}

 

 

代码2:

#include
int main()
{
	int age = 20;
	if (age < 18)
		printf("未成年\n");
	else if (age >= 18 && age < 28)
		printf("青年\n");
	else if (age >= 50 && age < 50)
		printf("壮年\n");
	else
		printf("老年\n");
	return 0;
}

顺便说一下,c语言的逻辑只有两种,真和假,非0就为真,0就为假。


上面的 *** 作符&&,它叫逻辑与,特点是一真即真,同假才假,如上面年龄20,20>=18??,确实是,所以为真,一真即真,所以整个表达式为真。


(后面我会出一期C语言 *** 作符的文章)

 

代码3:

 


2、 switch语句

我们发现,如果分支语句太多,用if...else if...else if.....的形式太复杂了,这时候用switch语句就会更加简单。


switch语法结构:

switch(整型表达式)

{

      case 整型常量表达式:

               语句;

        .......

代码1:

#include
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}
	return 0;
}

 

 为什么每个case的后面加上break,是因为在执行对应的case语句后,就跳出switch分支语句,如果没有加上break,那么程序会继续执行后面的case语句,只要再次遇见break语句为止,才跳出switch分支语句。


代码2:

#include
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	}
	return 0;
}

 

 如果几个case对应的结果都是一样的,如上代码所示,那么这个时候就不用每个case都加上要执行的语句,只需要在对应结果相同的最后一个case后面加上要执行的语句即可。


代码3:

#include
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

 

 最后的defalut,其实是可以省略的,只不过如果当我们输入的数字在switch分支语句中,没有找到对应case的时候,可以打印一个输入错误作为提醒,当然了break不能少。


而且这个default语句可以放在分支语句中的任意位置,这个不影响代码的运行。



二 、循环语句  1、 while语句

不管是if语句还是switch语句,当条件满足的情况下,都只能执行一次。


但是很多时候我们知道同一件事情需要完成很多次,这个时候就要用到循环语句,首先介绍while语句。


while的语法结构:

while(表达式)

{

        循环语句;
}

表达式为真,则执行循环语句,循环一次后,第二次判断表达式的真假情况,直到循环到表达式为假的时候,就不再执行循环语句,这时候跳出循环。


 

用流程图表示如下:

 先说一下双目 *** 作符==和!=

==的意思是判断 *** 作符左边和右边是否相等,相等就为真,不相等就为假。


!=的意思是判断 *** 作符左边和右边是否不相等,不相等就为真,相等就为假。


break和continue后面和代码一起说更容易理解。


 

 

代码2:

#include
int main()
{
	int i = 0;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	}
	return 0;
}

 while循环语句中如果执行了break语句,那么就是会中止循环,这时候就跳出了循环。


如上代码所示,当循环到 i 等于5的时候,就会执行if后的break语句,所以代码运行的结果如上。


总结:break在while循环中的作用:

其实在循环中只要遇见break,就停止后期的所有循环,直到终止循环。


所以:while中的break是只用于永久终止循环的。


代码3:

 

总结:continue在while循环中的作用:

其实在循环中只要遇到continue,也就是本次循环中的continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。


 


2、for循环

对于循环语句来说,用的最多的是for循环,再就是while循环,用的最少的是do for

for语法结构

for(表达式1;表达式2;表达式3)

{

         循环语句;

}

表达式1为初始化部分,用于初始化循环变量的。


表达式2为条件判断部分,用于判断循环时候终止。


表达式3为调整部分,用于循环条件的调整。


注意:表达式之间用的分号 ;相隔。


 

 

 

for的循环流程图

 可以发现,在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改不够集中和方便。


所以,for循环的风格更好,for循环的使用频率也是最高的。


break和continue在for循环中

我们发现在for循环中也可以出现break和continue,他们的意义和while循环中是一样的,但是还是有些差异。


 

代码1:

#include
int main()
{
	int i = 0;
	//初始化 判断 调整
	for(i=1;i<=10;i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

 break在for和while循环的作用都是中止语句,跳出循环

通过for的循环流程图可知,一般进入for循环,先初始化,然后判断,判断为真,进入循环语句,然后进行调整,接着再进行判断......,直到判断出现为假,就跳出循环。


但是如果出现了break语句,并且执行了,那么和while循环一样,直接中止,并跳出循环。


代码2:

 

 

 

 对比这两段代码的运行结果就知道continue在for和while循环中有些差异。


continue在for和while循环中都是起到跳过本次循环后的代码语句。


在for循环中,当循环执行到表达式 i == 5 为真的时候,执行if后的continue语句,就会直接跳过后面的printf语句,所以不会打印5,然后就回到调整语句 i ++,这时i = 6,然后表达式 i ==5为假,就不会执行if后的continue语句,又开始执行printf语句,直到循环到判断语句i <=10为假,就跳出循环,所以代码结果是 1 2 3 4 6 7 8 9。


而在whlie语句中,我们在上面说了,会跳过在while循环中continue后的所有语句,所有运行结果可以看到 0 1 2 3 4,但是程序后一直死循环执行,直到程序奔溃。


代码3:

#include
int main()
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 3; j++)
		{
			printf("好");
		}
	}
}

 

 如代码运行结果所示,会打印出9个好。



3、 do...while

do...while循环用的最少,但是它也有自己的优点,那么就是循环语句至少会被执行一次。


因为用for和while循环,首先就是要进行判断语句,如果为假,那么循环语句一次都运行不了。


而do...while不一样,它将判断语句放在了while的后面,所以循环语句至少可以被执行一次。


do...while的语法结构

do

{

         循环语句;

}while(表达式);

do...while的循环流程图

 

代码1:

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

 可以看出,首先运行一次循环语句,然后进行判断语句,循环到直到判断语句为假。


代码2:

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

 

 

 

 

编译打印的结果是
1 2 3 4 (但是后面代码会一 直循环,只是不再打印)
当打印了1 234后,这是i=5,然后来到if的判断语句,i== 5为真,执行continue,所以在do后面接的循环语句printf和i+ +语句不再执行,然后来到whlie里的判断语句, i<=10为真,继续来到do后的语句,此时i=5,因为一直在循环里,同理,就一直以i=5循环。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存