
C语言程序设计书稿.pdf
297页目 录第 0 章 程序设计概论.10.1 程序与程序设计语言.10.1.1 程序.10.1.2程序设计语言.10.2 C 语言的历史和发展.30.3 一个简单程序的诞生.30.3.1简单的C 语言程序概貌.40.3.2第一个程序的诞生.5本章小结.7复习题.7第 1 章 C 程序设计基础知识.81.1 变量.81.1.1 有关内存的基础概念.81.1.2 变量的引入.81.2 常量.121.2.1 字面常量.121.2.2 符号常量.141.2.3 const 常量.151.3 算术运算符与算术表达式.151.3.1 运算符概述.151.3.2 算术运算符.161.3.3 算术表达式.161.4 赋值运算符与赋值表达式.181.4.1 简单赋值运算符.181.4.2 复合算术赋值运算符.191.4.3 赋值运算时的数据类型转换.191.5 自加、自减、逗号运算符.201.5.1 自力口和自减运算符:+、一.201.5.2 逗号运算符.221.6 位运算.231.6.1 位运算的基本规律.231.6.2 位运算符.23本章小结.24复习题.25第 2 章 简 单 C 语句.262.1 C 语句概述.262.1.1 表达式语句.262.1.2 控制语句.262.1.3 函数调用语句.272.1.4 复合语句.272.1.5 空语句.272.2 输入输出的概念.282.3 基本输入输出函数.282.3.1 格式化输出库函数:printf.282.3.2 格式输入库函数:scanf.302.3.3 字符输入输出函数.32本章小结.33复习题.33第 3 章分支结构程序设计.343.1 算法与基本程序结构.343.1.1 算法简介.343.1.2 算法的表示.353.1.3 基本程序结构.373.2 关系运算和逻辑运算.383.2.1 关系运算.383.2.2 逻辑运算.393.3 if 语句.403.3.1 简单if语句.403.3.2 ifelse 语句.423.3.3 if语句的嵌套.433.3.4 if语句使用注意事项.453.4 switch 语句.473.5 条件运算符.49本章小 结.50复习题50第 4 章循环结构程序设计.514.1 循环的引入.514.2 for 循环.514.3 while 循环.544.4 dowhile 循环.554.5 循环的比较.574.5.1 for 语句和 while 语句.574.5.2 while 语句和 dowhile 语句.604.5.3 数值输入中的问题.614.6 循环嵌套.634.6.1 三重循环求解.644.6.2 缩小穷举法的搜索范围.654.6.3 两重循环解决问题.664.6.3 极限情况:一层循环的求解.674.7 break 和 continue 语句.694.7.1 break 语句.694.7.1 continue 语句.704.8 应用举例.71本章小结.75复习题.75第 5 章 函 数.775.1 函数的基本概念.775.2 函数的声明和定义.785.2.1 函数声明和函数原型.785.2.2 函数定义.795.2.3 函数的参数.815.2.4 函数的返回值与函数类型.855.3 函数的调用.875.3.1 函数调用的方式.895.3.2 函数调用过程机制.905.3.3 函数的嵌套调用.925.4 函数的递归.955.4.1 递归的基本原理.965.4.2 尾递归.985.4.3 递归与反向计算.1005.4.4 汉诺塔问题:双重递归.1015.4.5 递归的优缺点.1045.5 头文件的使用.1045.6 逐步求精.107本章小结.116复习题.117第 6 章 数 组.1186.1 一维数组.1186.1.1 一维数组的声明.1186.1.2 访问数组元素.1206.1.3 数组的初始化.1226.1.4 一维数组应用举例.1236.2 二维数组.1256.2.1 二维数组的声明.1256.2.2 访问二维数组元素.1266.2.3 二维数组的初始化.1266.2.4 二维数组应用举例.1276.3数组作为函数参数.1296.3.1 数组元素用作函数的实参.1296.3.2 数组用作函数的参数.130本章小结.134复习题.135第 7 章 指 针.1377.1 地址作为数据值.1377.2 指针变量.1387.2.1 声明指针变量.1387.2.2 有关指针的运算符.1397.2.3 指针操作.1407.2.4 指针作为函数参数.1437.3 数组与指针.1457.3.1 通过指针操作数组元素.1457.3.2 函数、数组与指针.1497.3.3 保护数组内容.1517.3.4 多维数组与指针.1567.3.5 指向数组的指针.1597.4 函数指针.1637.4.1 通过函数指针调用函数.1637.4.2 函数指针用作函数参数.1657.5 动态分配内存.1687.5.1 NULL 指针和 void*类型.1687.5.2 动态数组.1697.5.3 释放内存.170本章小 结.170复习题.171第 8 章 字符数据处理.1728.1 字符型常量和字符串.1728.1.1 转义字符.1728.1.2 字符串.1738.2 字符型变量.1748.3 字符数组.1758.3.1 字符数组的初始化.1758.3.2 字符串和字符串结束标志.1768.4 字符串和指针.1798.4.1 字符串的表示形式.1798.4.2 字符串指针作函数参数.1808.5 字符处理函数.1818.6 字符串应用实例.184复习题.189第 9 章 结 构.1909.1 结构类型说明.1909.2 使用结构.1919.2.1 结构类型变量.1919.2.2 结构变量的引用.1939.2.3 结构变量赋初值.1939.3 结构和指针.1949.3.1 结构数组.1949.3.2 指向结构的指针.1989.4 结构数据在函数间传递.2039.5 结构和链表.2049.5.1 单链表.2049.5.2 单链表结点的删除.2079.5.3 单链表的插入.2089.5.4 环链表*.210复习题.212第 10章 文件.21410.1 文件的打开与关闭.21410.1.1 文件类型指针.21410.1.2 文件的打开.21510.1.3 文件的关闭.21610.2 文件的读写.21710.2.1 读写字符.21710.2.2 读写字符串.21910.2.3 格式化的读写.22110.2.4 成块读写(二进制读写).22210.3 随机读写文件.225本章小结.227复习题.228第 11章 Turbo C 图形.2291 1.1 图形模式的初始化及相关函数.2291 1.2 屏幕颜色设置和清屏.2311 1.3 基本图形绘制.23311.3.1 画点与位置坐标函数.2331 1.3.2 画直线、圆、椭圆与多边形函数.2341 1.4 线条样式设定.23511.5 图形填充.2371 1.5.1 封闭区间填充函数.2371 1.5.2 设定填充方式.23711.6 图形模式下的文本输出.23811.7 图形示例.239复习题.254第 12章 存储类型.25512.1 作用域.25512.1.1 代码块作用域.25512.1.2 函数原型作用域.25612.1.3 文件作用域.25612.2 链接.25712.3 存储期.25812.4 存储类型.25912.4.1 自动变量.25912.4.2 寄存器变量.26012.4.3 具有代码块作用域的静态变量.26012.4.4 具有外部链接的静态变量.26212.4.5 具有内部链接的静态变量.26512.5 存储类型说明符.26612.6 函数的存储类型.268本章小结.269复习题.270附录A C 语言预处理器.272A.1 预处理器命令.272A.2 预处理器词法规则.272A.3 定义和替换.273A.3.1对象式宏定义.273A.3.2函数式宏定义.274A.3.3重新扫描宏表达式.276A.3.4取消宏定义与重新定义宏.277A.3.5宏扩展中的优先级错误.278A.3.6宏参数的副作用.278A.4 文件包含.279A.5条件编译.280A.5.1#if#else 与#endif 命令.280A 52#elif 命令.281A.5.3#ifdef 与#ifndel 命令.282A.5.4条件命令中的常量表达式.283A.5.5 defined 运算符.283A.6显式的行编号.284A.7 杂住指令.285A.8 错误指令.285附录B 常用函数.286附录C图形驱动程序和模式.289第0章程序设计概论用计算机解决问题包括两个概念上不同的步骤。
首先应该构造一个算法或在解决该问题的已有算法中选择一个,这个过程称为算法设计第二个步骤是用一种程序设计语言将该算法表达为程序刚开始学习程序设计时将算法翻译成实际的编码过程会是较为困难的阶段在学习了更多的有关程序设计的过程后,编码会很快变得简单,与此同时,随着要求解决的问题越来越复杂,算法设计会变得越来越复杂所以在学习中要有意识的兼顾这两个过程本章介绍计算机程序设计的基本概念及发展阅读本章读者将了解到程序设计中的一些基本概念以及了解C 语言的概貌0.1程序与程序设计语言软件是计算机系统中不可缺少的部分什么是软件?什么是程序?什么是程序设计语言?本节将给出解答0.1.1程序什么是软件?目前还没有一个精确的定义但认为软件就是程序的概念肯定是错误的目前比较公认的定义是由著名的软件工程专家B.W.Boehm提出的“软件是程序以及开发、使用和维护所需要的所有文档”,由此可见,程序只是完整软件产品的一个部分什么是程序?国标中规定“计算机程序是按照具体要求产生的适合于计算机处理的指令序列”也就是说,程序是计算机可以识别和执行的操作表示的处理步骤我国颁布的 计算机软件保护条例 更加明确提出“计算机程序是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可被自动地转换成代码化指令序列的符号化序列,或者符号化语句序列”。
可以看出,程序既可以指能被计算机直接执行的指令序列(可执行文件),也可以是我们用程序设计语言编写的源程序,但源程序不能被计算机直接执行,必须通过程序设计语言翻译为可执行的指令序列0.1.2程序设计语言程序是由人来编写,程序的执行实际上反映了人的设计思想随着计算机技术的不断发展,“编程”技术也在不断地发展,程序设计语言经历了几个不同的阶段1.机器语言众所周知I,数据是以二进制形式存储在计算机中,我们所能感知的声音或图像进入计算机之前必须要经过编码转化为二进制计算机能够执行的程序也不例外,也是以二进制代码表示指令序列机器语言便是以二进制代码表示机器指令的一种语言,用机器语言写的程序能被计算机直接执行最早的计算机(如E N IAC)便是采用机器语言来编写程序,“程序员”采用手工拨钮开关和纸带打孔的方式向计算机输入程序,那时的程序员都是一流的科学家下面的程序段便是使用x86计算机的机器语言编写的,功能是计算1+1例0.1】使用机器语言计算1+1101110000000000100000000000001010000000100000000很明显,用这样的方式编写程序非常麻烦,人类很难读懂,而且不同的计算机提供的机器语言不同,编写的代码很难通用。
于是汇编语言应运而生2.汇编语言为了解决机器语言编程的困难,人们专门编写一种称为程序设计语言的程序,它提供一套语言规范,程序员可以采用该语言编写“程序”,然后由程序设计语言将“程序”翻译为计算机能够执行的程序汇编语言便是最早的程序设计语言之一,用汇编语言编写1+1的代码如例0.2所示例0.1使用汇编语言计算1 +10MOV A X,1ADD A X,1上面的两行符号,计算机并不能直接执行,需要借助汇编编译器将它翻译成例0.1所示的二进制机器代码。
