华信教育资源网
C语言从入门到精通(第2版)
作   译   者:陈锐 等 出 版 日 期:2016-09-01
出   版   社:电子工业出版社 维   护   人:戴晨辰 
书   代   号:G0298930 I S B N:9787121298936

图书简介:

本书从最基本的C语言概念入手,由浅入深,综合典型的实例,引导初学者由浅入深地掌握C语言知识。全书共17章。其中,第1~6章是入门篇,包括C语言概述和Visual Studio 2008开发工具的介绍,数据类型,运算符与表达式,顺序结构、选择结构和循环结构程序设计等内容。第7~13章是提高篇,包括数组、函数、指针、预处理、结构体和联合体、链表与文件等内容。第14~17章是技术篇,包括常用算法、网络编程、综合应用案例──图书管理系统和C语言调试技术等内容。本书内容全面,不仅涵盖了C语言的基本语法与程序设计知识,还较为深入介绍了相关常用算法知识和实用案例、调试技术。本书在讲解知识的同时,指出了编程时一些应注意的地方和易犯的错误,给出了不少关于C语言方面的调试经验。全书案例丰富,讲解非常细致,语言通俗易懂,所有实例代码均在Visual Studio 2008开发环境下运行通过。本书配套资源:PPT、源代码。技术支持QQ群:2345500678。
定价 58.0
您的专属联系人更多
配套资源 图书内容 样章/电子教材 图书评价
  • 配 套 资 源

    本书资源

    本书暂无资源

    会员上传本书资源

  • 图 书 内 容

    内容简介

    本书从最基本的C语言概念入手,由浅入深,综合典型的实例,引导初学者由浅入深地掌握C语言知识。全书共17章。其中,第1~6章是入门篇,包括C语言概述和Visual Studio 2008开发工具的介绍,数据类型,运算符与表达式,顺序结构、选择结构和循环结构程序设计等内容。第7~13章是提高篇,包括数组、函数、指针、预处理、结构体和联合体、链表与文件等内容。第14~17章是技术篇,包括常用算法、网络编程、综合应用案例──图书管理系统和C语言调试技术等内容。本书内容全面,不仅涵盖了C语言的基本语法与程序设计知识,还较为深入介绍了相关常用算法知识和实用案例、调试技术。本书在讲解知识的同时,指出了编程时一些应注意的地方和易犯的错误,给出了不少关于C语言方面的调试经验。全书案例丰富,讲解非常细致,语言通俗易懂,所有实例代码均在Visual Studio 2008开发环境下运行通过。本书配套资源:PPT、源代码。技术支持QQ群:2345500678。

    图书详情

    ISBN:9787121298936
    开 本:16开
    页 数:424
    字 数:695.0

    本书目录

    第1章  C语言的前世今生	1
    1.1  C语言的前世今生	1
    1.1.1  计算机语言的发展阶段	1
    1.1.2  C语言的产生	3
    1.2  为什么要选择C语言	4
    1.2.1  选择C语言的好处	4
    1.2.2  C语言的特点	5
    1.2.3  如何学好C语言	6
    1.3  第一个C语言程序	7
    1.4  小结	8
    习题	9
    第2章  C程序开发步骤及开发环境	10
    2.1  C程序的开发步骤	10
    2.2  Visual Studio 2008开发环境介绍	11
    2.2.1  使用Visual Studio 2008
    新建项目	11
    2.2.2  在Visual Studio 2008的项目中
    新建程序文件	13
    2.2.3  使用Visual Studio 2008开发
    C语言程序	14
    2.3  小结	16
    习题	16
    第3章  基本数据类型	17
    3.1  另一个简单的C语言程序	17
    3.2  C语言中的数据类型	19
    3.3  变量与常量	21
    3.3.1  变量	21
    3.3.2  常量	23
    3.4  整型变量	24
    3.4.1  整型变量的定义	24
    3.4.2  整型变量占用的字节数与
    表示范围	25
    3.4.3  整型变量的存储	26
    3.4.4  整型变量的赋值	27
    3.4.5  一个简单的C程序——输出
    整型变量的值	27
    3.5  实型变量	28
    3.5.1  实型变量的定义与赋值	28
    3.5.2  实型变量的表示范围	28
    3.5.3  一个简单的C程序——输出
    实型变量的值	28
    3.6  字符型变量	29
    3.6.1  字符型变量的定义与赋值	29
    3.6.2  字符型数据的存储形式	29
    3.6.3  字符数据与字符串数据的
    区别	31
    3.7  小结	31
    习题	32
    第4章  运算符与表达式	33
    4.1  常见运算符初识	33
    4.2  算术运算符与算术表达式	34
    4.2.1  +、-、*、/、%——双目
    运算符	34
    4.2.2  算术表达式	34
    4.2.3  多种类型的数据混合运算——
    自动类型转换	35
    4.2.4  强制类型转换	37
    4.2.5  ++与--、+与- ——单目
    运算符	37
    4.3  赋值运算符与赋值表达式	39
    4.3.1  直接赋值运算符与直接赋值
    表达式	39
    4.3.2  赋值表达式中的类型转换	40
    4.3.3  复合算术赋值运算符与
    表达式	45
    4.4  关系运算符与关系表达式	46
    4.4.1  关系运算符	46
    4.4.2  关系表达式	46
    4.5  逻辑运算符与逻辑表达式	48
    4.5.1  逻辑运算符	48
    4.5.2  逻辑表达式	48
    4.6  逗号运算符与逗号表达式	50
    4.6.1  逗号运算符	50
    4.6.2  逗号表达式	50
    4.6.3  逗号运算符应用举例	51
    4.7  小结	52
    习题	52
    第5章  结构化程序开发(一)	54
    5.1  算法及描述方法	54
    5.1.1  什么是算法	54
    5.1.2  伪码	55
    5.1.3  流程图	56
    5.2  控制结构	57
    5.2.1  什么是语句	57
    5.2.2  语句的分类	57
    5.2.3  顺序结构程序设计	59
    5.2.4  选择结构程序设计——
    if选择结构	64
    5.2.5  选择结构程序设计——
    switch选择结构	72
    5.2.6  条件运算符与条件表达式	77
    5.2.7  选择结构程序设计应用举例	79
    5.3  小结	82
    习题	83
    第6章  结构化程序设计(二)	86
    6.1  为什么要有循环结构	86
    6.1.1  如何重复输出100以内的
    整数	86
    6.1.2  如何求连续的n个自然数
    的和	87
    6.2  goto语句	88
    6.2.1  goto语句——无条件转移
    语句	88
    6.2.2  goto语句构成的循环语句——
    向前跳转	88
    6.3  while循环语句	90
    6.4  do-while循环语句	92
    6.5  for循环语句	94
    6.6  break语句和continue语句	98
    6.6.1  为什么要有break语句	98
    6.6.2  break语句	98
    6.6.3  为什么要有continue语句	100
    6.6.4  continue语句	100
    6.7  循环结构的嵌套	102
    6.8  循环结构程序设计应用举例	106
    6.9  小结	110
    习题	110
    第7章  数组	114
    7.1  为什么引入数组	114
    7.1.1  多变量的解决之路——
    引入数组	114
    7.1.2  认识数组	115
    7.2  一维数组	116
    7.2.1  声明一维数组	116
    7.2.2  引用一维数组	117
    7.2.3  初始化一维数组的几种
    方式	118
    7.2.4  一维数组应用举例	118
    7.3  二维数组	124
    7.3.1  为什么引入二维数组——
    维度的出现	124
    7.3.2  声明二维数组	127
    7.3.3  引用二维数组	127
    7.3.4  初始化二维数组的几种
    方式	128
    7.3.5  二维数组应用举例	130
    7.4  字符数组与字符串	134
    7.4.1  声明字符数组与初始化	134
    7.4.2  引用字符数组	135
    7.4.3  字符数组与字符串	135
    7.4.4  字符数组的输入与输出	136
    7.4.5  字符串的相关函数	137
    7.4.6  字符串应用举例	141
    7.5  小结	145
    习题	145
    第8章  函数	150
    8.1  函数初识与函数的分类	150
    8.1.1  为什么要有函数	150
    8.1.2  函数的分类	151
    8.2  函数的定义	152
    8.2.1  无参函数的定义	152
    8.2.2  有参函数的定义	152
    8.2.3  有参函数传统的定义方式	153
    8.3  函数的参数与函数返回值	153
    8.3.1  实际参数与形式参数	154
    8.3.2  函数返回值	155
    8.4  函数的调用	156
    8.4.1  函数的一般调用	157
    8.4.2  函数原型	159
    8.4.3  函数的嵌套调用	161
    8.5  函数的递归调用	163
    8.5.1  递归调用的定义	164
    8.5.2  递归调用应用举例	164
    8.6  数组作为函数的参数	167
    8.6.1  数组元素作为函数参数	167
    8.6.2  数组名作为函数参数	169
    8.6.3  多维数组名作为函数参数	172
    8.7  变量的作用域	173
    8.7.1  局部变量	173
    8.7.2  全局变量	175
    8.8  变量的存储类别	178
    8.8.1  自动变量	178
    8.8.2  静态变量	178
    8.8.3  寄存器变量	180
    8.8.4  外部变量	180
    8.9  内部函数与外部函数	183
    8.9.1  内部函数	183
    8.9.2  外部函数	183
    8.10  小结	184
    习题	185
    第9章  指针	190
    9.1  地址和指针	190
    9.1.1  什么是地址	190
    9.1.2  什么是指针——间接存取	191
    9.2  指针与变量	192
    9.2.1  定义指针变量	192
    9.2.2  引用指针变量	193
    9.2.3  指针变量作为函数参数	196
    9.3  指针与数组	198
    9.3.1  指向数组元素的指针与指向
    数组的指针	198
    9.3.2  指向多维数组的指针变量	201
    9.3.3  数组名(指针)作为函数
    参数	205
    9.3.4  指针数组	212
    9.3.5  二级指针	213
    9.4  指针与字符串	214
    9.4.1  字符串指针	214
    9.4.2  字符串指针作为函数参数	215
    9.4.3  字符指针数组	217
    9.4.4  指针数组作为main的参数	218
    9.5  指针与函数	220
    9.5.1  函数指针——指向函数的
    指针	220
    9.5.2  函数指针作为函数参数	221
    9.5.3  指针函数——返回指针值的
    函数	224
    9.5.4  void指针	225
    9.6  指针与const	226
    9.6.1  常量指针——指向常量的
    指针	226
    9.6.2  指针常量——指针不可以
    改变	227
    9.6.3  常量指针常量——指向常量的
    指针常量	227
    9.7  小结	228
    习题	229
    第10章  预处理命令	233
    10.1  宏定义——#define	233
    10.1.1  不带参数的宏定义	233
    10.1.2  带参数的宏定义	235
    10.1.3  条件编译命令中的运算符——
    #和##	237
    10.2  文件包含命令——#include	238
    10.2.1  文件包含命令的两种方式	238
    10.2.2  文件包含命令应用举例	239
    10.3  条件编译命令	240
    10.3.1  条件编译命令——#ifdef	240
    10.3.2  条件编译命令——#ifndef	242
    10.3.3  条件编译命令——#if	242
    10.4  小结	243
    习题	243
    第11章  结构体与联合体	246
    11.1  结构体	246
    11.1.1  为什么要有结构体	246
    11.1.2  定义结构体类型	247
    11.1.3  定义结构体变量	248
    11.1.4  引用结构体变量	249
    11.1.5  初始化结构体变量	250
    11.2  结构体数组	252
    11.2.1  定义结构体数组	252
    11.2.2  初始化结构体数组	253
    11.2.3  结构体数组应用举例	254
    11.3  指针与结构体	256
    11.3.1  指向结构体变量的指针	257
    11.3.2  指向结构体数组的指针	258
    11.3.3  结构体变量作为函数的
    参数	260
    11.3.4  指向结构体变量的指针作为
    函数的参数	261
    11.4  用typedef定义类型	262
    11.4.1  使用typedef定义类型	262
    11.4.2  typedef应用举例	264
    11.5  联合体	265
    11.5.1  定义联合体类型及变量	265
    11.5.2  引用联合体	266
    11.5.3  使用联合体应注意的问题	266
    11.5.4  联合体的应用举例	267
    11.6  枚举类型	269
    11.6.1  定义枚举类型及变量	269
    11.6.2  使用枚举类型的一些说明	270
    11.6.3  枚举类型应用举例	270
    11.7  小结	272
    习题	273
    第12章  链表	276
    12.1  链表的相关概念	276
    12.1.1  为什么要有链表——节省
    内存单元,不用事先定义
    空间大小	276
    12.1.2  什么是链表	277
    12.1.3  动态内存分配	278
    12.2  链表的操作	279
    12.2.1  创建链表	279
    12.2.2  输出链表	281
    12.2.3  链表的查找操作	282
    12.2.4  链表的插入操作	282
    12.2.5  链表的删除操作	284
    12.3  链表应用举例	286
    12.3.1  直接插入排序——使用链表
    实现	286
    12.3.2  一元多项式的相加	292
    12.4  小结	297
    习题	298
    第13章  文件	301
    13.1  文件的相关概念	301
    13.1.1  为什么要有文件	301
    13.1.2  文件的分类	302
    13.1.3  文件类型指针	302
    13.2  打开文件与关闭文件	303
    13.2.1  打开文件	303
    13.2.2  关闭文件	304
    13.3  文件的读取与写入	304
    13.3.1  fgetc函数与fputc函数	304
    13.3.2  fread函数与fwrite函数	306
    13.3.3  fscanf函数与fprintf函数——
    格式化读写函数	309
    13.3.4  fgets函数与fputs函数——
    字符串读写函数	312
    13.4  文件的定位	312
    13.4.1  rewind函数——重置文件
    指针	312
    13.4.2  fseek函数——定位文件
    指针	313
    13.4.3  ftell函数——得到文件指针
    位置	315
    13.5  出错检测	315
    13.5.1  ferror函数	315
    13.5.2  clearerr函数	316
    13.6  小结	316
    习题	316
    第14章  常用算法	319
    14.1  算法基础	319
    14.1.1  什么是算法	319
    14.1.2  算法的特性	321
    14.1.3  算法设计的目标	321
    14.1.4  算法的时间复杂度和空间
    复杂度	322
    14.2  迭代与递推	323
    14.2.1  算法思想	323
    14.2.2  求一个数的平方根	323
    14.2.3  角谷猜想	324
    14.2.4  母牛生小牛问题	325
    14.2.5  分西瓜	326
    14.3  穷举法	327
    14.3.1  算法思想	327
    14.3.2  填数游戏	327
    14.3.3  背包问题	328
    14.3.4  五猴分桃	330
    14.4  递归	331
    14.4.1  算法思想	332
    14.4.2  数制转换	332
    14.4.3  求n个数中的最大者	333
    14.5.4  字符串颠倒	334
    14.5  分治	335
    14.5.1  算法思想	335
    14.5.2  求n个数的最大值和最
    小值	336
    14.5.3  赛程安排问题	338
    14.6  贪心算法	340
    14.6.1  算法思想	340
    14.6.2  加油站问题	340
    14.6.3  找零钱问题	342
    14.6.4  0-1背包问题	343
    14.7  小结	347
    习题	347
    第15章  网络编程基础	349
    15.1  网络相关概念	349
    15.1.1  什么是计算机网络	349
    15.1.2  网络协议	350
    15.1.3  端口	350
    15.1.4  TCP/IP参考模型	351
    15.1.5  套接字	352
    15.2  基于TCP的简单网络程序	352
    15.2.1  基于TCP的socket编程	352
    15.2.2  服务器端的程序实现	354
    15.2.3  客户端程序的实现	359
    15.3  基于UDP的简单网络聊天程序	361
    15.3.1  基于UDP的socket编程	362
    15.3.2  服务器端程序的实现	363
    15.3.3  客户端程序的实现	364
    15.4  小结	367
    第16章  综合案例:图书管理系统	368
    16.1  系统分析与设计	368
    16.2  数据描述与存储	369
    16.3  详细设计与代码实现	370
    16.3.1  主函数模块	370
    16.3.2  增加图书信息模块	373
    16.3.3  修改图书信息模块	377
    16.3.4  删除图书信息模块	381
    16.3.5  借阅图书和归还图书模块	382
    16.3.6  文件读写模块	385
    16.4  程序调试与系统测试	386
    16.5  小结	388
    第17章  常见错误与程序调试	390
    17.1  为什么要调试程序	390
    17.2  常见错误	391
    17.2.1  错误分类	391
    17.2.2  常见错误举例	392
    17.3  程序调试	395
    17.3.1  如何利用Visual Studio 2008
    开发环境调试程序	395
    17.3.2  程序调试应用举例	401
    17.4  小结	410
    参考文献	412
    展开

    前     言

    第2版前言
    C语言是目前国内外使用最为广泛的程序设计语言之一。它具有功能丰富、表达能力强、使用方便灵活、执行效率高、可移植性好等优点,可用于几乎所有领域。C语言既具有高级语言的特点,也具有汇编语言的功能,具有很强的系统处理能力,可以直接对硬件和外部接口进行控制。C语言被广泛应用于系统软件和应用软件的开发。
    使用C语言进行程序设计和软件开发,可以熟悉并理解计算机内部的工作原理,对于深入学习计算机技术是大有裨益的。C语言是计算机科学与技术专业的基础课程,它是今后学习数据结构与算法的基础,也为以后选择Visual C++或Java软件开发奠定了基础。因此,只有熟练地掌握了C语言,才能更加深入地掌握计算机技术。
    C语言是一门实践性很强的课程,要想真正掌握C语言,除了学习C语言课程,大量阅读C语言程序之外,还要多上机调试程序。只有自己亲自调试了程序,才能真正对程序代码进行深入理解,并能发现其中隐藏的错误,通过调试程序还可以提高自己的调试程序能力,从而成为一名真正的程序员。只有不断调试程序,才能真正对编程开发有所体会,即使对C语言已经比较熟悉,也难免会在调试中遇到一些问题,比如笔者完成0-1背包问题的程序代码编写后,运行程序却发现运行结果不对,于是又仔细阅读了程序,对程序的思想进行深入理解,并修改了程序,重新运行程序,却还是发现一个二维数组中的数据有问题,表面上看没有问题,就是数据不正确,最后单步逐条语句进行调试,马上就发现是数组越界了,将代码作修改后,重新运行终于得到了正确的结果。因此,笔者总结多年学习和调试C语言的经验,认为程序调试很重要,特别是对于初学者一定要尽量多上机调试程序。
    有不少读者朋友对指针的使用存在疑惑,曾经有好几个学生学数据结构时问,“为什么有时候要用二级指针?”,他们的疑惑在于为什么要用二级指针作为函数的参数,而不用一级指针。说明有不少读者对指针的理解还不是很透彻,比如在主函数中创建一个指针,同时想通过另外一个函数去创建一个链表,于是希望在主函数中能使用这个已经创建的链表,但是又不想用return去返回链表的头指针,那么此时就需要使用二级指针作为函数的参数,是不是这个道理呢?二级指针的作用就在于此。其实笔者是想通过这些例子来说明对于许多读者来说,看的书太少,上机实践得更少,如果能够多看些算法方面的书,多上机调试程序,有任何疑惑就去上机调试一下,那么疑惑就会尽释,否则心理总存在疑惑,对问题理解得不够透彻。
    本书共17章,其中第1~6章是入门篇,第7~13章是提高篇,第14~17章是技术篇。本书知识结构可用下图所示的思维导图来表示。
     
    本书由陈锐、辽源职业技术学院的王慧博、西北大学的耿国华、南阳理工学院的赵娟编著,许昌学院的夏政伟、运城学院的张雷、山西水利职业技术学院的赵志华、西安财经学院的高妮、西北大学的高全力、郑州职业技术学院的邢金萍参编。
    
    修订后本书特点
    1.内容全面,讲解详细
    本书不仅介绍了数据类型、结构化程序设计、数组、指针、结构体等,还介绍了链表、文件、常用算法、网络编程,接着给出了一个图书管理系统的综合案例,以加强C语言的综合实践能力的培养,最后还提供了C语言调试技术,针对具体的例子进行讲解,这些常见的错误也是笔者多年来遇到的问题,希望有助于提高大家的C语言调试能力。改版后,书中去掉了图形界面设计、键盘与鼠标操作、位操作等不常用的技术。
    2.语言通俗,图表丰富
    本书用非常通俗的语言,针对C语言中每个知识点,进行了详细的讲解,以便读者能快速理解并掌握每个知识点。C语言概念较多,知识点零碎,为便于读者学习,在概念出现之后都给出了相应的例子和图表进行详细讲解,每个知识点都配有案例,便于读者领会其含义。
    3.层次清晰,结构合理
    本书内容结构设计合理,按照章、节和小节进行划分,将每一小节作为一个知识点,这样的设计使重点更加突出,结构层次感强,使读者在学习中容易抓住重点,通过将概念与例子结合,对知识更加容易理解与消化。
    4.实例丰富、典型,深入剖析讲解
    本书案例丰富,每章的每一个知识点都有配套案例,全书大约160个案例,均有完整代码实现。本书在案例选择上非常有代表性,有的是考研题目,有的是程序员考试题目,这些题目很有技巧性,通过这些典型案例,可以提高读者程序设计的技巧,有助于熟练理解编程思想,对于以后学习数据结构、算法等内容很有好处。书中针对每一个程序都进行了详细的讲解,特别是对于关键代码行,都进行了深入的分析,最后给出了运行结果。
    5.实用性强,延伸知识
    除了介绍基本的语法知识外,本书还介绍了链表、常用算法技术、网络编程等知识,特别是常用算法涉及迭代、递归、分治、贪心等算法思想。本书最后以一个综合案例和程序调试技术作为结束内容。在内容的讲解上也渗透了一些程序调试技术知识,通过学习本书,真正使读者能熟练掌握C语言,并且熟练调试C语言程序。通过这些知识点的介绍,使读者能进一步理解计算机相关技术的实现原理,具有很强的引导性,也为今后的继续深入学习奠定了基础。
    本书代码全部在Visual Studio 2008开发环境下运行通过。
    适合的读者
    ●	没有任何基础,准备学习C语言的初学者
    ●	有一定C语言基础,想进一步掌握C语言的中高级读者
    ●	大中专院校学生
    ●	软件开发人员
    ●	计算机相关的科研工作者
    应该感谢的人
    在本书出版的过程中,许多热心的读者朋友提出了改进意见,特别是puppypyb(网名)很认真地提供了具体的修改意见,感谢中国科学院大学的胡英鹏,中国科学技术大学的王启,华中科技大学的杨梨花,西安电子科技大学的杜坚,西安交通大学的郝昊天,华东师范大学的牛颖楠,南京航空航天大学的韩琦文,南京理工大学的邓裕彬,北京工业大学的潘姝妤,电子科技大学的丁亮,上海海事大学的左伟康,福州大学的李川,湘潭大学的王乾,天津职业技术师范大学的董春妹,桂林电子科技大学的曹礼,郑州大学的张杨、张冬冬,成都理工大学的张良,西华师范大学的刘富腾,衡水学院的杨帅,重庆电子工程职业学院的冯博,湖南女子学院的李奇,湖北汽车工业学院的李兴海,黄淮学院的于景波,九江学院的樊美林,信阳师范学院的周亚林,云南大学的袁宏磊,广东技术师范学院的欧阳镇,江苏省扬州中学的张佑杰,浙江工业大学的陈文邦,电子科技大学的吕鑫垚,北京邮电大学世纪学院的昂超,兴义民族师范学院的鲜一峰,新乡学院的方湘豫,西安航空职业技术学院的王少波,赶集网的康钦谋,济南趣维网络科技有限公司的刘晓倩,中国航空计算研究所的王泉,中兴通讯公司的杨柯,华为科技有限公司的卢春俊,浪潮集团的郭鹏,大唐电信的张天广,三星电子的欧小哲,腾讯科技(北京)有限公司的杨凡,云南昆船设计研究院的夏翔,此外还有很多网友也提出了宝贵建议,这里不再一一列举。
    由于时间仓促,加上本人水平有限,书中难免会存在一些不足和错误,希望读者朋友通过邮箱vc-study@163.com来联系,也可通过QQ群(234500678)沟通交流。祝愿各位读者在阅读本书的过程中有一个愉快的体验。
    
    编者
    展开

    作者简介

    本书暂无作者简介
  • 样 章 试 读
  • 图 书 评 价 我要评论
华信教育资源网