(四)语句形式 -- 1-2 简单语句/控制语句

C语句的语句分成两大类:
简单语句(simple statement) ,执行一些基本的操作。
控制语句(control statement) ,影响其他语句执行的次序。


1. 简单语句

在C语言中,不论其功能如何,所有的语句都遵守以下规则:

简单语句规则: 一个简单语句由一个表达式及紧跟其后的分号构成。

因此,一个简单语句的范例如下:

表达式;

尽管任何表达式后跟分号都是一个C语言的合法语句,但并不是这样组合肯定会产生有效的语句。
要使一个语句有效,它必须有实际的明确的效果。

以下语句

n1+n2;

由表达式d紧跟一个分号构成,它是一个合法语句。然而,它是一个无效语句,因为它对计算结果没有进行任何操作。

C语言中典型的简单语句是赋值语句(包括复合形式的赋值和自增/自减操作)和能执行一些有用操作的函数调用语句,如printf


1.1 赋值的嵌套

  • 赋值嵌套(embedded assignment)
    将赋值语句作为更大的表达式的一部分称为赋值嵌套。

如:

(x = 6) + (y = 7)

等价于分别将x和y的值设为6和7,并且整个表达式的值为13。
由于“=”的优先级比“+”低,所以这里必须加上括号。

因为在较大的表达式中,赋值嵌套使变量的值发生的改变很容易被忽略。
因此,本书限制赋值嵌套的使用,只有在少数极有必要的地方使用。


1.2 多重赋值

在使用赋值嵌套的特殊环境中,最适合解决的问题就是当将同一个值赋给多个变量的情况。

C语言对赋值的定义中允许用以下一条语句代替单独的几条赋值语句:

n1 = n2 = n3 = 0;

它将三个变量的值均设为0。

该语句之所以能达到预期效果是因为C语言的赋值操作是从右到左的。

该条语句等价于:

n1 = (n2 = (n3 = 0));

这种语句称为多重赋值(multiple assignment)。


当编写多重赋值时,要保证所有的变量都是同类型的,以避免在自动类型转换时出现与预期不相符的结果的可能性。


  • 结合性(associativity)
    优先级相同的运算符的计算方向称为结合性。

像加减这样的传统运算符是从左到右计算的, 因此称为是左结合的;
像赋值这样的运算符是从右到左计算的,因此称为是右结合的。


1.3 程序块

为了说明一连串的语句是一个连贯的单元,可以把这些语句组装成一个程序块(block),用大括号把它们括起来。如下图所示:

一个程序块中的语句常常根据上下文的关系有不同程度的缩进。
编译器会忽略这些缩进,但其直观的效果对其他读者却是很有帮助的。


分号所扮演的角色:
在C语言中,分号是简单语句语法的一部分,它的作用主要是语句终结符而非分隔符。

在C语言程序块的最后一个简单语句后面总会有分号。
在C语言程序块的结束大括号后不会有分号。

C编译器在遇到程序块时,会将整个程序块看作是一个简单语句。

  • 复合语句(compound statement)
    为了强调就编译器而言它们是语句,程序块有时也被称为复合语句。


2. 控制语句

如果没有任何转向指示,C程序的语句将按照出现的次序顺序执行一次。
然而,对于大多数应用来说,只有自上而下的程序顺序是不够的。

现实问题的解决策略往往要求能反复执行一系列步骤或在多个动作中选择一个。
能够影响其他语句的执行方式的语句叫做控制语句。


C语言中的控制语句分成两大类:

(1) 条件
在两个或多个独立的程序执行路径中做出选择,需要做出决定的那些控制语句称为条件语句。
在C语言中,存在两种条件语句的形式:if语句和switch语句。

(2) 迭代
需要将某一操作重复执行若干次,或在某个条件成立的情况下反复执行某个操作。在程序设计中,这样的反复叫迭代。

在C语言中,用作迭代的基本语句有:while语句和for语句。


C语言中所有的控制语句由两部分组成:控制行和主体。
控制行说明重复或条件的本质,主体由那些受控制行影响的语句组成。

在条件控制语句中,主体可能分成几个独立的部分,在某种情况下执行这一组语句,在另一种情况下执行其他组语句。

控制语句本身的作用是应用于它主体内的语句。主体内的语句可以是任何类型的。

  • 嵌套(nested)
    当一个控制语句出现在其他控制语句内时,叫做嵌套。

在一个控制语句中嵌入另一个控制语句的能力是现代程序设计语言的一个重要特性。



参考
《C语言的科学和艺术》 —— 第4章 语句形式

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108818641