1、 普通高等教育“十二五”规划教材 高等学校公共课计算机规划教材 C 语言学习指导 与课程设计实践 杜祥军 主编 杨厚俊 丛书主编 王霄鹏 尹 卓 赵 毅 编著 内 容 简 介 本书以程序设计思想为主线,以问题为导向,以程序设计语法重难点分析为基础,以运用程序设计解决实际问题的能力培养为目标,以集成开发环境为工具,在不同环节设计相似的、与实际结合紧密的问题,启发学生掌握不同程序设计思想的问题解决方法和程序设计过程中的具体语法重难点。全书共三章,主要内容包括:计算机程序设计引论,C 语言学习指导,C 语言课程设计。本书提供配套电子课件。本书可以作为高等学校计算机科学与技术、软件工程、网络工程、信息
2、安全、软件外包等本科专业相关课程的教材,还可供相关领域的工程技术人员学习、参考。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 C 语言学习指导与课程设计实践/杜祥军主编 北京:电子工业出版社,2015.8 高等学校公共课计算机规划教材 ISBN 978-7-121-26825-0 IC II杜 IIIC 语言程序设计高等学校教材 IVTP312 中国版本图书馆 CIP 数据核字(2015)第 174201 号 策划编辑:王晓庆 责任编辑:王晓庆 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:10003
3、6 开 本:7871092 1/16 印张:14.25 字数:411 千字 版 次:2015 年 8 月第 1 版 印 次:2015 年 8 月第 1 次印刷 印 数:3000 册 定价:35.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。服务热线:(010)88258888。前 言 随着计算机日益广泛而深刻的运用,计算这个原本专门的数学概念已经泛化到了人类的整个知识领域,并上升为普适的科学概念和哲学概念,成为人们认识事物、研究问题的一种新视角、新观念
4、和新方法。计算机是现代社会进行自动化计算的基础工具,编写计算机程序解决实际问题是计算机相关专业学生需要掌握的基本技能。本书主要针对计算机科学与技术、软件工程、网络工程、信息安全、物联网工程等相关专业的大学一年级学生编写。C 语言程序设计是许多高等学校面向一年级学生开设的主要课程,是进一步学习其他专业的基础。笔者总结了多年程序设计课程授课经验,参考国内其他高等学校的程序设计课程教材及相关书籍,编写了本书,旨在为大学一年级学生学好程序设计类课程提供帮助。本书包含计算机程序设计引论、C 语言学习指导、C 语言课程设计三大部分,涉及大量 C 语言知识点,并包含大量经典问题,意在突出实践性,尽量做到使零
5、基础的学生能够在掌握基础语法和重难点知识的同时,掌握利用计算机程序设计解决问题的方法。(1)计算机程序设计引论部分讲授计算机系统组成、进制、信息表示与存储、计算机发展、计算机程序设计、计算机语言等方面的基础性知识。每部分均以程序设计人员需要了解的基础内容为重点,不做过多讲解,较深入的内容请参考其他书籍。(2)C 语言学习指导部分引入了形式多样的例题与综合练习题,包括程序调试分析、程序填空、知识点分析和程序设计实验。以程序调试分析、程序填空等多种形式的题目作为知识点学习的引导,降低学习难度,提高学习兴趣;以分析与编程题强化对于容易出错的、难以掌握的知识点的理解;以问题描述清晰、输入/输出完备、示
6、例数据充分的综合实验题引导学生对问题进行分析建模,并以计算机程序对问题解决步骤进行描述,最终解决问题。本章所设计的内容突出综合知识点的学习和运用,不过多讲述理论内容。(3)C 语言课程设计是本书的第 3 章。该部分内容通过引入程序设计方法、软件工程思想、基础数据结构、基础算法等内容,注重培养学生大型程序设计开发能力。书中给出了大量例题和练习题,题目难度覆盖面广,题意新颖,能够满足不同基础的学生的选题与设计,并突出系统性和创新性。教学中,可以根据教学对象和学时等具体情况对书中的内容进行删减和组合,也可以进行适当扩展。本书提供配套电子课件,请登录华信教育资源网(http:/)注册下载。本书可作为高
7、等学校一年级开设的“高级语言程序设计”课程的辅助或实验教材,也适应于编程基础薄弱的其他人员;对已学习“计算机科学概论”、“计算机导论”、“计算机基础”等课程的学生,第 1 章可略过。本书由杜祥军主编,参加本书编写的包括王霄鹏、尹卓、赵毅等青岛大学信息工程学院的多位教师,李建波、刘肃亮等老师对本书的编写提出了众多宝贵意见和建议,杨厚俊院长对全书进行了审阅。此外,本书在编写过程中,参考了多所高校的程序设计类精品课程与多本教材(参见参考文献部分)。但由于成稿仓促,书中内容可能仍存在诸多问题,请读者予以指正。在此一并致谢。作者 2015 年 8 月于青岛 目 录 第 1 章 计算机程序设计引论 1 1
8、.1 计算机组成 1 1.1.1 计算机硬件组成 1 1.1.2 计算机软件系统 2 1.2 信息的表示与存储 3 1.2.1 进制与进制转换 3 1.2.2 信息存储单位 6 1.2.3 数值的表示 7 1.2.4 非数值信息表示 11 1.3 现代计算机的发展 11 1.3.1 第一代:电子管时代 12 1.3.2 第二代:晶体管时代 12 1.3.3 第三代:集成电路时代 12 1.3.4 第四代:大规模集成电路时代 13 1.4 计算机程序设计 13 1.4.1 程序与指令 13 1.4.2 程序设计语言的功能 15 1.4.3 程序设计语言的语法 17 1.4.4 程序的编译与编程环
9、境 19 1.5 计算机语言的发展 20 1.5.1 机器语言 20 1.5.2 汇编语言 21 1.5.3 高级语言 21 1.6 利用计算机程序解决问题的过程 22 1.6.1 分析问题,明确输入和输出 22 1.6.2 寻求解决方案,抽象出数学模型 22 1.6.3 确定解题步骤,设计合适算法 23 1.6.4 编写程序代码 23 1.6.5 运行和调试程序 24 1.6.6 整理文档 24 1.7 本章小结 24 第 2 章 C 语言学习指导 25 2.1 初识 C 语言程序 25 2.1.1 学习目标 25 2.1.2 知识要点与练习 25 2.1.3 实验内容 27 2.2 标准输
10、入与输出 27 2.2.1 学习目标 27 2.2.2 知识要点与练习 27 2.2.3 实验内容 30 2.3 数据存储、表示与计算 31 2.3.1 学习目标 31 2.3.2 知识要点与练习 31 2.3.3 实验内容 41 2.4 基本程序结构 42 2.4.1 学习目标 42 2.4.2 知识要点与练习 42 2.4.3 实验内容 48 2.5 函数 52 2.5.1 学习目标 52 2.5.2 知识要点与练习 52 2.5.3 实验内容 55 2.6 数组 57 2.6.1 学习目标 57 2.6.2 知识要点与练习 58 2.6.3 实验内容 63 2.7 字符串 64 2.7.
11、1 学习目标 64 2.7.2 知识要点与练习 64 2.7.3 实验内容 68 2.8 指针 70 2.8.1 学习目标 70 2.8.2 知识要点与练习 70 2.8.3 实验内容 75 2.9 结构体与共用体 76 2.9.1 学习目标 76 2.9.2 知识要点与练习 77 2.9.3 实验内容 80 2.10 文件 81 2.10.1 学习目标 81 2.10.2 知识要点与练习 81 VI2.10.3 实验内容 88 2.11 综合实验 88 第 3 章 C 语言课程设计 92 3.1 课程设计目标与要求 92 3.1.1 目标与要求 92 3.1.2 过程与进度安排 92 3.1
12、.3 考核与评价 93 3.2 程序设计方法 94 3.2.1 结构化程序设计 94 3.2.2 面向对象的程序设计 95 3.2.3 面向问题的程序设计 96 3.2.4 程序设计方法的比较 96 3.3 复杂数据存储与数据结构基础 97 3.3.1 抽象数据类型与数据结构 97 3.3.2 数组 100 3.3.3 链表 101 3.3.4 堆栈 103 3.3.5 综合练习 104 3.4 算法基础 105 3.4.1 算法的概念与表示 105 3.4.2 简单算法举例 109 3.4.3 穷举算法 112 3.4.4 递推算法 113 3.4.5 递归算法 116 3.4.6 分治算法
13、 119 3.4.7 回溯算法 120 3.4.8 贪心算法 123 3.4.9 综合练习 125 3.5 软件开发流程 127 3.5.1 软件生命周期 127 3.5.2 软件开发流程 128 3.6 C 语言编程技巧与常用功能 142 3.6.1 屏幕输出和键盘输入 142 3.6.2 图形程序设计 149 3.6.3 声音程序设计 157 3.7 课程设计题目汇总 161 3.7.1 算法与数值计算类 161 3.7.2 系统与应用类 169 3.7.3 游戏与图形界面类 175 附录 A C 语言头文件与库函数 183 附录 B 常用 C 语言集成开发环境 200 附录 C ASCI
14、I 码表 219 参考文献 222 第 1 章 计算机程序设计引论 1.1 计算机组成计算机组成 计算机系统由硬件和软件两部分组成。硬件是构成计算机系统的各种物理设备的总称,如显示器、主板、鼠标、键盘等。软件是运行、维护、管理计算机的各类程序和文档,包括语言处理程序、操作系统、数据库管理系统、应用软件等。1.1.1 计算机硬件组成 目前计算机的硬件组成仍以经典的冯诺依曼体系结构为主。该结构可以划分为三个子系统:处理器子系统、存储器子系统和输入/输出子系统。如图 1.1 所示,这三个子系统通过总线连接在一起。处理器也就是CPU(中央处理器或处理器)(如图 1.2 所示),是计算机中的核心部件。在
15、 CPU 内部有三个组成部分:算术逻辑单元、控制单元和寄存器组。算术逻辑单元 ALU 即运算器,负责进行算术和逻辑运算;控制单元即控制器,主要是控制程序的执行;寄存器组用来临时存放参与 ALU 运算的各种数据,主要有数据寄存器、指令寄存器和指令计数器等。图 1.1 计算机三个子系统和总线的连接 图1.2 CPU 示意图 存储器是计算机的记忆部分,由主存储器和辅助存储器组成。主存储器简称内存,是计算机内部的存储器,与CPU 直接进行电路连接。计算机在执行程序时,程序和运行该程序的数据都存储于此。无论 CPU 数据处理的长度是多少,在存储器系统中都是以字节为单位进行组织的,即每个存储器字节都有唯一
16、的标识,叫做存储器地址。CPU 对存储单元内的数据进行存取操作就是通过存储器地址进行的。主存储器有随机存取存储器(RAM)和只读存储器(ROM)两种类型。RAM 是计算机主存储器系统的主要组成部分,对其单元的存取操作是随机发生的,但其中的数据会随系统断电而消失。ROM 是指其中的数据只能读出,而不能写入。这种存储器芯片是为了存放只需读取的数据和程序而设计的,数据和程序在使用之前被写入。辅助存储器简称外存,具有外设的特性,以 I/O 总线的方式和主机连接。与主存储器相比,其存储容量大,存储的信息不会因断电而消失,价格便宜,但存取速度慢。输入/输出设备包括许多类型的设备(有时简称外设),以及连接这些设备和处理器、存储器进行C 语言学习指导与课程设计实践 2数据通信的接口电路。输入/输出设备的功能千差万别,工作速度要比 CPU 和存储器慢许多,因此需要接口在其间起到缓冲的作用,实现主机和外设交换数据速度的匹配。连接 CPU、存储器和外设(或者外设接口)的总线就是内部总线,内部总线为三总线结构,分别是地址总线、数据总线和控制总线。地址总线是单向的,总是传送 CPU 需要对存储器和外设进行数据读