选择结构
来源:互联网 发布:杭州程序员招聘网站 编辑:程序博客网 时间:2024/05/17 05:57
1. if else 语句
多用来实现双分支选择结构。
if 语句的一般形式:
if (表达式)语句1; //语句末尾必须有分号
else 语句2;
其中表达式可为个关系表达式、逻辑表达式和数值表达式。
if 语句的衍生形式:
(1) if (表达式)
{ 语句1; }(2) if (表达式)
{ 语句1; }
else
{ 语句2; }(3) if (表达式1)
{ 语句1; }
else if (表达式2)
{ 语句2; }
else if (表达式3)
{ 语句3; }
··· ···
else if (表达式n)
{ 语句n; }
else { 语句n+1; }
if选择结构的嵌套:
if ()
{
if () { 语句1 }
else { 语句2 }
}
else
{
if () { 语句3 }
else { 语句4 }
}
2. switch 语句
switch语句的一般形式:
switch(表达式)
{
case 常量1:语句1
case 常量2:语句2
··· ··· ···
case 常量n:语句n
default: 语句n+1
}
(1)switch后面括号内的表达式,其值的类型应为整数类型。
(2)switch下面的花括号内是一个复合语句,case后面跟一个常量或常量表达式
(3)各个case标号出现的次序不影响执行结果。例如,可以先出现default,再出现case。
(4)每一个case常量必须互不相同,多个case标号可共用一组执行语句。
(5)一般在执行一个case语句后,应当用break语句使流程跳出switch,即终止switch语句的执行。
3. if 与 switch 的区别
switch···case与if···else的根本区别在于,switch···case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch···case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
具体地说,switch···case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。
当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if···else是遍历所以得可能值,知道找到符合条件的分支。如此看来,switch的效率确实比ifelse要高的多。
switch…case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得很低。
switch···case只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch…case来处理的。所以,switch只能是在常量选择分支时比if···else效率高,但是if···else能应用于更多的场合,if···else比较灵活。
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 结构选择
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 升级10.12后使用CocoaPod出现-bash: pod: command not found 解决办法
- 【LeetCode】167. Two Sum II
- 两个有序序列的中位数(二分搜索)
- [leetcode] 35. Search Insert Position
- Maximum Subarray-LeetCode JavaScript
- 选择结构
- 1191: 【蟠桃记】
- 独木舟上的旅行
- Max Consecutive Ones
- 在Win7下如何自动加载虚拟磁盘VHD文件
- linux 免登录以及配置别名登录
- 问题 C: 活了多少秒
- PHP 正则表达式
- TP5 提示 A non well formed numeric value encountered