它⽤于判断条件有多个结果的情况。
根据表达式 不同的值,执行相应的 case 分支
。如果找不到对应的值,就执行default 分支
。
形式如下:
switch (表达式)
{
case value 1: statement
break;
case value 2:statement
break;
default:statement
break;
}
根据表达式不同的值,执行相应的case
分支,如果找不到对应的值,就执行default
分支。
switch
后面的表达式必须是整形表达式;case
后面的值必须是整形常量表达式
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
。
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;
}
将会有下面的结果:
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;
}
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;
}
switch
中的break
和default
的顺序问题在 switch 语句
中 case
语句和default
语句是没有顺序要求的,只要逻辑没有问题,不会影响最后的输出结果,只不过通常我们把default
语句放在最后处理。
while
形式:
while (表达式)
语句;// 多条语句时,可以用上大括号{}
if
和while
的差别举个例子,看看他们输出的差异:
# include
int main()
{
int a = 1;
if (a == 1)
printf("lalala\n");
return 0;
}
# include
int main()
{
int a = 1;
while (a == 1)
printf("lalala\n");
return 0;
}
从上面的比较就可以看出:当while
后边的条件满足,死循环的打印lalala
;if
后边条件满足,打印⼀次lalala
。
while
语句的执行流程: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;
}
for
循环for(表达式1;表达式2;表达式3)
语句;
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
while
和for
循环的对比