文档介绍:第7章程序的最小独立单元—语句
如果把写程序和写小说类比,变量常量等可以看成是字和词,函数可以看成是一个段落,运算符等可以看作是字词的组合方式(规则),那么,字词组成的句子就是小说的最小独立单元,表达了一定的意思,同样,程序的最小独立单元是“语句”,每个语句表达出完整的意义。
5种语句类型
第3章中已经介绍过,C语言中有5种类型的语句,分别是表达式语句、流程控制语句、函数调用语句、空语句和复合语句。
表达式语句
第6章中已经介绍了表达式的概念,通俗地说,“由表达式组成的语句称为表达式语句”,其基本格式为:
表达式; /*表达式加分号*/
表达式与表达式语句的区别在于是否有末尾的分号。
表达式语句可分为两类,一是运算符表达式语句,用以计算表达式的值,二是赋值语句,用以改变变量等程序实体的值。
(1)运算符表达式语句
下述语句均由运算符表达式和分号组成:
x++;
a*b;
(2)赋值语句
顾名思义,赋值语句用来改变某些变量的值,如:
x=3;
x=y+z; /*有加法运算符和赋值运算符组成的语句*/
函数调用语句
函数调用后跟一个分号称为函数调用语句,其基本格式为:
函数名(参数列表); /*函数名+参数列表+分号*/
无论是标准库函数、第3方库函数还是用户自定义的函数,在调用前都要先原型声明,告诉编译器:“在程序中有这么一个函数,它是这么这么用的”,前几章中用到的输出函数printf的调用就是典型的函数调用语句,如:
prinf(“%d”,x); /*以10进制整数形式输出x的值*/
空语句
空语句就是一个分号,表示不进行任何的操作。有的读者会问,不进行任何操作的语句,要它有什么用呢,实际上,空语句的提出是为了满足格式的需要,C语言的语法格式要求某个地方必须要有条语句,但并不想进行任何操作,这时便可在该位置处敲上一个分号(空语句),没有这个分号,编译器可能会报错。
空语句应用最多的一个场合是在循环结构中提供一个不执行任何操作的空循环体,
复合语句(块语句)
表达式语句、函数调用语句和空语句可以称为简单语句或基本语句,基本都是一行的形式,而复合语句是“由一对大括号{}包围若干条基本语句组成”,所以也称其为块语句。
其基本格式为:
{
语句1; /*每条语句后要有分号*/
语句2;
……
语句N;
} /*整个块结束后的大括号后不要分号*/
举例如下:
{
int a,b; /*声明两个变量a和b*/
a=3+4; /*将3+4的结果赋值给a*/
b=a*5; /*将a乘5的结果赋值给b*/
}
流程控制语句
从可以看处,流程控制语句的分支最为茂盛,这是本章介绍的重点。到目前为止,所接触的代码都是顺序执行的,按语句的书写顺序从上到下一条条执行,如:
语句1;
语句2;
语句3;
执行顺序依次为:语句1,语句2,语句3。
在实际应用中,程序并不一定按书写的顺序来执行,可能希望在某处设置多条路径,由程序选择一条来执行,以人爬山来类比,上山可能有多条路,在分岔口处需要登山者做出选择,如果体力状态不错,可以选坡陡难爬的一条路,如果很疲劳了,可以选平缓容易的路,或者干脆下山,这种选择机制提供了解决问题的灵活性。
结构化程序设计
结构化程序设计的思想是:把一个需要解决的复杂问题分解成若干模块来处理,每个模块解决解决一个小问题,这种分而治之的方法大大降低了程序设计的难度。结构化程序设计的核心问题是算法和控制结构。
什么是算法
所谓算法,指的是解决问题时的一系列方法和步骤。算法的思维充溢着生活的各个方面,比如我们要去北京旅游,会问一些问题:“坐什么交通工具”,“在哪里中转”,“是否要去奥运现场”等等,这都包含着算法,可见,算法步骤间有一定的逻辑顺序,按这些顺序执行步骤便可以解决问题,达到目的。这种逻辑顺序,在C语言中体现为控制结构。
算法的表示
抛开那些厚厚的算法教科书,不去谈那些深奥无比的属性,本节讨论与算法使用最为相关的问题:算法如何表示,原则上,自然语言也可用于算法表示,但由于自然语言的多义性,不同的人对同一个版本的描述可能有不同的理解,因此,一般不采用自然语言来描述算法,要求采用一种精确的,无歧义的机制。
有两种广泛使用的算法表示方法,一是伪代码法,二是流程图法。