【分支和循环(三)】

一、switch 语句

它⽤于判断条件有多个结果的情况。

根据表达式 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行default 分支

形式如下:

switch (表达式)
{
    case value 1: statement
        break;
    case value 2:statement
        break;
    default:statement
        break;
}

根据表达式不同的值,执行相应的case分支,如果找不到对应的值,就执行default分支。

switch后面的表达式必须是整形表达式;case后面的值必须是整形常量表达式

1、if语句与switch语句的对比

例如输入一个整数,求除以4后的余数:

# include
int main()
{
	int a;
	scanf("%d", &a);
	if (a % 4 == 0)
		printf("余数是0\n");
	if (a % 4 == 1)
		printf("余数是1\n");
	else if (a % 4 == 2)
		printf("余数是2 \n");
	else
		printf("余数是 3 \n");
	return 0;
}

switch语句,这样写:

# include
int main()
{
	int a;
	scanf("%d", &a);
	switch (a % 4)
	{
	case 0:
		printf("余数是0\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2 \n");
		break;
	default:
		printf("余数是 3 \n");
		break;
	}
	return 0;
}

注意点:

1、 case与后面的数字一定要有空格

2、每一个case语句执行完后,后面要加上break,才能跳出switch语句,default后面也最好加上break

2、switch中的break

如果上面的代码我们不加是上break将会有不同的结果:

# include
int main()
{
	int a;
	scanf("%d", &a);
	switch (a % 4)
	{
	case 0:
		printf("余数是0\n");
	case 1:
		printf("余数是1\n");
	case 2:
		printf("余数是2 \n");
	default:
		printf("余数是 3 \n")}
	return 0;
}

将会有下面的结果:
【分支和循环(三)】_第1张图片
33除以4余数是1,可是打印出来的还有:余数是2、余数是3,原因是:

只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。

当然,不是所有case语句都要用break 要看实际情况。

例如,我们通常认为星期一到星期五是工作日,星期六和星期天是休息日:

# include 
int main()
{
	int i = 0;
	scanf("%d", &i);   //输入数字1~7,判断是工作日还是休息日
	switch (i)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	}
	return 0;
}

3、switch中的default

当我们遇到 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,就需要在switch 语句中加⼊default句子。

就比如我们还是像上面那个代码一样,但是上面代码case的情况只有1~7,如果用户不小心输入7以后的数字,我们就可以用到default提醒用户:

# include 
int main()
{
	int i = 0;
	scanf("%d", &i);   //输入数字1~7,判断是工作日还是休息日
	switch (i)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误,请输入数字1~7\n");
	}
	return 0;
}

4、switch中的breakdefault 的顺序问题

switch 语句case 语句和default语句是没有顺序要求的,只要逻辑没有问题,不会影响最后的输出结果,只不过通常我们把default语句放在最后处理。

二、循环语句之一 —— while

形式:

while (表达式)
   语句;// 多条语句时,可以用上大括号{}

1、ifwhile的差别

举个例子,看看他们输出的差异:

# include
int main()
{
	int a = 1;
	if (a == 1)
		printf("lalala\n");
	return 0;
}

【分支和循环(三)】_第2张图片

# include
int main()
{
	int a = 1;
	while (a == 1)
		printf("lalala\n");
	return 0;
}

【分支和循环(三)】_第3张图片

从上面的比较就可以看出:while后边的条件满足,死循环的打印lalalaif后边条件满足,打印⼀次lalala

2、附上图,看看while语句的执行流程:

【分支和循环(三)】_第4张图片

3、我们用while来个经典例题:输入一个四位数整数,要求逆序打印出该整数的每一位:

# include
int main()
{
	int a = 0;
	scanf("%d", &a);
	while (a)  //是指a不等于0,a等于0,就终止循环
	{
		printf("%d ", a % 10);   //开始输出整数的最后一位
			a = a / 10;
	}   //循环
	return 0;
}

【分支和循环(三)】_第5张图片

三、for循环

1、语法形式:

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

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

【分支和循环(三)】_第6张图片

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

2、whilefor循环的对比

例如要求输出1~10所有数字:
【分支和循环(三)】_第7张图片

【分支和循环(三)】_第8张图片
输出的结果都是:
在这里插入图片描述
从上可见for循环更优些。

你可能感兴趣的:(c语言)