《C语言程序设计与应用》是以最基本的工程实践为基础,以教育部考试中心最新公布的全国计算机等级考试大纲(二级C语言)为依据编写的教材。全书共分9章,包括简单C程序设计、简单判定性问题求解、循环结构及应用、模块化设计与应用、相同类型数据集合、深入模块化设计与应用、构造数据类型、综合设计与应用、数据永久性存储等内容。
《C语言程序设计与应用》注重教材的可读性和实用性,从计算机工程角度展开讲解、探索和论述。每章开头都有关键字和难点提示,每章结尾安排本章小结,并从知识层面和方法层面对本章进行总结;从日常生活或实际工程中所遇到的问题着手,典型例题一题多解,由浅入深,循序渐进,强化知识点、算法、编程方法与技巧;还将程序测试、程序调试、软件的健壮性和代码风格、结构化设计与模块化程序设计方法等软件工程知识融入其中。
《C语言程序设计与应用》可作为高等学校公共课教材,也可作为全国计算机等级考试参考书及C语言自学教材。
全面的基础圈点,轻松构筑程序框架,精要的解析方法,平滑实现基础转换,生动的案例分析,提高探索创新技能。
目前市面上有关C语言方面的图书,内容大都按传统思路组织,从C语言的历史讲起,然后是数据类型、运算符、表达式、常量、变量、控制结构、数组、指针、函数、结构体与共用体、文件等,由最基本、最本质并较为抽象的内容开始,如单词、句法、语法、程序段等,逐渐复杂化,逐步进行讲解。表面上看,这样对抽象知识学习过程,并不适合于C语言的教学,学生对知识点的理解不充分,不全面,甚至是不懂,只是靠着死记硬背而获得一个不错的分数,学完之后不会使用,就连简单的命题也可能解决不了!不可否认,这跟我国的传统应试教育模式有很大的关系,但就事论事地讲,跟我们的教材编写也有一定的关系。
本着学以致用的原则,本书从第1章开始就教学生学习写简单应用程序,每一个知识点都糅进应用当中去,不做单纯的知识点堆积,不但把前几章那些“简单的”知识点分散到各个章节,避免机械式的记忆,而且把难点也分散了。全书以应用为主线,用到了才讲:讲,就是为了能更好地用!为了培养学生规范地使用语言,先从问题的规范描述开始,然后分析问题,建立模型,实现求解,最后测试通过。从严格的科学研究与工程应用的角度出发,进行c语言的学习与研究,并将这种思想渗透到每个实例中!明确的学习目的与目标也是学习的主要动力,本书要帮助学生建立的学习目的就是能够实现算法设计解决相关命题,目标是提高自己的学习能力与动手能力。
全书在提供丰富而有趣的经典实例时,还精心设计了两个相对完整的应用:计算器与学生成绩档案管理。计算器属于算法
第1章 简单C程序设计
1.1 C程序的构成
1.1.1 简单的C程序实例
1.1.2 阅读C程序
1.1.3 C程序结构
1.2 简单程序扩展
1.2.1 计算器基本功能
1.2.2 计算器解决方案
1.2.3 计算过程实现及分析
1.2.4 深入解读
1.3 Visual C++ 6.0编译环境简介
1.3.1 Visual C++ 6.0的启动
1.3.2 源程序录入
1.3.3 编译、链接和运行
1.3.4 调试
1.3.5 退出编译环境
1.4 本章小结
练习与思考 1
第2章 简单判定性问题求解
2.1 判定性问题及判定条件的描述
2.1.1 关系型判定条件
2.1.2 逻辑型判定条件
2.1.3 按位进行的逻辑运算
2.2 if-else判定性结构
2.2.1 if判定结构
2.2.2 if语句的嵌套问题
2.2.3 条件运算符和条件表达式
2.3 switch判定结构
2.4 应用实例
2.4.1 计算器
2.4.2 学生成绩管理
2.5 本章小结
练习与思考2
第3章 循环结构及应用
3.1 概述
3.2 for循环
3.2.1 for循环的一般结构
3.2.2 for循环的深入探讨
3.3 while循环
3.4 do while循环
3.5 关于循环的一些问题
3.5.1 循环的嵌套
3.5.2 无限循环
3.5.3 循环语句的选择
3.6 如何从循环中跳出
3.6.1 break语句
3.6.2 continue语句
3.6.3 goto语句
3.7 应用实例
3.7.1 计算器
3.7.2 学生成绩档案管理系统
3.8 本章小结
练习与思考3
第4章 模块化设计与应用
4.1 模块化程序设计方法
4.1.1 模块化程序设计思想
4.1.2 模块规划实例
4.2 函数
4.2.1 函数的定义
4.2.2 函数的调用
4.3 预处理
4.3.1 文件包含
4.3.2 宏定义
4.4 应用实例
4.5 本章小结
练习与思考4
第5章 相同类型数据集合
5.1 数组与数组元素的概念
5.2 相同类型数据的一维线性存储
5.2.1 一维数组的定义
5.2.2 一维数组的初始化
5.2.3 一维数组的引用
5.2.4 一维数组程序举例
5.3 相同类型数据的二维及多维存储
5.3.1 二维数组的定义
5.3.2 二维数组的初始化
5.3.3 二维数组的引用
5.3.4 多维数组的初始化和引用
5.3.5 数组程序举例
5.4 字符类型数据集合的存储
5.5 字符串处理函数
5.6 字符串指针变量与字符数组
5.7 应用实例
5.8 本章小结
练习与思考5
第6章 深入模块化设计与应用
6.1 算法基本概念
6.1.1 概念
6.1.2 引例
6.2 简单的排序算法
6.2.1 冒泡排序算法
6.2.2 选择排序算法
6.3 嵌套与递归设计及应用
6.3.1 函数的嵌套调用
6.3.2 函数的递归调用
6.4 模块间的批量数据传递
6.4.1 指针作为函数参数
6.4.2 一维数组作为函数参数
6.4.3 二维数组作为函数参数
6.5 模块化设计中程序代码的访问
6.6 应用实例
6.6.1 计算器
6.6.2 学生成绩管理
6.7 本章小结
练习与思考6
第7章 构造数据类型
7.1 结构体
7.1.1 结构体类型的定义
7.1.2 结构体变量
7.1.3 结构体数组
7.1.4 结构体指针
7.1.5 结构体与函数
7.1.6 位段
7.2 共用体
7.2.1 共用体类型的定义
7.2.2 共用体变量的定义
7.2.3 共用体变量的赋值和引用
7.3 枚举
7.4 自定义类型
7.5 应用实例
7.6 本章小结
练习与思考7
第8章 综合设计与应用
8.1 变量的作用域与存储类别
8.1.1 变量的作用域
8.1.2 变量的存储类别
8.2 指针与数组
8.2.1 一维数组与指针
8.2.2 多维数组与指针
8.2.3 指针数组
8.3 函数main()中的参数
8.4 指针型函数
8.5 动态存储空间分配
8.6 链表
8.6.1 链表的概念
8.6.2 链表的基本操作
8.6.3 带头结点链表简介
8.7 本章小结
练习与思考8
第9章 数据永久性存储
9.1 数据的永久性存储
9.2 文件组织方式
9.3 文件操作
9.3.1 标准输入/输出头文件stdio.h
9.3.2 文件打开与关闭
9.3.3 文件读/写函数
9.3.4 文件定位函数
9.4 应用实例
9.5 本章小结
练习与思考9
附录 C语言参考
附1 C语言发展史及版本历程
附1.1 C语言的发展史
附1.2 C语言的版本历程
附2 C语言关键字
附3 ASCII表
附4 Visual C++各数据类型所占字节数和取值范围
附5 C运算符及优先级
附6 格式化输入/输出控制字符列表
附6.1 函数printf()
附6.2 函数scanf()
附7 ANSI C常用标准库函数
附7.1 数学函数
附7.2 字符处理函数
附7.3 字符串处理函数
附7.4 缓冲文件系统的输入/输出函数
附7.5 动态内存分配函数
附7.6 非缓冲文件系统的输入/输出函数
参考文献
收起全部↑
解决问题的关键是把问题分析清楚,然后给出解决的方法和步骤,接着按照设计的方法用程序设计语言实现,最后通过验证,证明给出的方法与实现是否满足了最初的问题要求。下面结合前面简易计算器程序的实现过程来进行简要介绍。
第一步,分析问题。分析的目的就是搞清楚问题本身要求解决什么,使用哪些数据,获得哪些结果,只有最终的结果符合问题的需要,程序才是满足要求的,否则,再多的努力也是徒劳。在简易计算器的程序中,要求实现的功能是:使用整型的操作数,进行+、.、*、/和%运算,并将运算结果显示出来。进行算术计算并得到正确结果,这就是问题的本质。
第二步,给出解决问题的方法和步骤。这是一个关键的阶段,它要给出解决问题的根本性方法和具体的方案。简单地说就是如何将一个整体性的问题进行抽象和分析,分解成若干子问题,各个击破。在这个阶段对所要解决的问题进行逐步分解,按照不同的逻辑关系,把一个大的问题分解成几个小型的、相对独立的个体,然后对每个相对独立的个体再次进行分析,最后把它们一一实现,这样整个软件也就得以实现,从而满足需求,即前面所提的“自顶向下,逐步求精”的方式。
在简易计算器程序设计过程中,首先要确定操作数的表示:选择数据类型,引入变量,并进行初始化;然后根据算术运算符进行计算;最后输出结果。设计时,将问题的处理过程用流程图的方式表示,明确地让编程人员知道,每个部分该如何去做。
第三步,代码编写。它是一个把停留在纸面上的软件,转化为真正可以运行起来的程序实体。在这个阶段,编程人员按照分析阶段给定的实现要求,用计算机语言来完成具体的需求,即程序的功能。同时,良好的编程风格,对完成一个软件也是必要的,如代码格式安排合理、有适当的注释等,这样便于程序的阅读、理解以及后期的维护。在简易计算器的实现过程中,根据设计方案,声明变量,选用合适的运算符完成对应的计算,最后使用primfo函数把结果呈现给用户。
第四步,正确性验证。这一步就是对编写好的程序进行测试,从而验证完成的程序是否正确地完成了最初的需求,测试可以帮助我们发现程序中的错误,完善软件功能。测试要输入测试数据,也就是我们精心设计的一些数据,然后看程序执行完毕后得到的结果是否满足我们的正确需要。当然,测试不仅仅要验证实现的正确性,还包括可靠性、健壮性、完整性等。