华信教育资源网
新概念C语言能力教程(第2版)
丛   书   名: 新工科建设之路·计算机系列教材
作   译   者:周二强 出 版 日 期:2023-03-01
出   版   社:电子工业出版社 维   护   人:戴晨辰 
书   代   号:G0451430 I S B N:9787121451430

编辑推荐:

1.源于深刻,所以简明本书深刻且简明地讨论了C语言的重难点知识,如分析了引入序列点表达式的完整求值规则,明确了指针变量的主要作用,揭示了数组的组织方式等。2.便于自学,易于探究本书从用户、计算机、程序员及C语言之间的关系开始介绍,以计算机的五大组成部件和采用二进制为背景知识,深入浅出地讲解了C语言。此外,本书还用近百幅图直观地展示了知识点。3.授之以渔,“高大衔接”C语言程序设计作为专业学习的入门课程,背景知识简单,但又是精心设计的编程语言,每个知识点都值得思考。学习本书,读者不仅能收获C语言知识,还能从“原来如此”到“理应如此”的感悟中,实现从高中生到大学生的蜕变。4.资源丰富,高效学习本书包含配套电子课件、案例源代码、教学大纲、习题答案、视频教程等,以便更好地辅助教师教学与学生自学。
定价 69.9
您的专属联系人更多
关注 评论(0) 分享
配套资源 图书内容 样章/电子教材 图书评价
  • 配 套 资 源

    本书资源

    会员上传本书资源

  • 图 书 内 容

    内容简介

    本书从用户、计算机、程序员及C语言之间的关系开始,以计算机由五大部件组成且采用二进制为背景知识,深刻剖析了C语言的知识点。如本书给出了完整的表达式求值规则;明确了指针变量的主要作用,即指针变量作为形参时,可用于扩展存储单元的使用范围,并像数组那样标识一组存储单元。除此之外,本书还引入了虚拟变量的概念,清晰地揭示了二维数组的结构,并将它与动态二维数组的结构进行比较,深刻而简明。本书将知识和能力有机融合,训练了读者解决复杂问题的综合能力和思维。本书便于读者自主学习,每章有导学和讨论。本书用近百幅图直观地展示了知识点,如计算机与C语言的关系图、函数图、递归函数执行图、二维数组图和动态二维数组图等。本书通过画表格法分析了循环执行过程,可帮助初学者快速提升编程能力。另外,本书除了注重呈现算法从产生到完善的过程,还强调“提出问题、设计算法和编程测试”能力的培养。本书讲解深刻而简明,便于自学,易于探究,既可作为各类院校C语言课程的教材,又可作为社会工作者的培训用书。

    图书详情

    ISBN:9787121451430
    开 本:16(185*260)
    页 数:344
    字 数:564

    本书目录

    第1章  计算机和C语言	1
    1.1  用户、计算机和程序员	2
    1.2  C语言、计算机和程序员	3
    1.3  C语言自定义命令——函数	5
    1.3.1  使用函数命令	5
    1.3.2  函数定义	5
    1.3.3  函数调用	7
    1.3.4  main函数	8
    1.4  “懂”C语言的计算机	8
    1.4.1  虚拟的C语言计算机	8
    1.4.2  VC6.0编译程序	9
    1.5  与虚拟C语言计算机深入交流	15
    1.5.1  C语言语法规则	15
    1.5.2  printf函数的用法	15
    1.5.3  用VC6.0观察程序的运行过程	16
    1.6  C语言语句简析	21
    练习1	21
    第2章  基本数据类型	24
    2.1  计算机中的数据	25
    2.2  整型	25
    2.2.1  整型的类别	25
    2.2.2  整型字面量	26
    2.2.3  整型数据的输入和输出	27
    2.2.4  查看整数的存储状态	30
    2.2.5  整型的使用	30
    2.3  浮点型	31
    2.3.1  浮点型的类别	31
     2.3.2  浮点型字面量和浮点型数据的输入和输出	32
    2.3.3  浮点型的误差	34
    2.4  字符型	35
    2.4.1  字符型数据的编码	35
    2.4.2  字符型字面量	36
    2.4.3  字符型数据的输入和输出	37
    2.5  再谈printf函数的使用	39
    2.6  典型例题	40
    练习2	47
    第3章  表达式	50
    3.1  概述	50
    3.2  赋值表达式	53
    3.2.1  赋值操作符	53
    3.2.2  类型不匹配的赋值操作	54
    3.2.3  复合赋值操作符	56
    3.3  算术表达式	56
    3.3.1  算术表达式求值	56
    3.3.2  强制类型转换操作符	57
    3.3.3  自增自减操作符	58
    3.4  逗号表达式	59
    3.5  典型例题	60
    练习3	64
    第4章  逻辑运算和选择结构	67
    4.1  C语言中的逻辑型	68
    4.2  关系表达式	69
    4.3  逻辑表达式	70
    4.3.1  逻辑操作符	70
    4.3.2  短路计算	71
    4.4  if选择结构	72
    4.4.1  if选择结构的语法	72
    4.4.2  if选择结构的用法	75
    4.5  if-else选择结构	78
    4.6  嵌套的选择结构	80
    4.7  条件操作符	84
    4.8  switch选择结构	85
    4.8.1  基本的switch选择结构	85
      4.8.2  包含break语句的switch选择结构	87
    4.9  典型例题	90
    练习4	96
    第5章  循环结构	102
    5.1  while循环结构	102
    5.1.1  while循环结构语法	102
    5.1.2  while循环结构用法	104
    5.2  for循环结构	108
    5.2.1  for循环结构语法	108
    5.2.2  for循环结构用法	110
    5.3  break语句和continue语句	112
    5.4  循环嵌套	114
    5.5  do-while循环结构	118
    5.6  典型例题	120
    练习5	124
    第6章  数组	132
    6.1  一维数组	133
    6.1.1  一维数组定义	133
    6.1.2  一维数组初始化	134
    6.1.3  一维数组应用	136
    6.2  多维数组	141
    6.2.1  二维数组定义及初始化	141
    6.2.2  二维数组应用	141
    6.2.3  三维数组简介	144
    6.3  字符型数组和字符串	145
    6.3.1  字符型数组应用	145
    6.3.2  字符串简介	146
    6.3.3  字符串的输入和输出	147
    6.3.4  字符串处理	148
    6.4  综合示例:求大整数的阶乘	149
    练习6	152
    第7章  用函数编程	157
    7.1  函数语法	157
    7.1.1  再谈函数定义	157
    7.1.2  再谈函数调用	159
    7.1.3  函数声明	161
    7.2  函数重用	162
    7.2.1  单独定义函数	162
    7.2.2  重用函数	164
    7.3  作用域	165
    7.3.1  变量作用域	165
    7.3.2  变量生命周期	169
    7.3.3  扩展文件作用域	170
    7.3.4  限制文件作用域	172
    7.3.5  一维数组作为形参	174
    7.4  函数的易用性	176
    7.4.1  使用全局变量的函数	176
    7.4.2  不用全局变量的函数	178
    7.5  递归	180
    7.5.1  递归算法与递归函数	180
    7.5.2  递归算法示例	183
    7.6  库函数简介	188
    7.6.1  getchar函数、getch函数和getche函数	188
    7.6.2  rand函数、srand函数和time函数	190
    7.6.3  字符串函数	190
    7.7  综合示例:确定公元y年m月d日是星期几	192
    练习7	196
    第8章  预处理	203
    8.1  程序编译	203
    8.2  宏定义	204
    8.2.1  简单宏	204
    8.2.2  参数化宏	205
    8.3  文件包含	206
    8.4  条件编译	208
    练习8	209
    第9章  指针	213
    9.1  指针类型	213
    9.1.1  存储单元的地址	213
    9.1.2  指针变量的定义和赋值	214
    9.2  间接引用	215
    9.2.1  指针变量的用法	215
    9.2.2  野指针和空指针	217
    9.3  指针与函数	218
    9.3.1  指针变量作为形参	218
    9.3.2  函数返回指针	220
    9.4  地址运算	222
    9.5  指针与数组	223
    9.5.1  指针与一维数组	223
    9.5.2  指针与二维数组	227
    9.5.3  指针与字符串	229
    9.5.4  指针数组与指针型指针变量	230
    9.5.5  指针数组作为形参	232
    9.6  main函数和命令行参数	233
    9.7  指向函数的指针变量	235
    9.8  使用堆空间	236
    9.9  典型例题	239
    练习9	245
    第10章  用户自定义数据类型	257
    10.1  结构型	258
    10.1.1  结构型的定义	258
    10.1.2  结构型指针变量	260
    10.1.3  链表	262
    10.2  联合型	267
    10.3  枚举型	268
    10.4  为类型自定义别名	269
    练习10	271
    第11章  文件	275
    11.1  文件概述	276
    11.1.1  C语言文件	276
    11.1.2  文本文件与二进制文件	276
    11.2  文件的打开和关闭	277
    11.2.1  (新建后)打开文件	277
    11.2.2  文件关闭	278
    11.3  文件读写	278
    11.3.1  fputc函数和fgetc函数	278
    11.3.2  文件结束状态	281
    11.3.3  fprintf函数和fscanf函数	282
    11.3.4  fwrite函数和fread函数	285
    11.4  标准设备文件	286
    11.5  文件随机读写	288
    11.5.1  调整文件位置指针指向的位置	288
    11.5.2  可读写的文件	289
    11.6  综合示例:简单的学生成绩管理系统	290
    练习11	294
    第12章  位运算	297
    12.1  位操作符	297
    12.1.1  按位与操作符&	297
    12.1.2  按位或操作符|	298
    12.1.3  异或操作符^	298
    12.1.4  取反操作符~	299
    12.1.5  左移操作符<<	299
    12.1.6  右移操作符>>	299
    12.2  位运算示例	300
    12.3  位段	301
    练习12	301
    第13章  数字化信息编码	303
    13.1  二进制	303
    13.1.1  位权	303
    13.1.2  十进制数转换为二进制数	304
    13.1.3  二进制的计算	305
    13.1.4  八进制和十六进制	306
    13.2  计算机中的计算	307
    13.3  整数编码	308
    13.4  计算机中的整数	309
    13.4.1  整数加法示例	309
    13.4.2  补码的符号位	310
    13.4.3  整数构成一个环	311
    13.5  小数编码	312
    13.5.1  定点小数	312
    13.5.2  浮点数编码	313
    13.5.3  浮点数的特点	314
    13.6  字符编码	315
    13.6.1  机内码	315
    13.6.2  输入码和字形码	317
    附录A  C语言关键字	319
    附录B  格式化输入和输出	320
    附录C  ASCII码表	326
    附录D  常用的C语言库函数	327
    附录E  C语言操作符	331
    参考文献	332
    
    展开

    前     言

    1.只有深刻才能简明——难与易的辩证法
    C语言是精心设计的编程语言,几乎每个知识点都值得思考。如逗号操作符是自左向右依次求值的,为什么其中优先级高的操作符不先求值呢?
    表达式的求值顺序是先考虑序列点,再考虑优先级和结合性。逗号操作符用于将多条语句合成一条语句,为避免优先级影响求值顺序,需要有序列点;逻辑与和逻辑或操作符求值时会短路计算,为避免优先级影响求值顺序,需要有序列点;条件操作符用于改写if-else选择结构,为避免优先级影响求值顺序,需要有序列点。可见序列点的作用是避免优先级影响操作符的功能或求值过程,这也是上述操作符有序列点的原因。
    对于明确的规则与零乱的规定,它们的学习成本相差很大。但仅有规则,而不讨论制定规则的原因,只被动识记规则,学习效果终究有限。探究式学习的作用毋庸置疑,但探究的成效取决于“分析、讨论的问题”。某个知识点从哪个角度探究,用什么问题引导,是教育家的专长。问题不仅要有意义,还得是学习者通过努力就能解决的问题,即解决问题所需的条件已经具备;解决问题的思路和方法要有启发性;问题的答案最好能给人以“蓦然回首,那人却在,灯火阑珊处”的顿悟。如果不能清晰定义序列点的求值规则,就只能避而不谈,用规定代替规则,更不要提探究了。
    逗号操作符的优先级最低,赋值操作符是右结合的,算术运算符比双目逻辑操作符的优先级高等规则都蕴含着道理。如果不这样规定,表达式就会烦琐、晦涩。弄明白了其中的道理,读者不仅可以精通知识,可能还会觉得给操作符设计优先级和结合性并非难事。
    作为入门课程,C语言的背景知识简单,知识点也不难,每位读者都有能力学好。读者借助本书,不但能够收获知识,而且能够收获成长的快乐,完成从“原来如此”到“理应如此”的蜕变。
    “取乎其上,得乎其中;取乎其中,得乎其下。”主动思考,探究知识中的道理,刚开始可能慢一点,待形成习惯,提高了能力,学习效率自然会提高,正所谓“磨刀不误砍柴工”。大学知识是不可能通过死记硬背学好的,只有明白其中的道理,才会记得牢,用得好,也才能举一反三,轻松应对软件开发技术的升级换代。
    即使只想学习C语言知识,有明确的知识点也更容易识记。例如,当函数文件属于工程时,借助函数声明使用函数;当函数文件不属于工程时,借助文件包含命令include使用函数。指针变量的主要作用是作为形参时,可扩展存储单元的使用范围,并像数组那样标识一组存储单元。
    本书第13章数字化信息编码是扩展内容,并非C语言的知识点。第13章分析了整数采用补码的原因,以及-1的编码为何全是1,并解答了为什么float型的精度只能保证6到7位等问题。为了便于初学者理解,这部分知识点以示例分析为主,以讲解“除以2取余法”求十进制整数的二进制形式为例。
    设11转换后的二进制数为bn…b1b0,则有11=bn×2n+…+b1×21+b0×20。等式两边同时除以2,11除以2的余数为1,商为5;bn×2n+…+b1×21+b0×20除以2后的余数为b0,商为bn×2n-1+…+b1×20,故有b0=1,bn×2n-1+…+b1×20=5。
    同理可求出b1、b2、…、bn。
    2.本书的内在逻辑
    C语言是程序员用来与计算机沟通的工具,而计算机由五大部件组成且采用二进制。C语言与二进制有关,与计算机的存储器、输入设备、输出设备、运算器和控制器五大组成部件有关,与程序员有关。
    1)C语言与存储器
    (1)变量。
    C语言中用变量标识内存中的存储单元,变量有类型。计算机采用纯粹的二进制,数据被编码成01串后,计算机才能存储与处理。由于编码规则不同,整数90和小数0.703125的编码结果可能都是01011010,因此,不知道编码规则就不能确定01011010的实际值。变量的类型就是编码规则。整型变量有取值范围,存储超出取值范围的整数就会出现逻辑错误;浮点型变量的值多为有规定精度的近似数;字符型数据非常重要,计算机借助字符型数据与用户交互,书中多次讨论了这个重要问题。
    (2)指针变量。
    指针变量的值是存储单元的地址。如果把存储单元看作一个箱子,那么指针变量的箱子中存储了另一个箱子的钥匙。形象地说,指针变量指向了另一个存储单元;简单地说,指针变量存放了另一个存储单元。指针的间接引用操作就是先从指针变量中得到钥匙,再使用另一个箱子。指针变量作为形参时,实参是一个存储单元的地址,函数体中以间接引用的方式使用实参标识的存储单元,即实参的存储单元可以在当前函数中被使用。因此,指针变量可用于扩展存储单元的使用范围。
    (3)数组。
    数组是一组相邻存储单元的集合,可用于存储批量处理的数据。数组是组织数据的一种方式,二维数组的组织方式是C语言中的难点。本书引入了虚拟变量的概念,清晰地揭示了二维数组的结构,并与堆空间中构造的动态二维数组进行比较,深刻而简明。数组变量是虚拟的指针变量,当指针变量指向一组相邻存储单元中的第一个存储单元时,指针也就成了数组。指针代替数组标识一组存储单元,是指针的第二个重要作用。以指针为基础构造的动态链表是另一种组织数据的方式。本书分别使用数组和链表解决同一个问题,通过对比简单地分析了算法与数据结构的关系。
    (4)文件。
    外存中的数据能被长期保存。外存空间管理的基本单位是文件,一个文件相当于外存中的一块存储空间。当需要长期保存数据时,程序可将变量中的数据存储到文件中。使用文件中的数据时,程序需将其中的数据读取到变量中。存储单元全为字符型的文件是文本文件。二进制文件包含各种类型的存储单元。文件的扩展名规定了文件中存储单元的组织方式,如txt文件、mp3文件等。若保存数据的目的是记录最终的处理结果,则将数据转换为字符串,用文本文件存储,以便用多种软件查看内容。若在文件中用同类型的存储单元存储需继续处理的数据,则存取过程无须转换数据类型,存取效率高。
    C语言中的输入设备和输出设备分别是由stdin和stdout指向的文本格式的标准设备文件。用户的输入会自动存入标准输入文件stdin,scanf函数会先读取stdin文件中的内容,得到输入的字符串,然后将其编码成格式字符规定的类型,并赋值给实参标识的存储单元。printf先把占位序列转换成字符串,再把得到的输出字符串写入标准输出文件stdout。存入stdout文件的字符会自动出现在输出设备上,可见计算机借助字符型数据与用户沟通。
    2)C语言与运算器和控制器
    (1)表达式的求值。
    使用操作符命令可以指挥运算器进行算术运算和逻辑运算。表达式有一个值,这个值通常是运算器中的运算结果。表达式的求值顺序是先考虑序列点,再考虑优先级和结合性。在对算术表达式求值时,需注意操作数类型的自动转换。double型运算器中的存储单元只有double型,当操作数被读取到运算器时,其类型会“自动”转换成double型,结果自然也是double型的。
    逻辑表达式可用于判断一个结论的真假。当用户输入的整数用n存储时,“用户的输入是负数”这个结论可根据表达式n<0的值判断真假。
    (2)选择结构和循环结构。
    选择结构和循环结构是复杂的关键字命令,由控制器执行。
    选择结构使得程序可处理多种情况。嵌套的选择结构对应复杂的问题,外层条件常用于初步筛选,内层条件多用于进一步缩小范围。分析、解决问题时注意条理性,先找出初步筛选的条件,用流程图表示处理过程,需进一步处理的问题用“待处理”表示;再用条件区分待处理问题,逐步补全流程图。
    计算机是“整数有范围,小数有精度,擅长重复”的机器,特别适合进行重复性的工作。重复的步骤可以解决许多问题,在C语言中多用循环结构实现。初学者的编程能力体现在对循环结构的掌握程度。以表格形式直观地分析循环结构的执行过程,初学者可以快速提升自己读写循环结构的能力。
    分析问题,用代码模拟解决问题的步骤,找到重复的语句,从而实现循环结构。本书首先呈现了用循环解决问题的过程,然后总结了最常见的重复,即穷举法和迭代法,最后对出现的状况进行了修正。例如,解决“百僧百馍”问题时,穷举大僧人数可以得到正确答案,但算法有逻辑错误。求两个正整数m和n的最小公倍数时,穷举1,2,3,…,m×n效率低,穷举m,2×m,3×m,…,n×m效率高。穷举时发现n×m总会被输出,需要修正循环条件,得到“循环体中的判断条件可能与循环条件相关”的规律。迭代时会多次重复某个过程,一次重复可称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代常用于根据前面的项求当前项,项之间的关系可称为迭代公式。用代码模拟计算前几项时发现,设置初始条件并计算第一项的过程通常与计算其他项的过程不同,需要调整。
    嵌套的循环结构是“自上而下,逐步求精”的体现。以输出两个5行的图形为例:“自上而下”表示从宏观分析问题时,两个图形相同,用同样的循环结构重复5次,每次输出1行;“逐步求精”表示针对具体问题,列举“原始数据”,找出两个图形中第i行的不同特点。
    3)C语言与程序员
    (1)C语言语句。
    C语言语句由程序员编写并应用于计算机,其中的字符(串)是C语言的标识符。常见的标识符有关键字、变量和函数。不是标识符的普通字符(串)需写作'a'("abc")。语句中的命令有关键字、函数和操作符,而命令的操作数(命令的对象)为变量、有返回值的函数调用和形如32的字面量。
    (2)函数。
    程序员常借助函数重用代码。函数是完成特定功能的一系列指令的集合。程序员无须再次编写代码,通过调用已有函数就可以完成特定的功能。函数的功能体现在由输入得到输出。输入分为形参和实参,当形参为指针变量时,实参为形参赋值,可直观地理解为把账号和密码拍照并发给别人。账号和密码有两份,账号里面的钱供两人使用。当形参为普通类型时,实参为形参赋值,可理解为把作业拍照发给别人。函数的输出有3种方法:返回值位于匿名的存储单元中,返回值位于全局变量中,返回值位于形参指针指向的存储单元中。
    为了方便使用,常将函数定义在单独的文件中。
    一些问题可以转化为“性质相同,规模较小”的子问题,这些问题常用递归算法解决。递归函数实现了递归算法。递归是“问题”的重复。计算机擅长重复,设计算法时应尽量用重复的步骤,这些步骤可以用循环或递归实现。
    3.总结
    “教师必须使用学术的力量以及自然世界和人文社科本身的奥妙,提升课程与教学的吸引力,应该依靠学科内容的吸引力,严密的逻辑思维,独特的发明与发现,精彩绝伦的思想观点等内涵式要素。”作者在2011年、2013年和2015年共出版了3本C语言教材,尝试呈现C语言内在的“奥妙”。
    本书以先进的教育理念为指导,从全新的角度深刻、简明地讲解了C语言的知识点。作者将它应用于实际教学后,不但教学效果显著,而且学生成绩斐然,因此获得了师生的一致好评。
    本书包含配套电子课件、案例源代码、教学大纲、习题答案、视频教程等,读者可登录华信教育资源网(www.hxedu.com.cn)下载。
    作者在本书的写作过程中得到了许多人的帮助,有家人、朋友、同事、学生及网络上素昧平生的C语言爱好者,在此对他们致以最衷心的感谢。此外,特别感谢出版社编辑的认可与辛勤付出。由于作者水平有限,书中难免有疏漏及词不达意之处,恳请读者谅解并不吝赐教。作者联系方式:zeq126@126.com。
    
    周二强
    2022年9月
    
    展开

    作者简介

    周二强,主要从事软件设计与开发相关研究工作。主讲C语音程序设计课程多年,深受学生喜爱,是C语言课程建设负责人。曾出版《新编C语言程序设计教程》《C语言内涵教程》《新概念C语言能力教程》等书。
  • 样 章 试 读
  • 图 书 评 价 我要评论
华信教育资源网