C

C 知识量:16 - 74 - 317

5.3 表达式和语句><

表达式- 5.3.1 -

表达式由运算符和运算对象组成,例如:5、4+9、x*y、b=a+56、c>d等等,其中5也是一个表达式,它只由一个运算对象组成。运算对象可以是常量、变量或二者的组合。一些表达式由子表达式组成,例如:a-b/c中,b/c就是整个表达式的子表达式。

C语言的表达式一个最重要的特性是,每个表达式都有一个值。要获得这个值,必须根据运算符优先级规定的顺序来执行操作。

语句- 5.3.2 -

语句是C程序的基本构建块。一条语句相当于一条完整的计算机指令。在C中,大部分语句都以分号结尾。

最简单的语句是空语句:

;   //空语句

但是,这种语句没有任何意义。以下是一个比较完整的示例:

#include <stdio.h>

int main(void) {              /*计算两个值相加的和*/
    int x, y, sum;            /*声明*/
    x = 20;                   /*表达式语句*/
    y = 30;                   /*表达式语句*/
    sum = x + y;              /*表达式语句*/
    printf("x+y=%d", sum);    /*表达式语句*/
    system("pause");          /*表达式语句*/
    return 0;                 /*跳转语句*/
}

需要注意的是:

  • 声明不是语句,这与C++不同。

  • 赋值和函数调用都是表达式语句。

副作用和序列点- 5.3.3 -

1、副作用。

副作用是对数据对象或文件的修改。例如:x=9;它的副作用是将变量的值设置为9,而其主要作用则是对表达式求值。此外,对于printf()函数,显示信息是其副作用,而且主要作用是返回显示字符的个数。显然以上例子中的表达式或函数运用,其副作用才是我们真正需要的。

2、序列点。

序列点是程序执行的点,在该点上,所有副作用都在进入下一步之前发生。通常,语句的分号标记一个序列点。而在一个语句中,赋值运算符、递增运算符和递减运算符对运算对象做的改变必须在程序执行下一条语句之前完成。

任何一个完整表达式的结束也是一个序列点。所谓完整表达式是指这个表达式不是另一个更大表达式的子表达式。示例:

#include <stdio.h>

int main(void) {
    int i = 1;
    while (i++ < 10)printf("%d \n", i);
    system("pause");
    return 0;
}

以上是一个while循环程序,其中对于while (i++ < 10)printf("%d \n", i);这条语句,在比较变量i与10的大小时,先使用i的值进行比较,再递增i。需要注意的是,i++ <10是一个完整的表达式,因此,运行printf()函数之前,i会先完成自增,printf()函数中的i从2开始打印。以上代码的运行结果为:

2
3
4
5
6
7
8
9
10

复合语句- 5.3.4 -

复合语句是用花括号括起来的一条或多条语句,复合语句也称为块。以下是两个示例的比较:

示例1:

#include <stdio.h>

int main(void) {
    int i = 1;
    while (i++ < 10)
        printf("%d \n", i);
    printf("hello");
    system("pause");
    return 0;
}

示例2:

#include <stdio.h>

int main(void) {
    int i = 1;
    while (i++ < 10) {
        printf("%d \n", i);
        printf("hello");
    }
    system("pause");
    return 0;
}

示例1与示例2中的代码非常相似,但是示例1中的while循环体中只有一条打印语句,就是紧跟在while(i++ <10)后面的printf()语句,而示例2中的while循环体使用花括号将两条语句括了起来,因此两条打印语句都是while的循环体,整个复合语句被视为一条语句。

小结- 5.3.5 -

表达式:表达式由运算符和运算对象组成。最简单的表达式是不带运算符的一个常量或变量,例如:43或mark。更复杂的例子是99+1和number=65*(ceil+(8*3))。

语句:语句可以分为简单语句和复杂语句。

简单语句以一个分号结尾。例如:

  • 赋值表达式语句:x=4;

  • 函数表达式语句:printf("%d",number);

  • 空语句:;   /*什么也不做*/

复合语句(或块)由花括号括起来的一条或多条语句组成。