前言



在长期的“程序设计基础”课程教学,以及本书成文的过程中,我的同事杨武、李梁、黄贤英为课程的建设起了很大作用,陈媛、成卫、罗颂为本书案例的推敲、形成提出了很好的建议。参加本书撰写工作的还有曹琼(参加撰写第10和11章)、黄继平(参加撰写第2~4章)、刘亚辉(参加撰写第13、14章及附录),他们一直是我教学的伙伴。此外,瞿春霞、罗辉、段志丽、王景慧、王玉柯、张亮同学阅读了本书稿,为书稿的整理做出了大量工作。在此一并感谢我的同事和同学们所付出的劳动。
欢迎使用本书。
研读和使用本书,将让你理解程序设计方法,掌握C语言编程技术,跨过程序设计的入门关,成为一名能熟练使用程序设计方法和技术、能编写C语言程序的程序员。
多年以来,我们一直把C语言作为学习程序设计的起步语言。一方面是由于C语言本身功能强大,被专业人士广泛应用于各类开发中,从设备驱动程序和操作系统组件,到大规模应用程序,它都可以胜任;另一方面,C语言是结构化程序设计语言。用C语言编写程序,既简洁灵活,又要求程序员从数据类型到算法逻辑,都必须做充分的分析、设计,并在编码时高度遵循数据类型的操作规范。如果是一名程序设计初学者,在学习C语言时必须应对来自问题分析、数据分析到算法设计、代码逻辑等各方面的问题,这种压力和挑战可以使学习者迅速成长。
本书作者希望读者通过本书,能够系统地学习到C语言的语法知识和用C语言编程的技术。同时,本书不仅限于陈述C语言的知识体系,而是力图从程序设计方法的角度,向读者展现程序设计这片森林。因此,本书内容编排不以C语言的知识体系为脉络展开,而是按照“程序的结构→程序中的数据→应用”的思路规划内容: 上篇为计算机解题的一般性方法、结构化编程方法及C语言程序设计技术;中篇为问题中的复杂数据类型,包括其应用场景,以及如何用C语言存储和操作复杂数据类型;下篇为应用案例,讨论编程方法、技术在具体问题中的应用。
本书既系统地介绍C语言的知识,又全面呈现结构化程序设计原理和方法,使读者能够“既见树木,又见森林”,形成对计算机解题方法的整体认知。此外,本书还在每部分知识后设置有案例分析。这些案例都是从实际问题抽象出来的典型案例,其目的是向读者呈现从问题分析到编码实现、测试,再到最后的结果分析这一计算机解题的全过程。
如何学习程序设计
为了能熟练掌握和应用程序设计方法与技术,必须善于运用自己热爱思考的大脑和灵巧的双手,同时,还应该有十分严谨的学习态度。如果你觉得有些知识和技术的运用难度较大,没有关系,程序设计能力的形成肯定不是一蹴而就的,你可以通过反复练习来打磨自己的技术。
另外,程序设计不等同于编码,需要读者从程序设计原理、方法、技术三方面去思考和学习。学习时,追求掌握C语言是第一步,但这并不是程序设计的目标。事实上,运用程序设计方法和技术解决问题才是真正的目标,用C语言编程只是达到目标的一种手段和一个环节。正如我们学习拿筷子一样,其实拿起筷子并不是目标,而只是为了达到目标的一种手段。因此,学习者虽然走在汲取知识的道路上,但其目标却远超过掌握知识本身。本书作者希望读者能对此有充分的理解和认知。
程序设计基础前言如何使用本书
本书内容主要为直线式编排,各章前后的内容一般不重复,且保持知识的连贯性,以使学习曲线平滑、连贯。为便于读者前后贯通,对个别知识采用螺旋式编排,这些知识在前后章节中略有重复。对此,本书在相应位置都进行了标识和说明,以便读者对照阅读。读者在使用本书时,只需按章节的编排顺序阅读和学习,即可循序渐进地掌握相关知识和方法。
为了展现知识的来龙去脉,跌宕起伏,本书各章均有导读,介绍该章主要内容、与本书其他内容的承接关系等。建议读者在学习每章时,不要急于走进技术的森林,而是先阅读导读,理解将要学习的内容与全书其余各部分的关联关系,从而更好地规划和开展学习。
本书采用的约定
本书介绍的语言遵循ANSI C标准,所有示例程序都能在支持ANSI C标准的编译器中编译运行。有个别涉及C99、C11标准处,本书都进行了说明。
本书的文本和布局采用了许多不同的样式,以便区分各种不同的信息。大多数样式的含义都很明显。其中,示例程序的样式如下:
#include <stdio.h>
int main()
{
printf("Hello world!\\n");
return 0; 
}
如果是程序中的代码片段,或者单独的示例语句、规则说明等,其样式如下:int x,y;//说明部分

在伪代码描述的算法中,凡是变量均为斜体,其关键字则加粗显示,其样式如下:

1:function changeCF(temperature, type)
2:if type == 'C' then
3:temp ← 5  (temperature - 32)/9
4:else if type == 'F ' then
5:temp ← 9  temperature/5 + 32
6:else
7:temp = 10000.0
8:end if
9:return temp
10:end function

卢玲2022年2月