为什么需要分支语句?
分支语句形似一条河流,河流在交叉口会有许多分支,在程序执行的过程中亦是,程序是根据人的需求来编写的,程序由一条条的语句组合成,每条语句中间出产生某种必然的逻辑关系,单个的语法无法完成要执行的命令,这时就需要分不同的情况来讨论程序执行的下一步。
C语言中三大分支语句
1.1 switch表达式后和case常量表达式必须是是整型或者枚举型
二、switch语句
1.基础语句
程序出现的分支情况较多,若用if,else if,else进行各个情况的编写时,代码看起来并不是那么舒适,而switch语句根据需求者的不同需求执行对应的代码块。它根据表达式中规定的数值,与各个case标签进行比较,如果相匹配则执行对应的代码块。
- 在一个 switch 中可以有任意数量的 case 语句,每个 case 后跟一个要比较的值和一个冒号。
- case 之后的常量值类型必须与switch 中的变量具有相同的数据类型
- switch语句可以包含一个可选的default标签,用于处理所有情况都不匹配的情况。
switch(整型常量表达式)
{
case 常量1:语句列表1;
case 常量2:
语句列表2;
}
1.1 switch表达式后和case常量表达式必须是是整型或者枚举型
下图代码中switch后跟的是浮点型数值,编译代码时将会出错,
1.2 case后面必须跟整型常量表达式
注意!注意!注意! 下图代码中第10行case后面跟的是int型的一个变量,编译时报错:
[Error] the value of 'n' is not usable in a constant expression
case后面一定跟的是常量!
1.3 break语句的作用
当程序进行到switch语句时,会根据switch后面记录的整型表达式的值,然后与case后面的常量进行匹配,当被输入的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句,switch分支语句结束。
#include<stdio.h>
int main()
{
int wage;
printf("工资这周几发放:");
scanf("%d",&wage);
switch(wage)
{
case 1:
printf("周一\n");
// break;
case 2:
printf("周二\n");
// break;
case 3:
printf("周三\n");
// break;
}
return 0;
}
以上的代码中的break被注释掉了,当被输入的变量等于 case 中的常量时,程序会连带把之后case中的语句执行,直到整个switch语句结束。而当在匹配成功的case语句下的代码块中遇到 break 语句时,switch 将会终止,控制流将跳转到 switch 语句后的下一行。不是每一个case语句中都需要包含 break。如果 case 语句不包含 break,控制流将会继续后续的 case,直到遇到 break 为止。
1.4 default语句的作用
当case后的常量跟switch后面的表达式值都不匹配的时候,就说明输入的值可能存在问题,那么default语句这时就会被执行,起到一个提示的作用。default语句也可以放在 switch代码块的前面、中间,但一般按习惯来说是放在最后。
2. 小练习
请计算m,n的值?
#include<stdio.h>
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1: m++;
case 2: n++;
case 3:
switch(n)
{
case 1: n++;
case 2:
m++;
n++;
break;
}
case 4: m++;
break;
default:
break;
}
printf("m = %d, n = %d\n",m,n);
return 0;
}
大家可以将代码复制到自己的电脑上,运行结果,进行一步步的调试看看程序的执行过程是怎么样的,相信你会对switch分支语句有更深的理解!!!(偷偷告诉你们答案:m = 5, n = 3)
三、三目运算符
三目运算符又称条件运算符,条件运算符是一种简洁的条件判断和赋值语句。它的语法形式是
表达式1 ? 表达式2 : 表达式3,
其中表达式1是一个条件表达式,如果它的值为真,则执行并返回表达式2的值;否则执行并返回表达式3的值。
条件表达式通常用于赋值语句之中。例如:
if(a>b) max = a; else max = b;
可用条件表达式写为 max = (a>b)?a:b; 该语句的含义是:若a>b为真,则把a赋予max,否则把b 赋予max。
3、总结
最近在重新温习C语言,在B站大学跟着鹏哥学C,会记录下来学习的知识点,若有哪里不对的地方,请大家评论区给我留言,有什么好的学习建议也可以留言哈,我会慢慢改进的!!!