内容简介
《CCF中学生计算机程序设计教材》丛书是基于《CCF青少年计算机程序设计评级标准》开发的一个系列培训教材。该标准围绕计算机程序设计的知识要求和能力要求,共分十级,其中1-3级为基础级,4-5级为提高级,6-7级为高手级,8-10级为大师级。本丛书将评级内容进行归纳,计划1-3级出1本、4-5级出1本,6-7级出1本,8-10级出1本,共4本教材。
《CCF中学生计算机程序设计(入门篇)》:
《CCF中学生计算机程序设计(入门篇)》由CCF组织富有程序设计教学经验的中学老师编写。通过详实的例题,循序渐进地介绍中学生计算机程序设计的各种知识,内容包括数据的存储和读入、程序的选择执行、程序段的反复执行、数据的批量存储等,旨在普及计算机科学教育,培养中学生的计算思维能力。
《CCF中学生计算机程序设计(入门篇)》可作为中学生计算机程序设计教材,也可供广大计算机编程爱好者参考。
《CCF中学生计算机程序设计(基础篇)》:
《CCF中学生计算机程序设计(基础篇)》由CCF组织富有程序设计教学经验的中学老师编写。通过详实的例题,循序渐进地介绍中学生计算机程序设计的各种知识,内容包括模块化编程、字符串处理、数据类型的组合、指针、数据外部存储、数据结构及其应用、简单算法、数学在程序设计中的应用、STL(标准模块库)简要说明等,旨在普及计算机科学教育,培养中学生的计算思维能力。
《CCF中学生计算机程序设计(基础篇)》可作为中学生计算机程序设计教材,也可供广大计算机编程爱好者参考。
内页插图
目录
《CCF中学生计算机程序设计(入门篇)》:
第1章 编程如此简单
1.1 程序设计概念
1.2 整数算术运算
1.3 实数算术运算
附录A Dev-C++集成开发环境
第2章 数据的存储和读人
2.1 变量和变量的类型
2.2 赋值语句和数学表达式
*2.3 数据类型转换
2.4 变量的读入
*2.5 C语言中的scanf语句和prIntf语句
2.6 顺序结构程序设计实例
附录B 基本数据类型
附录C 常用数学函数
第3章 程序的选择执行
3.1 1f语句和关系表达式
3.2 逻辑表达式和条件表达式
3.3 嵌套1f语句
3.4 swltch语句
*3.5 分支结构程序设计实例
第4章 程序段的反复执行
4.1 for语句
4.2 while语句
4.3 do一whlle语句
4.4 多重循环
*4.5 在循环结构中应用位运算
*4.6 循环结构程序设计实例
附录D break语句和continue语句
第5章 数据的批量存储
5.1 一维数组
5.2 活用数组下标
5.3 数值排序和查找
5.4 字符数组
5.5 二维数组
*5.6 数组的综合应用实例
参考文献
索引
《CCF中学生计算机程序设计(基础篇)》:
第1章 模块化编程——函数
1.1 自定义函数的引入
1.2 函数的定义
1.3 函数调用与参数传递
1.4 变量的作用域
1.5 函数的应用
1.6 递归函数
第2章 字符串处理——string类型
2.1 strlng类型的引入
2.2 strlng类型的基本操作
2.3 strlng类型中字母与数字的关系
2.4 strlng类型的应用
本章小结
第3章 数据类型的组合——结构和联合
3.1 结构体(struct)的引入
3.2 结构体(struct)的使用
*3.3 结构体(struct)的扩展
*3.4 联合(unlon)的定义和使用
*3.5 枚举(enum)的定义和使用
本章小结
第4章 功能强大的利器——指针
4.1 指针概念、定义与内存分配
4.2 指针的引用与运算
4.3 指针与数组
4.4 指针与字符串
*4.5 函数指针和函数指针数组
4.6 指针的扩展
本章小结
第5章 数据外部存储——文件
5.1 数据存储的分类
5.2 文件类型变量的定义及引用
5.3 件的重定向
本章小结
第6章 数据结构及其运用
6.1 什么是数据结构
6.2 线性表的储存结构及其应用
6.3 队列及其应用
6.4 栈及其运用
6.5 二分及其快速排序
第7章简单算法
7.1 什么是算法
7.2 高精度数值处理
7.3 简单枚举算法
7.4 模拟算法
7.5 简单动态规划
7.6 用递归实现回溯算法
第8章 数学在程序设计中的应用
8.1 常用数学函数
8.2 质因数的分解
8.3 最大公约数的欧几里德算法
8.4 加法原理与乘法原理
8.5 排列与组合
8.6 圆排列、可重集排列
第9章 STL(标准模板库)简要说明
9.1 STL中的一些新概念
9.2 几个常见的容器介绍
9.3 几个常见的算法函数
索引
前言/序言
由中国计算机学会(CCF)组编的“CCF中学生计算机程序设计教材”面世了。
早在1984年,邓小平就提出“计算机的普及要从娃娃抓起”。这很有先见之明,但这里的“计算机普及”是泛指,并未明确普及哪些内容。在过去的三十多年中,中小学广泛开展了计算机普及活动,2000年教育部也曾发文,要在全国中小学开展信息技术教育。但事实上,现有的所谓“普及”大多成了对计算机工具的认识,而不是对中小学生智力的开发和思维的训练,因而效果不佳。CCF早在1984年就创办了“青少年信息学奥林匹克竞赛NOI”,这是面向那些学有余力的中学生的一项计算机科学(CS)教育活动,但具备开展这项活动的学校并不很多,每年参加NOI联赛的学生不过七八万,比例很小,因而普及的面并不大。
计算机科学教育的核心是算法设计和编程,这要求学生面对一个给定的现实问题要能够找到一个正确和高效的办法(算法)并将其变成计算机能理解的语言(程序设计语言),进而让计算机计算出人们需要的结果来。像快递员最佳路径算法就是一个典型的现实问题。这个过程并不容易,因为将一个问题抽象并构造一个模型,需要一定的数学基础,还得理解计算机的特点,“指挥”计算机干活。这还涉及欲求解问题的“可计算性”,因为并不是任何问题都可以由计算机求解的。计算机也并不知道什么是“问题”,是人告诉计算机,如何按照一步一步的程序求解。这个过程,就会训练一个人求解问题的能力,相应地,其具备的让计算机做事的思维能力称之为“计算思维”(Computational Thinking)。我们平常操作计算机(包括手机这些终端设备)仅仅像开关电灯那样简单,并不会使我们具备计算思维能力,而只有通过上述步骤才能训练这样的能力。随着计算机和网络的发展,未来越来越多的工作将和计算(机)有关(据美国政府的统计是51%以上)。我们必须知道如何让计算机做事,起码知道计算机是如何做事的,这就要求普及计算机科学教育(注意:不是计算机教育,也不是信息技术教育)。
美国政府已经把在中小学普及计算机科学当成一种国策(CS for All,每一个人学习计算机科学),并投入40亿美元落实这一项目。奥巴马总统说“在新经济形态中,计算机科学已不再是可选技能,而是同阅读、写作和算术一样的基础技能……因此,我制定了一项计划,以确保所有孩子都有机会学习计算机科学。”美国政府已明确把计算机教育列入(从幼儿园到12年级)教育体系K12中。英国从2014年起,对中小学的计算机课程进行重大改革,5岁的儿童就开始学写程序。英国教育部启动了“计算机在学校”(Computing at School,CAS)项目。新西兰等国也把计算机编程课当作中学的必修课,并为此投入资金培训教师。未来的竞争不是资源的竞争,而是人才的竞争,如果不具有计算素养和技能,则在未来的社会中处于被动地位。
CCF作为一个负责任的学术社会组织,应该勇于承担起CS普及的任务,这比NOI更加艰巨,更难。不过有NOI三十多年发展的基础,会对未来CS的普及提供有益的经验。
普及计算机科学教育的难点在于师资,而培训师资需要合适的教材。CCF组织富有程序设计教学经验的中学老师编写了“CCF中学生计算机程序设计教材”,分为入门篇、基础篇、提高篇和专业篇,只要有一定数学基础的老师,均可从入门篇修起。学习编程并不像人们想象的那么困难,只要从现实中遇到的(简单)问题出发,循序渐进,通过和计算机的互动,一旦入门就好办了,以后就可以逐步深入下去。
感谢朱全民、陈颖、徐先友、江涛、邱桂香、宋新波、汪星明、屈运华、廖晓刚等老师的贡献,他们花了两年时间写成了这套教材。感谢吴文虎教授、王宏博士审阅本书,在此向他们表示感谢。
走进程序世界的奇妙旅程:Python入门与数据结构基础 这套精选的图书,旨在为广大青少年读者打开通往计算机编程和算法世界的大门。我们深知,在这个数字化浪潮席卷而来的时代,掌握一门编程语言、理解基础的数据结构和算法,将是孩子们未来学习和发展中不可或缺的翅膀。因此,我们精心策划了这套涵盖Python入门、数据结构基础以及初步算法应用的图书,旨在以一种循序渐进、生动有趣的方式,引导读者从零开始,逐步构建起坚实的计算机科学知识体系。 第一卷:Python编程的艺术——从零开始,玩转代码 你是否曾对手机里的APP、电脑上的游戏、甚至是智能家居的神奇运作感到好奇?你是否渴望亲手创造出属于自己的程序,实现天马行空的想象?那么,本书将是你开启这段奇妙旅程的理想起点。 本书选择了当前最流行、最易学、也是应用最广泛的编程语言之一——Python。Python以其简洁明了的语法、丰富的库支持以及强大的跨平台能力,成为了初学者入门编程的绝佳选择。我们将带领你一步步走进Python的世界,从最基础的概念讲起,让你轻松掌握编程的“魔法咒语”。 第一章:初识Python,你的第一个程序 我们会从Python的安装和开发环境搭建开始,让你迈出编程的第一步。你会学会如何编写并运行你的第一个“Hello, World!”程序,体验代码带来的即时反馈,激发你学习的兴趣。接着,我们将深入了解Python的基本数据类型,如整数、浮点数、字符串和布尔值,并学习如何使用变量来存储和操作这些数据。 第二章:控制你的程序——顺序、选择与循环 就像故事有情节一样,程序也需要控制流程。本章将为你揭示如何让程序按照你的意愿去执行。我们将学习条件语句(if-elif-else),让你的程序能够根据不同的情况做出不同的判断和反应,就像人类的思考一样。你将学会如何处理各种逻辑运算,并理解布尔表达式在程序中的重要作用。 接着,我们将探索循环语句(for和while),让你能够让程序重复执行特定的任务,大大提高效率,摆脱繁琐的手动操作。你将学会如何使用循环来处理列表、字符串等序列数据,完成例如统计、查找等常见任务。 第三章:数据组织大师——列表、元组与字典 在编程中,高效地组织和管理数据是至关重要的。本章将为你介绍Python中常用的数据结构:列表(list)、元组(tuple)和字典(dictionary)。 列表(list): 列表就像一个可以随意增减元素的“动态数组”,你可以存储一系列同类或不同类的数据,并轻松地访问、添加、删除或修改其中的元素。我们将学习列表的各种操作,如切片、排序、查找等,让你能够灵活地处理复杂的数据集合。 元组(tuple): 元组与列表类似,但其元素一旦创建就不能被修改,这使得它在某些场景下比列表更安全。我们将学习元组的创建和使用,并了解它与列表的区别和适用场景。 字典(dictionary): 字典就像一个“键值对”的集合,你可以通过唯一的“键”(key)来快速查找对应的“值”(value)。这在存储和检索具有关联关系的数据时非常有用,例如存储学生的姓名和分数,或者存储商品的名称和价格。我们将学习字典的创建、访问、添加和删除操作。 第四章:让你的程序更强大——函数与模块 重复的代码是编程中的“大忌”。本章将教你如何通过定义函数来封装重复性的代码块,使你的程序结构更清晰、易于维护,并能被多次调用。我们将学习如何设计函数的参数和返回值,以及如何组织和调用函数,让你的程序像乐高积木一样,可以灵活组合。 此外,我们还将介绍Python的模块(module)概念。模块是预先编写好的代码库,包含了各种有用的函数和类。学习如何导入和使用Python的标准库以及第三方库,将极大地扩展你程序的功能,让你能够站在巨人的肩膀上,更快地实现复杂的应用。 第五章:处理用户输入与文件 一个真正有用的程序,往往需要与用户进行交互,或者读取和写入外部文件。本章将教你如何使用`input()`函数获取用户的输入,并对用户的输入进行验证和处理。 同时,我们也将学习如何进行文件的读写操作。无论是读取配置文件、处理文本数据,还是将程序运行的结果保存到文件中,文件操作都是必不可少的技能。我们将学习文本文件和二进制文件的读写方法,以及如何有效地管理文件资源。 第六章:面向对象的初步探索 面向对象编程(OOP)是现代软件开发的核心思想之一。本章将为你揭开面向对象编程的神秘面纱,让你初步了解类(class)和对象(object)的概念。你将学习如何定义自己的类,创建对象,并理解封装、继承和多态等基本概念。这为你将来深入学习更复杂的编程范式打下坚实的基础。 第二卷:数据结构的奥秘与算法的魅力 在掌握了Python编程的基础之后,我们更进一步,深入探索计算机科学的核心——数据结构与算法。理解它们,就像拥有了一本“武林秘籍”,能够让你写出更高效、更智能的程序,解决更复杂的问题。 第一章:数据结构的基石——栈与队列 本章将介绍两种非常基础且重要的数据结构:栈(Stack)和队列(Queue)。 栈(Stack): 栈遵循“后进先出”(LIFO)的原则,就像叠放的盘子,最上面的盘子总是最先被取走。我们将学习栈的基本操作,如入栈(push)和出栈(pop),并探讨栈在函数调用、表达式求值等方面的应用。 队列(Queue): 队列遵循“先进先出”(FIFO)的原则,就像排队买票,最先排队的人总是最先被服务。我们将学习队列的基本操作,如入队(enqueue)和出队(dequeue),并了解它在任务调度、广度优先搜索等场景下的应用。 第二章:链式思维——链表的世界 链表(Linked List)是一种与数组结构截然不同的线性数据结构。它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表在插入和删除元素方面具有独特的优势。本章将深入讲解单向链表、双向链表以及循环链表,并学习如何在链表中进行各种操作,理解其内存分配的灵活性。 第三章:高效查找的利器——树与二叉搜索树 树(Tree)是一种非线性数据结构,它具有层次化的结构,非常适合表示具有层级关系的数据,例如文件系统、组织结构等。本章将重点介绍二叉树(Binary Tree)的概念,以及一种非常重要且常用的二叉树——二叉搜索树(Binary Search Tree, BST)。 二叉搜索树具有“左子节点小于父节点,右子节点大于父节点”的特性,这使得查找、插入和删除操作都可以在平均 O(log n) 的时间复杂度内完成,极大地提高了查找效率。我们将学习如何在二叉搜索树中进行各种操作,并理解其在排序、搜索等方面的巨大潜力。 第四章:数据组织的艺术——哈希表 哈希表(Hash Table),又称散列表,是一种能够实现平均 O(1) 时间复杂度进行插入、删除和查找操作的数据结构。它通过哈希函数将键映射到一个存储位置,从而实现快速访问。本章将深入讲解哈希函数的原理、哈希冲突的处理方法(如链地址法和开放地址法),并让你理解哈希表在各种应用中的高效性,如字典的底层实现、缓存等。 第五章:算法初探——排序的智慧 排序是将一组无序的数据按照一定的顺序排列起来的过程。高效的排序算法是计算机科学中的一个经典课题。本章将介绍几种常见的排序算法,并分析它们的效率: 冒泡排序(Bubble Sort) 和 选择排序(Selection Sort):作为最直观的排序算法,它们易于理解,适合作为入门。 插入排序(Insertion Sort):在处理部分有序的数据时效率较高。 快速排序(Quick Sort) 和 归并排序(Merge Sort):它们是平均时间复杂度为 O(n log n) 的高效排序算法,我们将深入理解它们的递归思想和分治策略。 通过学习这些排序算法,你将体会到算法设计的精妙之处,并学会如何评估和选择合适的算法。 第六章:图的探索——路径与连接 图(Graph)是一种比树更通用的数据结构,它可以表示对象之间的任意关系,如社交网络、地图上的城市连接等。本章将介绍图的基本概念,如顶点(vertex)、边(edge)、邻接矩阵和邻接表等表示方法。 我们将学习两种基本的图遍历算法: 深度优先搜索(Depth First Search, DFS):像探险家一样,深入探索图的每一个分支。 广度优先搜索(Breadth First Search, BFS):一层一层地探索图,找到最短路径。 理解DFS和BFS将为你解决许多与图相关的问题打下基础,例如寻找连通分量、判断图的连通性等。 学习目标与展望 通过学习这套图书,我们期望读者能够: 掌握Python编程基础: 能够独立编写简单到中等复杂度的Python程序,解决实际问题。 理解核心数据结构: 深刻理解列表、栈、队列、链表、树、哈希表等数据结构的原理和应用场景。 掌握基础算法: 熟悉排序、查找、图遍历等经典算法,并能分析其时间复杂度和空间复杂度。 培养逻辑思维与解决问题的能力: 通过编程实践,锻炼分析问题、设计解决方案、调试代码的综合能力。 激发对计算机科学的兴趣: 为未来进一步学习更深入的计算机科学知识打下坚实的基础,为参与更复杂的项目做好准备。 我们相信,这套图书将是你通往编程世界最可靠的向导,也是点燃你对计算机科学好奇心最耀眼的火种。愿你在代码的海洋里,尽情遨游,创造属于你的精彩!