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 中的几乎一模一样

相关推荐
q567315231 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
许野平26 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
也无晴也无风雨29 分钟前
在JS中, 0 == [0] 吗
开发语言·javascript
狂奔solar38 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
朱一头zcy1 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射