目录
1、表达式
2、语句
3、复合语句(块)
表达式(expression)由运算符和运算对象组成(前面介绍过,运算对 象是运算符操作的对象)。最简单的表达式是一个单独的运算对象,以此为 基础可以建立复杂的表达式。下面是一些表达式:
4
-6
4+21
a*(b + c/d)/20
q = 5*2
x = ++q % 3
q > 3
如你所见,运算对象可以是常量、变量或二者的组合。一些表达式由子 表达式(subexpression)组成(子表达式即较小的表达式)。例如,c/d是上 面例子中a*(b + c/d)/20的子表达式。每个表达式都有一个值,表达式的一个最重要的特性是,每个表达式都有一个值。要获得这个 值,必须根据运算符优先级规定的顺序来执行操作。在上面我们列出的表达 式中,前几个都很清晰明了。但是,有赋值运算符(=)的表达式的值是什么?这些表达式的值与赋值运算符左侧变量的值相同。因此,表达式q = 5*2 作为一个整体的值是10。那么,表达式q > 3的值是多少?这种关系表达式 的值不是0就是1,如果条件为真,表达式的值为1;如果条件为假,表达式 的值为0。表6.2.1列出了一些表达式及其值:
虽然最后一个表达式看上去很奇怪,但是在C中完全合法(但不建议使 用),因为它是两个子表达式的和,每个子表达式都有一个值。
语句(statement)是C程序的基本构建块。一条语句相当于一条完整的 计算机指令。在C中,大部分语句都以分号结尾。因此,
legs = 4
只是一个表达式(它可能是一个较大表达式的一部分),而下面的代码 则是一条语句:
legs = 4;
最简单的语句是空语句:
; //空语句
C把末尾加上一个分号的表达式都看作是一条语句(即,表达式语 句)。因此,像下面这样写也没问题:
8;
3 + 4;
但是,这些语句在程序中什么也不做,不算是真正有用的语句。更确切 地说,语句可以改变值或调用函数:
x = 25;
++x;
y = sqrt(x);
虽然一条语句(或者至少是一条有用的语句)相当于一条完整的指令, 但并不是所有的指令都是语句。考虑下面的语句:
x = 6 + (y = 5);
该语句中的子表达式y = 5是一条完整的指令,但是它只是语句的一部分。因为一条完整的指令不一定是一条语句,所以分号用于识别在这种情况下的语句(即,简单语句)。
到目前为止,大家已经见过多种语句(不包括空语句)。程序清单6.2.2演示了一些常见的语句。
程序清单6.2.2程序
/************************************************************************
功能:演示几种常见的语句
************************************************************************/
#include
int main(void) //计算前20个整数的和
{
int count, sum; //声明[1]
count = 0; //表达式语句
sum = 0; //表达式语句
while (count++ < 20) //迭代语句
sum = sum + count;
printf("sum = %d\n", sum); //表达式语句[2]
system("pause"); //暂停控制台
return 0; //跳转语句
}
结果为:
sum = 210
请按任意键继续. . .
赋值表达式语句在程序中很常用:它为变量分配一个值。赋值表达式语句的结构是,一个变量名,后面是一个赋值运算符,再跟着一个表达式,最后以分号结尾。注意,在while循环中有一个赋值表达式语句。赋值表达式语句是表达式语句的一个示例。
函数表达式语句会引起函数调用。在该例中,调用printf()函数打印结果。while语句有3个不同的部分(见下图)。首先是关键字while;然后,圆括号中是待测试的条件;最后如果测试条件为真,则执行while循环体中的语句。该例的while循环中只有一条语句。可以是本例那样的一条语句,不需要用花括号括起来,也可以像其他例子中那样包含多条语句。多条语句需要用花括号括起来。
复合语句(compound statement)是用花括号括起来的一条或多条语句,复合语句也称为块(block)。shoes2.c程序使用块让while语句包含多条语句。比较下面两个程序段:
/* 程序段 1 */
index = 0;
while (index++ < 10)
sam = 10 * index + 2;
printf("sam = %d\n", sam);
/* 程序段 2 */
index = 0;
while (index++ < 10)
{
sam = 10 * index + 2;
printf("sam = %d\n", sam);
}
程序段1,while循环中只有一条赋值表达式语句。没有花括号,while语句从while这行运行至下一个分号。循环结束后,printf()函数只会被调用一次。
程序段2,花括号确保两条语句都是while循环的一部分,每执行一次循环就调用一次printf()函数。根据while语句的结构,整个复合语句被视为一条语句(见下图)。