C语言分支循环语句详解

本文详细介绍了C语言中的分支和循环语句,包括if-else、switch、while、for循环,以及break和continue的关键字用法,帮助读者理解和掌握编程中的控制流结构。
摘要由CSDN通过智能技术生成

分支和循环语句是什么

在我们写程序的时候,总会遇到想一直循环执行某种语句的时候,这时候我们就要使用一种语句叫循环语句,或者带一些判断条件的语句,在C语言中提供了像这些的循环语句和分支语句

if else 语句

这是一种判断语句,他的格式如下

if(判断条件)
{
程序内容
}
 else if(判断条件)//另一种情况
{
程序内容
}
else//最后一种情况
{
程序内容
}

首先进入if语句如果条件为真那么就执行if语句里面的内容,如果为假就看看else if如果这里为真就执行else if里面的语句,如果这里为假就直接进入最后一种情况else语句里面

注意:如果if ,else if ,else下面只有一条语句则不用打括号,如果有2条以上的语句(包括两条)就必须要打大括号,但这里建议不管几条都可以打上大括号,这样也方便阅读代码行与行之间隔的更开。这里的第二个else 后面的if与最后一个else形成了一个嵌套if语句。有了嵌套if语句就可以完成我们更加复杂的条件判断

我们来举一个例子;

# define _CRT_SECURE_NO_WARNINGS
# include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 10)
	{
		printf("儿童\n");
	}
	else if (age < 18)
	{
		printf("青年\n");
	}
	else
	{
		printf("成年\n");
	}
	return 0;
}

这里就运用了判断条件来判断输入的年龄是儿童还是青年或者是成年

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

下面来再来看一个代码

# include<stdio.h>
int main()
{
	int a = 3;
	if (a > 5)
	   if (a > 2)
		printf("hehe\n");
	else
		printf("hello\n");

	return 0;
}

这里我们会产生一个误解首先看第一个判断条件不成立,然后就看第二个else成立让后打印hello,但我们运行程序之后就会发现什么都没有打印出来,这是为什么呢,那是因为在这里我们排版的时候让else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印hello,但实际上但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。所以遇到这种情况我们可以这样记忆

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

改成这样就行了

# include<stdio.h>
int main()
{
	int a = 3;
	if (a > 5)
	{
		if (a > 2)
		{
			printf("hehe\n");
		}
		else
		{
			printf("hello\n");
		}
	}
	return 0;
}

这里就也说明了打大括号的好处在哪里

switch选择语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
他的格式是这样的

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注意

switch 后的 expression 必须是整型表达式
•case 后的值,必须是整形常量表达式

我们写一个代码看看

# include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		printf("hehe\n");
		break;
	case 2:
		printf("haha\n");
		break;
	}
	return 0;
}

这里我们用switch来判断n输入的值,如果是1就打印hehe,如果是2就打印haha,如果我们不在每个case后面输入break会怎么样呢,下面来看看
在这里插入图片描述

最终会变成这个样子这是为什么呢?原因是
switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。
所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

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

这段代码我们就没有在每个case后面使用break,照样完成我们判断日期是工作日还是休息日。
switch语句中的default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default ⼦句。
格式是这样的

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
 }

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。
我们还是拿上面的代码来稍作调整

#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1case 2:
 case 3:
 case 4:
 case 5:
 printf("⼯作⽇\n");
 break;
 case 6:
 case 7:
 printf("休息⽇\n");
 break;
 default:
 printf("输⼊错误,请重新输入\n");
 break;
 }
 return 0;
 }

switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。根据个人情况来看

while循环

和前面两个语句相比这个就不一样了这个就不是选择语句而是循环语句了C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句,while 语句的语法结构和 if 语句⾮常相似。

while(表达式)
 语句;//如果循环体想包含更多的语句,可以加上⼤括号

我们来看看while语句到底是怎么用的,来画一个图看看
在这里插入图片描述

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
下面我们来写一个程序看看;

# include<stdio.h>
int main()
{
	int n = 0;
	while (n <= 10)
	{
		printf("%d ", n);
		n++;
    }
	return 0;
}

这里我们用while循环来打印出0到10的数字
同样我们也可以写一个判断一个数是几位数的程序

#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 while(n)//当n不等于0时
  {
 printf("%d ", n%10);
 n /= 10;
 }
 return 0;
 }

for循环

他的语句是这样的

 for(表达式1; 表达式2; 表达式3)
 语句;//如果循环体想包含更多的语句,可以加上⼤括号

表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

下面我们画个图看看
在这里插入图片描述
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果
==0(为假),则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环
我们来实践一下

# include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

while和for的比较
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形
式上 for 循环要更优⼀些。

do while 循环

在循环语句中 do while 语句的使⽤最少,它的语法如下:

do
 语句;
while(表达式)

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
在这里插入图片描述
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是真!,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。
我们来试试看
在屏幕上打印出0到10的值

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

break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中
提供了 break 和 continue 两个关键字,就是应该到循环中的。
1,break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
2, continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

while循环中的break和continue

break举例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 9)
			break;//当i等于9后,就执⾏break,循环就终⽌了就打印到8就结束了.
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

在这里插入图片描述
打印了1,2,3,4,5,6,7,8后,当i等于9的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
continue运用举例
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏
下⼀次循环的判断。
上⾯的代码,如果把 break 换成 continue 会是什么结果呢?

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 9)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

这点的continue当i = 9时就会跳过后面的i+1部分直接又来判断i==9又为真有跳过后面的内容这样i+1就一直到不了,就会陷入死循环。

for循环中的break和continue

break举例

#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 6)
 break;
 printf("%d ", i);
 }
 return 0;
 }

在这里插入图片描述
continue举例

#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 6)
 continue;
 printf("%d ", i);
 }
 return 0;
 }

在这里插入图片描述
这里我们发现这里和while的情况截然不同,那是由于我们while是无法进入到循环调整部分,而for却可以。

所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。

do while循环中的break和continue

这里的使用情况和while里面是一模一样的,可以自行调用上面的while程序进行调试看看。

#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 if(i == 7)
 break;
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 if(i == 7)
 continue;
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 return 0;
 }

通过上面的循环讲解,我们要学会合理的使用他这样可以达到事半功倍的效果!
如果本文有错误,欢迎指正!

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值