C语言 分支和循环

在C语言里,支持三种结构,分别是选择,顺序和循环结构,顺序结构简单明了,一步步的从上到下,从左到右走完全程即可。分支和循环结构就比较复杂,接下来将介绍一下这两种结构。

一,分支语句

分支语句又分为if-else语句和switch-case语句

1.if-else

if-else的基本语法为
if(表达式)
{
代码块1
}
else
{
代码块2
}
表达式的值为非零,执行代码块1,表达式的值零,执行代码块2.

或者

if(表达式1)
{
代码块1
}
else if(表达式2)
{
代码块2
}
else
{
代码块3
}

表达式1的值为非零,执行代码块1,表达式的值零,则执行表达式2,如果表达式2的值为非零,则执行代码块2,否则执行代码块3。多个判断时可以使用多次的if-else语句下面会有代码演示加深理解,也可以使用(||)或者(&&)操作符来简化代码。

先看一个简单的代码

int main()
{
	int Money = 0;
	scanf("%d", &Money );
	if (Money > 15000)
	{
		printf("工资偏高");
	}
	return 0;
}

代码内容让我们输入一个数,判断工资的高低,这里if后面的(Money>15000)是一个表达式,表达式的值为0,则if后面的语句(即花括号内的打印语句)不执行,表达式的值为非0,则执行if后面的语句。那如果输入的数是小于等于15000,则什么都不执行,如果要执行,则可以使用else语句

代码如下

int main()
{
	int Money = 0;
	scanf("%d", &Money);
	if (Money > 15000)
	{
		printf("工资偏高");
	}
	else
	{
		printf("工资不是特别高");
	}
}

这时输入的数无论大于还是小于等于15000,屏幕上都会打印一条语句,具体看输入的数的大小

if-case语句支持嵌套,如下,多层嵌套也可以

int main()
{
	int age = 18;
	int height = 175;
	if (age >= 18)              //判断年龄
	{
		if (height >= 180)      //判断身高
		{
			printf("被录取了");         //身高和年龄都符合才打印
		}
		else
		{
			printf("没有拿到offer");
		}
	}
	return 0; 
}

if和else语句默认只执行后面的第一句话,如果需要执行多个语句,则需要用花括号括起来。

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)              
		printf("未成年");
	printf("不可以恋爱");


	if (age > 18)
	{
		printf("成年了");
		printf("可以谈恋爱");
	}
	return 0;
}

对于这个代码,如果输入的是15,第一个if会打印一句未成年,但是不可以恋爱也会打印,因为这句是不受if的限制的,而第二个if,下面的两句话都不会打印,因为它们被花括号括起来了

当有多个if时,else会和距离自己最近的而且未和else匹配的if匹配。

int main()
{
	int a = 10;
	int b = 5;
	if(a>5)
		if (b < 2)            
		{
			printf("A");
		}
		else
		{
			printf("B");
		}
	return 0;
}

这个代码里的else是和第二个if匹配,打印的结果为B

2.switch-case

如果当我们需要通过输入的数字判断星期几的时候用if-else语句就会显得麻烦,
这时候用switch-case语句会更合适

int main()
{
	unsigned int day= 0;
	scanf("%d", &day);
	if (day == 1)
	{
		printf("星期一");
	}
	else if (day == 2)
	{
		printf("星期二");
	}
	else if (day == 3)
	{
		printf("星期三");
	}
	else if (day == 4)
	{
		printf("星期四");
	}
	else if (day == 5)
	{
	    printf("星期五");
	}
	return 0;
}

这样写可以实现我们的目的,但是可以看到,代码太过于繁琐,因此当出现多种情况的时候可以选择switch-case语句

首先,switch-case的语法为
switch(整形表达式)
{
case 整形常量表达式1 : 语句;
case 整形常量表达式2 : 语句;
case 整形常量表达式3 : 语句;
case 整形常量表达式4 : 语句;
default :语句;break;
}
其中case后面的整形常量表达式的值不能相同,在后面的冒号不能漏,如果整形表达式的值等于case后面整形常量表达式的值,那么就执行对应的语句。
都不是,则执行default后的语句;

将上面的代码实现后如下

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:printf("周一"); break;
	case 2:printf("周二"); break;
	case 3:printf("周三"); break;
	case 4:printf("周四"); break;
	case 5:printf("周五"); break;
	case 6:printf("周六"); break;
	case 7:printf("周日"); break;
	default:printf("输入错误"); break;
	}
	return 0;
}

可以看出,代码简化了一些,但是不是很多,每一句的打印语句后都加了一个break,break的意思的跳出,打破,跳出这个switch,不执行后面的语句。如果没有break,这里用一个代码说明break的作用

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:printf("周内"); break;
	case 6:
	case 7:printf("周末"); break;
	default:printf("输入错误"); break;
	}
	return 0;
}

