《C语言程序设计现代方法》note-3 选择语句 循环语句

助记提要

  1. 关系运算符、判等运算符、逻辑运算符的优先级和结合性;
  2. 条件运算符;
  3. C语言中如何使用布尔值;
  4. switch语句的注意;
  5. for语句省略表达式;
  6. 逗号表达式;
  7. goto语句;
  8. 空语句;

不应该以聪明才智和逻辑分析能力来评判程序员,而要看其分析问题是否全面。

5章 选择语句

5.1 逻辑表达式

选择语句必选先测试表达式的值是真还是假。
构建逻辑表达式的运算符有9个。
逻辑表达式的值只会是1(真)或0(假)。

  • 关系运算符
    大于>、小于<、大于等于>=、小于等于<=
    4个关系运算符都是左结合的,优先级低于算术运算符。

    注意 i < j < k在C语言中是合法的,但是并不是检测j是否位于i和k之间。它先比较i<j的值,然后用这个结果和k比较。

  • 判等运算符
    等于==、不等于!=
    判等运算符是左结合的,优先级低于关系运算符。
    表达式i < j == j < k,当i < jj < k同为真或同为假时,表达式的值为真。

==经常被误写为=,有的时候编译器不会警告,导致程序出现错误。使用gcc编译C程序时可以指定-Wall选项,强制编译器检查这类书写错误。程序员可以在if条件外面多加一层圆括号来禁用该警告:if ((i = j)) ...

  • 逻辑运算符
    !、与&&、或||
    是一元的右结合运算符,优先级和正负号相同。
    &&||是二元的左结合运算符,优先级低于判等运算符。

    运算符&&||都会进行短路计算:先计算出左操作数的值,然后计算右操作数。如果表达式的结果可以由左操作数推导出来,就不计算右操作数。

    注意 由于&&||的短路特性,有些运算不一定会发生,如:i > 0 && ++j > 0,如果i不大于0,j的自增操作就不会发生。

5.2 if语句

语法
  • 基本语法格式
if (表达式) 语句;

先计算表达式的值,表达式值非零,就执行圆括号后面的语句。
C语言中,非零值都为真。

  • 复合语句
if (表达式){
	语句1;
	语句2;
	...
}

花括号包起来的语句称为复合语句,它会强制编译器将一组语句做为一条语句来处理。
为语句添加花括号,可以使程序更易读。也可以更方便地向语句块中添加语句。

  • else子句
if (表达式) 语句1; else 语句2;

if (表达式) {
	语句11;
	语句12
} else {
	语句21;
	语句22;
}

注意 else子句会归属于离它最近且还未和其他else匹配的if语句。
下面的这种写法,按缩进来理解,else应该属于外层的if语句,但是实际上它是属于内层的if语句的。这时最好把内层if语句使用花括号包起来。

if (y != 0)
	if (x != 0)
		result = x / y;
else
	printf("Error: y == 0\n");
  • 级联if语句
    级联式if语句可以避免数量过多的内嵌if语句
if (表达式) 
	语句1;
else if (表达式)
	语句2;
else
	语句3;

级联式if语句不是新的语句类型,只是将另外一个if语句做为else字句。

条件运算符

条件运算符的作用类似if语句,它允许根据条件的结果,产生两个值中的一个。条件运算符构建的条件表达式语法如下:

表达式1 ? 表达式2 : 表达式3

如果表达式1成立,就计算表达式2的值做为条件表达式的结果,否则计算表达式3的值做为结果。
条件运算符是唯一的一个三元运算符。它的优先级低于所有的运算符。

条件表达式短小但是难以阅读,应该避免使用。但在少数地方使用会很方便:

// return语句使用
return i > j ? i : j

// printf函数使用
printf("%d\n", i > j ? i : j);

条件表达式i > 0 ? i : j中,如果i是int型,j是float型,即使i > 0为真,表达式的结果也是i转换后的float型。

C语言中的布尔值

C89没有定义布尔类型,但是很多程序中需要变量存储真或假值。
程序员经常使用TRUE和FALSE这样的名字来定义宏:

#define TRUE 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值