C程序设计语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1.2 C语言语句的分类

C语言程序的执行部分是由语句组成的,程序的功能也是由执行语句实现的。C语言语句的形式很多,一般可分为5类:表达式语句、函数调用语句、控制语句、复合语句、空语句。

1.表达式语句

表达式语句由表达式加上分号“;”组成,执行表达式语句就是计算表达式的值,其一般形式如下:

            表达式;

事实上,任何一个表达式后加上“;”就构成了表达式语句,如算术表达式、关系表达式等。最典型的是用赋值表达式组成的赋值语句。

需要注意的是,有的表达式语句有意义,有的表达式语句则没有实际意义。例如:

①“a=1”是一个赋值表达式,而加上分号的“a=1;”则是一条赋值语句;

②“x=y+z”是一个赋值表达式,而加上分号的“x=y+z;”则是一条赋值语句;

③“i++”是一个表达式,而加上分号的“i++;”则是一条自增语句,i的值增1;

④“y+z;”是一条加法运算语句,但计算结果不能保留,无实际意义;

⑤“x;”也是一条“语句”,但不执行任何运算,毫无意义。

表达式能构成语句是C语言的一个重要特色。其实,下面要介绍的函数调用语句也可以看成是表达式语句,因为函数调用(如fabs(x))也是表达式的一种。只是为了便于理解和使用,才把“函数调用语句”和“表达式语句”分成两类来介绍。由于C语言程序中的大多数语句是表达式语句(包括函数调用语句),因此,有时也把C语言称为“表达式语言”。

2.函数调用语句

函数调用语句由函数名、括号、实际参数加上分号“;”组成,其一般形式为:

            函数名(实际参数表);

执行函数语句就是,调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。

例如:

            printf("This is a C program.");

是一个函数调用语句,将调用库函数printf,在屏幕上输出字符串“This is a C program.”。

当然,有函数调用不一定就是函数调用语句,例如:

            y=fabs(x);

调用了fabs函数,但最后执行的是赋值运算,即把x的绝对值赋给变量y,因此,这是一个赋值语句,属于表达式语句。可见,语句的分类是由表达式中最后一个运算决定的。如果把这个语句改为“fabs(x);”,就变成了函数调用语句,当然由于计算结果被丢弃了,也就没有实际意义了。

3.控制语句

控制语句用于控制程序的流程,以实现程序的各种基本结构。控制语句由特定的语句定义符组成。C语言共有9种控制语句,分成3类。

① 选择语句又称为条件语句、判断语句,用于实现选择结构的程序设计,包括if语句和switch语句。

② 循环语句又称为重复语句,用于实现重复执行的循环结构的程序设计,包括while、do-while和for三个语句。

③ 转移语句用于实现程序的跳转,包括break、continue、goto和return四个语句。

控制语句的基本形式和使用方法将在后面的章节中逐步介绍。

4.复合语句

把任意多条语句用大括号“{}”括起来就构成了复合语句。例如:

            {
                x=y+z;
                a=b+c;
                printf("%d%d",x,a);
            }

是一条复合语句,由3条语句组成。

对于复合语句,需要注意:

① 在程序中应把复合语句看成是单条语句,而不是多条语句;

② 复合语句内的各条语句都必须以分号“;”结尾,最后一条语句的结尾也必须有分号“;”;

③ 复合语句中还可以包含复合语句,即复合语句允许嵌套,但必须保证嵌套是完整的,不允许交叉嵌套。

例如:

            1   {   x=1;
            2       {   y=x*x;
            3           x++;
            4   }
            5           y=x;
            6       }

从形式上看,似乎有两条复合语句,它们是第1~4行组成的一条复合语句和第2~6行构成的另一条复合语句。但真实情况是,这里只有一条复合语句,由第1~6 行组成。该复合语句嵌套了另一个复合语句,由第2~4行组成。也就是说,该程序段应该写成:

            1   {   x=5;
            2       {   y=x*x;
            3           x+=10;
            4       }
            5       y=x;
            6   }

不难想象,当程序中出现复合语句时,应该注意每一行的缩进与对齐方式,以免造成误解。

5.空语句

只有一个分号“;”的语句称为空语句。

空语句什么也不做,可用来作为被转向点,或循环语句中的循环体(循环体是空语句,表示循环体什么也不做)。

例如:

            while(getchar()!='\n') ;

该语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。

当程序中出现连续的两个分号“;”时,一般可把后面的分号看做空语句。但要注意的是,随意添加空语句可能造成错误,例如:

            if(x>y)z=x;;
            else z=y;

由于z=x的后面多使用了一个分号,造成下面的else子句出现语法错误,else与if之间多出了一个空语句。