1.5 自主学习

1.5.1 结构化程序设计概念

20世纪60年代,由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。20世纪70年代提出了结构化程序设计(Structured Programming)的思想和方法,这使得软件的开发和编程效率得到了极大的改善。

结构化程序设计这一术语不仅包括结构化程序设计理论本身,还包括自顶向下、逐步求精程序设计和模块化程序设计思想。

(1)自顶向下、逐步求精的程序设计

所谓自顶向下,就是首先从全局出发进行整体设计,然后,依据整体设计按功能向下层逐层分解。所谓逐步求精,就是对上层任务按功能逐层进行细化。一般来说,一个大的任务可分解为若干子任务,而每个子任务又可以继续分解为若干个更小的子任务。这样向下逐层细化直至每个子任务仅处理一个简单的容易实现的问题。

(2)模块化程序设计

模块化程序设计指的是在自顶向下、逐步求精程序设计的过程中所得出的一个个功能简单的子任务的处理程序,这些处理程序称为“功能模块”。一个大程序就是由若干个这样的功能模块组成的。每一个模块可以分配给不同的程序设计者去完成。模块化程序设计方法能使程序设计变得简单而直观,并可提高程序的易读性和可操作性。

(3)结构化程序设计理论

结构化程序设计理论提出只应用三种基本控制结构就可以解决任何复杂的问题。这三种结构是:顺序结构、选择结构和循环结构。

①顺序结构:顺序结构就是一组逐条执行的可执行语句。按照书写顺序,自上而下执行。

②选择结构:选择结构是一种先给定条件进行判断,并根据判断的结果执行相应命令的结构。选择结构将在本书后面的章节中予以介绍。

③循环结构:循环结构是多次重复执行同一组命令的结构。循环结构将在本书后面的章节中予以介绍。

1.5.2 顺序结构程序设计

顺序结构程序设计就是将语句按照正常的逻辑规则由上而下书写。顺序结构程序设计的步骤可以归纳为:

(1)用预处理包含文件或者进行宏定义(不是必需的,视具体情况而定);

(2)定义变量(分配内存空间);

(3)为变量赋初值(可以用赋值语句或者输入函数);

(4)计算(处理数据);

(5)输出结果(用输出函数)。

【例1.10】编写程序,输入x、y的值,交换它们的值,并输出交换前后的数。

分析:交换x、y的值,通常需要借助第三个变量来解决问题。首先将x的值赋值给temp,再将y的值赋值给x,由于x的值存放在了temp中,最后将temp的值赋值给y即可。上述赋值顺序不能随便交换,否则将产生意想不到的结果。

程序源码:

运行结果如图1-11所示。

图1-11 例1.10运行结果

1.5.3 printf()函数的其他格式

printf()函数除了上述已经介绍的格式符以外,还有其他一些格式转换说明符,如表1-3所示。

表1-3 printf()函数的其他格式符

(1)o格式转换说明符,以八进制形式输出整型数。它是将整型数视为无符号数(即16位均视为数值),因此输出的数值不带符号。例如,int a=-1;printf("%d,%o",a,a);则输出结果为-1,177777。

(2)x格式转换说明符,以十六进制形式输出整型数,不可能出现负的十六进制数。例如,int a=-1;printf("%d,%x",a,a);则输出结果为-1,ffff。

(3)u格式转换说明符,以十进制形式输出无符号数(unsigned型数据)。一个带符号整型数(int型)也可以用%u格式(视为无符号数)输出;一个无符号整数(unsigned型数据)也可以用%d格式输出;unsigned型数据也可以用%o或%x格式输出。

(4)e格式转换说明符,以指数形式输出实数。%e不指定输出数据所占的宽度和数字部分的小数位数,有的C语言编译系统自动给定6位小数,指数部分占5位,如e+003,其中e占1位,指数符号占1位,指数占3位。小数点前必须有而且只有一位非零数字。例如,printf("%e",1234.578);输出:1.234578e+003。