一、if语句
if ( ),括号里面 0 为假,非 0 为真。
注意:if 和 else 后面默认只能跟一条语句,如果需要跟多条语句需要放到代码块里面,即放到一个大括号里面,作为初学者尽管后面只是跟一条语句也建议尽量加上 { } ,这样也可以提升代码的易读性;
if 语句可以嵌套使用;
注:else 总是和最接近的 if 相匹配,不要看对齐来判断!如下图,很多初学者以为会输出“haha”,但是实际上什么都没有输出,因为else是跟着if (b == 2)的。
二、switch语句
switch(exp) {case value1: statement1; break; case value1: statement1; break; default: statement; break;}
注:exp位置必须是整型表达式,打括号里面case后面的value只能是整型常量表达式,字符也可以,因为字符本质是以ascii码值的形式储存的;每一句后面的break一定不要忘记!否则会顺序输出入口case后面所有语句。
如果所有case都无法匹配,走default,尽量不要让程序没有反馈;
如果多个case value: 都是一个statement,只需要在最后一个case后面写上 statement 就好:
还有,switch 语句中 case 与 default 没有顺序,但是 default 一般放在后面;嵌套 switch 语句中的 break 只能跳一层,看是在哪个打括号里面。
三、while语句
while ( ) { }:语法与 if 语句类似,循环变量初始化、判断、调整三个部分是控制循环非常重要的三个环节,但是while语句里面对这三个部分比较分散。
四、for语句
针对while语句的缺点设计出来的,for (exp1 ; exp2 ; exp3),exp1:初始化,exp2:判断,exp3:调整,注意for循环的初始化部分只被执行以此,但是如果有for循环的嵌套,内层for循环会随着外层for循环每一次都会初始化。
注:关于 for(int i = 1; i <= 10; i++) 与 for(int i = 1; i <= 10; ++i) 的区别,++i仅在C++语言的自定义类型上效率更高,其余情况下完全一样。
for循环将控制循环最重要的三个部分集中放到一起,便于对一个循环的观察和调控。
五、do-while语句
do {语句} while (表达式);
特点:循环体至少执行一次,使用的机会较少一些。但是在某些地方,对循环体必须执行一次的场合可以使用。
六、关系、条件、逻辑操作符
1、关系操作符(6个)
==、!=、>、>=、<、<=,关系表达式若为真,返回值为1;若为假,返回值为0;
注:多个操作符不能连用,需要使用逻辑操作符做连接!
2、条件操作符(三目操作符)
exp1 ? exp2 : exp3:如果 exp1 表达式值为真,执行表达式2,否则执行表达式3
在某些情况下简化了 if 语句,但是注意不要写的太复杂。
3、逻辑操作符
! (逻辑取反):改变单个表达式真假,将 非0 --> 0,0 --> 1;可以使用 if ( !flag )这样的形式来简化某些代码;
&&(逻辑与):“全真才真,一假即假”;可以类比串联,只要有一个断路灯就不亮了;
||(逻辑或):“全假才假,一真即真”;可以类比并联,只要还有一条通路,灯就还会亮;
注:短路——如果左边表达式满足逻辑运算符条件,就不再对右边表达式求值。可以看见下面两图,同时也不要忘记后置++是先赋值,后+1;我们看到a = 0的时候,只执行了a++这一个表达式就结束了,这是因为 “一假即假” 无须在进行判断就能判断整个逻辑表达式的值为假,也就不执行了。逻辑或的短路与逻辑与是类似的,这里就不详述了,供读者思考。
七、break、continue 和 goto
break:永久种植循环;如下面在判断质数时使用break可以很好的减少循环次数;
continue:跳过本次循环continue后面的代码,直接去判断部分,看是否进行下一次判断;使用时注意调整循环变量的变化,不要导致循环体死循环了,如下面的代码;
goto:常用于跳出多层循环,比break更加快捷,如下面的情况。但是如果使用不当,会导致在函数内部随意乱跳转,打乱程序的执行流程,建议能不用尽量不去使用。