结构化程序设计

一个C程序可以由若干个源程序文件构成,一个源程序文件可以由若干个函数、预编译命令及一些可选的全局变量定义等构成,在整个程序中必须有且只有一个主函数(即main函数)。

C语句可以分为以下五种类型:

  1. 表达式语句。
  2. 函数调用语句。
  3. 复合语句,把多个语句用花括号括起来组成的语句。
  4. 空语句,只有一个分号。
  5. 控制语句,共9种,分为三类:
  • 条件判断语句:if、switch。
  • 循环执行语句:do while、while、for。
  • 转向语句:break、goto、continue、return。

结构化程序设计的三种基本类型为:顺序、选择、循环。

顺序结构

顺序结构是一种线性、有序的结构,它依次执行各语句模块。

选择结构

选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行。

C语言用关系运算或逻辑运算来判断条件是否得到满足,并根据计算的结果决定程序的不同流程,实现选择结构的程序设计。

if语句

单分支if语句

if(expression) 
  sentence;

双分支if语句

if(expression)
  sentence1;
else
  sentence2;

多分支if语句

if(expression1)
  sentence1;
else if(expression2)
  sentence2;
else if(expression3)
  sentence3;
....
else if(expressionn)
  sentence n;
else
  sentence n+1;

注意:else与if的配对规则是,else总是与在它前面的、离它最近的、尚未与其它else匹配的if相配对。

switch语句

switch(expression)
{
  case 常量表达式1: 语句1;
  case 常量表示式2: 语句2;
  ...
  case 常量表达式n: 语句n;
  [default: 语句n+1]
}

说明

  1. switch后的表达式只能是整型、字符型或枚举型表达式。
  2. case和常量表达式之间有空格,各常量表达式的类型必须与switch后的表达式类型相同,并且其值互不相同。
  3. default语句可以没有,一般出现在所有case语句之后。当它出现在某个case语句之前,也不会改变程序对某个分支的选择顺序。
  4. case标号后的语句可以是零条、一条语句,也可以是多条语句,并且可以不用{}括起来。
  5. switch语句执行时,首先计算紧跟着switch关键字后面的表达式的值,
    当表达式的值与某一个case后面的常量表达式的值相等时,就执行该case标号后的语句,包括在其后的所有case和default中的语句,直到switch语句体结束;
    如果没有与该值相等的常量表达式,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束;
    如果既没有与该值相等的常量表达式,也没有default标号,则跳过switch语句体,什么也不做。
  6. switch语句通常总是和break语句联合使用,使switch语句真正起到多分支结构的作用。使用方法是在每一个case之后的语句后加上一个break语句,使其强制跳出switch语句体。

条件运算符

C语言提供了一个特殊的运算符,条件运算符。它是C语言提供的唯一一个三目运算符,即条件运算表达式中要求有三个运算对象,他构成的条件表达式可以形成简单的选择结构

语法形式:expression1?expression2:expression3

运算解释:先求表达式1的值,若其值为真,则以表达式2的值作为整个表达式的值,否则以表达式3的值作为整个表达式的值。

循环结构

循环结构是反复执行某个或某些操作,直到满足某一条件时才可终止循环。

在C语言中可以用如下语句实现循环结构:

  1. goto + if;
  2. while;
  3. do while;
  4. for;

语句标号

语句标号是给程序中的某一个语句定义的一个标识符,C程序中任何一个可执行语句之前都可以加上语句标号。

语句标号只是用作goto语句的转向目标,如果没有用到goto语句,就没有必要出现语句标号。

其语法形式为:语句标号:语句;

goto语句

语句标号:语句;
...
if(expression)
  goto 语句标号;

执行说明:先判断条件,然后跳转至对应语句标号的位置形成循环。

while语句

while(expression)
  循环体语句;

执行说明:当表达式的值为非0时,便执行循环体语句,直到表达式的值为0时才结束循坏。

do-while语句

do
  循环体语句;
while(expression);

执行说明:先执行循环体语句,再求表达式的值,当表达式的值为非0时,便执行循环体语句,直到表达式的值为0时才结束循坏。

注意事项:do-while语句在while(expression)后有一个分号,它是do-while语句的结束标志。

for语句

for(expression 1;expression 2;expression3)
  循环体语句;

执行过程:

  1. 计算表达式1;
  2. 计算表达式2,若其值非零,转至步骤3。若其值为0,转至步骤5;
  3. 执行一次循环体语句;
  4. 计算表达式3,然后转至步骤2,构成循环。
  5. 结束循环。

说明:

  1. for语句中的表达式可以部分或全部省略。
  2. 表达式1和3都可以时逗号表达式,一般用宇有两个循环变量时。
  3. 循环体语句之前不能有份好。

break语句

break语句可以使流程跳出由switch语句构成的多分支结构。

当break语句用在do-while、for或者while循环语句中时,也可以使程序终止循环,从而跳出循环结构。

continue语句

continue语句只能在do-while、while和for循环语句中使用,其作用是提前结束多次循环中的某一次循环。即跳出本次循环中余下的尚未执行部分的语句,提前进行下一次循环条件的判定。