新書推薦:
《
二十四节气生活美学
》
售價:NT$
340.0
《
西班牙内战:秩序崩溃与激荡的世界格局:1936-1939
》
售價:NT$
990.0
《
基于鲲鹏的分布式图分析算法实战
》
售價:NT$
495.0
《
夺回大脑 如何靠自己走出强迫
》
售價:NT$
299.0
《
图解机械工程入门
》
售價:NT$
440.0
《
中文版SOLIDWORKS 2024机械设计从入门到精通(实战案例版)
》
售價:NT$
450.0
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:NT$
345.0
《
希腊人(伊恩·莫里斯文明史系列)
》
售價:NT$
845.0
|
內容簡介: |
本书从计算机基础知识讲起,继而介绍标准C语言,还包含C语言编程必需的若干重要内容。 本书深入浅出,文字简练,将复杂的问题简单化,篇幅不大但内容全面;对各章节的重点、难点把握准确,处理得当;注重培养编程思维能力,对编程时易犯的错误点评到位。本书对C语言中重要的内容(函数、指针、数组、文件四部分)的编写,会使读者的认识上升一个层次。 本书作者讲授C语言课程20多年,有丰富的编程和教学经验,对学生的思维方式和学习状况非常了解,对C语言的知识体系非常熟悉。在书中,作者奉献了自己对许多问题的独到见解。书中大量的编程经验和注意事项,蕴含着作者长期的积累,凝聚着C语言的精华。 本书适合作为高等学校各专业“程序设计基础”或“C语言程序设计”等课程的教材,也可作为自学教材或学习参考书,尤其适合作为C程序员的编程指导手册和入门教材。
|
關於作者: |
王金鹏 教授,毕业于北京大学,从事计算机教学和科研多年,首批一流本科课程《程序设计基础》主讲教师、负责人,首届全国煤炭教学名师,近年来在国内外刊物发表科研论文十几篇,出版教材4部,主持省级科研和教改项目多项。长期进行C语言教学,讲授程序设计基础(C语言)20多年,有着丰富的教学经验和心得,连续多年获得优秀教学质量一等奖,在学生中享有很高的声誉和威望
|
目錄:
|
第1章计算机基础知识1
1.1计算机的硬件组成1
1.1.1运算器1
1.1.2控制器1
1.1.3存储器1
1.1.4输入设备3
1.1.5输出设备3
1.2数制及数制间的转换3
1.2.1二进制3
1.2.2八进制5
1.2.3十六进制5
1.3计算机中的信息编码6
1.3.1整数的编码6
1.3.2字符的编码7
1.4程序及程序的执行过程7
1.4.1计算机指令7
1.4.2计算机程序7
1.4.3程序的执行过程7
1.5计算机语言8
1.5.1机器语言8
1.5.2汇编语言9
1.5.3高级语言9
1.6算法10
1.6.1算法的概念11
1.6.2算法的特性11
1.6.3算法的表示12
1.6.4程序的3种基本结构12
习题113
第2章C程序和C编译器简介15
2.1C语言及C标准简介15
2.1.1C语言的出现15
2.1.2C语言的特点15
2.1.3C标准16
2.2简单的C程序17
2.3C程序的构成21
2.4C编译器及操作简介23
2.4.1Turbo C 2.0编程环境及常用操作简介23
2.4.2Visual C 6.0编程环境及常用操作简介27
2.5编程常见错误及处理流程32
2.5.1编译错误32
2.5.2连接错误33
2.5.3逻辑错误33
2.5.4运行错误33
习题233
C语言可以这样学(第2版·MOOC版·题库版·OnlineJudge版)目录第3章C编程基础知识35
3.1常量和变量35
3.1.1常量35
3.1.2变量35
3.2基本数据类型40
3.2.1整型数据40
3.2.2实型数据42
3.2.3字符型数据45
3.2.4字符串47
3.3符号常量和常变量48
3.3.1符号常量48
3.3.2常变量48
3.4运算符和表达式49
3.4.1算术运算符49
3.4.2赋值运算符和赋值表达式50
3.4.3自增自减运算符51
3.4.4逗号运算符和逗号表达式53
3.4.5类型转换运算符54
3.5数据的类型转换55
习题356
第4章顺序结构程序设计59
4.1赋值语句59
4.1.1赋值语句及其执行过程59
4.1.2赋值的几种数据处理方式59
4.2输入输出函数63
4.2.1缓冲区的概念及作用63
4.2.2getchar()和putchar()64
4.2.3printf()和scanf()65
4.3顺序结构程序设计举例70
习题472
第5章选择结构程序设计76
5.1关系运算符和关系表达式76
5.1.1关系运算符76
5.1.2关系表达式76
5.2逻辑运算符和逻辑表达式77
5.2.1逻辑运算符77
5.2.2逻辑表达式78
5.3if语句79
5.3.1if语句的格式79
5.3.2if语句的使用说明80
5.3.3嵌套的if语句83
5.3.4if语句应用举例85
5.3.5if语句编程的常见问题87
5.4条件运算符和条件表达式92
5.5switch语句93
5.5.1switch语句的格式及执行过程94
5.5.2switch语句应用举例96
5.5.3switch语句编程的常见错误97
习题598
第6章循环结构程序设计104
6.1循环及其实现思想104
6.2循环语句105
6.2.1while循环105
6.2.2dowhile循环107
6.2.3for循环108
6.2.43种循环的比较110
6.3循环的控制111
6.3.1计数器控制循环和其他条件控制循环111
6.3.2break和continue112
6.3.3循环结束后循环变量的值与终值的比较115
6.4多重循环116
6.5循环编程举例117
习题6126
第7章函数132
7.1函数的作用132
7.2函数的定义134
7.2.1函数定义的格式134
7.2.2函数的返回值134
7.2.3函数参数的设置138
7.3函数的调用140
7.3.1函数调用前的声明140
7.3.2函数调用的方式142
7.4函数的参数传递143
7.4.1形参与实参143
7.4.2参数的传递143
7.4.3参数传递的单向性144
7.5函数的嵌套调用145
7.6递归函数146
7.6.1递归的条件146
7.6.2递归函数的执行过程147
7.6.3递归与迭代149
7.7函数编程举例150
7.8内部函数和外部函数153
习题7154
第8章变量的作用域和存储类别158
8.1变量的作用域158
8.1.1局部变量158
8.1.2全局变量158
8.2同名变量的辨析160
8.3变量的存储类别和生存期162
8.3.1内存的存储区域162
8.3.2动态变量162
8.3.3静态变量163
8.4变量的作用域和生存期小结164
习题8165
第9章编译预处理168
9.1宏定义168
9.1.1无参宏定义168
9.1.2有参宏定义169
9.1.3嵌套的宏定义170
9.2文件包含170
9.2.1文件包含的格式170
9.2.2文件包含的作用171
9.2.3文件包含两种格式的区别171
9.3条件编译172
9.3.1条件编译的格式172
9.3.2条件编译应用举例174
习题9175
第10章用指针变量访问变量178
10.1指针和指针变量178
10.1.1指针和指针变量的概念178
10.1.2直接寻址和间接寻址179
10.1.3指针变量的值、地址及类型181
10.2通过指针变量访问变量181
10.2.1指针变量的定义181
10.2.2指针变量的赋值182
10.2.3通过指针变量间接访问一个变量183
10.3指针变量在函数传递中的作用183
习题10188
第11章数组191
11.1一维数组191
11.1.1一维数组的定义191
11.1.2一维数组的元素构成及一维数组的存储结构192
11.1.3数组名的指针类型192
11.1.4数组元素的表示方法193
11.1.5一维数组的引用194
11.1.6一维数组的初始化196
11.1.7一维数组应用举例196
11.2二维数组201
11.2.1二维数组的定义201
11.2.2二维数组的元素构成及二维数组的存储结构202
11.2.3二维数组名的指针类型202
11.2.4二维数组中下标变量的表示方法203
11.2.5二维数组的引用204
11.2.6二维数组的初始化205
11.2.7二维数组应用举例205
11.3字符数组和字符串处理函数206
11.3.1字符数组206
11.3.2字符串处理函数207
11.3.3字符数组应用举例211
习题11213
第12章用指针变量访问下标变量218
12.1用指针变量访问下标变量的方法218
12.1.1知识回顾218
12.1.2用指针变量访问一维数组中的下标变量218
12.1.3用指针变量访问二维数组中的下标变量220
12.2用指针变量访问下标变量的适用场合221
习题12224
第13章指针综述228
13.1指针类型简介228
13.2指向变量的指针229
13.2.1指向变量的指针常量229
13.2.2指向变量的指针变量229
13.3指向数组的指针230
13.3.1指向一维数组的指针常量230
13.3.2指向一维数组的指针变量231
13.3.3指向一维数组的指针变量的适用场合232
13.4指针与字符串234
13.4.1字符串的表示方式234
13.4.2用指针变量处理字符串235
13.5指针与函数237
13.5.1函数的入口地址237
13.5.2指向函数的指针变量238
13.5.3指向函数的指针变量的作用238
13.5.4指针函数239
13.6指针数组240
13.6.1指针数组的定义240
13.6.2指针数组的引用241
13.6.3指针数组应用举例241
13.7指向指针变量的指针242
13.7.1指向指针变量的指针常量242
13.7.2指向指针变量的指针变量242
13.7.3应用举例243
13.8带参数的main()函数245
13.8.1C语言对main()函数参数的规定245
13.8.2带参数main()函数的作用245
13.8.3带参数的main()函数的执行过程246
13.8.4程序举例246
13.9动态内存分配247
13.9.1动态内存分配函数247
13.9.2动态内存分配举例248
习题13249
第14章数据类型的自定义254
14.1结构体的定义和结构体变量的定义254
14.1.1结构体的概念和结构体的定义254
14.1.2结构体变量的定义和空间分配256
14.1.3结构体变量的初始化258
14.1.4结构体数组的定义和初始化259
14.2结构体变量的引用259
14.2.1结构体变量的引用方法259
14.2.2结构体变量引用举例260
14.3用指针变量操作结构体变量261
14.3.1为什么要通过指针变量访问结构体变量261
14.3.2应用举例262
14.4链表及链表操作简介263
14.4.1链表的概念263
14.4.2使用链表的优点264
14.4.3链表操作简介264
14.5共用体269
14.5.1共用体的概念269
14.5.2共用体的作用270
14.5.3共用体及共用体变量的定义271
14.5.4共用体变量(数组)的初始化272
14.5.5共用体变量的引用272
14.5.6共用体的两个妙用272
14.6枚举类型273
14.6.1枚举类型的定义273
14.6.2枚举变量的定义274
14.6.3枚举变量的使用275
14.6.4枚举应用举例275
14.7用typedef定义类型别名276
习题14277
第1章位运算280
15.1C语言中的位运算符280
15.2位运算及应用281
15.2.1按位与281
15.2.2按位或282
15.2.3按位异或283
15.2.4按位取反284
15.2.5按位左移284
15.2.6按位右移285
习题15286
第16章文件288
16.1文件及相关的概念288
16.1.1文件的范畴288
16.1.2文件中存储数据的两种方式288
16.1.3文件的种类289
16.1.4文件操作函数及缓冲区的概念290
16.2文件读写的原理291
16.3文件的读写位置指针和文件结束标志292
16.3.1读写位置指针292
16.3.2文件结束标志292
16.4文件的打开和关闭293
16.4.1文件的打开293
16.4.2文件的关闭299
16.5文件的读写300
16.5.1fgetc()和fputc()301
16.5.2fread()和fwrite()303
16.5.3fgets()和fputs()307
16.5.4fscanf()和fprintf()308
16.6读写位置指针的移动和定位310
16.6.1移动读写位置指针的函数310
16.6.2两个与读写位置指针有关的函数311
16.7文件的出错检测312
16.8文件操作举例313
习题16317
第17章综合应用举例320
17.1简单的计算器(一)320
17.2简单的计算器(二)322
17.3数据库文件的读取325
附录AC语言规约335
附录B输入输出重定向 337
附录CC语言的关键字340
附录D常用字符与ASCII码对照表341
附录E运算符的优先级和结合性342
附录F常用库函数344参考文献349
|
內容試閱:
|
C语言是高等学校计算机专业及相关专业必修的专业基础课之一,是培养学生算法思维能力、动手能力的主要课程和工具,也是面向对象程序设计、数据结构等后续课程的先导课。学生对C语言的掌握情况在很大程度上决定着大学四年的学习情况。
本书作者在2015年编写的《深入浅出新编C语言教程》受到广大读者的广泛好评。在此基础上,作者对原版进行了修订,在内容上进行了调整、改进和补充,终形成了本书。本书通过“探究式”的讲解,使读者对每个知识点的理解更加准确、透彻。
编写本书的指导思想
(1) 零基础讲起。针对刚进入大学的新生及初级程序员,将C语言编程的一些必要的计算机知识纳入本书第1章。
(2) 按符合读者认知规律的自然顺序安排章节。
(3) 化繁为简、化整为零。重要的知识点单独写成一章,每章内容相对独立,与其他知识点关联少,条理清楚,易于初学者掌握。
(4) 对“指针”一章的内容和“文件”一章的内容重点着墨,描述清楚,使读者更容易掌握这两章内容。
(5) 将作者多年积累的教学经验、对若干问题的独到见解、编程注意事项、典型例题和习题写到书中,让读者更有针对性地学习。
本书在以下几方面做了较大改进。
1. 对教材内容的改进
1) 增加了以下几部分内容
要学好C语言,下面的知识是必要的。
(1) 计算机基础知识。绝大多数学校把C语言放在大一的学期开设,对于没有任何计算机基础的新生来说,C语言的知识仿佛“天书”。因此,本书从计算机基础知识讲起,这些基础知识包括内存和内存地址的概念,二进制,不同数制之间的转换,原码、反码和补码的求法,计算机语言及语言处理过程等。
(2) 有关程序、指令和输入输出重定向的概念。C语言中,很多地方需要用到程序与指令以及输入输出重定向的概念,故也把这两部分内容编入本书。其中,程序与指令部分放在第1章,输入输出重定向部分放在附录中,供需要的读者自学。
(3) 缓冲区及键盘缓冲区的概念。学习C语言的输入输出,缓冲区是个绕不开的话题。如果不知道数据从键盘到缓冲区的处理过程,就很难掌握输入输出,就很难解释为什么程序会出现那些意想不到的运行结果。
(4) 函数的作用和函数设计的原则。函数是被用来调用的,因此函数的适用性和灵活性是衡量一个函数优劣的重要指标。本书不但注重讲解函数定义和函数调用的格式、函数参数传递的特点,而且对于函数的作用和设计原则(追求通用性、可利用率等)进行重点讲述。本书从函数返回值的设定和参数设定两方面详细讲述函数设计的原则。
C语言可以这样学(第2版·MOOC版·题库版·OnlineJudge版)前言(5) 文件操作原理及相关细节问题。“文件”一章的内容非常重要,但又特别难懂。难懂的原因有三:一是讲解时如果未给出文件操作的原理,那么学生知其然,不知其所以然;二是有几个概念特别容易混淆,如写数据有文本和二进制两种方式,文件分为文本和二进制两类文件,文件的打开方式也分为文本方式和二进制方式,讲解时如果未明确指出它们之间有无关联,区别是什么,会导致学生概念混乱;三是在介绍文件操作时如果对一些重要内容不予讲解,会导致学生一编程就出错,望文件而生畏。本书对上面所说问题均做了详细讲述并予以例证。
2) 对读者容易忽视的问题进行了探讨
(1) 对指针进行了深入探讨。
(2) 对文件操作中的一些问题进行了探讨。例如,函数feof()何时返回非零值问题、用二进制方式能否打开文本文件、用文本方式打开文件后能否以二进制方式向其中写数据等问题。
(3) 讨论了共用体变量能否初始化、共用体变量能否作为参数等问题。
2. 对各章节的内容分配及前后顺序做了较大调整和优化
1) 对指针内容的分解
指针是C语言的精华,但指针又非常难学。C语言中指针的类型很多,如此多的类型本就容易混淆,如果把它们全部放在一章中讲解,显得很全面、很系统,但学生要在一章中(一两周的时间)弄懂如此多且抽象难懂的内容,实在是勉为其难。
本书将指针重要的两个应用——用指针变量访问变量、用指针变量访问下标变量两部分抽出来作为单独的两章来讲解。其中,“用指针变量访问变量”一章放在函数之后、数组之前讲解,“用指针变量访问下标变量”一章放在数组之后讲解,其余内容放在“指针综述”一章中介绍。如此分解可化繁为简,具有重点突出、针对性强、易于接受等优点,也彰显了指针的这两个重要用途。另外,如此设计也可把对指针的学习从短短一两周扩展到前后约一个月。较长时间的消化,有利于学生更好地理解指针、掌握指针。
2) 各章节顺序的调整
(1) 数组和指针的顺序问题。如果先讲数组,再讲指针,带来的问题就是无法对数组名进行解释。实际上数组名在多数情况下都是一个指针。在不介绍指针的情况下,很难把“数组”一章的内容讲清、讲透。
(2) 数组和函数的顺序问题。如果把函数放在数组之后讲解,那么把数组名作为参数放在“函数”一章中,看起来似乎归类得当,岂不知这样一来就掩盖了“函数”一章的重点。“函数”一章,应该教给学生的是如何把函数设计得当,便于其他函数调用,只应突出这一重点。如果把数组问题也放在“函数”一章中,就会喧宾夺主,因为数组名作参数本身也是非常重要的一个知识点。
综上所述,合适的顺序安排应是函数、指针(1)、数组、指针(2)、指针综述。
本书的使用建议
建议理论授课学时数为56~64,实验学时数为32。
第1章计算机基础知识,若授课对象不是大一学期新生,已有基础,可以不讲,或只讲需要的部分。
本书适用对象:高等院校本、专科所有开设“程序设计基础”或“C语言程序设计”课程的学生,或自学C语言的读者,以及初级向高级进阶的程序员。
其他说明
1. 本书所用编译器
本书讲解时兼顾Visual C 6.0(简称VC)和Turbo C 2.0,但程序主要是针对VC编写的,所有源程序都在VC中调试、运行过,例题中的运行结果都是在VC中得到的。
2. 例题和源代码
本书配套资料(可以从www.tup.com.cn下载)中含有全部例题的107个源代码,例题编号与源程序的编号一一对应。例如,例2.1的源代码对应资料中的源文件s2_1.c,若该例题有3种解法,则对应的源文件分别是s2_1_1.c、s2_1_2.c和s2_1_3.c。
3. 本书所获得的项目资助
\\[1\\] 教育部新工科研究与实践项目(EXTYR20200640), “以建设一流本科专业为契机,依托山东省未来智能计算协同创新中心,打造新工科协同育人实践创新平台”,教育部。
\\[2\\] 山东省研究生教育质量提升计划项目(SDYKC19199), “算法分析与设计”, 山东省教育厅。
\\[3\\] 山东省教育教学研究课题(2021JXY042),“建设一流本科专业,赋能山东省数字经济发展”, 山东省教育科学研究院。
\\[4\\] 烟台市校地融合发展项目,“赋能烟台战略性新兴产业发展,打造一流软件工程专业”, 烟台市教育局。
本书引用了MOOC中的视频,在此向参与录制视频的于文丽、曹旗磊、王涵3位老师表示感谢。
原达教授、谢青松教授对本书的编写给予了热情帮助和大力支持,在此向两位教授深表谢意。此外,本书的编写参考了大量的书籍和文献资料,谨向这些书籍和文献资料的作者表示感谢。在本书的编写出版过程中得到了清华大学出版社的大力支持和帮助,在此表示感谢。
由于时间仓促和作者水平所限,书中难免存在疏漏和欠妥之处,请各位专家、读者不吝指正。
作者2021年9月
|
|