【高级语言程序设计】第 4 章:结构化程序设计

目录

一、结构化程序设计方法

二、结构化程序三种基本结构

(1)顺序结构 

(2)选择结构 

(3)循环结构

三、顺序结构程序设计

(1)赋值语句 

(2)函数调用语句

(3)表达式语句

(4)复合语句

(5)字符输出函数 putchar()

(6)字符输入函数 getchar() 

(7) 格式输出函数 printf()

① 格式说明符

② 附加格式说明符

③ 转义字符

④ 普通字符

⑤ 输出项表

(8)格式输入函数 scanf() 

(9)输入项首地址表

四、选择结构程序设计

(1)单分支选择结构(if 语句)

(2)双分支选择语句( if-else 语句)

(3)多分支选择语句( if 语句:分支嵌套的特殊形式 if-else-if 语句的嵌套)

① 在每一层 else 分支下嵌套一个 if-else 语句 

② 在 if-else 语句的任一分支上嵌套单分支的 if 选择结构或双分支的 if 选择结构

(4)多分支选择语句( switch 语句)

五、循环结构程序设计

(1)当型循环结构(while 语句)

(2)直到型循环结构(do-while 语句)

(3)次数型循环结构(for 语句)

(4)break 语句(强制终止循环)

(5)continue 语句(结束本次循环)

(6)break 语句和 continue 语句的区别

(7)循环的嵌套



一、结构化程序设计方法

结构化程序设计:是以 模块功能和处理过程设计 为主的详细设计的基本原则。
具体的,采取以下方法可以保证获得结构化程序:
  • 自顶向下,逐步求精
  • 模块化设计
  • 结构化编码:经模块化设计后进入编码阶段,任何程序都由顺序、选择和循环三种基本结构组成。


二、结构化程序三种基本结构

(1)顺序结构 

顺序结构:是程序的一个基本结构,它是按照书写顺序依次执行操作。 


(2)选择结构 

选择结构:又称分支结构,是根据某个或某些条件,从若干个操作中选择某个操作执行的一种控制结构。

选择结构分为以下三种:

  1. 单分支选择结构
  2. 双分支选择结构
  3. 多分支选择结构

(3)循环结构

循环结构:是由循环控制条件控制循环体是否重复执行的一种控制结构。

循环结构分为以下三种:

  1. 当型循环结构
  2. 直到型循环结构
  3. 次数型循环结构



三、顺序结构程序设计

(1)赋值语句 

1. 第一种
【格式】 变量=表达式;
【功能】计算表达式的值,然后赋予变量。

2. 第二种

【格式】 变量 符合赋值运算符 表达式;
【功能】将变量和表达式进行制定的算术或位运算后,再将运算结果赋予变量。
本质上,赋值语句是赋值表达式后面跟一个分号。


(2)函数调用语句

【格式】 函数名(参数1,参数2,…,参数n);
【功能】调用指定的库函数或用户自定义函数,对圆括号中的参数进行该函数指定的运算,运算结果作为函数的返回值返回。
本质上,函数调用语句是函数调用后面跟一个分号。

(3)表达式语句

【格式】 表达式;
【功能】计算表达式的值。
本质上,表达式语句的表达式后面跟一个分号。需要注意的是,任何表达式都可以构成语句。

(4)复合语句

【格式】
{
语句1;
语句2;
语句n;
}
【功能】依次执行语句1,语句2,…,语句n。
【说明】
  1. 复合语句可以包含多条语句,但整体上是作为一条语句看待。
  2. 复合语句中若有数据定义语句,则应放在复合语句中其他语句的前面。

(5)字符输出函数 putchar()

【调用格式】 putchar(ch)
【参数】“ch” 可以是一个整型变量、字符型变量、整型常量或字符型常量,也可以是一个转义字符或整型表达式,但不能是字符串。
【功能】把一个字符输出到标准输出设备(显示器)。此外,就功能而言 “%c” 格式说明符的printf() 函数可以完全代替 putchar() 函数的功能。
【返回值】输出 ch 对应的单个字符。
【说明】
  1. putchar() 函数只能用于单个字符的输出,一次输出一个字符。
  2. C 源程序中若使用了 putchar() 函数,则必须在 C 源程序(或文件)的开头加上编译预处理命令 #include<stdio.h> 或 #include"stdio.h"  。


