c语言语句:
分类 | 语句 |
---|---|
return语句 | return |
表达式语句 | 表达式; |
选择语句 | if switch |
循环语句 | while do for |
跳转语句 | break continue goto |
复合语句 | 几条语句组合成一个 |
空语句 | 不执行任何操作 |
5.1 逻辑表达式
注意:c语言没有
Boolean
类型,表达式的真假
依赖于其结果是0
或非0
。
5.1.1 关系运算符
>
<
>=
<=
操作数类型:可以用关系运算符比较整数和浮点数,以及混合类型的操作数。
返回值:c语言的表达式中产生的结果是0或1
优先级于结合性:关系运算符的优先级低于算术运算符。
1 | i < j < k;//(i < j) < k |
5.1.2 判等运算符
==
!=
操作数类型:同关系运算符
返回值:同关系运算符
优先级于结合性:优先级低于关系运算符,左结合
技巧:利用关系运算符和判等运算符返回整数值这一事实
1 | (i >= j) + (i == j);//0(大于),1(等于),2(小于) |
5.1.3 逻辑运算符
&&
\|\|
!
操作数类型:真(任何非零值操作数),假(零值)。
返回值:0(假)或1(真)。
优先级于结合性:&&
和||
优先级低于关系运算符和判等运算符,左结合;!
优先级同+(正)、-(负)
。
注意:&&
和||
都对运算符进行短路
计算,也就是说,计算机先计算左侧的值,如果通过左侧的值推导出表达式的值就不需要运行计算右侧的值(操作数的副作用也不会发生)。
5.2 if语句
语法:
if (表达式) 语句(单独一条)
注意:为语句增加大括号或表达式使用圆括号有时并不是必需的,但会使程序更易读,使编译器更容易理解。
1 | if(lent_num == MAX_LINES){ |
5.2.1 复合语句
语法:
if(表达式){语句1;语句2;...}
1 | if(lent_num == MAX_LINES){ |
5.2.2 else语句
语法:
if(表达式) 语句 else 语句
5.2.3 级联if语句
语法
1 | if(表达式) |
1 | if(n < 0){ |
5.2.4 程序:计算股票经纪人的佣金
1 | /** |
1 | $ ./broker |
5.2.5 “悬空else”的问题
规则:c语言遵循的规则是else字句应该属于离它最近的且还未和其他else匹配的if语句。
1
2
3
4
5 if(y != 0)
if(x != 0)
result = x / y;
else
printf("Error:y is equal to 0\n");
5.2.6 条件表达式
又名:三元运算符
语法:表达式1 ? 表达式2 : 表达式3
优先级:低于所有其它运算符
使用场景:return语句、printf函数中、某些类型的宏定义
注意:条件表达式使程序更加短小也更难以阅读,所以最好避免使用
1
2
3
4 int i, j, k;
i = 1;
j = 2;
k = i > (j ? i : j) + j;
5.2.7 模拟布尔值
1 |
|
5.3 switch语句
语法:
1
2
3
4
5
6 switch(表达式){
case 常量表达式 : 多条语句
...
case 常量表达式 : 多条语句
default : 多条语句
}特点:
- 不允许由重复的情况标号
- 对情况的顺序没有要求(default)不一定要放置在最后
- 不要求一定要有default,如果不匹配任何情况又没有default,则什么也不做
组成 | 说明 | 特点 |
---|---|---|
控制表达式 | switch 控制表达式 |
整数或字符(也会被当作整数) |
情况标号 | case 常量表达式 |
常量表达式中只能存在常量(包括宏) |
语句 | 每个情况标号后边任意数量的语句 | c语言中少数几个不需要大括号的地方之一 |
1 | switch(grade){ |
5.3.1 break语句的作用
说明:switch语句实际上是一种基于计算的跳转,如果没有break或其它跳转语句,程序控制将会从一种情况继续到下面一种情况。
注意:break的故意省略需要明确指出以防某些人尝试修正“错误”。
1 | switch(grade){ |
5.3.2 程序:显示法定格式的日期
1 | /** |
1 | $ ./date |