21天学通C语言 带目录PDF电子版.pdf 原创
21天学通C语言 带目录PDF电子版.pdf 原创 封面 -23 书名 -21 版权 -20 前言 -19 目录 -14 简介 1 第一周课程 1 1 第1天课程 C语言初步 2 2 1.1 C语言简史 2 2 1.2 为何要使用C语言 2 2 1.3 编程前的准备工作 3 3 1.4 程序开发周期 4 4 1.4.1 创建源代码 4 4 1.4.2 编译源代码 4 4 1.4.3 链接以创建可执行文件 5 5 1.4.4 结束开发周期 6 6 1.5 第一个C语言程序 7 7 1.5.1 输入并编译hello.c 7 7 1.6 总结 9 9 1.7 问与答 9 9 1.8 作业 10 10 1.8.1 小测验 10 10 1.8.2 练习 10 10 TYPE&RUN1 打印程序清单 12 12 第一个TYPE&RUN 12 12 第2天课程 C语言程序的组成部分 14 14 2.1 一个简短的C语言程序 14 14 2.2 程序的组成部分 15 15 2.2.1 main( )函数(第8~23行) 15 15 2.2.2 #include编译指令(第2行 ) 15 15 2.2.3 变量定义(第4行) 15 15 2.2.4 函数原型(第6行) 16 16 2.2.5 程序语句(第11、12、15、16、19、20、22和28行) 16 16 2.2.6 函数定义(第26~29行) 16 16 2.2.7 程序注释(第1、10、14、18和25行) 16 16 2.2.8 使用花括号(第9、23、27和29行) 17 17 2.2.9 运行程序 17 17 2.2.10 有关精度的说明 18 18 2.3 重温程序的组成部分 18 18 2.4 总结 20 20 2.5 问与答 20 20 2.6 作业 20 20 2.6.1 小测验 20 20 2.6.2 练习 21 21 第3天课程 存储信息:变量和常量 23 23 3.1 计算机内存 23 23 3.2 使用变量存储信息 24 24 3.2.1 变量名 24 24 3.3 数值变量的类型 25 25 3.3.1 变量声明 27 27 3.3.2 typedef关键字 27 27 3.3.3 初始化变量 28 28 3.4 常量 28 28 3.4.1 字面常量 28 28 3.4.2 符号常量 29 29 3.5 总结 31 31 3.6 问与答 32 32 3.7 作业 32 32 3.7.1 小测验 32 32 3.7.2 练习 32 32 第4天课程 语句、表达式和运算符 34 34 4.1 语句 34 34 4.1.1 空白对语句的影响 34 34 4.1.2 创建空语句 35 35 4.1.3 使用复合语句 35 35 4.2 表达式 35 35 4.2.1 简单表达式 35 35 4.2.2 复杂表达式 36 36 4.3 运算符 36 36 4.3.1 赋值运算符 36 36 4.3.2 数学运算符 37 37 4.3.3 运算符优先级和圆括号 40 40 4.3.4 子表达式的计算顺序 41 41 4.3.5 关系运算符 41 41 4.4 if语句 42 42 4.4.1 else子句 44 44 4.5 判断关系表达式 46 46 4.5.1 关系运算符的优先级 47 47 4.6 逻辑运算符 48 48 4.7 再谈true/false值 48 48 4.7.1 运算符的优先级 49 49 4.7.2 复合赋值运算符 50 50 4.7.3 条件运算符 50 50 4.7.4 逗号运算符 51 51 4.8 再谈运算符优先级 51 51 4.9 总结 52 52 4.10 问与答 52 52 4.11 作业 53 53 4.11.1 小测验 53 53 4.11.2 练习 53 53 TYPE&RUN2 猜数游戏 55 55 第5天课程 使用函数封装代码 57 57 5.1 函数是什么 57 57 5.1.1 函数的定义 57 57 5.1.2 函数的用法 57 57 5.2 函数的工作原理 59 59 5.3 函数和结构化编程 60 60 5.3.1 结构化编程的优点 60 60 5.3.2 规划结构化程序 60 60 5.3.3 从顶向下的方法 61 61 5.4 编写函数 61 61 5.4.1 函数头 62 62 5.4.2 函数的返回类型 62 62 5.4.3 函数名 62 62 5.4.4 参数列表 62 62 5.4.5 函数体 64 64 5.4.6 函数原型 67 67 5.5 将参数传递给函数 67 67 5.6 调用函数 68 68 5.6.1 递归 69 69 5.7 函数的位置 70 70 5.8 内联函数 70 70 5.9 总结 71 71 5.10 问与答 71 71 5.11 作业 72 72 5.11.1 小测验 72 72 5.11.2 练习 72 72 第6天课程 基本的程序流程控制 74 74 6.1 数组的基本知识 74 74 6.2 控制程序的执行 75 75 6.2.1 for语句 75 75 6.2.2 嵌套for语句 79 79 6.2.3 while语句 80 80 6.2.4 嵌套while语句 82 82 6.2.5 do…while循环 84 84 6.3 嵌套循环 87 87 6.4 总结 88 88 6.5 问与答 88 88 6.6 作业 88 88 6.6.1 小测验 89 89 6.6.2 练习 89 89 第7天课程 信息读写基础 90 90 7.1 在屏幕上显示信息 90 90 7.1.1 printf( )函数 90 90 7.1.2 格式化字符串 90 90 7.1.3 转义序列 91 91 7.1.4 使用puts( )显示消息 96 96 7.2 使用scanf( )函数输入数值数据 97 97 7.3 三字符序列 100 100 7.4 总结 101 101 7.5 问与答 101 101 7.6 作业 102 102 7.6.1 小测验 102 102 7.6.2 练习 102 102 第一周复习 104 104 第二周课程 110 第8天课程 使用数值数组 110 110 8.1 数组是什么 110 110 8.1.1 一维数组 110 110 8.1.2 多维数组 113 113 8.2 命名和声明数组 114 114 8.2.1 初始化数组 115 115 8.2.2 初始化多维数组 116 116 8.2.3 数组的最大长度 119 119 8.3 总结 121 121 8.4 问与答 121 121 8.5 作业 121 121 8.5.1 小测验 121 121 8.5.2 练习 122 122 第9天课程 指针 123 123 9.1 指针是什么 123 123 9.1.1 计算机内存 123 123 9.1.2 创建指针 123 123 9.2 指针和简单变量 124 124 9.2.1 声明指针 124 124 9.2.2 初始化指针 124 124 9.2.3 使用指针 125 125 9.3 指针和变量类型 126 126 9.4 指针和数组 127 127 9.4.1 作为指针的数组名 128 128 9.4.2 数组元素的存储 128 128 9.4.3 指针算术 130 130 9.5 有关指针的注意事项 133 133 9.6 数组下标表示法和指针 133 133 9.7 将数组传递给函数 133 133 9.8 总结 137 137 9.9 问与答 137 137 9.10 作业 138 138 9.10.1 小测验 138 138 9.10.2 练习 138 138 TYPE&RUN3 让程序暂停 139 139 第10天课程 字符和字符串 141 141 10.1 char数据类型 141 141 10.2 使用字符变量 141 141 10.3 使用字符串 144 144 10.3.1 字符数组 144 144 10.3.2 初始化字符数组 144 144 10.4 字符串和指针 144 144 10.5 不存储在数组中的字符串 145 145 10.5.1 编译时分配字符空间 145 145 10.5.2 malloc( )函数 145 145 10.5.3 使用malloc( )函数 146 146 10.6 显示字符串和字符 148 148 10.6.1 puts( )函数 149 149 10.6.2 printf( )函数 149 149 10.7 从键盘读取字符串 150 150 10.7.1 使用gets( )函数输入字符串 150 150 10.7.2 使用scanf( )函数输入字符串 152 152 10.8 总结 154 154 10.9 问与答 154 154 10.10 作业 155 155 10.10.1 小测验 155 155 10.10.2 练习 156 156 第11天课程 结构、共用体和TypeDef 157 157 11.1 简单结构 157 157 11.1.1 定义和声明结构 157 157 11.1.2 存取结构的成员 158 158 11.2 复杂结构 160 160 11.2.1 包含其他结构的结构 160 160 11.2.2 包含数组的结构 162 162 11.3 结构数组 164 164 11.4 初始化结构 167 167 11.5 结构和指针 168 168 11.5.1 将指针作为结构的成员 168 168 11.5.2 创建指向结构的指针 170 170 11.5.3 使用指针和结构数组 171 171 11.5.4 将结构作为参数传递给函数 173 173 11.6 共用体 174 174 11.6.1 定义、声明和初始化共用体 175 175 11.6.2 存取共用体的成员 175 175 11.7 使用typedef给结构创建别名 179 179 11.8 总结 179 179 11.9 问与答 179 179 11.10 作业 180 180 11.10.1 小测验 180 180 11.10.2 练习 180 180 第12天课程 变量作用域 182 182 12.1 作用域是什么 182 182 12.1.1 演示作用域 182 182 12.1.2 作用域为何重要 184 184 12.2 外部变量 184 184 12.2.1 外部变量的作用域 184 184 12.2.2 何时使用外部变量 184 184 12.2.3 extern关键字 184 184 12.3 局部变量 185 185 12.3.1 静态变量和动态变量 186 186 12.3.2 函数参数的作用域 187 187 12.3.3 外部静态变量 188 188 12.3.4 寄存器变量 188 188 12.4 局部变量和main( )函数 189 189 12.5 应使用哪种存储类型 189 189 12.6 局部变量和代码块 189 189 12.7 总结 190 190 12.8 问与答 191 191 12.9 作业 191 191 12.9.1 小测验 191 191 12.9.2 练习 191 191 TYPE&RUN4 机密消息 194 194 第13天课程 高级程序流程控制 197 197 13.1 提早结束循环 197 197 13.1.1 break语句 197 197 13.1.2 continue语句 199 199 13.2 goto语句 200 200 13.3 死循环 202 202 13.4 switch语句 205 205 13.5 退出程序 212 212 13.5.1 exit( )函数 212 212 13.6 在程序中执行操作系统命令 213 213 13.7 总结 214 214 13.8 问与答 215 215 13.9 作业 215 215 13.9.1 小测验 215 215 13.9.2 练习 215 215 第14天课程 操纵屏幕、打印机和键盘 217 217 14.1 流和C语言 217 217 14.1.1 何为程序的输入/输出 217 217 14.1.2 什么是流 217 217 14.1.3 文本流和二进制流 218 218 14.1.4 预定义的流 218 218 14.2 使用C语言的流函数 219 219 14.2.1 例子 219 219 14.3 读取键盘输入 220 220 14.3.1 字符输入 220 220 14.3.2 格式化输入 225 225 14.4 控制屏幕输出 231 231 14.4.1 使用putchar( )、putc( )和fputc( )输出字符 231 231 14.4.2 使用puts( )和fputs( )输出字符串 233 233 14.4.3 使用printf( )和fprintf( )格式化输出 234 234 14.5 重定向输入/输出 238 238 14.5.1 重定向输入 239 239 14.6 何时使用fprintf( ) 239 239 14.6.1 使用stderr 240 240 14.7 总结 241 241 14.8 问与答 241 241 14.9 作业 242 242 14.9.1 小测验 242 242 14.9.2 练习 242 242 第二周复习 244 244 第三周课程 252 第15天课程 有关指针的高级主题 252 252 15.1 声明指向指针的指针 252 252 15.2 指针和多维数组 253 253 15.3 指针数组 259 259 15.3.1 复习字符串和指针 259 259 15.3.2 声明char类型指针数组 259 259 15.3.3 范例 261 261 15.4 函数指针 265 265 15.4.1 声明函数指针 265 265 15.4.2 初始化并使用函数指针 266 266 15.5 链表 273 273 15.5.1 有关链表的基本知识 273 273 15.5.2 使用链表 274 274 15.5.3 演示简单链表 278 278 15.5.4 实现链表 280 280 15.6 总结 286 286 15.7 问与答 286 286 15.8 作业 286 286 15.8.1 小测验 287 287 15.8.2 练习 287 287 第16天课程 使用磁盘文件 289 289 16.1 将流与磁盘文件关联起来 289 289 16.2 磁盘文件的类型 289 289 16.3 文件名 290 290 16.4 打开文件 290 290 16.5 读写文件数据 292 292 16.5.1 格式化文件输入/输出 293 293 16.5.2 字符输入/输出 296 296 16.5.3 直接文件输入/输出 297 297 16.6 文件缓冲技术:关闭和刷新文件 300 300 16.7 顺序文件存取和随机文件存取 301 301 16.7.1 ftell( )和rewind( )函数 301 301 16.7.2 fseek( )函数 303 303 16.8 检测文件尾 305 305 16.9 文件管理函数 307 307 16.9.1 删除文件 307 307 16.9.2 给文件重命名 308 308 16.9.3 复制文件 309 309 16.10 使用临时文件 311 311 16.11 总结 312 312 16.12 问与答 312 312 16.13 作业 313 313 16.13.1 小测验 313 313 16.13.2 练习 313 313 TYPE&RUN5 计算字符数 314 314 第17天课程 操纵字符串 318 318 17.1 确定字符串的长度 318 318 17.2 复制字符串 319 319 17.2.1 strcpy( )函数 319 319 17.2.2 strncpy( )函数 320 320 17.2.3 strdup( )函数 321 321 17.3 拼接字符串 322 322 17.3.1 strcat( )函数 322 322 17.3.2 strncat( )函数 324 324 17.4 比较字符串 325 325 17.4.1 比较两个完整字符串 325 325 17.4.2 比较字符串的一部分 326 326 17.4.3 比较字符串时忽略大小写 328 328 17.5 查找字符串 328 328 17.5.1 strchr( )函数 328 328 17.5.2 strrchr( )函数 329 329 17.5.3 strcspn( )函数 329 329 17.5.4 strspn( )函数 330 330 17.5.5 strpbrk( )函数 331 331 17.5.6 strstr( )函数 331 331 17.6 字符串转换 332 332 17.7 其他字符串函数 333 333 17.7.1 strrev( )函数 333 333 17.7.2 strset( )和strnset( )函数 334 334 17.8 将字符串转换为数字 334 334 17.8.1 将字符串转换为int 335 335 17.8.2 将字符串转换为long值 335 335 17.8.3 将字符串转换为long long值 335 335 17.8.4 将字符串转换为浮点数 335 335 17.9 字符检测函数 336 336 17.9.1 ANSI对大小写转换的支持 339 339 17.10 总结 340 340 17.11 问与答 340 340 17.12 作业 341 341 17.12.1 小测验 341 341 17.12.2 练习 341 341 第18天课程 有关函数的高级主题 343 343 18.1 将指针传递给函数 343 343 18.2 void类型的指针 346 346 18.3 接受可变数目参数的函数 348 348 18.4 返回指针的函数 350 350 18.5 总结 352 352 18.6 问与答 352 352 18.7 作业 352 352 18.7.1 小测验 352 352 18.7.2 练习 353 353 第19天课程 函数库 354 354 19.1 数学函数 354 354 19.1.1 三角函数 354 354 19.1.2 指数函数和对数函数 354 354 19.1.3 双曲线函数 355 355 19.1.4 其他数学函数 355 355 19.1.5 演示数学函数 355 355 19.2 处理时间 356 356 19.2.1 时间的表示 356 356 19.2.2 时间函数 356 356 19.2.3 使用时间函数 359 359 19.3 处理错误 360 360 19.3.1 assert( )宏 361 361 19.3.2 头文件errno.h 362 362 19.3.3 perror( )函数 362 362 19.4 查找和排序 364 364 19.4.1 使用bsearch( )进行查找 364 364 19.4.2 使用qsort( )进行排序 365 365 19.4.3 演示查找和排序 365 365 19.5 总结 370 370 19.6 问与答 370 370 19.7 作业 370 370 19.7.1 小测验 370 370 19.7.2 练习 371 371 TYPE&RUN6 计算抵押贷款的偿还金额 372 372 第20天课程 管理内存 374 374 20.1 类型转换 374 374 20.1.1 自动类型转换 374 374 20.1.2 显式转换 376 376 20.2 分配内存的存储空间 377 377 20.2.1 使用malloc( )函数分配内存 377 377 20.2.2 使用calloc( )函数分配内存 379 379 20.2.3 使用realloc( )函数分配更多的内存 380 380 20.2.4 使用free( )函数释放内存 381 381 20.3 操纵内存块 383 383 20.3.1 使用memset( )函数初始化内存 383 383 20.3.2 使用memcpy( )复制内存中的数据 383 383 20.3.3 使用memmove( )函数移动内存中的数据 383 383 20.4 位的用法 385 385 20.4.1 移位运算符 385 385 20.4.2 按位逻辑运算符 386 386 20.4.3 求补运算符 387 387 20.4.4 结构中的位字段 387 387 20.5 总结 389 389 20.6 问与答 389 389 20.7 作业 390 390 20.7.1 小测验 390 390 20.7.2 练习 390 390 第21天课程 编译器的高级用法 392 392 21.1 使用多个源代码文件的编程 392 392 21.1.1 模块化编程的优点 392 392 21.1.2 模块化编程技术 392 392 21.1.3 模块的组成部分 394 394 21.1.4 外部变量和模块化编程 395 395 21.1.5 使用.obj文件 395 395 21.1.6 使用生成工具 396 396 21.2 C语言的预处理器 396 396 21.2.1 #define预处理器编译指令 397 397 21.2.2 使用编译指令#include 400 400 21.2.3 使用#if、#elif、#else和#endif 400 400 21.2.4 使用#if…#endif来帮助调试 401 401 21.2.5 避免将头文件包含多次 401 401 21.2.6 #undef编译指令 402 402 21.3 预定义的宏 402 402 21.4 使用命令行参数 403 403 21.5 总结 405 405 21.6 问与答 405 405 21.7 作业 405 405 21.7.1 小测验 405 405 21.7.2 练习 406 406 第三周复习 407 407 附加课程(具体内容见光盘) 413 413 附录A ASCII字符集 414 414 附录B C/C++中的保留字 418 418 附录C 使用二进制和十六进制数 420 420 C.1 十进制 420 420 C.2 二进制 420 420 C.3 十六进制 420 420 附录D 移植性问题 422 422 D.1 ANSI标准 422 422 D.2 ANSI关键字 422 422 D.3 区分大小写 422 422 D.4 可移植的字符 424 424 D.5 确保ANSI兼容性 424 424 D.6 绕开ANSI标准 424 424 D.7 使用可移植的数值变量 425 425 D.7.1 最大值和最小值 426 426 D.7.2 确定数字的类型 430 430 D.7.3 转换字符的大小写:一个可移植性范例 434 434 D.8 可移植的结构和共用体 434 434 D.8.1 字对齐 434 434 D.8.2 读写结构 435 435 D.8.3 在可移植的程序中使用非-ANSI特性 436 436 D.8.4 ANSI标准头文件 437 437 D.9 总 结 438 438 D.10 问与答 438 438 D.11 作 业 438 438 D.11.1 小测验 438 438 D.11.2 练习 439 439 附录E 常用的C语言函数 440 440 附录F 作业答案 444 444 第1天课程的答案 444 444 小测验 444 444 练习 444 444 第2天课程的答案 445 445 小测验 445 445 练习 445 445 第3天课程的答案 446 446 小测验 446 446 练习 446 446 第4天课程的答案 447 447 小测验 447 447 练习 447 447 第5天课程的答案 449 449 小测验 449 449 练习 449 449 第6天课程的答案 452 452 小测验 452 452 练习 452 452 第7天课程的答案 453 453 小测验 453 453 练习 453 453 第8天课程的答案 457 457 小测验 457 457 练习 457 457 第9天课程的答案 461 461 小测验 461 461 练习 461 461 第10天课程的答案 463 463 小测验 463 463 练习 463 463 第11天课程的答案 465 465 小测验 465 465 练习 466 466 第12天课程的答案 467 467 小测验 467 467 练习 467 467 第13天课程的答案 470 470 小测验 470 470 练习 471 471 第14天课程的答案 471 471 小测验 471 471 练习 472 472 第15天课程的答案 472 472 小测验 472 472 练习 473 473 第16天课程的答案 473 473 小测验 473 473 练习 474 474 第17天课程的答案 474 474 小测验 474 474 练习 474 474 第18天课程的答案 475 475 小测验 475 475 练习 475 475 第19天课程的答案 475 475 小测验 475 475 练习 476 476 第20天课程的答案 476 476 小测验 476 476 练习 477 477 第21天课程的答案 477 477 小测验 477 477 附加课程1的答案 478 478 小测验 478 478 附加课程2的答案 478 478 小测验 478 478 附加课程3的答案 478 478 小测验 478 478 附加课程4的答案 479 479 小测验 479 479 附加课程5的答案 479 479 小测验 479 479 附加课程6的答案 480 480 小测验 480 480 附加课程7的答案 480 480 小测验 480 480 练习 480 480 附录G Dev-C++编译器 482 482 G.1 Dev-C++简介 482 482 G.2 在Microsoft Windows上安装Dev-C++ 482 482 G.3 Dev-C++中的程序 484 484 G.4 使用Dev-C++ 484 484 G.4.1 针对C语言编程定制Dev-C++ 485 485 G.4.2 在Dev-C++中输入并编译程序 486 486 G.4.3 编译Dev-C++程序 488 488 G.4.4 运行Dev-C++程序 488 488 G.5 总 结 489 489
用户评论