(6)字符输入函数 getchar() 

【调用格式】getchar()
【参数】无参数
【功能】从标准输入设备(键盘)输入一个字符。另外,就功能而言带 “%c” 格式说明符的scanf() 函数可以完全替代 getchar() 函数的功能。
【返回值】输出的单个字符。
【说明】
  1. getchar() 函数只能用于单个字符的输入,一次输入一个字符。输入的字符也是按字符处理。当输入多于一个字符时,只接收第一个字符。
  2. C 源程序 () 函数输入的字符可以赋予一个字符变量或整型变量,也可以不赋给任何变量,而作为表达式的一部分。
  3. C 源程序中若使用了 getchar() 函数,则必须在 C 源程序(或文件)的开头加上编译预处理 命令 #include<stdio.h> 或 #include"stdio.h" 。


(7) 格式输出函数 printf()

【调用格式】printf (格式控制字符串,输出项表)
【参数】
  1. “格式控制字符串” 是由控制输出格式的字符组成的字符串。
  2. “输出项表” 是用逗号分隔的若干个表达式。
【功能】按照用户指定的格式把指定的数据输出到标准输出设备(显示器)。
【返回值】返回值为整型,等于正常输出的数据个数。
【说明】
  1. “格式控制字符串” 又称 “转换控制字符串” ,是用一对双引号括起来的字符串,其作用是将输出项表中的数据从内存的二进制形式转换成指定的格式输出。
  2. 格式控制字符串由格式说明符、附加格式说明符、转义字符和普通字符组成。

① 格式说明符

格式说明符:格式说明符由“%”和“格式字符”组成,其作用是将要输出的数据按格式说明符指定的格式输出。

 

输出不同类型的数据,需要使用不同的格式字符,其中:
  • 格式字符 d ——以有符号的十进制整数形式输出
  • 格式字符 f ——以小数形式、按系统默认的宽度,输出单精度和双精度实数
  • 格式字符 c ——输出一个字符(只占一列宽度)
  • 格式字符 s ——输出一个字符串

② 附加格式说明符

附加格式说明符:在 “%” 和 “格式说明符” 之间还可以加入附加格式说明符,以说明输出数据的标志、域宽(所占列数)、精度和长度修饰符。


③ 转义字符

转义字符:由一个反斜杠和一个字符组成。

④ 普通字符

普通字符:是指除格式说明符、附加格式说明字符和转义字符之外的其他字符,输出时按原样输出,起到提示的作用。

⑤ 输出项表

输出项表:输出项表中给出各个输出项,输出项可以是变量、表达式、常量或函数调用等。

(8)格式输入函数 scanf() 

【调用格式】scanf (格式控制字符串,输入项首地址表)
【参数】
  1. “格式控制字符串” 是由控制输入格式的字符组成的字符串。
  2. “输入项首地址表” 由若干个输入项首地址组成,相邻两个输入项首地址之间用逗号分隔。
【功能】从键盘按照“格式控制字符串”中规定的格式读取若干个数据,然后按照“输入项首地址表” 中的顺序,依次将数据存入相应的变量对应的地址。
【返回值】输入的数据个数
【说明】
  1. 格式控制字符串:格式控制字符串可以包含三种类型的字符,即格式说明符、空白字符(空格、回车和<Tab>键)和非空白字符(又称普通字符)
  2. scanf() 函数的格式说明符的一般形式:%[*][宽度][F|N][h|l]格式字符
  • 宽度:宽度是指定该项输入数据所占列数。
  • 赋值抑制字符* :赋值抑制字符表示本输入项对应的数据读入后,不赋予相应的变量(该变量由下一个格式字符输入)
  • 类型修饰符——F、N、h、l:分别表示远指针、近指针、短整型和长整型。

 


