
本书作为学习C语言编程的入门教材,强化项目实践,重在提高编程能力。本书按照CDIO模式编写,即按照构思(分析)、设计、实现、运行的结构来构建项目模块。本书将“学生成绩管理系统”项目贯穿到全书的每章内容中,项目基于工作任务,工作任务基于教学案例,项目任务中融入基础知识。本书内容包括C语言概述、基本数据类型及运算、顺序程序设计、分支程序设计、循环程序设计、模块化程序设计、简单构造类型、复杂构造类型、指针、文件组织与使用、C语言的高级应用。
本书可以作为计算机及相关专业程序设计课程的入门教材,也可作为参加计算机等级考试和计算机编程人员的参考书。
本书作为高职高专学生学习C语言编程的入门教材,着重讲述C语言程序设计的基础知识、基本算法和结构化程序设计的基本方法。本书力求帮助学生打好程序设计的基础,强化项目实践,重在提高学生的编程能力。本书具有以下特色。
(1) 知识体系层次分明。本书在结构方面针对高职高专学生自身的特点与培养目标,从高职高专学生的思维方式、理解能力以及在后续课程中的应用等诸多方面出发。在编排顺序方面较其他教材也有较大的改变,框架结构分为三个部分: 第一部分是C语言基础,包括第1~6章,内容有C语言概述、基本数据类型及运算、顺序程序设计、分支程序设计、循环程序设计、模块化程序设计;第二部分是C语言应用编程,包括第7~10章,内容有简单构造类型、复杂构造类型、指针、文件组织与使用;第三部分是第11章,介绍C语言的高级编程技术,包括位运算及应用、高级语言与汇编语言的混合编程、C51程序设计。
(2) 零起点、循序渐进,系统学习。在内容体系上,本书做到了循序渐进、系统学习、广泛实践,便于学生接受。通过第一部分的学习,学生可以基本掌握利用C语言进行结构化程序设计的方法。在学习程序的三种基本结构后,紧接着学习模块化程序设计技术(函数),从而帮助学生接受结构化编程的思想。在第二部分,逐步引入工程项目的实际例子,以提高学生分析问题和解决问题的能力。第二部分中先介绍数组,利用经典的案例,让学生学会如何利用C语言实现数据的处理,如信息系统设计中增加、删除、修改、查找等基本操作,为后面的项目实践打下基础。然后通过对结构体、共用体、枚举类型的介绍,让学生掌握如何运用计算机描述现实生活中的实体对象,如何解决实际问题的方法。指针是C语言的精彩部分,通过前面的学习,学生已经具备一定的编程能力,将指针与数组、函数、结构等结合起来,便能利用指针编写出效率更高的程序。最后介绍如何利用C语言的文件处理功能真正实现对数据的管理,结合前面的项目,使学生能够完成一个完整项目的设计。第三部分为选学部分,主要是引导学生学习,为学生在工作中利用C语言实现实时控制的编程打下基础。
(3) 案例教学、任务驱动、项目实践。本书采用任务驱动、项目实践的教学思想,全书共10个项目,34个任务,每个任务围绕学生成绩管理系统进行,并将该管理系统贯穿到全书的每个项目中,每个项目的完成又基于每个工作任务,每个工作任务基于各个章节的案例,各个项目既有一定的独立性,又相互关联,如项目8~项目10,其任务基本相同,但采用的方法和手段不同。充分考虑程序的共享性、可维护性的工程实践的基本思想,大量采用模块化编程、多人协作编程等技术,使用NS算法描述工具,程序中很多代码是通用的。每个模块的代码量较小,学生很容易实现。采用以上方式,让学生在学完这门课程后,能够掌握程序开发的基本方法,并养成良好的编程习惯。
(4) 讲练结合、自主学习。为避免现在的职业教育中学生只能“抄程序”而不能“写程序”的弊病,必须让学生掌握一定C语言的基础知识。本书将工作任务分解成提出问题、分析问题、讲解问题所需要的基本知识、任务实施、拓展训练等几个教学阶段。每个知识点结合大量案例,这些案例为解决任务而精心编写。教学上采用“讲练结合”的方式,让学生在实践中学习。学生通过相关案例的学习以及拓展训练,可以在教师的指导下完成相关工作任务,并利用课余时间完成项目实践。采用这种方法引导和帮助学生解决实际问题,可以提高学生解决具体问题及自我学习的能力。
(5) 重点突出,层次分明。本书的知识体系按照高级语言程序设计本身教学特征的要求,分为三条线索,即数据类型(基本数据类型、简单结构类型、复杂结构类型、指针)、程序设计的基本方法(顺序程序设计、分支程序设计、循环程序设计、模块化程序设计)、常用算法(算法及描述、数据处理、迭代、穷举、数据文件存储与管理)。本书采用Visual C++ 2010编程环境,适当引入C++的部分内容,如常量的声明、输入/输出流、引用变量等。每章有关键词和小结,部分习题为全国等级考试的精选题目,从多角度帮助学生掌握基础知识。通过知识体系的学习,让学生不但具有一定的实践能力,还具有相应的专业理论基础,为提高学生的专业素质奠定良好的基础。
本书内容翔实、层次分明、结构紧凑,叙述深入浅出,通俗易懂。适合作为高职高专及各类院校的教材,也可作为参加计算机等级考试和其他计算机编程的人员的参考书。
编著者2021年10月
第1章C语言概述1
1.1程序设计语言与C语言1
1.1.1程序设计语言1
1.1.2C语言的发展与特点3
1.1.3C程序的上机调试步骤和方法4
1.1.4任务11C程序的编程环境14
1.2算法及其描述15
1.2.1算法与结构化程序设计15
1.2.2算法的描述17
1.2.3任务12算法的描述22
1.3项目实践程序结构分析23
小结24
习题25
第2章基本数据类型及运算27
2.1C语言的语法特征与程序结构27
2.1.1C程序的结构28
2.1.2C语言的字符集与词汇29
2.1.3任务21理解C语言的结构30
2.2C语言的数据31
2.2.1C语言的数据类型31
2.2.2常量和变量32
2.2.3整型数据34
2.2.4实型数据36
2.2.5字符型数据39
2.2.6变量赋初值42
2.2.7测试数据长度43
2.2.8各类数值型数据之间的混合运算43
2.2.9任务22理解数据在计算机中的表示与存储45
2.3运算符与表达式47
2.3.1运算符的分类47
2.3.2算术运算符与表达式48
2.3.3赋值运算符和赋值表达式49
2.3.4自增、自减运算符51
2.3.5逗号运算符和逗号表达式53
2.3.6任务23理解C语言的算术运算53
2.4项目实践描述学生信息54
小结55
习题56
第3章顺序程序设计61
3.1数据的输入与输出61
3.1.1字符数据的输入与输出62
3.1.2格式化输入与输出63
3.1.3输入/输出流68
3.1.4顺序程序设计71
3.1.5任务31考试成绩绩点的计算73
3.2宏与预定义74
3.2.1宏定义74
3.2.2文件包含80
3.2.3条件编译81
3.2.4#pragma预处理指令83
3.2.5任务32提高程序的可读性与易修改性84
3.3项目实践功能菜单设计85
小结86
习题87
第4章分支程序设计92
4.1分支和条件逻辑92
4.1.1关系运算符和表达式93
4.1.2逻辑运算符和表达式94
4.1.3条件运算符和条件表达式95
4.1.4任务41获得奖学金的条件逻辑97
4.2简单分支程序设计98
4.2.1单分支结构的程序设计98
4.2.2双分支结构的程序设计99
4.2.3任务42判断考试成绩是否合格101
4.3多分支程序设计102
4.3.1if语句的多重选择程序设计102
4.3.2switch语句的多重选择程序设计105
4.3.3任务43求解分段函数107
4.4项目实践判定考试成绩等级109
小结112
习题113
第5章循环程序设计118
5.1循环语句118
5.1.1用while语句处理循环119
5.1.2用dowhile语句处理循环121
5.1.3用for语句处理循环122
5.1.4循环嵌套的使用127
5.1.5任务51统计某门课程的平均成绩128
5.2控制转移语句130
5.2.1break语句130
5.2.2continue语句131
5.2.3goto语句132
5.2.4任务52强制中断循环134
5.3循环程序设计的应用135
5.3.1穷举135
5.3.2迭代137
5.3.3任务53穷举与迭代139
5.4项目实践考试成绩统计141
小结142
习题143
第6章模块化程序设计149
6.1函数149
6.1.1函数的概念150
6.1.2函数的声明与定义151
6.1.3函数的调用153
6.1.4函数间的数据传递155
6.1.5任务61学生成绩统计的模块化编程159
6.2变量的作用域与生存周期162
6.2.1变量的作用域与可见性162
6.2.2变量的生存周期168
6.2.3内部函数和外部函数172
6.2.4任务62多人协作完成一个任务174
6.3嵌套与递归175
6.3.1嵌套176
6.3.2递归177
6.3.3任务63币额数量的计算179
6.4项目实践自动出题181
小结184
习题185
第7章简单构造类型189
7.1一维数组189
7.1.1一维数组的定义与初始化190
7.1.2一维数组元素的引用192
7.1.3一维数组作为函数参数195
7.1.4任务71统计分析学生的考试成绩198
7.2一维数组的应用200
7.2.1数据元素的复制与选择200
7.2.2数据元素的移动204
7.2.3数据元素的查找与统计205
7.2.4数据元素的修改、删除与插入210
7.2.5数据的排序212
7.2.6任务72创建学生成绩表214
7.3二维数组及其应用217
7.3.1二维数组的定义与初始化218
7.3.2二维数组元素的引用219
7.3.3二维数组作为函数参数222
7.3.4任务73统计分析多门课程的成绩223
7.4字符数组与字符串227
7.4.1字符数组的定义、初始化及引用227
7.4.2字符串与字符数组227
7.4.3字符串的处理228
7.4.4任务74查找学生信息232
7.5项目实践考试成绩管理236
小结239
习题239
第8章复杂构造类型245
8.1结构体245
8.1.1结构体与结构体变量的定义246
8.1.2结构体成员的初始化251
8.1.3结构体成员的访问252
8.1.4结构体与函数254
8.1.5结构体数组255
8.1.6任务81建立学生基本信息表256
8.2枚举260
8.2.1枚举类型的定义260
8.2.2枚举变量260
8.2.3任务82创建学生成绩表262
8.3共用体264
8.3.1共用体概述264
8.3.2共用体变量的引用265
8.3.3任务83创建学生成绩表267
8.4自定义类型与数据的分层270
8.4.1自定义类型270
8.4.2自定义类型的应用271
8.4.3任务84学生基本信息的分层处理272
8.5项目实践再谈学生成绩管理274
小结280
习题281
第9章指针285
9.1指针与指针变量285
9.1.1指针的概念286
9.1.2指针变量的定义286
9.1.3指针运算符287
9.1.4指针表达式289
9.1.5存储空间的动态分配292
9.1.6任务91利用指针访问数据294
9.2指针与函数295
9.2.1指针变量作为函数的参数295
9.2.2函数main的参数297
9.2.3指针函数298
9.2.4函数指针300
9.2.5任务92创建静态成绩表303
9.3指针与数组304
9.3.1指针与一维数组305
9.3.2指针与多维数组309
9.3.3数组指针用作函数参数312
9.3.4字符串和指针317
9.3.5任务93创建动态成绩表319
9.4指针与结构体322
9.4.1结构体指针322
9.4.2结构体数组指针324
9.4.3结构体指针变量用作函数参数325
9.4.4结构体的自引用326
9.4.5任务94创建链表330
9.5指针数组与指向指针的指针332
9.5.1指针数组332
9.5.2指向指针的指针333
9.5.3任务95再谈排序334
9.6项目实践成绩管理优化336
小结340
习题340
第10章文件组织与使用346
10.1文件的顺序读/写346
10.1.1文件的相关概念346
10.1.2文件的打开与关闭349
10.1.3文件的读/写350
10.1.4文件检测函数357
10.1.5任务101创建一个文件359
10.2文件的随机读/写363
10.2.1文件定位363
10.2.2随机读/写365
10.2.3任务102随机存取学生信息366
10.3项目实践数据存储369
小结377
习题377
第11章C语言的高级应用381
11.1位运算及应用381
11.1.1位运算381
11.1.2位域(位段)387
11.1.3任务111文件的加密与解密389
11.2高级语言与汇编语言的混合编程391
11.2.1Visual C++汇编程序环境设置392
11.2.2在C程序中嵌入汇编语句397
11.2.3采用模块调用的方法399
11.2.4任务112C语言与汇编语言混合编程的应用401
11.3C51程序设计404
11.3.1C51编程基础404
11.3.2Keil C51集成开发环境简介408
11.3.3任务113用89S51单片机控制8个LED发光管发光411
小结413
习题414
参考文献415
附录AC语言中的运算符416附录BASCII表418附录CC语言常见库函数419
本书采用按照CDIO的模式编写,将一个完整项目融入课程中,采用项目实践、任务驱动的教学模式,强化实践应用,培养学生工程实践能力。本书提供了丰富的教学资源,提供网络教学资源,满足教师的教学需求,该课程有完整的教学资源平台,提供学生和教师在线学习和参考。培养学生的自主学习的能力
陈建国,男,54岁,任职于绵阳职业技术学院,本科,电子科技大学计算机应用专业毕业,副教授。主要教授过C语言程序设计、数据结构 、C#面向对象程序设计、windows程序设计、Java Web 程序设计、Java 框架技术等课程。主持的C#程序设计课程评为省级精品课程、省级共享资源课程、省级在线开放课程,c# for windos评为省级精品课程,C语言程设计、Javaweb 程序设计评为院级精品资源课程建设。