C语言程序设计
2009-7
机械工业出版社
张宝森
283
“有3个苹果放在桌子上,找出最大的一个,怎么找呢?”一些学生会不以为然。“如果有十几个苹果,并蒙上眼睛,找出其中最大的一个,又怎么找呢?”学生们会感到茫然。“如果编写程序让计算机完成这项任务,程序怎样编写呢?”学生们会不知所措。 上述第1个问题,反映了人对人与计算机在处理问题方法的认识上存在的模糊性,人“一眼”就能看出最大的,而计算机要两两比较。似乎人与计算机处理问题的方法存在差异。实际上,人“一眼看出”是飞快地进行了两两比较,这种“飞快”的程度已经让人感觉不出或意识不到所用的方法了。 第2个问题,反映了人处理问题的方法是否有条理性。尤其是“当把眼睛蒙上”时,更需要有一个条理化的方法。有了条理化的方法,人和计算机处理问题就没有什么不同了。所以程序设计在于找到解决问题的办法(算法),而编程能力在于把这个算法条理化,描述成适合计算机的操作方式。 第3个问题,反映了解决问题的编程方法——用计算机语言来表述解决问题的步骤。 因此笔者认为,计算机程序设计课程的最终任务是在借鉴大量编程经验的基础上,引导学生构建对问题的解决方案,并用程序设计语言表述出来。虽然人们会认为该课程的另一个任务是涉及程序语言本身的知识,但是笔者认为,程序语言本身的知识也是为设计程序服务的,完全可以通过实际的应用而体现出来。 本着上述这样的指导思想,本书从实际问题的应用出发,先构思解题的方案,再给出程序。书中例题都是经过精选的,一方面介绍典型的编程经验,另一方面引导学生构思解决方案。 全书共分为9章,第1~3章介绍程序设计基本概念、过程和c语言的基本语句与实际应用。第4~6章围绕算法的设计与实现,展开函数、数组与指针的内容讲解。第7~9章针对客观事物的描述(表示)、存储与处理,述及了链表、文件和开发程序所用的程序结构。 笔者认为,程序设计语言对开发程序来说,它是一个整体,不应当将各部分割裂开来;学习的过程是一个渐进积累的过程,要反复实践才能熟练。因此本书打破按知识体系组织教材的做法,将结构体、指针概念等以问题的实际要求方式提到各章中,意图是从应用中学,先用起来,有感性认识,再给出系统的知识介绍,达到反复学习与实践的目的。教师在备课时,应当注意到这点,并建议补充相关的习题或实验。 本书第1、4章由李智编写,第2章由尉林明编写,第3、5、6、7章由张宝森编写,第8、9章由周海燕编写,全书由张宝森统稿。此外,上述每位老师对全书各章均参与了讨论、修改和校对,尤其是周海燕副教授通审了全稿,提出了大量的宝贵建议。 虽然作者竭力将十几年的教学经验融汇于本书,但由于水平有限,书中难免出现不足之处,希望读者能够不吝时间与精力,给予批评和指正,在此先表示衷心感谢。
作为普通高等院校的程序设计基础教材,《C语言程序设计》针对学生的特点和认知规律,按照“从问题到方法,再到程序”的编写思路,打破按语法知识体系结构组织教材内容的传统方法,由浅入深,循序渐进,全面、系统地介绍了C语言程序设计及其应用知识。全书主要涉及了程序设计基础,顺序、分支和循环结构的程序设计,函数,数组,指针,结构体、文件与编译预处理命令等,并在相应的章节论述了程序运行模式,逻辑意图的表达,迭代与穷举的基本算法,复杂问题、任务的分解,现实问题描述与处理,数据的保存和重建等基本和必要的程序设计技术,尤其对指针的概念进行了深入本质的论述。 《C语言程序设计》通过100多个例题,介绍了设计程序所经历的过程,注重对学生思维的训练和编程经验的积累,培养其应用能力。《C语言程序设计》各章都配有习题,附录中提供了常用的资料。 《C语言程序设计》可作为大学本科或专科计算机和与非计算机相关专业的“C语言程序设计”教材,也可作为计算机软件开发者的入门书籍。
出版说明前言第1章 简单的C语言程序1.1 程序设计和程序设计语言1.1.1 程序设计的基本概念1.1.2 可执行程序的形成与程序运行过程1.1.3 算法1.1.4 结构化程序设计及N-S流程图的应用1.2 简单的C语言程序1.2.1 文字输出与顺序结构1.2.2 带数值的文字输出1.2.3 程序结构与函数1.3 C语言的基本语法规则1.3.1 关键字和标识符1.3.2 常用基本数据类型、常量和变量1.4 算术运算表达式1.4.1 基本算术运算符1.4.2 算术运算符的优先级、结合性和算术表达式1.5 不同数据类型之问的混合运算1.5.1 自动类型转换1.5.2 强制类型转换1.6 赋值运算、逗号运算和自加、自减运算1.6.1 赋值运算符和表达式1.6.2 自加、自减运算符和表达式1.6.3 逗号运算符和表达式1.7 程序的顺序结构1.7.1 程序的顺序结构与语句分类1.7.2 赋值语句1.7.3 数据的输出与输入1.7.4 顺序结构程序设计举例1.7.5 复合语句和空语句1.8 习题第2章 程序的分支结构2.1 分支结构概述2.2 关系表达式与逻辑表达式2.2.1 关系运算、逻辑运算及其表达式2.2.2 应用实例2.2.3 相同的逻辑与相反的逻辑2.2.4 关系运算和逻辑运算的优先级2.3 分支结构与if语句2.3.1 实现单分支结构的if语句2.3.2 实现双分支结构的if语句2.4 用嵌套的if语句实现复杂的逻辑2.5 多分支结构与switch语句2.5.1 用switch语句实现多分支的程序结构2.5.2 switch语句的执行逻辑与break语句的作用2.6 条件表达式及其分支结构2.7 分支结构的应用实例2.8 本章小结2.9 习题第3章 循环结构3.1 循环的概念3.1.1 循环的机制和3个要素3.1.2 while、for循环语句及其流程图3.2 设计循环条件和循环体3.2.1 累加、阶乘的循环及其变化3.2.2 多项式计算3.3 dowhile循环及其实例3.3.1 dowhile循环3.3.2 dowhile循环的应用3.3.3 各种循环语句的特点3.4 用if语句和goto语句组合形成循环3.4.1 语句标号3.4.2 goto语句3.5 循环体内使用if语句实现数据处理3.6 循环过程的控制3.6.1 用if与break组合中止循环3.6.2 用if与continue组合“继续”循环3.7 多重循环3.7.1 二重循环的概念与运行机制3.7.2 双重循环的应用3.8 简单的结构体类型3.8.1 结构体类型定义3.8.2 结构体类型变量的定义和成员的引用3.9 枚举类型3.9.1 枚举类型的定义3.9.2 枚举类型和变量的定义及其运算3.10 本章小结3.11 习题第4章 算法与函数4.1 算法在程序设计中的应用4.2 算法举例4.2.1 迭代4.2.2 穷举4.3 函数的概念与用函数实现算法4.3.1 函数的定义4.3.2 函数的调用4.4 函数的递归调用4.4.1 递归4.4.2 递归调用举例4.5 函数的指针形参4.5.1 对函数的困惑4.5.2 再论形参与实参4.6 本章小结4.7 习题第5章 数组5.1 一维数组5.1.1 一维数组的定义、元素引用与初值5.1.2 数组的输入与输出5.2 在函数间传递一维数组5.2.1 数组存储结构与指针5.2.2 利用指针形参接收数组名5.3 一维数组的常用算法5.4 字符数组与字符串5.4.1 字符数组与字符串的概念5.4.2 字符串操作的库函数与常用算法5.5 二维数组5.5.1 二维数组的概念与初值问题5.5.2 二维数组在函数间的传递与应用5.6 数组与文件5.6.1 数据保存到文件——fprintf()的应用5.6.2 读取文本文件内的数据——fscanf()的应用5.7 数组的应用5.8 本章小结5.9 习题第6章 指针6.1 指针概述6.1.1 直接存取与间接存取6.1.2 变量在内存的存储6.1.3 指针变量与指向6.1.4 地址与指针的异同6.2 变量、数组与指针变量6.2.1 取得变量的指针与给指针变量赋值6.2.2 用指针存取数据6.2.3 使用指针的风险与安全措施6.3 指针运算6.3.1 指针运算的种类6.3.2 指针自身变化6.3.3 指针与整型类数据的表达式6.3.4 再论数组与指针的关系6.4 内存的动态分配6.4.1 内存动态分配的函数与应用6.4.2 无名变量与无名数组6.4.3 函数返回指针6.4.4 指针的指针与指针数组6.5 二维数组与指针6.5.1 字符串数组6.5.2 行指针及其二维数组元素寻址6.6 指针与结构体6.6.1 结构体类型的指针6.6.2 结构体数组与指针6.7 指向函数的指针6.8 本章小结6.9 习题第7章 数据结构及其常用算法7.1 数据类型与客观事物的描述7.1.1 数据类型7.1.2 客观事物的描述7.1.3 信息描述7.1.4 位段类型7.1.5 typedef定义类型别名7.2 数据组织的基本方式……第8章 文件第9章 C程序的结构
第1章 简单的C语言程序 程序设计是计算机软件开发的基础。掌握程序设计可以深入了解计算机的工作过程,可以更高效、可靠、安全地直接指挥计算机工作。C语言是高级程序设计语言之一,它概念丰富,功能强大,应用广泛。C语言程序设计涵盖了大量计算机工作原理性的知识,是任何有志从事软件开发人员的必修课。 四知识点 1)程序设计和程序语言的基本知识。 2)算法的基本概念。 3)简单的C语言程序结构。 4)C语言的基本语法规则。 5)顺序结构的特点。 6)字符串的输出。 1.1 程序设计和程序设计语言 1.1.1 程序设计的基本概念 在生活中,“程序”即所需完成的工作,按时间先后安排的工作步骤。 在人们的生活中处处事事都离不开“程序”。例如,一般情况下,每个人的日常活动总是遵循着这样一个步骤: 1)早上起床,洗漱,吃早饭,然后进行上午时间段的各项活动。 2)中午吃午饭,休息片刻,进行下午时间段的各项活动。 3)晚上吃晚饭,进行一些晚间的活动,晚间活动后睡觉。 这些步骤就是人们日常生活的“程序”。实际上,做什么事情都有一定的程序,大家可以举出很多类似的例子。人们对熟悉的事情可能在不经意的过程中就一步一步地完成了,但是有些不熟悉的事情,像航天器的发射、奥运会举办过程的细节,却需要人们事先制订计划,研究方案,进行详细的设计,才能很好地完成。 在计算机里,“程序”两字的含义就是为了让计算机能够自动完成各项任务,而事先准备的指令序列。 计算机的一个程序要完成某个计算任务,必须对这个任务进行描述。描述应包括两方面的内容,一个是对客观“对象”的描述,称为“数据结构”;另一个是对“对象”施加的“操作”的描述,称为“算法”。