(9)输入项首地址表

输入项首地址表:是由接收输入数据的变量地址组成的,地址之间用逗号“ , ”分隔。
示例:

1、执行语句 printf(〞%s\n, 〞〞 World\0Wide\0Web〞); 后的输出结果是 World

解析:是因为 %s\n 在输出的时候遇到 \0 就结束输出。
2、设 int a;,从键盘输入数据给变量a的输入语句是 scanf(“%d” ,&a);
解析:格式输入函数 scanf()的格式是 scanf(格式控制字符串,输入项首地址表),故从键盘输入数据给变量 a 的输入语句是 scanf(“%d” ,&a);。


四、选择结构程序设计

(1)单分支选择结构(if 语句)

单分支选择结构:C 语言中实现单分支选择结构的语句是 if 语句。

【格式】 if(表达式)语句;
【功能】计算表达式的值,若为 “真”(非0),则执行语句;否则不执行语句。
【说明】
  1. if 语句中的 “表达式” 必须用一对圆括号括起来。
  2. “表达式” 可以是任何类型,除了常用的关系表达式或逻辑表达式外,也允许是其他类型的数据,如整型、实型或字符型等。
  3. 语句可以是任何语句(除了数据定义语句),也可以是另一个 if 语句(称为嵌套的 if 语句)。


