
本书共分9章,以程序设计思想为中心,以培养应用型人才为目的,以期全面提高学生的应用实践能力和创新能力。本书的显著特点是深入浅出,知识点突出;案例丰富,启发性强;理论与实践并重,强化算法思想和规范化编程。
本书可作为计算机类、电气信息类的本科教材,也可作为广大科技工作者业务学习的参考用书。
本书是山东省精品课程——高级语言程序设计的配套教材。
C语言程序设计是计算机专业及理工类各专业重要的基础课程之一。作为程序设计的入门读物,C语言的学习,对于大学生理解程序设计的思想以及进一步学习后续专业课程有着非常重要的作用。
在目前的程序语言教学中,往往把重心放在程序语言语法的学习上,忽视了对学生进行程序设计思想的培养。这样造成的后果是: 学生上课能听懂,自己却不会写程序,不能从整体上理解和把握程序设计。对程序语言类课程而言,这种教学模式的弊大于利。从教学实践上看,以程序设计思想为中心的授课模式,比以程序设计语法为中心的授课模式,更能被学生理解和掌握。
鉴于此,我们在程序设计语言的教学中,以介绍程序设计思想为中心,围绕程序设计中的典型问题,建设应用型人才培养平台,全面提高学生的应用实践能力和创新能力。
1. 特点
本教材的主要特点如下所示。
1) 深入浅出,知识点突出
本书以程序设计为基本线索,深入介绍C语言的语法与特点,采用“精讲多练”模式,详略得当,重点突出。每一部分,首先给出知识要点,再通过典型例题加深对知识点的理解和巩固,并且所选例题尽量涵盖知识点涉及的各种算法类型,使初学者易于掌握程序设计方法。
2) 规范化编程
要想成为一个“合格”的程序员,就必须有好的编程习惯和规范。这样既可以提高程序的可维护性,也可提高开发速度和效率。本书所有的例题都采用规范化编码,努力引导读者养成良好的编程习惯,编写出可读性强、易于维护的程序代码,为以后的学习打下良好的基础。
3) 案例丰富,启发性强
本书精选了大量例题,所有例题由五部分组成,问题的提出、解题思路、程序清单、程序结果以及程序分析,使读者加深对程序的理解。有些案例留有进一步探讨的余地,从而不断激发读者的学习兴趣。
4) 理论与实践并重,强化算法思想和编程能力的培养
为提高读者应用程序设计的能力,我们专门编写了综合程序设计一章,通过几个现实生活中的实例,将本书所讲授的所有知识点进行综合。通过实例讨论了问题的分析和分解,划分模块,对同一个问题,采用不同的存储结构解决,以提高读者的分析问题和解决问题的能力。
2. 内容安排
第1章C语言入门: 介绍简单的C程序组成、C程序的运行环境,算法的特性以及描述算法的方法,结构化程序设计思想。
第2章数据类型和表达式: 介绍C语言的基本数据类型,数据的表示,常量和变量,运算符和表达式,以及表达式的计算过程。
第3章C语言的基本控制结构: 介绍了C语言的三种基本结构,包括C语句的种类、数据的输入与输出、选择结构和循环结构,并通过一系列程序实例分析了选择和循环结构的构造过程。
第4章数组: 介绍了数组的概念、定义及使用。主要介绍一维数组、二维数组和字符数组,通过实例介绍了数组的应用。给出了几个常用的字符串函数。
第5章函数: 介绍了函数的分类,函数的定义和调用,函数的参数传递,参数传递的两种方式,函数的嵌套调用和递归调用,全局变量和局部变量、变量的存储类型。
第6章指针: 介绍了指针变量的定义与使用方法,指向变量的指针变量、指向数组的指针变量、指向函数的指针变量,返回指针值的函数、指针数组和多级指针,以及这些指针变量的应用。
第7章结构体与链表: 介绍了结构体、共用体、枚举类型和用户自定义类型的定义和使用。链表的建立、遍历、查找、插入和删除等基本操作。
第8章文件: 介绍了文件的概念,文件的建立、文件的读写操作,以及文件指针的定位操作。
第9章综合程序设计: 通过几个实用性和趣味性实例,将C语言的基本内容和编程技巧进行了充分结合,以提高学生的编程能力。
本书具体编写分工如下: 第1章、第2章、第6章由宋丽华编写,第3章由韩婷婷编写,第4章、第5章由张小峰编写,第7章、第8章由雷鹏编写,第9章由高文卿、王少杰编写;全书策划和定稿工作由宋丽华负责。
作为我校软件工程专业应用型人才培养的系列教材之一,本书曾作为校内讲义多次印刷,在计算机类、电气信息类和信息类等专业中使用。这次,借在清华大学出版社正式出版之际,在原讲义的基础上,结合我们多年的教学实践与改革,进行了较大的修改,使其既能适合在校学生学习,又能适合其他读者阅读。
在本书的规划和写作过程中,鲁东大学信息与电气工程学院邹海林教授对书稿进行了审阅,并提出了许多建设性的建议,在此深表感谢。清华大学出版社的广大员工也为教材的出版付出了大量的心血,使本书得以及时出版,在此一并致以衷心的感谢。
在本书的编写过程中,作者参阅了国内外诸多同行的著作,这里不再一一列举,在此向他们致以谢意。
限于作者学识水平,书中在具体内容的选择取舍、程序设计思想的介绍等方面肯定存在着不妥之处,恳请专家和读者提出批评指正。
作者
2014年5月于烟台
第1章C语言程序设计入门/1
1.1C语言简介/1
1.2简单的C程序举例/2
1.3程序设计基本过程/5
1.3.1问题分析/5
1.3.2算法设计/6
1.3.3程序编码/8
1.3.4分析调试/9
1.3.5运行维护/9
1.4C语言编程平台——Visual C++6.0简介/9
1.4.1Visual C++6.0界面介绍/10
1.4.2编辑、编译和运行程序/11
1.4.3程序调试/14
1.5小结/15第2章数据类型与表达式/16
2.1常量/16
2.1.1整型常量/16
2.1.2实型常量/17
2.1.3字符常量/17
2.1.4字符串常量/18
2.1.5符号常量/18
2.2变量/19
2.2.1变量的定义/19
2.2.2变量的类型/20
2.2.3变量赋初值/24
2.3运算符和表达式/25
2.3.1算术运算符和算术表达式/25
2.3.2赋值运算符和赋值表达式/27
2.3.3关系运算符和关系表达式/28
2.3.4逻辑运算符和逻辑表达式/29
2.3.5条件运算符和条件表达式/31
2.3.6逗号运算符和逗号表达式/33
2.3.7求字节数运算符(sizeof)/33
2.4数据类型的转换/34
2.4.1自动转换/35
2.4.2强制类型转换/36
2.5小结/36第3章C语言的基本控制结构/38
3.1顺序结构/38
3.1.1C语句/38
3.1.2数据的输入输出/40
3.1.3顺序结构程序举例/48
3.2选择结构/50
3.2.1简单if语句/50
3.2.2ifelse语句/52
3.2.3if语句的嵌套/54
3.2.4多分支选择结构——switch语句/58
3.2.5选择结构程序举例/60
3.3循环结构/64
3.3.1while语句/65
3.3.2dowhile语句/68
3.3.3for语句/71
3.3.4循环的嵌套/75
3.3.5break和continue语句/77
3.3.6循环结构程序举例/79
3.4小结/85第4章数组/87
4.1一维数组/87
4.1.1一维数组的定义/87
4.1.2一维数组的引用/88
4.1.3一维数组的初始化/89
4.1.4一维数组的应用/90
4.2二维数组/95
4.2.1二维数组的定义和引用/95
4.2.2二维数组的初始化/97
4.2.3二维数组的应用/99
4.3字符数组和字符串/104
4.3.1字符数组的定义和引用/104
4.3.2字符串/105
4.3.3常用字符串函数/107
4.3.4字符数组的应用/111
4.4小结/114第5章函数与模块化设计/115
5.1概述/115
5.2函数的定义与调用/117
5.2.1函数的定义/117
5.2.2函数的调用/119
5.2.3函数的声明/121
5.3参数的传递/122
5.3.1普通变量作为函数参数/122
5.3.2数组元素作为函数参数/124
5.3.3数组名作为函数参数/126
5.4函数的嵌套与递归调用/130
5.4.1函数的嵌套调用/130
5.4.2函数的递归调用/133
5.5全局变量与局部变量/137
5.6变量的存储方式/140
5.6.1自动(auto)变量/141
5.6.2静态(static)变量/141
5.6.3寄存器(register)变量/144
5.6.4外部(extern)变量/145
5.7典型例题/147
5.7.1最大公约数问题/147
5.7.2100以内的素数判定问题/148
5.7.3偶数分解问题/149
5.7.4勾股定理问题/150
5.8小结/152第6章指针/153
6.1指针初探/153
6.1.1指针变量的定义/154
6.1.2指针变量的引用/155
6.1.3指针变量作为函数参数/157
6.2指针与数组/163
6.2.1指向一维数组的指针/163
6.2.2指向多维数组的指针/167
6.2.3指向数组的指针作函数参数/170
6.3指针与字符串/177
6.4指向函数的指针和返回指针的函数/180
6.4.1指向函数的指针/180
6.4.2返回指针的函数/183
6.5指针数组与多级指针/185
6.5.1指针数组的定义和引用/185
6.5.2多级指针/192
6.5.3main函数的参数/193
6.6内存的使用/194
6.6.1动态内存分配/195
6.6.2释放动态分配的内存/196
6.6.3重新分配内存/196
6.7小结/198第7章结构体与链表/199
7.1结构体/199
7.1.1结构体类型声明/199
7.1.2定义结构体类型变量/200
7.1.3结构体成员的访问/201
7.1.4结构体变量的初始化/203
7.1.5结构体数组/204
7.1.6指向结构体的指针/205
7.1.7结构体与函数/208
7.2类型定义符typedef/212
7.3链表/213
7.4共用体/222
7.5枚举类型/224
7.6小结/226第8章文件/228
8.1文件概述/228
8.2文件结构体FILE/229
8.3文件的打开与关闭/230
8.4文件的读写/231
8.4.1fputc函数和fgetc函数/232
8.4.2fread()和fwrite()函数/236
8.4.3fscanf函数与fprintf函数/239
8.4.4fgets函数与fputs函数/241
8.5文件的定位与随机读写/242
8.6小结/244第9章综合程序设计/246
9.1通过菜单选择趣味程序/246
9.1.1设计要求/246
9.1.2程序设计中的主要知识点/246
9.1.3总体设计/246
9.1.4具体实现/249
9.1.5程序运行结果/254
9.2集合的基本运算/255
9.2.1设计要求/255
9.2.2程序设计中的主要知识点/256
9.2.3总体设计/256
9.2.4具体实现/259
9.2.5程序运行结果/271
9.3n皇后问题/273
9.3.1设计要求/273
9.3.2程序设计中的主要知识点/273
9.3.3总体设计/274
9.4学生成绩管理系统/277
9.4.1设计要求/277
9.4.2程序设计中的主要知识点/277
9.4.3总体设计/278
9.4.4具体实现/279
9.4.5程序运行结果/286