本教材以程序设计为中心来组织内容。全书以程序设计为主线, 从应用出发, 通过案例和问题引入内容, 重点讲解程序设计的思想和方法, 并结合相关的语言知识的介绍。全书共分为12章, 包括概述、分支结构、循环结构、函数、数值、指针、结构等内容。
(1)本书注重知识内容的实用性和综合性。
(2)安排了如下几个专题:正整数的拆分、*大公约数、素数、进制转换。这些专题既总结了某一类问题的解决方法,又让学生体验到程序设计的实用性,激发了学生的学习兴趣。
(3)图文并茂,基本上做到绝大难理解部分的讲解都有相关的图示,有的内容通过多图逐步分解剖析。
(4)在提供丰富有趣的经典实例时,还精心设计了一个相对完整的“学生成绩管理”应用实例贯穿于整本书。
(5)对一些重要的知识点、重要的例子、难懂的例子,都有配套的微课。
程序设计是高校理工科重要的计算机基础课程,该课程以培养学生掌握程序设计的思想和方法为目标,以培养学生的实践能力和创新能力为重点。C语言是得到广泛使用的程序设计语言之一,它既具备高级语言的特性,又具有直接操纵计算机硬件的能力,并以其良好的程序结构和便于移植的特性而拥有大量的使用者。目前,许多高校都把C语言列为首门要学习的程序设计语言。
虽然目前有关C语言的教材很多,但大多都只是注重C语言知识的学习,这样不利于培养学生的程序设计能力和程序设计语言应用能力。本书以程序设计为主线,从应用出发,通过案例和问题引入相关的语法知识,重点讲解程序设计的思想和方法,从而避免机械式地记忆语法知识,实现通过写程序掌握C语言知识的理念。
在教材的结构设计上,强调学以致用,使学生从一接触C语言,就开始练习编程。全书共12章,主要包括3方面的内容: 基本内容、常用算法和程序设计风格。为了提高读者的学习兴趣,大多数内容是先导入实例而后介绍相关的语言知识。第1章首先简单介绍一些背景知识和利用计算机解决问题的步骤,然后从实例出发,简要介绍C语言的核心部分,使学生对C语言有一个总体的了解,并学习编写简单的程序,培养学生的学习兴趣;第2章介绍基本的数据类型和常用运算符;第3章和第4章分别介绍分支结构和循环结构程序设计的思路和方法,并且从第3章开始,逐步深入介绍程序设计的思想和方法,说明如何应用程序设计语言解决问题;第5章介绍基本的输入输出处理;第6章介绍函数的基础知识及基本用法;第7章介绍一维数组、二维数组和字符数组的知识和应用;第8章介绍指针的基本概念及应用;第9章介绍结构的基础知识及应用;第10章介绍位运算及应用;第11章介绍文件的概念、文件的基本操作及应用;第12章大串讲,帮助读者对整本教材知识点的融会贯通,并加以运用。
本书有如下特色:
(1) 本书注重知识内容的实用性和综合性。结合本科学生的特点,注重知识内容的实用性和综合性,删减以往类似教材中较刻板的理论知识点,将更多的篇幅放在程序设计方法、程序设计技能以及程序设计过程的阐述上。
(2) 设计了一些专题。本书安排了如下几个专题: 正整数的拆分、最大公约数、素数、进制转换。这些专题既总结了某一类问题的解决方法,又让学生体验到程序设计的实用性,激发了学生的学习兴趣。
(3) 本书图文并茂。西方有句谚语: “A picture is worth a thousand words.”(一图值千言)。意思是用上千个字描述不明白的东西,很可能一张图就能解释清楚。本书绝大多数难理解部分的讲解都有相关的图示,有的内容通过多图逐步分解剖析。
(4) 本书在提供丰富、有趣的经典实例时,还精心设计了一个相对完整的“学生成绩管理”应用实例贯穿于整本书,从最简单的单个学生成绩分类开始,到使用循环语句、数组处理多个学生成绩信息,再到使用更有聚合力的结构来组织学生成绩信息,最终将这些处理信息永久性地存储到文件中,完全贯彻了实用、实践和工程应用的理念。通过这个实例的学习,让学生对C语言程序设计有一个更全面的认知,能够综合运用所学知识去解决较为实际的问题。
(5) 为满足读者对在线开放学习的需求,对一些重要的知识点、重要的例子、难懂的例子,提供了配套的微课,这样读者不仅能走进作者的教学课堂,而且能重复学习,做到攻克重点、难点,不留学习死角。
因作者水平有限,对书中存在的疏漏、谬误之处,敬请读者批评指正。
作者
第1章概述/1
1.1计算机程序设计语言1
1.1.1机器语言1
1.1.2汇编语言1
1.1.3高级语言2
1.2用程序设计语言编写程序的步骤2
1.2.1编码2
1.2.2编译2
1.2.3调试3
1.2.4维护3
1.3结构化程序设计方法4
1.4算法4
1.4.1算法的特性5
1.4.2算法的描述5
1.5关于C程序设计语言8
1.5.1C语言出现的历史背景8
1.5.2C语言的特点9
1.6简单的C语言程序10
1.6.1输出hello, world10
1.6.2计算a+b11
1.6.3计算分段函数的值12
1.6.4按先大后小的顺序输出两个整数13
1.6.5华氏温度与摄氏温度的转换14
练习16
第2章类型、运算符与表达式/19
2.1变量19
2.1.1变量的命名规则19
2.1.2变量的声明20
2.2数据类型及长度21〖1〗C语言程序设计(第2版)目录[3]〖3〗2.2.1short与long限定符21
2.2.2signed与unsigned限定符21
2.2.3每种数据类型的printf和scanf格式转换符22
2.3常量25
2.3.1整数常量与浮点数常量25
2.3.2字符常量25
2.3.3字符串常量26
2.3.4符号常量27
2.3.5枚举常量27
2.4常量表达式28
2.5算术运算符28
2.6关系运算符与逻辑运算符28
2.7自增运算符与自减运算符31
2.8逗号运算符31
2.9赋值运算符与赋值表达式32
2.10条件运算符与条件表达式33
2.11一元运算符sizeof34
2.12类型转换34
2.13运算符的优先级及求值次序36
练习37
第3章分支结构/44
3.1实例导入44
3.2语句与程序块45
3.3ifelse语句45
3.4elseif语句48
3.5switch语句50
3.6应用实例: 学生成绩管理56
练习58
第4章循环结构/62
4.1实例导入62
4.2while循环65
4.3for循环70
4.4dowhile循环74
4.5三种循环语句的比较76
4.6循环结构的嵌套77
4.7break语句与continue语句83
4.8goto语句与标号88
4.9专题1: 正整数的拆分89
4.10专题2: 迭代法92
4.11应用实例: 学生成绩管理95
练习96
第5章输入与输出/109
5.1getchar()函数109
5.2putchar()函数110
5.3printf()函数113
5.4scanf()函数114
5.5应用实例: 求和116
练习122
第6章函数/126
6.1实例导入126
6.2函数的基本知识129
6.2.1函数的定义129
6.2.2函数的调用130
6.2.3函数的声明135
6.2.4函数设计的基本原则138
6.3函数的嵌套调用139
6.4函数的递归调用139
6.5变量的存储类型145
6.6变量的类别145
6.6.1外部变量与内部变量145
6.6.2静态变量147
6.6.3寄存器变量148
6.7变量的作用域与生存期148
6.7.1变量的作用域148
6.7.2变量的生存期149
6.7.3内存空间及分配方式149
6.8程序块结构156
6.9变量的初始化156
6.10预处理157
6.10.1文件包含157
6.10.2宏替换157
6.10.3条件编译159
6.11专题3: 最大公约数的求解161
6.11.1bruteforce算法161
6.11.2欧几里德算法162
6.11.3更相减损法164
练习165
第7章数组/177
7.1实例导入177
7.2一维数组180
7.2.1一维数组的定义180
7.2.2一维数组元素的引用181
7.2.3一维数组的初始化181
7.2.4一维数组的应用举例182
7.3二维数组184
7.3.1二维数组的定义184
7.3.2二维数组元素的引用184
7.3.3二维数组的初始化185
7.3.4二维数组的应用举例186
7.4字符数组192
7.4.1字符数组的定义和引用192
7.4.2字符数组的初始化192
7.4.3字符数组的输入/输出193
7.4.4字符数组的应用举例195
7.5数组与函数参数197
7.5.1数组元素作函数实参197
7.5.2数组作函数实参198
7.6查找和排序201
7.6.1查找201
7.6.2排序203
7.7专题4: 进制转换206
7.7.1十进制整数转换成其他进制整数206
7.7.2其他进制整数转换成十进制整数208
7.8专题5: 素数209
7.8.1素数判定的基本方法209
7.8.2一定范围内所有素数的求解217
7.9应用实例: 学生成绩管理220
练习222
第8章指针/240
8.1实例导入240
8.2指针的基本知识246
8.2.1指针变量的声明246
8.2.2指针变量的初始化246
8.2.3指针变量的基本运算246
8.3指针与数组249
8.3.1指针与一维数组249
8.3.2指针与多维数组258
8.4指针与函数259
8.4.1指针作为函数的参数259
8.4.2指针作为函数的返回值263
8.4.3指向函数的指针266
8.5字符指针与函数267
8.6指针数组269
8.6.1指针数组的声明269
8.6.2指针数组的初始化269
8.6.3指针数组与二维数组的区别269
8.7命令行参数270
8.8指向指针的指针271
8.9动态分配272
8.9.1动态分配内存272
8.9.2释放内存272
8.9.3void 类型273
8.9.4动态数组273
8.9.5查找malloc中的错误275
练习275
第9章结构/297
9.1实例导入297
9.2结构的基本知识302
9.2.1结构类型的定义303
9.2.2结构变量的定义303
9.2.3结构成员的访问304
9.2.4对结构变量的操作304
9.2.5结构变量的初始化306
9.2.6结构的嵌套307
9.3结构数组308
9.4结构指针311
9.5typedef313
9.6结构与函数314
9.7单链表315
9.7.1单链表的创建316
9.7.2单链表的输出316
9.7.3单链表的插入316
9.7.4单链表的删除319
9.7.5链表的综合操作319
9.8联合321
9.9枚举324
9.9.1枚举类型的定义324
9.9.2枚举变量的定义324
9.9.3对枚举变量的操作325
9.10应用实例: 学生成绩管理327
9.10.1用结构数组实现328
9.10.2用单链表实现329
练习332
第10章位运算/342
10.1原码、反码和补码342
10.2位运算符343
10.2.1与运算符343
10.2.2或运算符343
10.2.3异或运算符343
10.2.4取反运算符344
10.2.5左移运算符和右移运算符344
10.3位赋值运算符347
10.4位域348
练习349
第11章文件/352
11.1实例导入353
11.2C语言中文件的使用354
11.2.1声明FILE类型的变量355
11.2.2打开文件355
11.2.3执行I/O操作356
11.2.4关闭文件356
11.3字符I/O357
11.3.1读字符函数fgetc()357
11.3.2写字符函数fputc()357
11.4行I/O360
11.4.1读字符串函数fgets()360
11.4.2写字符串函数fputs()360
11.5格式化I/O361
11.5.1格式化输出函数fprintf()和sprintf()361
11.5.2格式化输入函数fscanf()和sscanf()361
11.6数据块读写363
11.6.1数据块读函数fread()363
11.6.2数据块写函数fwrite()363
11.7文件的定位363
11.7.1fseek()函数363
11.7.2ftell()函数365
11.7.3rewind()函数365
11.8错误检测函数366
11.8.1clearerr()函数366
11.8.2feof()函数366
11.8.3ferror()函数366
11.9应用实例: 学生成绩管理366
练习371
第12章大串讲/376
12.1顺序输出整数的各位数字376
12.2计算阶乘之和378
12.3Fibonacci数列380
12.4计算函数的值383
12.5在有序数组中插入一个元素384
附录A常用字符与ASCII码对照表/388
附录B常用的C语言库函数/390
B.1数学函数390
B.2字符处理函数391
B.3字符串处理函数392
B.4实用函数393
附录C与具体实现相关的限制/394
参考文献/395
第5章输入与输出本章要点:
常用输入、输出函数的使用;
简单的数据处理。在程序的运行过程中,往往需要由用户输入一些数据,这些数据经机器处理后要输出反馈给用户。通过数据的输入/输出来实现人与计算机之间的交互,所以在程序设计中,输入/输出语句是一类必不可少的重要语句。
在C语言中,没有专门的输入/输出语句,所有的输入/输出操作都是通过对标准I/O库函数的调用来实现的。
最常用的输入/输出函数有getchar()、putchar()、scanf()、printf()。ANSI标准精确地定义了这些库函数,所以,在任何可以使用C语言的系统中都有这些函数的兼容形式。如果程序的系统交互部分仅仅使用了标准库提供的功能,则可以不加修改地从一个系统移植到另一个系统中。
5.1getchar()函数
getchar()函数的原型如下: int getchar(void);此函数的功能是从stdio流中读字符。C语言中,在没有输入时,getchar()函数将返回一个特殊值,这个特殊值与任何实际字符都不同,这个值称为EOF(End Of File,文件结束),它的值通常是-1。
getchar()函数只能接受单个字符,如果输入的是数字也按字符处理。输入多于一个字符时,只接收第一个字符。使用本函数前必须包含文件“stdio.h”。
例5.1输入一行字符,分别统计出其中空格或回车、数字和其他字符的个数。
输入样例: beautiful 2010 heihei输出样例: sumWhite=3
sumNumber=4〖1〗C语言程序设计(第2版)第5章输入与输出〖3〗〖3〗sumOther=15实现代码如下。1#include
2int main()
3{
4int c;
5int sumWhite=0;/空格或回车的个数/
6int sumNumber=0;/数字的个数/
7int sumOther=0;/其他字符的个数/
8while((c=getchar())!=EOF){
9if(c=='\\n' || c==' '){
10sumWhite++;
11}
12else if(c>='0' && c<='9'){
13sumNumber++;
14}
15else{
16sumOther++;
17}
18}
19printf("sumWhite=%d\\n", sumWhite);
20printf("sumNumber=%d\\n", sumNumber);
21printf("sumOther=%d\\n", sumOther);
……