(2)双分支选择语句( if-else 语句

双分支选择语句:C 语言中实现双分支选择语句的是 if-else 语句。
【格式】
if(表达式)语句1;
else 语句2;
【功能】计算表达式的值,若为 “真”(非 0),则执行语句1;否则执行语句2 。
【说明】
  1. if 语句中的 “表达式” 必须用一对圆括号括起来。
  2. “表达式” 可以是任何类型,除了常用的关系表达式或逻辑表达式外,也允许是其他类型的数据,如整型、实型或字符型等。
  3. “语句1” 和 “语句2” 可以是任何语句(除了数据定义语句),也可以是另一个 if-else 语句(称为嵌套的 if-else 语句)。
  4. “语句1” 和 “语句2” 可以是一条简单的语句,也可以是复合语句。不管是简单语句还是复合语句中的各个语句,每条语句后面的分号必不可少。
  5. else 子句是 if 语句的一部分,必须与 if 配对使用,不能单独使用。


(3)多分支选择语句( if 语句支嵌套的特殊形式 if-else-if 语句的嵌套)

① 在每一层 else 分支下嵌套一个 if-else 语句 

【格式】
if(表达式1) 语句1
    else if(表达式2) 语句2
        else if(表达式3) 语句3
            …
                else if (表达式n) 语句n
                    else 语句n+1
需要注意以下几点:
  1. 从上至下逐一对表达式进行判断,只有遇到某一表达式值为 “真”(非 0 )时,则执行与之相对应的语句,执行完毕后跳出整个选择结构;如果没有任何一个表达式值为 “真” ,则执行最后一个 else 后面的语句 n+1。
  2. 不管有多少分支,程序在执行完一个分支后其余的分支将不再执行。
  3. else if 不能写成 elseif ,即 else 和 if 之间需要有空格分隔。
  4. if 语句的嵌套层数没有限制,可以多重嵌套。多重嵌套可以扩展选择的分支数量,但嵌套的层数太多会增加变成的难度。因此,嵌套的层数不宜过多。


② 在 if-else 语句的任一分支上嵌套单分支的 if 选择结构或双分支的 if 选择结构

【格式】

if(表达式1)
      if(表达式2) 语句1;
      else 语句2;
else
      if(表达式3) 语句3;
      else 语句4;

需要注意以下几点:

  1. if 后面和 else 后面的语句可以再包含 if 语句。
  2. 需要注意的是,else 总是与前面最近的并且没有与其他 else 匹配的 if 相匹配。

 


(4)多分支选择语句( switch 语句

多分支选择语句:除了 if 语句的嵌套可以实现多分支选择结构外,C 语言还提供了一种直接 实现多分支选择结构的 switch 语句。
switch 语句的一般形式:
【格式】
switch(表达式)
{
    case 常量表达式1:语句组1;break;
    case 常量表达式2:语句组2;break;
    …
    case 常量表达式n:语句组n;break;
    [default:语句组n+1;[break;]]
}
【功能】
  1. switch 后面的 “表达式” 常用的是字符型或整型表达式。
  2. “常量表达式” 是由常量或符号常量组成的表达式,所有常量表达式的值必须互不相同。
  3. 当 switch 后面的 “表达式” 的值,与某个 case 后面的 “常量表达式” 的值相等时,则执行 case 后面的语句(组),当执行到语句 break; 时,跳出该 switch 语句,转而执行 switch 语句的下一条语句。
  4. 如果 switch 后面 “表达式” 的值没有与任何一个 case 后面的 “常量表达式” 的值相等,则执行 default 后面的语句(组)。之后,执行 switch 语句的下一条语句。

【说明】
  1. 每个 case 后面的 “常量表达式” 的值,必须各不相同,否则会出现相互矛盾的现象。
  2. case 后面的 “常量表达式” 仅起到语句标号的作用,并不进行条件判断。系统一旦知道入口标号,即从此标号开始执行,不再进行标号判断,所以必须加上语句 break; ,以便结束 switch语句。
  3. 程序的执行结果与各 case 和 default 子句的先后次序无关。
  4. 多个 case 子句,可共用同一个语句(组)。
  5. switch 语句实现的多分支选择结构,完全可以用 if 语句或 if 语句的嵌套实现。
  6. break 语句是 C 语言的一种语句,其功能是中断正在执行的语句。在 switch 语句中其作用是执行完某一语句(组)后,跳出该 switch 语句,无条件转至 switch 语句的下一条语句。若省略 break 语句,则执行完某一语句(组)后,将继续执行 switch 语句中其后的所有语句(组)。
  7. default 及其后面的语句(组)可以省略。省略时,若表达式的值和 n 个常量表达式的值均不同,则不执行任何操作就跳出该 switch 语句。
  8. 语句组不需要用一对花括号 {} 括起来。
  9. switch 语句允许嵌套。



五、循环结构程序设计

【说明】
  1. 语句又称为 “循环体” ,可以是任何语句(除了数据定义语句外),通常是复合语句。
  2. 表达式称为 “循环控制条件” ,可以是任何类型的表达式,常用关系或逻辑表达式。
  3. 先判断后执行循环体。即表达式不成立时,循环体最少执行 0 次。
  4. 当循环体内无改变表达式的语句(例如 i++)时,while(1) 将是死循环。
  5. 若循环体中又含有“循环语句” ,则称为循环的嵌套,即多重循环。
  6. 在书写格式上建议语句(循环体)比 while 缩进若干格,以便识别重复执行的的操作。

(1)当型循环结构(while 语句

 

 


(2)直到型循环结构(do-while 语句

do-while 语句主要用于实现直到型循环结构,其一般形式:
【格式】
do 语句;
while(表达式); /*本行的分号不能省略*/
【功能】
  1. 执行语句。
  2. 计算表达式,如果其值为 “真”(非 0 ),则转置 1 继续循环;否则,转至 3 。
  3. 执行 do-while 语句的下一条语句。

【说明】
  1. 语句又称为 “循环体” ,可以是任何语句(除了数据定义语句外),通常是复合语句。
  2. 表达式称为 “循环控制条件” ,可以是任何类型的表达式,常用关系或逻辑表达式。需要注意的是,表达式必须用圆括号括起来,其后有一个分号。
  3. 先执行循环体,在判断循环控制条件。适用于无论循环控制条件是否成立,先执行一次循环体的情形。此外,do-while 语句能够实现的功能 for 语句也能实现,而且更简洁。
  4. 若循环体中又含有 “循环语句” ,则称为循环的嵌套,即多重循环。
  5. 在书写格式上建议 do 和 while 对齐,以便识别重复执行的操作。

 


(3)次数型循环结构(for 语句

for 语句主要用于实现次数型循环结构。for 语句的一般形式:
【格式】
for(表达式1;表达式2;表达式3)
语句;
【功能】
  1. 计算表达式1,实现变量赋初值。
  2. 计算表达式2,如果其值为非 0 ,则执行3;否则转至4。
  3. 执行语句,并计算表达式3, 然后转至2。
  4. 不执行语句,退出 for 循环,执行 for 语句的下一条语句。

【说明】
  1. “表达式1” 的作用是对循环控制变量赋初值;“表达式2” 的作用是控制循环的条件;“表达式3”的作用是循环后修正变量,使循环趋于结束。
  2. “表达式1” 可以是任何类型,其后有一个分号, “表达式1” 可以省略。
  3. “表达式2” 可以是任何类型,其后有一个分号, “表达式2” 可以省略。省略时相当于 “表达式2” 的值永远为 “真”(非 0 ),所以循环将一直执行,这种情况称为 “死循环” ,一般应避免。
  4.  “表达式3” 可以是任何类型,其后没有分号, “表达式3” 可以省略。
  5.  “语句” 又称为 “循环体” ,可以是任何语句(除数据定义语句外),通常为复合语句。
  6. “表达式1” “表达式2” 和 “表达式3” 均可以省略,甚至三者全部省略,但它们之间的分号不能省略。
  7. 书写格式上建议以 for 为准,语句缩进若干格,以便识别重复执行的操作。
  8. 当 “表达式1” 和 “表达式3” 省略时,相当于 while 循环,即先判断后执行循环体,循环体至少执行 0 次;当 “表达式3” 省略时,则循环体内应有改变 “表达式2” 的语句;当 “表达式2” 省略时,无终止条件,则循环体内应有跳出该循环的语句,如 break、goto、exit() 或 return 等。


(4)break 语句(强制终止循环)

【格式】 break;
【功能】强制结束当前的循环,不在执行循环体中 break 语句后面的语句。
【说明】
  1. break 语句能用在三种循环语句和 switch 语句中,其作用是跳出本层循环或跳出 switch 语句。
  2. 通常,break 语句与 if 语句联合使用,表明程序在满足一定条件下提前结束循环,在循环体中单独使用 break 语句是没有意义的。

 


(5)continue 语句(结束本次循环)

【格式】 continue;
【功能】立即结束本次循环,转去判断循环控制条件是否成立,即跳过 continue 之后的语句,重新判断循环控制条件,决定是否继续执行循环。
【说明】
  1. continue 语句只能用于三种循环语句的循环体中。
  2. 通常,continue 语句与 if 语句联合使用。在循环体中单独使用 continue 语句是没有意义的。


(6)break 语句和 continue 语句的区别

break 语句和 continue 语句的区别主要体现在:
  1. break 语句能用于三种循环语句和 switch 语句,continue 语句只能用于三种循环语句。
  2. continue 语句的作用是强制结束本次循环,而不是终止整个循环过程;break 语句的作用是终止整个循环过程,不再判断循环控制条件是否成立。
需要注意的是,循环嵌套时 break 语句和 continue 语句均只影响包含它们的最内层循环,与外层循环无关。

(7)循环的嵌套 

  1. 循环语句的循环体内又包含另一个完整的循环结构称为循环的嵌套。
  2. 多重循环是嵌套的循环结构,外面的循环语句称为“外层循环” , “外层循环”的循环体中的循环称为“内层循环” 。
  3. 原则上,循环嵌套的层数是任意的。
  4. for 语句、 while语句 和 do-while 语句都允许循环的嵌套。
  5. 多重循环中,内层循环必须完整地包含在外层循环的循环体中,不能出现内、外层循环体交叉的情况,但是允许在外层循环体中包含多个并列的内层循环。

猜你喜欢

转载自blog.csdn.net/qq_39720249/article/details/129891988