分支语句
1.if语句
if(表达式);if语句默认只会控制一条语句
要控制多条语句需要加{}
表达式是用来判断if控制的语句是否执行
if else
if(表达式)
语句1;else
语句2;
此时成为选择当表达式条件成立时执行语句1 表示式条件不成立是执行语句2
if else 嵌套
if(表达式1)
语句1;else
if(表达式2)
语句3;else
语句4;
此时成为选择当表达式条件成立时执行语句1 表示式条件不成立时判断表达式2,表达式2成立执行语句3表达式2不成立执行语句4
if(表达式1)
if(表达式2)
语句1;else
语句2;
if表达式2相当于if表达式1所控制的语句
当表达式1不成立时不会执行if表达式2 当表达式1成立时执行判断表达式2 表达式2成立执行语句1
表达式2不成立执行语句2
if(表达式1)
{
if(表达式2)
语句1;
else
语句2;
}
判断表达式1 表达式1成立执行判断表达式2 执行语句1 表达式2不成立执行语句2 若表达式1不成立则会直接结束
悬空else问题
if(表达式1)
if(表达式2)
语句1;
else 语句2;
if(表达式1)
{if(表达式2)
语句1;else 语句2;
}
这两个例子是等价的 在判断表达式1不成立直接结束 表达式1成立则执行判断表达式2 表达式2成立执行语句1 表达式2不成立执行语句2 其中else 和if 会寻找最相近的对方进行匹配 要解决else悬空就要用到{}把需要的内容括起来
在if else 语句时 无论是否只控制一条语句都用{}括起来 这样可以增加代码的可读性
2.关系操作符
关系操作符用于比较大小 关系表达式的结果只有0和1
if中 非0为真 0为假
a=5;这是赋值 a==5; 这是判断
左操作必须为可修改值 因此表达式判断上将左侧写成常量较保险
例如 5==a 这样可以防止写成5=a
多个操作符不宜连用
例子(x<y<z)从左向右进行计算 x<y会返回0或1 是0或1在与z进行比较大小
正确的写法 (x<y&&y<z)
条件操作符也叫三目操作符
(exp1?exp2;exp3)表达式1为真 进行表达式2 并将2作为结果
若表达式1判断为假 进行表达式3 并将3作为结果
逻辑操作符:! && ||
短路
逻辑运算求值总是先对左侧表达式求值 再对右侧求值 若左边满足就能的到结果这时就不会在判断右边是否为真 这就叫短路
例子:if(month>=3&&month<=5)若month小于3则&&左侧判断是假的此时就能确定整个表达式结果 无需在判断右侧
Switch语句
根据表达式得到值 进入不同的case分支执行对应语句 找不到执行default分支
Switch后表达式必须是整形表达式 case后必须是整形常数表达式
break用于停止
例子
swtich(n+1)
{
case 1:语句1;
case 2:语句2;
case 3:语句3;break;
case 4:语句4;
}
}当n=0时表达式等于1将会进入case1中执行语句1由于没有break 不会停止会接着进入case2中执行语句2 再进入case3中执行语句3当遇到break时就会停止 因此在只选择一个分支时最好在每个分支下面都加上break
swtich(n+1)
{
case 1:语句1;break;
case 2:语句2;break;
case3 :语句3;break;
case 4:语句4;break;
}
case中可以是空的 且顺序不一定是按12345default排着 按照具体情况实现
前面说Switch后表达式必须是整型表达式
但字符也可以放在Switch后面 因为字符用ascll码值储存 ascll码值是整型 字符属于整型家族
3.循环结构
while(表达式)
{
语句;
}
表达式是判断while循环是否继续进行的条件 若满足则继续循环若不满足则停止循环
for循环
for(初始化;判断表达式;调整)
{
语句
}
for中的第一个表达式初始化只会执行一次
调整语句则会在每次循环结束后执行再进行判断表达式
for循环三部分集中 便于代码优化维护 for循环相较while do while更优一点
do while 先执行后判断 循环体至少会先执行一次
do
{
语句;
}while(表达式);