6.2 表达式和语句

在前几章中,我们已经多次使用了术语表达式(expression)和语句 (statement)。现在,我们来进一步学习它们。C的基本程序步骤由语句组 成,而大多数语句都由表达式构成。因此,我们先学习表达式。

 

1、表达式

表达式(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中完全合法(但不建议使 用),因为它是两个子表达式的和,每个子表达式都有一个值。

2、语句

语句(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 <stdio.h>
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循环中只有一条语句。可以是本例那样的一条语句,不需要用花括号括起来,也可以像其他例子中那样包含多条语句。多条语句需要用花括号括起来。

3、复合语句(块)

复合语句(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语句的结构,整个复合语句被视为一条语句(见下图)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章