逻辑运算
&&和||的短路
应当注意到,这两个运算符的两端会优先计算左端,如果左端结果将使结果确定,那么就不执行右端语句。
&&和||的计算优先度
&&的计算优先度更高,但二者的计算优先度均低于&和|。
但如果||和&&同时存在,且||的一端为&&运算结果,当出现||的另一端结果为1,将不执行&&两端的语句
例如,我们有
点击查看代码
int i=1,j=1,k=1;
printf("%d %d %d %d",i++ || j++ && k++,i,j,k);
逻辑结构
if的用法
if的结构
点击查看代码
if()
{
}
else与else if
对于一个else
而言,对应的是上一个if条件不成立以外的所有情况。
对于一个else if
来说,对应的是上一个if条件不成立且满足else if()
的括号内容。
应当注意,对于同一个if
,可以存在多个else if
,但else
只能存在唯一一个。
if的级联
用以解决过度的缩进问题,即代码过于丑陋。
点击查看代码
if() {
}else if(){
}else if(){
}else if(){
}
个人更喜欢这样
点击查看代码
if()
{
}
else if()
{
}
else if()
{
}
else if的悬空问题
出现多个if嵌套时,注意{}
的使用以避免else 悬空。
条件表达式
常用于简化代码。但增加了代码的不可读性
exper1?expr2:expr3
点击查看代码
exper1?expr2:expr3
点击查看代码
if exper1
exper2
else
exper3
布尔值
C89输麻了没有布尔类型
C89只能够自己定义三个宏
点击查看代码
#define false 0
#define true 1
C99的头文件<stdbool.h>
定义了bool,true和false三种类型
switch的使用
例子
点击查看代码
switch(x){
case i:printf();break;//如果x是i的话
case j:printf();break//如果是j的话
default:printf();break;//剩余所有情况
}
缺点:case
后只能是一个固定的值
如果没有break的话将会使被执行的第一个case
后所有语句被执行
循环结构
for循环
自变量自增自减的循环
while循环
判定控制表达式在循环体执行之后的循环。
do while循环
用于判断控制表达式在循环体执行之后的循环。