switch为最直观的分支结构,其格式为 switch(表达式)->根据表达式的判断进入case条件入口。注意switch结构的特性:
1)允许嵌套(内嵌switch)
2)进入case后,按如无break或者continue语句,会按顺序执行所有case语句。
实例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
int day = 0;
scanf("%d", &day);//注意,此处的逻辑为取出day变量的地址,将输入值直接存放到该变量的地址内。
//python在此处可以直接通过函数给变量赋值,但c语言直接赋值的要求更严格。
switch (day)
{
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: //default语句可以帮助检测超出case范围的,即没有case入口的情况。
printf("输入错误\n");
break;
}
return 0;
}
以上语句中,break为跳出当前代码块,在循环中break作用更多,后面详叙。
有时我们需要在进入case语句后,执行后面所有的case语句,这时候我们习惯在最后一条case语句中加上break,以表达跳出此代码块终止执行所有swich分支语句的,方便后续更改case。
我们现在通过一个实例来表现switch语句的执行顺序:
上一个实例是通过输入数字,来达到打印星期的目的,现在我们想通过输入数字,来得到剩余工作日/休息日的目的,我们对上个代码做如下修改:
实例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
int day = 0; scanf("%d", &day);
switch (day)
{
case 1:
printf("工作日\n");
break;
printf("工作日\n");
case 3:
printf("工作日\n");
case 4:
printf("工作日\n");
case 5:
printf("工作日\n");
break;
case 6:
printf("休息日\n");
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
关于break在
switch(表达式)
{
case1:
case2:
。。。
}
break跳出的是switch代码块但对于if语句无影响,这与for循环中有所不同,在for循环中,break会直接跳出最近的一个循环结构代码块。
现在我们开始对while循环的理解,先上逻辑图:
实例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
int a = 0;
while (a <= 5)
{
printf("%d\n", a);
a++;
{
if (a == 5)
{
printf("到最终值5了!\n");
break;
}
}
}
printf("循环结束!\n");
return 0;
}
可以尝试删除其中几个代码块括号,尝试一下运行有什么不同。尤其是对于break语句,可以看出break是从哪一个代码块跳了出去。