具体描述
内容简介
《程序设计方法与技术:C语言/高等学校教材》以程序设计初学者为阅读对象,以程序设计解决问题为主线,以编程思维、编程技能、语法知识和编程规范为内容框架,通过丰富的实例由浅入深地介绍C语言程序设计的基本思想与方法。
《程序设计方法与技术:C语言/高等学校教材》导言部分介绍程序和程序设计及其教学建议,随后包括了程序设计概述、输入输出、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、函数、结构体和指针等内容。为了提高读者的学习兴趣和成就感,各章节都选取了大量贴近生活的有趣案例:书中以思考、常见错误、编程经验等形式总结了程序设计的技术和方法。
《程序设计方法与技术:C语言/高等学校教材》适合作为高等院校各专业学生的教学用书,也可作为广大编程爱好者的自学读物,对从事软件设计与开发的技术人员也是一本很好的参考书。
内页插图
目录
0 导言
0.1 程序无所不在
0.2 人人都要理解编程
0.3 解剖一个程序
0.4 编程的主要内容
0.5 如何学好程序设计
0.6 如何教好程序设计
小结
1 程序设计概述
1.1 程序的概念
1.2 程序设计语言
1.2.1 问题描述与程序设计
1.2.2 汇编语言和机器语言
1.2.3 高级语言及其翻译
1.3 初识C程序
1.3.1 C语言概述
1.3.2 数值计算的C程序
1.3.3 简单游戏的C程序
1.3.4 C程序的实现过程
1.4 C程序的基本语法
1.4.1 C程序的基本结构
1.4.2 C程序的基本元素
1.4 ,3C程序编程风格
1.5 C程序设计方法
1.5.1 问题分析
1.5.2 算法设计
1.5.3 程序编写
1.5.4 运行调试
1.6 常见C程序的错误
1.6.1 语法错误——编译错误
1.6.2 语法错误——连接错误
1.6.3 逻辑错误——结果不正确
1.6.4 逻辑错误——运行时错误
小结
习题1
2 输入输出
2.1 计算机与外界的交互
2.1.1 输入输出设备
2.1.2 程摩的输入输出
2.2 信息的显示与录入
2.2.1 显示固定内容的信息
2.2.2 信息录入
2.3 输入输出设计
2.3.1 输出设计
2.3.2 输出的多样化
2.3.3 输入设计
2.3.4 输入的多样化
2.4 输入输出格式控制+
2.4.1 显示内容格式控制
2.4.2 数据输入格式控制
2.5 综合案例
小结
习题2
3 顺序结构程序设计
3.1 顺序结构
3.1.1 设计顺序结构程序
3.1.2 语句的分类
3.2 表达式语句
3.2.1 表达式
3.2.2 算术运算符
3.2.3 赋值语句
3.3 数据与数据类型
3.3.1 常量与变量
3.3.2 整型变量与整型常量
3.3.3 浮点型变量与浮点型常量
3.3.4 字符变量与字符常量
3.3.5 变量类型的转换
3.4 变量的存储
3.4.1 变量与内存的关系
3,4.2 变量在内存中的表示形式
3.5 指针变量
3.6 综合案例
小结
习题3
4 选择结构程序设计
4.1 门票价格问题
4.2 条件的表示
4.2.1 关系运算
4.2.2 逻辑运算
4.2.3 短路求值
4.3 单分支结构
4.3.1 if语句
4.3.2 复合语句
4.4 双分支结构
4.4.1 if-else语句
4.4.2 条件运算
4.4.3 if-else嵌套
4.4.4 if-else配对
4.5 多分支结构
4.5.1 if语句级联
4.5.2 switch语句
4.6 综合案例
小结
习题4
5 循环结构程序设计
5.1 自动售货机问题
5.2 三种循环结构
5.2.1 while语句
5.2.2 do-while语句
5.2.3 for语句
5.2.4 三种循环语句的比较
5.3 循环的嵌套
5.4 辅助控制语句
5.4.1 break语句
5.4.2 continue语句
5.5 应用举例
5.5.1 穷举法
5.5.2 迭代法
5.5.3 累加累乘法
5.5.4 打印有规律的图形
5.5.5 其他应用
5.6 综合案例
小结
习题5
6 数组
6.1 成绩统计问题
6.2 数组的概念
6.2.1 数组的定义及访问
6.2.2 数组的初始化
6.3 一维数组常见操作
6.3.1 排序问题
6.3.2 插入与删除问题
6.3.3 查找问题
6.4 二维数组
6.4.1 二维数组的定义及存储
6.4.2 二维数组应用
6.5 字符数组及字符串处理
6.5.1 文本数据处理
6.5.2 字符数组处理字符串的方法
6.5.3 字符串的常见处理
6.5.4 常用字符串处理函数
6.6 指针与数组关系初步
……
7 函数
8 结构体
9 指针
参考文献
前言/序言
在过去50多年中,程序设计技术与程序设计语言从来没有停止过创新和发展,未来,这种持续的改进仍将继续。程序设计课程的教和学也在不断进步,同时还会不断面临新的挑战。一直以来被很多高等学校作为第一门程序设计课程的c语言,由于其语言简单和思维清晰,成为程序设计课程中的常青树。尽管语言本身变化不大,但如何更有效地提高C语言教学效果的改革实践,一直都在进行中。
问题驱动、案例驱动、重在应用等教学思想,MOOC、SPOC、翻转课堂等教学技术和手段,都给经典的程序设计课程带来了新的活力与机遇。多年来,来自同济大学、华东理工大学、华东师范大学、上海大学、东华大学、上海理工大学和上海电力学院等多所高校的计算机基础教学一线教师结合计算机等级考试的持续改进和“以考促教”为目标,坚持开展程序设计课程的教学改革,与时俱进地进行教学重构,不断积累教学经验和教学资源。本书就是在这个基础上编写的,试图融合现代程序设计的新理念,平衡专业性与普适性,兼顾对学生的知识传授、能力培养与思维训练。
本书具有以下四个特点。
(1)强调编程兴趣
选择贴近学生生活和年轻人感兴趣的案例,配上生动活泼的展示形式,注重激发学生学习编程的兴趣;通过提供可复用的公共库等形式,让学生通过简单的编程就能得到完整的程序和实用的结果,解决日常生活中的热点问题,增强学生学习成就感。
(2)兼顾编程四个维度
本书强调编程的四个维度:编程思维、编程技能、语言知识点和编程规范。通过例题分析、经典算法等,以“思考”等形式描述常用的编程思维和思考问题的方式;分析、设计、编写、调试、运行程序,在此基础上归纳出“常见错误”,用以训练学生的编程技能;总结编程规范和经验,引导学生从一开始学习程序设计就养成良好的编程习惯。
(3)由浅入深循循善导
内容组织上更突出从简单到复杂,将知识点的结构性和系统性淡化;将“指针”的概念和简单应用提前,将“文件”分散到章节而不独立成章;同一个问题从简单到复杂分解到多个程序例子中,让学生们从简单程序开始,逐步增加功能,在不知不觉中学会编程技能,习惯编程思维。
(4)线上线下配有立体资源
配合本书同时建设了实验指导、习题库和知识点视频等立体化学习资源,设计了每一章的课堂教案设计、PPT讲稿和网上教学平台等,便于学生预习、复习和自学,方便师生加强课堂互动,提高课堂教学效果。本书中的二维码都链接到一个网上资源,读者可在阅读时实时学习。
本书由上海市计算机等级考试二级命题组教师共同策划,得到了上海市教委优质在线课程项目和上海市教育考试院的支持。导言部分由顾春华编写,第1章到第9章分别由陈莲君、黄小瑜、陈优广、文欣秀、闫红曼、胡庆春、高枚、王淮亭、叶文珺、陈章进、朱弘飞、夏耘等编写。全书由顾春华、陈章进、叶文珺等修改统稿。刘江、吉顺如、张晨静、高建良等给本书提出了建议和帮助,对此一并表示感谢。
由于编者水平有限,书中难免存在错误与不足,恳请读者批评指正。
《现代C++编程精粹》 内容简介 本书深入剖析了C++语言的核心特性与现代编程范式,旨在为读者提供一套全面、系统且实用的C++学习指南。本书并非对C语言基础的简单复述,而是着重于C++在C语言基础上的飞跃,以及如何利用其强大的功能来构建高效、可维护、可扩展的软件系统。我们将在本书中探索C++面向对象编程的精髓,数据抽象的威力,泛型编程的优雅,以及现代C++标准(C++11, C++14, C++17, C++20)带来的诸多创新和便利。 第一部分:C++核心特性与面向对象编程 本部分将从C++的基石——面向对象编程(OOP)出发,逐步深入。 类与对象的本质:我们将详细介绍类的定义、封装、继承和多态等面向对象的核心概念。读者将学习如何设计结构清晰、职责明确的类,理解对象是如何实例化和交互的。 封装:本书将重点讲解访问控制(public, protected, private)的重要性,以及如何通过封装隐藏类的内部实现细节,只暴露必要的接口,从而降低代码的耦合度,提高代码的可维护性和安全性。我们将通过实际案例展示如何设计具有良好封装性的类,例如构建一个简单的“日期”类或“图书”类,并演示如何通过成员函数来操作数据。 继承:我们将深入探讨继承的各种形式,包括单继承、多重继承以及虚继承,并分析它们在代码复用和层次化设计中的作用。读者将学习如何设计基类和派生类,理解“is-a”关系,并学会处理继承过程中可能出现的命名冲突和菱形继承问题。我们将以一个“形状”的抽象基类为例,派生出“圆形”、“矩形”等具体形状类,展示多态性在不同形状对象上的应用。 多态:多态是面向对象编程的灵魂。本书将详细讲解静态多态(函数重载、运算符重载)和动态多态(虚函数、纯虚函数、抽象类)的原理与应用。读者将学会如何利用虚函数实现运行时多态,从而编写出更加灵活和可扩展的代码。我们将通过一个“动物”类及其派生类“狗”、“猫”的例子,演示如何通过指向基类的指针或引用调用派生类特有的行为,实现“一个接口,多种实现”的编程范式。 构造函数与析构函数:我们将会深入讲解构造函数的不同形式(默认构造函数、带参构造函数、拷贝构造函数、移动构造函数),以及它们在对象生命周期管理中的作用。同时,析构函数的概念和自动调用机制,以及其在资源释放中的关键地位也将被详尽阐述。 资源获取即初始化 (RAII):本书将重点强调RAII技术,它是C++中管理资源(如内存、文件句柄、网络连接)的优雅方式。通过将资源的管理封装在对象的生命周期内,我们能够避免手动管理资源的繁琐和易出错性,保证资源的自动释放,即使在发生异常的情况下也能做到安全可靠。我们将通过智能指针(如`std::unique_ptr`, `std::shared_ptr`)的实现原理和使用来具体阐释RAII的应用。 运算符重载:我们将介绍如何为自定义类型重载各种运算符,使代码更加直观易读,例如为自定义的“复数”类重载加减乘除运算符,或者为“字符串”类重载字符串连接运算符。 友元与访问控制:虽然封装是面向对象的核心,但有时为了方便某些特定操作,需要打破严格的访问限制。本书将讲解友元函数和友元类的概念,并讨论何时以及如何适当地使用它们,以在保持代码组织性的同时,提供必要的灵活性。 第二部分:泛型编程与STL 本部分将引导读者进入C++强大的泛型编程世界,重点介绍标准模板库(STL)。 模板(Templates):模板是C++实现泛型编程的核心机制。我们将从函数模板开始,学习如何编写能够处理不同数据类型的通用函数。随后,我们将深入到类模板,理解如何创建可以实例化为各种特定类型的通用类。 模板元编程(Template Metaprogramming):本书将介绍模板元编程这一高级技术,它允许在编译时执行计算,生成代码,从而实现极致的性能优化。我们将通过一些经典的模板元编程示例,例如编译时计算阶乘、斐波那契数列等,来展示其强大能力。 标准模板库(STL):STL是C++语言中最具价值的组成部分之一,它提供了一系列高效、通用的数据结构和算法。 容器(Containers):我们将全面介绍STL提供的各种容器,包括序列容器(`std::vector`, `std::list`, `std::deque`)、关联容器(`std::map`, `std::set`, `std::multimap`, `std::multiset`)和无序关联容器(`std::unordered_map`, `std::unordered_set`)。本书将分析每种容器的特性、适用场景以及它们在性能上的差异,帮助读者选择最适合的容器来解决实际问题。例如,我们将讨论在需要频繁插入删除时选择`std::list`,而需要随机访问时选择`std::vector`。 迭代器(Iterators):迭代器是连接容器和算法的桥梁。我们将详细讲解迭代器的分类(输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器)及其使用方法,理解如何通过迭代器遍历容器中的元素,以及它们在算法中的作用。 算法(Algorithms):STL提供了丰富的算法库,涵盖排序、查找、计数、遍历、转换等多种操作。本书将重点介绍常用算法,如`std::sort`, `std::find`, `std::for_each`, `std::transform`等,并讲解如何结合迭代器高效地使用它们,以减少手动编写循环的冗余和潜在错误。 STL的原理与设计:除了使用STL,我们还将深入探讨STL的一些设计哲学和底层实现原理,这有助于读者更深刻地理解STL的工作方式,并在必要时进行性能调优或自定义扩展。 第三部分:现代C++特性与实践 本部分将聚焦于C++11及之后标准带来的革命性变化,以及如何在实际开发中应用这些新特性。 C++11新特性: 自动类型推导(`auto`):讲解`auto`关键字如何简化变量声明,提高代码的可读性,并减少类型相关的错误。 范围for循环(Range-based for loop):演示如何使用范围for循环方便地遍历容器,摆脱繁琐的迭代器管理。 Lambda表达式(Lambda expressions):这是C++11中最强大的特性之一。我们将深入讲解Lambda表达式的语法、捕获列表、返回值推导等,并展示其在函数式编程、回调函数、STL算法中的广泛应用。 移动语义(Move semantics)与右值引用(Rvalue references):本书将详细阐述移动构造函数、移动赋值运算符以及右值引用的概念,以及它们如何通过避免不必要的资源拷贝来显著提升程序的性能,特别是在处理临时对象和资源密集型对象时。 智能指针(Smart Pointers):除了RAII的介绍,我们将具体讲解`std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`的使用,以及它们如何有效地管理动态分配的内存,防止内存泄漏。 并发与并行(Concurrency and Parallelism):介绍C++11引入的线程支持库(``, ``, ``等),讲解如何创建和管理线程,实现并发编程,以及如何利用原子操作(`std::atomic`)保证线程安全。 C++14, C++17, C++20 的重要特性:我们将根据实际需要,选取一些对现代C++编程影响深远的特性进行介绍,例如: C++14:泛化Lambda捕获,返回类型推导。 C++17:结构化绑定(Structured bindings),`if constexpr`,`std::optional`,`std::variant`,`std::any`,文件系统库(``)。 C++20:概念(Concepts),模块(Modules),协程(Coroutines),范围(Ranges),`std::span`。 我们将解释这些新特性如何进一步简化代码、提高表达力、增强类型安全,以及解决现有编程的痛点。 错误处理与异常安全:除了RAII,本书还将探讨C++中的其他错误处理机制,如断言(`assert`)和错误码,并重点讲解异常安全(Exception safety)的各种级别(基本保证、强保证、不抛出保证)以及如何编写能够保证异常安全的代码。 性能优化与内存管理:我们将讨论C++中常见的性能瓶颈,以及一些基本的性能分析和优化技巧。同时,深入探讨内存模型、缓存一致性等底层概念,以及如何通过合理的数据结构和算法选择来优化程序性能。 第四部分:进阶主题与项目实践 设计模式:我们将介绍一些常用的面向对象设计模式,如单例模式、工厂模式、观察者模式、策略模式等,并结合C++特性演示如何在实际项目中应用这些模式来解决常见的设计问题,提高代码的可重用性、可维护性和可扩展性。 单元测试与代码质量:强调编写可测试代码的重要性,介绍单元测试框架(如Google Test)的使用,以及如何进行代码审查和静态分析,提升代码质量。 实战项目:本书将包含若干小型到中型的实战项目,涵盖文件处理、网络通信、图形界面等不同领域,让读者在实践中巩固所学知识,体验完整的软件开发流程,并将书中的理论知识转化为解决实际问题的能力。我们将引导读者从需求分析、系统设计、编码实现到测试发布,全方位地掌握C++项目的开发过程。 本书的目标读者 本书适合所有希望深入理解C++语言,掌握现代C++编程技法的程序员。无论您是刚从C语言或其他面向对象语言转向C++的开发者,还是有一定C++基础希望提升技能的工程师,都能从本书中获益。通过本书的学习,您将能够自信地运用C++构建高质量、高性能、易于维护的软件系统。 学习本书的预期收获 扎实的C++基础:全面掌握C++的核心概念,包括面向对象、泛型编程、STL等。 现代C++实践能力:熟练运用C++11及以后版本的新特性,编写更简洁、高效、安全的C++代码。 解决复杂问题的能力:能够运用设计模式和STL高效解决各类软件开发中的实际问题。 代码质量与性能意识:培养良好的编码习惯,理解性能优化的重要性,并掌握基本的优化技巧。 持续学习的动力:建立起对C++及其生态的深入了解,为未来持续学习和掌握新技术打下坚实基础。 本书将以清晰的逻辑、详实的例子和深入的讲解,陪伴您一起探索C++编程的广阔世界。