新書推薦:
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:HK$
58.2
《
慈悲与玫瑰
》
售價:HK$
87.4
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:HK$
76.2
《
云中记
》
售價:HK$
76.2
《
大模型应用开发:RAG入门与实战
》
售價:HK$
89.4
《
不挨饿快速瘦的减脂餐
》
售價:HK$
67.0
《
形而上学与存在论之间:费希特知识学研究(守望者)(德国古典哲学研究译丛)
》
售價:HK$
110.7
《
卫宫家今天的饭9 附画集特装版(含漫画1本+画集1本+卫宫士郎购物清单2张+特制相卡1张)
》
售價:HK$
132.2
|
編輯推薦: |
学习程序设计,初学者往往遇到这样的困境:语言规则可以倒背如流,但写出的代码总是编译通不过,即使编译通过了却也得不出想要的结果。怎么办?《*行代码 C语言》可以给你提供帮助。 你不需要具备高深的数学和电子学知识,只需要训练自己以计算机能够理解的方式去表达自己的逻辑,也就是要具备计算思维,寻找到解决问题的方法,然后用编程语言去指挥计算机执行即可。因此,本书与常规的C语言书不同,除了C语言本身的语法规则外,本书更关注的是培养初学者具有程序设计的思想,掌握程序设计的方法。 另外,计蒜客在线教育团队,为本书的读者提供了伴随式的在线编程平台支持,读者可以将图书和线上编程结合起来学习。 提供扫码看视频服务,全书94个微视频,总时长超过1000分钟。 提供辅助教学资源包,包括实验、试卷及答案、教学大纲、PPT等。
|
內容簡介: |
本书以C语言为编程环境,由浅入深地介绍了C语言的完整内容以及过程化程序设计的思想和方法。全书共有13章。第 1章介绍了什么是程序设计。第 2章给出了一个完整的C语言程序,并介绍了如何在VS2010中输入、编译链接及调试程序。第3~5章分别介绍了C语言中支持结构化程序设计的3种结构:顺序、分支和循环所必需的工具。第6章介绍了如何编写及应用函数;第7章介绍了处理批量数据的工具,即数组。上述章节的内容都是C语言的核心知识,请务必掌握。第8~11章分别讲解了结构体、共用体、链表、位运算和文件等编程技术。第 12章讲解了如何用结构化程序设计思想指导一个大程序的开发,以及软件开发的基本过程。该章中用猜硬币游戏介绍了自顶向下分解的过程,用石头、剪刀、布游戏介绍了模块划分,用龟兔赛跑模拟的例子介绍了如何建立一个自己的库以及如何应用自己创建的库,用学生管理系统和书店管理系统讲述了软件开发的过程。第 13章介绍了通用算法设计技术,旨在让读者了解,当遇到一个问题时应该如何设计解决问题的算法。 本书内容翔实、讲解深入,每个知识点都提供了示例,全书共有171道例题和228个程序样例,所有程序样例都在VS2010中调试通过。为了方便读者自学,本书还提供了118道自测题和141道编程题,以及所有习题的答案,且配套了讲解主要知识点的视频。 本书适合C语言初学者,也适合有一定基础的读者。可作为各高等院校计算机专业的教材,也可供从事计算机软件开发的人员参考。
|
關於作者: |
翁惠玉:上海交通大学副教授,程序设计数据结构和计算机网络等课程主讲教师,曾获高等教育教学成果奖一等奖、高等教育教学成果奖二等奖、高等教育上海市级教育成果一等奖等。
|
目錄:
|
第1章程序设计概述 1
1.1什么是程序设计 1
1.2 计算机的基本组成 2
1.2.1计算机硬件 2
1.2.2 计算机软件 4
1.3程序设计语言 4
1.3.1机器语言 4
1.3.2汇编语言 5
1.3.3高级语言 6
1.3.4智能语言 7
1.3.5C语言 7
1.4 程序设计过程 7
1.4.1算法设计 8
1.4.2编码 11
1.4.3编译与链接 11
1.4.4调试与维护 12
1.5编程规范及常见问题 13
1.5.1真的需要算法设计阶段吗 13
1.5.2为什么不用自然语言编程 13
1.5.3寄存器、主存储器和外存储器有什么不同 13
1.5.4所有的计算机能够执行的指令都是相同的吗 13
1.5.5为什么需要编译和链接 13
1.5.6为什么在不同类型的计算机上运行C语言程序需要使用不同的编译器 14
1.5.7为什么不同类型的计算机不能运行同一个汇编程序 14
1.6小结 14
1.7自测题 14
1.8实战训练 15
第2章初识C语言 16
2.1 一个完整的C语言程序 16
2.1.1 注释 17
2.1.2 预编译 17
2.1.3 主程序 18
2.2 C语言的开发环境 20
2.2.1VS2010的安装 20
2.2.2程序输入 20
2.2.3编译链接 24
2.2.4程序的运行 25
2.2.5程序的调试 28
2.3编程规范及常见问题 30
2.3.1注意注释 30
2.3.2良好的排版习惯 30
2.3.3为什么要学C语言 31
2.3.4如何学习程序设计 31
2.3.5什么是库 31
2.4小结 32
2.5自测题 32
2.6实战训练 32
第3章顺序程序设计 33
3.1 常量与变量 33
3.1.1 变量定义 33
3.1.2 数据类型 35
3.1.3常量与符号常量 39
3.2 数据的输入输出 44
3.2.1 字符的输入输出 44
3.2.2 格式化输入输出 46
3.3 算术运算 54
3.3.1 算术表达式 54
3.3.2 不同类型数据间的混合运算 56
3.3.3 强制类型转换 57
3.3.4 数学函数库 59
3.4赋值运算 60
3.4.1 赋值表达式 60
3.4.2 赋值的嵌套 62
3.4.3 复合赋值运算 62
3.4.4 自增和自减运算符 63
*3.5信息表示 64
3.5.1数制间的转换 64
3.5.2整数的表示 66
3.5.3实数的表示 69
3.6顺序程序设计示例 69
3.7 程序规范及常见问题 71
3.7.1变量命名 71
3.7.2运算符的优先级 71
3.7.3数据运算时的注意事项 71
3.7.4为什么要定义符号常量 72
3.7.5变量定义后且对它赋值前的值是什么 72
3.7.6不要在表达式中插入有副作用的子表达式 72
3.8小结 72
3.9自测题 73
3.10实战训练 74
第4章分支程序设计 76
4.1 关系表达式 76
4.2 逻辑表达式 78
4.2.1逻辑运算 78
4.2.2短路求值 80
4.3 if语句 82
4.3.1 if语句的形式 82
4.3.2 if语句的嵌套 87
4.3.3 条件表达式 90
4.4 switch语句及其应用 92
4.5程序规范及常见问题 102
4.5.1条件语句程序的排版 102
4.5.2不要连用关系运算符 102
4.5.3注意短路求值 102
4.5.4常见错误 102
4.6小结 103
4.7自测题 103
4.8实战训练 104
第5章循环程序设计 106
5.1 计数循环 106
5.1.1 for语句 106
5.1.2 for语句的进一步讨论 115
5.1.3 for循环的嵌套 116
5.2break和continue语句 118
5.2.1break语句 118
5.2.2continue语句 120
5.3 基于哨兵的循环 121
5.3.1 while语句 122
5.3.2 dowhile循环 128
5.4循环的中途退出 130
5.5编程规范和常见问题 134
5.5.1循环语句程序的排版 134
5.5.2优化循环体 134
5.5.3使用for循环的注意事项 134
5.5.4常见错误 134
5.5.5三个循环语句之间的关系 135
5.6小结 135
5.7自测题 135
5.8实战训练 136
第6章过程封装函数 139
6.1 函数的定义 140
6.1.1函数的基本结构 140
6.1.2 return语句 141
6.1.3 函数示例 141
6.2 函数的使用 144
6.2.1 函数原型的声明 144
6.2.2 函数调用 146
6.2.3 将函数与主程序放在一起 147
6.2.4 函数调用过程 151
6.3带参数的宏 154
6.4 变量的作用域 155
6.4.1局部变量 155
6.4.2全局变量 156
6.5 变量的存储类别 158
6.5.1 自动变量 158
6.5.2 静态变量 159
6.5.3 寄存器变量 160
6.5.4 外部变量 161
*6.6 多源文件程序的编译链接 163
6.7 递归程序设计 164
6.7.1 递归的基本概念 165
6.7.2 递归函数的应用 167
6.8编程规范及常见问题 173
6.8.1使用函数时的建议 173
6.8.2函数命名 174
6.8.3没有返回值的函数是否需要return语句 174
6.8.4尽量避免使用全局变量 174
6.8.5尽量避免实际参数表达式有副作用 175
6.8.6常见错误 175
6.9小结 175
6.10自测题 176
6.11实战训练 177
第7章批量数据处理数组 179
7.1 一维数组 179
7.1.1 一维数组的定义 179
7.1.2 数组元素的引用 180
7.1.3 一维数组的内存映像 184
7.1.4 一维数组的应用 185
7.2数组作为函数的参数 190
7.3查找算法 195
7.3.1顺序查找 196
7.3.2二分查找 197
7.4 排序算法 201
7.4.1直接选择排序法 201
7.4.2冒泡排序法 203
7.5 二维数组 205
7.5.1 二维数组的定义 206
7.5.2 二维数组元素的引用 207
7.5.3 二维数组的内存映像 208
7.5.4 二维数组的应用 208
7.5.5 二维数组作为函数的参数 218
7.6 字符串 220
7.6.1 字符串的存储及初始化 220
7.6.2 字符串的输入输出 221
7.6.3字符串作为函数参数 225
7.6.4 字符串处理函数 230
7.6.5 字符串的应用 232
7.7程序规范及常见问题 234
7.7.1数组下标必须从0开始吗 234
7.7.2能用表达式des = src将字符串src赋给字符串des吗 234
7.7.3为什么存放字符串的数组长度比字符串的实际长度多一个字符235
7.7.4有了scanf函数为什么还需要gets函数 235
7.7.5传递字符串为什么只需要一个参数 235
7.7.6传递二维数组时形式参数中第二个方括号中的值为什么必须指定 235
7.8小结 235
7.9自测题 236
7.10实战训练 237
第8章指针 240
8.1 指针的概念 240
8.1.1指针与间接访问 240
8.1.2 指针变量的定义 241
8.1.3 指针变量的操作 242
8.2 指针与数组 246
8.2.1指向数组元素的指针 246
8.2.2指针运算与数组访问 246
8.3 指针与函数 250
8.3.1 指针作为参数 250
8.3.2返回指针的函数 254
8.3.3数组作为函数参数的进一步讨论 256
8.4 动态内存分配 259
8.4.1动态变量 259
8.4.2 动态变量的创建 259
8.4.3 动态变量的消亡 261
8.4.4 内存泄露 261
8.4.5 查找malloc和calloc的失误 261
8.4.6动态变量应用 263
8.5指针与字符串 265
8.5.1用指向字符的指针变量表示字符串 265
8.5.2字符串作为函数的参数 266
8.5.3返回字符串的函数 268
8.6 指针数组与多级指针 270
8.6.1 指针数组 270
*8.6.2 main函数的参数 272
*8.6.3 多级指针 276
*8.6.4 二维数组与指向一维数组的指针 277
*8.6.5动态二维数组 279
*8.7 函数指针 280
8.7.1指向函数的指针 280
8.7.2函数指针作为函数参数 281
8.7.3函数指针用于菜单选择 284
8.8编程规范与常见问题 285
8.8.1int x, *p = 有错吗 285
8.8.2避免使用悬空指针和未初始化的指针 286
8.8.3不同类型的指针之间为什么不能赋值 286
8.8.4指针与数组等价吗 286
8.8.5值传递和指针传递的区别是什么 286
8.8.6返回指针的函数必须确保返回值指向的变量在函数执行
结束时依然存在 287
8.8.7使用动态变量时必须严格防止内存泄露 287
8.9小结 287
8.10自测题 288
8.11实战训练 289
第9章更多的数据类型 290
9.1枚举类型 290
9.2类型别名 293
9.3结构体 294
9.3.1 结构体的概念 294
9.3.2 结构体类型的定义 295
9.3.3 结构体类型变量的定义 296
9.3.4 结构体类型变量的使用 299
9.3.5 结构体与函数 302
9.4 链表 308
9.4.1 链表的概念 308
9.4.2单链表的存储 310
9.4.3单链表的操作 311
9.4.4带头结点的单链表 312
9.4.5单链表实例 313
9.5共用体 316
9.5.1共用体概念和共用体类型的定义 316
9.5.2共用体类型变量的定义及初始化 318
9.5.3共用体变量的使用 318
9.6编程规范及常见问题 324
9.6.1结构体中每个字段的类型都不相同吗 324
9.6.2单链表中为什么要引入头结点 324
9.6.3引入结构体有什么用处 324
9.6.4结构体和共用体的区别 324
9.6.5结构体和共用体类型定义时能否省略类型名 324
9.6.6结构体类型定义与结构体变量定义 325
9.7小结 325
9.8自测题 325
9.9实战训练 326
第10章位运算与位段 328
10.1 位运算 328
10.1.1 按位与运算 328
10.1.2 按位或运算 330
10.1.3 按位异或运算 331
10.1.4 按位取反运算 333
10.1.5 左移运算 335
10.1.6 右移运算 335
10.1.7位运算与赋值运算 337
10.1.8不同长度的数据进行位运算 337
10.2位段 338
10.2.1位段的概念及定义 338
10.2.2位段的引用 339
10.3编程规范及常见问题 341
10.3.1检验某数中指定位的值 341
10.3.2将数据中的某一位的值置成0 341
10.3.3将数据中的某一位的值置成1 342
10.3.4将数据中的某一位的值取反 342
10.4小结 342
10.5自测题 342
10.6实战训练 343
第11章文件 344
11.1内存与外存 344
11.2 文件的概念 345
11.2.1什么是文件 345
11.2.2ASCII文件与二进制文件 346
11.3 文件缓冲与文件指针 346
11.4文件的打开与关闭 347
11.4.1打开文件 347
11.4.2关闭文件 349
11.5 ASCII文件的读写 349
11.5.1字符读写函数 350
11.5.2字符串读写函数 352
11.5.3数值读写函数 354
11.6二进制文件的读写 358
11.6.1fwrite函数 358
11.6.2fread函数 360
11.7文件的顺序访问 362
11.7.1什么是文件的顺序访问 362
11.7.2feof函数 363
11.8 文件的随机访问 364
11.8.1文件定位指针 365
11.8.2rewind函数 365
11.8.3fseek函数 367
11.8.4ftell函数 369
*11.9 文件操作与控制台操作 370
11.10编程规范及常见问题 371
11.10.1良好的文件使用习惯 371
11.10.2文件打开方式选择 372
11.10.3文件指针与文件定位指针 372
11.10.4流与文件 372
11.11小结 372
11.12自测题 373
11.13实战训练 373
第12章软件开发过程 374
12.1结构化程序设计思想 374
12.2 自顶向下分解示例:猜硬币游戏 375
12.2.1 顶层分解 375
12.2.2 prn_instruction函数的实现 376
12.2.3 play函数的实现 376
12.2.4 get_call_from_user函数的实现 378
12.3 模块划分示例:石头、剪刀、布游戏 380
12.3.1自顶向下分解 381
12.3.2模块划分 382
12.3.3头文件的设计 383
12.3.4模块实现 386
12.4 设计自己的库示例:随机函数库的设计和实现 389
12.4.1随机函数库的功能设计 390
12.4.2接口文件的设计 390
12.4.3实现文件的设计 391
12.5随机函数库的应用示例:模拟龟兔赛跑 392
12.5.1自顶向下分解 392
12.5.2模块划分及实现 393
12.6软件开发过程 395
12.6.1软件危机 395
12.6.2软件工程 396
12.7软件开发过程示例:学生管理系统的设计与实现 397
12.7.1需求分析 397
12.7.2概要设计 398
12.7.3详细设计 400
12.7.4编码与测试 402
12.8软件开发示例:网上书店的设计 407
12.8.1需求分析 407
12.8.2概要设计 408
12.8.3详细设计 411
12.9编程规范及常见问题 413
12.9.1头文件的格式 413
12.9.2实现一个库为什么需要两个文件 413
12.9.3慎用全局变量 414
12.10小结 414
12.11自测题 414
12.12实战训练 414
第13章通用算法设计 416
13.1枚举法 416
13.2贪婪法 423
13.3分治法 427
13.4动态规划 431
13.5回溯法 435
13.6小结 442
13.7实战训练 442
附录 443
附录1第1章自测题答案 443
附录2第2章自测题答案 445
附录3第3章自测题答案 446
附录4第4章自测题答案 451
附录5第5章自测题答案 453
附录6第6章自测题答案 455
附录7第7章自测题答案 459
附录8第8章自测题答案 463
附录9第9章自测题答案 466
附录10第10章自测题答案 467
附录11第11章自测题答案 470
附录12第12章自测题答案 472
附录13ASCII编码表 474
|
|