这里当输入的是1~5时,都会打印周内,如果day的值等于case后面的常量,则会一直向下执行,知道遇到break才会跳出switch停止。分支语句就到此为止啦,接下来就介绍循环语句。

二,循环语句

在生活中很多事都是一个循环的过程,比如每一天的工作或者学习,在计算机里面该怎么实现循环呢,接下来就为大家介绍一下。

1.for循环

for循环的语法为
for(表达式1;表达式2;表达式3)
{

  代码块

}
表达式1为初始化一个变量,表达式2为判断语句,判断是否要继续循环,也可以认为是终止循环的条件,表达式3作用是调整变量的大小。这三个表达式可以省略,但是不建议初学者省略,可能造成一些问题。

简单看一个代码

int main()
{
	int i = 0;
	for (; i < 10; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 0; i < 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

两个循环打印的值是一样的,拿第二个循环来解释for的循环机理,i=0,先和表达式2比较,0<10,则执行循环体,打印0,在调整i的值,之后在和表达式2进行比较,如果为真,继续执行循环体,打印1,在调整,在比较,直到比较的结果为假,则终止循环。

如果想要提前结束循环也是可以的,C语言提供了一个break关键字,在switch-case语句中,是用来跳出switch语句,在循环里,它的作用是跳出循环,

还是上面的代码,进行稍加改造

int main()
{
	int i = 0;
	for (; i < 10;i++ )
	{
		if (i == 4)
		{
			break;
		}
		printf("%d ", i);
	}	
	return 0;
}

打印结果是0 1 2 3 当i==4时,为真,执行break,跳出循环,这就是break在for循环中的作用

如果我要在屏幕上打印10以内的奇数,该怎么写代码呢

int main()
{
	int i = 1;
	for (; i < 10; i += 2)
	{
		printf("%d ", i);
	}
	printf("\n");

	for (i = 1; i < 10; i++)
	{
		if (i % 2 == 0)
		{
			continue;
		}
		printf("%d ", i);
	}
	return 0;
}

方法一
奇数1,3,5,7,9 所以初始化变量为1,10以内,所以判断语句为i<10,相差2,所以调整语句为i+=2

方法二
打印奇数,那就是不打印偶数,使用if(i%2==0)语句来判断偶数,如果是偶数,那么就continue,continue的作用是终止本次循环,即此次循环后的代码不执行,在这个代码里,就是偶数就不打印,奇数就打印。

break和continue在for循环的作用不同,前者直接终止循环,后者终止此次循环。

关于for就介绍到这里吧,

2.while循环

while循环的语法为
while(表达式)
{
循环体
}
表达式为判断语句,表达式为真则循环,为假则不循环

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

和for循环一样,需要对循环变量初始化,否则它是随机值,也需要一个调整变量大小的表达式,如上的i++;介绍for循环时提到可以省略一些表达式,代码如下

int main()
{
	int i = 0;
	while (i < 10)
	{
		printf("%d ", i);
		i++;
	}
	printf("\n");

	i = 0;
	for (; i < 10;)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}

可以看到,虽然一个是for循环,一个while循环,但代码很相似,将for的两个表达式写开,就得到了一个while循环,所以这两个循环可以互相转化,for循环能实现的while循环也能。
同样,break语句和continue语句在while循环里作用也是彻底终止循环和终止此次循环

3.do-while循环

最后结束do-while循环
它的语法和前面两个不同,大致为
do{
循环体
}while(表达式);

与前面的循环不一样的是do-while循环至少做一次,而且最后的分号不能漏掉,for和while
可以一次都不循环,最后的分号不能漏掉。循环的机理大致是:执行循环体->判断表达式的值,值为真,继续循环,值为假,终止循环。这也是为什么它至少循环一次的原因,因为它是先循环一次后在判断。

看一个简单代码

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

在do-while循环中,break语句和continue语句的作用依旧是彻底终止循环和终止此次循环。

int main()
{
	int i = 0;
	do
	{
		printf("%d ", i);
		if (i == 5)
		{
			break;
		}
		i++;
	} while (i < 10);
	printf("\n");
	   i = 0;
	do
	{
		printf("%d ", i);
		if (i == 5)
		{
			continue;
		}
		i++;
	} while (i < 10);
}

第一个循环,打印的值为0 1 2 3 4 5
遇到break语句后,直接终止循环

第二个循环,打印的值为0 1 2 3 4 然后死循环的打印5 5 5 5 5 5…
遇到continue语句后不执行后面的语句,即变量没有办法进行调整大小,一直都是5,所以死循环的打印5
由于do-while至少执行一次这个特性,所以实际中需要对不同情况选择不同循环。

关于分支和循环语句的介绍,就到这里啦!

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值