C语言分支和循环(2)

我的相关博客:

C语言的分支与循环(1)

1.switch语句

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

复制代码
switch (expression)
{
case value1:
	statement1;
    break;
case value2:
	statement2;
    break;
default: 
    statement3;
    break;
}

上面代码中,value1,value2对应的是expression的值,如果expression的值符合 value1,则进入statement1,执行其中的语句,紧接着遇到break,退出这个switch

如果expression的值符合value2,则进入statement2,执行其中的语句,紧接着遇到break,退出这个switch

而上面的default,指的是value1、和value2以外的所有情况,都会进入statement3,执行其中的语句

注意:

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

2.if语句和switch语句的对比

实例::输⼊任意⼀个整数值,计算除2之后的余数

使用if语句时:

复制代码
int n = 0;
scanf("%d", &n);
if (n % 2 == 0)
	printf("整除,余数为0\n");
else
	printf("余数是1\n");

而使用switch语句改写,则:

复制代码
int n = 0;
scanf("%d", &n);
switch (n % 2)
{
case 0:
	printf("整除,余数为0\n");
	break;
case 1:
	printf("余数是1\n");
	break;
}

需要注意的是:

case和后边的数字之间必须有空格

每⼀个 case 语句中的代码执⾏完成后,需要加上break ,才能跳出这个switch语句

3.switch中的break

switch中的break非常重要,是正确跳出switch的关键

如果没有break,则执行相应的一条语句后,对之后的每一个case中的语句都会执行

如下面这个例子:

复制代码
printf("输入1~7的数字,打印星期几\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
	printf("星期一\n");
case 2:
	printf("星期二\n");
case 3:
	printf("星期三\n");
case 4:
	printf("星期四\n");
case 5:
	printf("星期五\n");
case 6:
	printf("星期六\n");
case 7:
	printf("星期天\n");
default:
	printf("输入错误\n");
}

输入:2
输出 :

如果要实现正确的功能,需要给加上 break,正确的代码为:

复制代码
printf("输入1~7的数字,打印星期几\n");
int n = 0;
scanf("%d", &n);
switch (n)
{
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;
default:
	printf("输入错误\n");
	break;
}

当然,我们也可以依此实现一些功能,如下面这个代码:

输入1-5,输出:工作日

输入6-7,输出:休息日

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

4.switch语句中的default

在switch语句中,default归纳为 除了case之外的所有情况

满足这个条件就会进入default中,default可以理解为:非目标值,或者无用值

关于default与case,不需要考虑顺序,可以case在前,也可以default在前,不影响代码效果的实现,一般习惯将default放在最后

5.循环

C语言提供了3种循环,分别是:for循环、while循环、do-while循环

5.1for循环

for(语句1;语句2;语句3)

{

语句4;

}

for循环的小括号里面有3条语句 ,部分语句可以为空,但是必须有两个分号

一次循环语句的执行顺序为:

语句1------>语句2------>语句4------>语句3

如果语句循环多次,执行的顺序为:

语句1------>语句2------>语句4------>语句3------>语句1------>语句2------>语句4......

(语句1 ,2,4,3...1,2,4,3的循环)

这个执行顺序是固定的,根据这个逻辑,可以完成大量的循环运算

实例:计算1到10相加的和

复制代码
int sum = 0;
for (int i = 1; i <= 10; i++)
{
	sum = sum + i;
}
printf("相加的和为%d", sum);

运行结果:

相加的和为55

上面循环停止的关键在于 i <= 10 ,所以语句2一般是循环停止的条件

实例:打印1到10

复制代码
for (int i = 1; i <= 10; i++)
{
	printf("%d ", i);
}

运行结果:

1 2 3 4 5 6 7 8 9 10

5.2while循环

while 循环的语法结构 和 if 非常相似

if(表达式)

{

语句;

}
while(表达式)

{

语句;

}

while循环的执行顺序为:表达式------>语句------>表达式------>语句------>......

⾸先上来就是执⾏判断表达式,若表达式的值为0,循环直接结束

表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次循环语句

实例:计算1到10相加的和(可与上面的for循环对比)

复制代码
int sum = 0;
int i = 1;
while (i <= 10)
{
	sum = sum + i;
	i++;
}
printf("和为%d\n", sum);

运行结果:

和为55

while循环和for循环对比:

while与for循环都有:初始化、判断,和调整这三个部分,但是for循环⾮常集中,便于代码的维护

5.3do while循环

do while语句的使用较少,语法是:

do

{

语句;

}while(表达式)

do while循环和while循环非常相似,只是先执行了一次语句,再判断表达式是否成立

因此,即使表达式不成立,也会先执行一次语句(与C语言的代码,从上往下执行相对应)

如:

复制代码
int n = 0;
do
{
	printf("执行\n");
} while (n);

运行结果:

执行

6.break和continue

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象

C语⾔中提供了 break 和 continue 两个关键字,就是应用到循环来终止的

6.1while循环中的break和continue

先看一个实例:

1.break

复制代码
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

运行结果:1 2 3 4

2.continue

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

运行结果:1 2 3 4 (死循环)
上面代码中的if没有使用花括号{ },只能控制一条语句,即break,或者continue,而之后的代码不受if的控制

通过对比,不难看出, while 中的 break 跳过相应的while整个循环

而 while 中的 continue 只是跳过本次循环,也跳过了i = i + 1这条语句,因此,i一直停留在4,陷入死循环

6.2for循环中的break和continue

1.break

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

这里break的含义是跳过for循环,因此,运行结果与while中的break相同

运行结果:1 2 3 4

2.continue

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

运行结果:1 2 3 4 6 7 8 9 10

这里的continue和while中的continue相同,跳过本次循环,但是由于i++还是会执行

所以 i 可以继续自增,往后执行

6.3do while中的break和continue

do while中的 break 和 continue 与 while 中的几乎一模一样

相关推荐
isyangli_blog3 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008113 小时前
FastAPI APIRouter
开发语言·python
Benszen3 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木3 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充3 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~3 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6164 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草4 小时前
反射、Tomcat执行
java·开发语言
雪的季节5 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt