二选一,if()...else...
if()...else... ()中为条件判断,()中的结果为bool变量。所以一般用关系运算作为内容,关系运算的返回值是bool变量,比如>,<,>=,<=,==.!=等关系运算符。
逻辑运算符与&& 或|| 非!,用于bool变量之间的运算,结果仍然是bool变量。
注意:对于!,!0=1,!!0=0;那么!-2和!2都等于0;除0以外的所有数的逻辑判断都是1;
#includeint main(){ int a=-20; int b=20; int c=0; if(!a){ printf("对于非-20运算结果为truen"); } else{ printf("对于非-20运算结果为falsen"); } if(!b){ printf("对于非20运算结果为truen"); } else{ printf("对于非20运算结果为falsen"); } if(!c){ printf("对于非0运算结果为truen"); } else{ printf("对于非0运算结果为falsen"); } return 0; }
多选一,if()...else if()...else if()... else...
类似于if()...else...,对比与多个if语句,多个if语句每个if都会判断,不管是否满足条件,直到所有的if全部执行完。但是if else if 运行从第一个if开始,只要找到第一个满足条件的if,就不在执行之后的代码。
多选一,switch()...case...default:
类似于if...else if...else,不同之处是前者按顺序执行,直到找到符合条件的结果结束,后者并列执行,不执行与代码位置无关,可以直接找到符合条件的结果结束。
注意:每个case后需要配套break,如果不配套break,那么会顺序向下执行直到找到break才跳出switch case;若多个分支共享一种方法则可以写在一起。case xx:case yy: xxxxxx;
swtich()中()可以是字符(本质上是整数)和整型。
建议:对于多分支选择(分支可用整数代替)时,swtich case代码简洁,else if 代码量冗余可读性低。
对于多分支选择,但是分支是一个区间时,else if直接用关系运算符判断,更好用,switch case需要手动转换每一个段对应的几个整数。
循环语句while()与do...while()
while循环,()中是循环条件,只要条件为真就执行代码,条件为假就不执行。一般需要一个控制次数的变量,该变量有三个表达式:初始值,临界值,和变化值。随着循环运行使变量值变化,直到变量值达到临界值,停止循环,避免死循环。
do...while类似,但是无论如何都会执行一次语句,因为do...while是先执行,再判断。而while是先判断,再执行。
for(表达式1;表达式2 ;表达式3 ;)
for循环,将while循环的控制变量的三个表达式,放在了()里面,所以for循环和带三个表达式的while循环无条件等价。for执行过程是先判断表达式2,再执行代码,表达式3永远最后执行(就算提前continue了)。而且for循环()中表达式可以省略,但是三个分号不能省。省去的表达式可以放在循环外面或者里面,只要能正常运行。如果省去了三个表达式但是外部没有添加,成为了for(;;;),那这就是个死循环。
C99标准允许在表达式1中定义初始值,但C89不支持。
tips:对于循环次数,当变量x初始值定为1,循环n次,则循环条件要取=,即x<=n,x++;当变量x初始值定为0,循环n次,则循环条件要取=,即x break和continue break是直接结束循环,进入下面的其他代码,整个循环已经结束。而continue是结束这一次循环,结束之后又会进入循环,整个循环还在运行。 break一般写在循环体中,作为终止循环的一个条件,循环中可以有多个控制变量来控制循环的停止。 continue一般也写在循环体中,用来筛选掉一些不合目的的循环,最后循环执行完后,就都是想要的数据了。 作业案例 错误积累:error stray xxx in program //输入了中文字符比如中文分号; error: x undeclared (first use in this function)//变量未定义,直接使用;#include



