CCF中学生计算机程序设计-基础篇 信息学奥赛官方指定用书

CCF中学生计算机程序设计-基础篇 信息学奥赛官方指定用书 pdf epub mobi txt 电子书 下载 2025

中国计算机学会 著
图书标签:
  • CCF
  • 信息学奥赛
  • 青少年编程
  • 入门
  • 基础
  • 算法
  • 数据结构
  • C++
  • 编程竞赛
  • 教材
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 科学出版社旗舰店
出版社: 科学出版社
ISBN:9787030500298
商品编码:10900023895
包装:平装
开本:16
出版时间:2016-10-08
页数:256
字数:315

具体描述



本店POD版图书均在书名下有明显红字标注,POD图书属于按需定制,您下单购买后我们才开始印刷,故不可取消订单。 我们一般会在您下单后的7-10个工作日内完成发货,请谨慎下单!商品无质量问题不支持退货,定价和装帧可能会与原书不同,请以实物为准!详情请咨询客服 购买电子版图书请与客服直接联系,或者到科学出版社电子商务平台直接购买
CCF中学生计算机程序设计-基础篇
定价 36.00
出版社 科学出版社
版次 1
出版时间 2016年10月
开本 16
作者 中国计算机学会
装帧 平装
页数 256
字数 315
ISBN编码 9787030500298


内容介绍
本丛书是基于《CCF青少年计算机程序设计评级标准》开发的一个系列培训教材。该标准围绕计算机程序设计的知识要求和能力要求,共分十级,其中1-3级为基础级,4-5级为提高级,6-7级为高手级,8-10级为大师级。本丛书将评级内容进行归纳,计划1-3级出1本、4-5级出1本,6-7级出1本,8-10级出1本,共4本教材。

目录
目录
第1章 模块化编程—函数
1.1自定义函数的引入1
1.2函数的定义3
1.3函数调用与参数传递5
1.4变量的作用域9
1.5函数的应用11
1.6递归函数20
第2章 字符串处理—string类型
2.1string类型的引入33
2.2string类型的基本操作36
2.3string类型中字母与数字的关系41
2.4string类型的应用48
本章小结52
第3章 数据类型的组合—结构和联合
3.1结构体(struct)的引入61
3.2结构体(struct)的使用66
*3.3结构体(struct)的扩展72
*3.4联合(union)的定义和使用76
*3.5枚举(enum)的定义和使用79
本章小结81
第4章 功能强大的利器—指针
4.1指针概念、定义与内存分配85
4.2指针的引用与运算87
4.3指针与数组90
4.4指针与字符串95
*4.5函数指针和函数指针数组97
4.6指针的扩展100
本章小结104
第5章 数据外部存储—文件
5.1数据存储的分类109
5.2文件类型变量的定义及引用110
5.3文件的重定向116
本章小结118
第6章 数据结构及其运用
6.1什么是数据结构125
6.2线性表的储存结构及其应用126
6.3队列及其应用138
6.4栈及其运用145
6.5二分及其快速排序151
第7章 简单算法
7.1什么是算法169
7.2高精度数值处理171
7.3简单枚举算法178
7.4模拟算法184
7.5简单动态规划187
7.6用递归实现回溯算法199
第8章 数学在程序设计中的应用
8.1常用数学函数207
8.2质因数的分解209
8.3zui大公约数的欧几里德算法212
8.4加法原理与乘法原理216
8.5排列与组合219
8.6圆排列、可重集排列222
第9章 STL(标准模板库)简要说明
*9.1STL中的一些新概念227
9.2几个常见的容器介绍232
9.3几个常见的算法函数240
索引244

在线试读
第1章模块化编程—函数
我们处理任何问题都有诸多环节,比如煮饭,先要准备米,将米淘净后,然后根据米的吸水特性加水,弄好后放入电饭煲中,按下电饭煲的煮饭开关,等电饭煲灯熄灭,然后饭就做好了。现在煮饭看起来变得十分简单,其关键原因是煮饭的技术活都被电饭煲干了。电饭煲煮饭是如何控制火候和时间的,其实我们并不关心,我们所关心的是用电饭煲将饭煮熟的结果,这个方法我们叫封装。在计算机程序设计中,封装是一个非常重要的概念,它是实现程序模块化结构的重要手段。在C++中,我们通常采用函数来进行模块封装,对于函数,我们所关心的是对给定的自变量输入,能否得到我们想要的输出。有些函数系统已经做好了,可直接调用,比如诸多的数学函数、字符串处理函数等,有些函数则需要根据自己的需求进行个性开发,这章我们就重点讲授如何创作自己的函数。
1.1自定义函数的引入
【例1.1】给出平面上两个点的坐标,求两点之间的曼哈顿距离。
提示:平面上A点(x1,y1)与B点(x2,y2)的曼哈顿距离为:|x1-x2|+|y1-y2|。
分析:计算曼哈顿距离可以用前面学过的分支结构来解决。
程序如下:
1//eg1.1_1
2#include
3usingnamespacestd;
4intmain()
5{
6doublex1,y1,x2,y2;
7doubledx,dy;
8cin>>x1>>y1>>x2>>y2;
9if(x1>x2)//计算|x1-x2|
运行结果:
输入:1.21.52.53.8
输出:3.6
10dx=x1-x2;
11else
12dx=x2-x1;
13if(y1>y2)//计算|y1-y2|
14dy=y1-y2;
15else
16dy=y2-y1;
17cout<18return0;
19}
可以使用自定义函数来计算|x1-x2|,|y1-y2|。
程序如下:
1//eg1.1_2
2#include
3usingnamespacestd;
4doubleabs(doublex)//计算x的绝对值函数
5{
6if(x>0)
7returnx;
8else
9return-x;
10}
11intmain()
12{
13doublex1,y1,x2,y2;
14doubledx,dy,mht;
15cin>>x1>>y1>>x2>>y2;
16mht=abs(x1-x2)+abs(y1-y2);
17cout<18return0;
19}
比较上面两个程序容易发现,使用自定义函数的程序有以下几个优点:
(1)程序结构清晰,逻辑关系明确,程序可读性强。
(2)解决相同或相似问题时不用重复编写代码,可通过调用函数来解决,减少代码量。
(3)利用函数实现模块化编程,各模块功能相对独立,利用“各个击破”降低调试难度。
1.2函数的定义
1.2函数的定义
前面我们用过了很多C++标准函数,但是这些标准函数并不能满足所有需求。当我们需要特定的功能函数时,这就需要我们要学会自定义函数,
根据需求定制想要的功能。
1.2.1函数定义的语法
返回类型函数名(参数列表)
{
函数体
}
关于函数定义的几点说明:
(1)自定义函数符合“根据已知计算未知”这一机制,参数列表相当于已知,是自变量,函数名相当于未知,是因变量。如程序eg1.1_2中的abs函数的功能是根据给定的数x计算x的绝对值,参数列表中x相当于已知—自变量,abs函数的值相当于未知—因变量。
(2)函数名是标识符,一个程序中除了主函数名必须为main外,其余函数的名字按照标识符的取名规则命名。
(3)参数列表可以是空的,即无参函数,也可以有多个参数,参数之间用逗号隔开,不管有没有参数,函数名后的括号不能省略。参数列表中的每个参数,由参数类型说明和参数名组成。如程序eg1.1_2中abs函数的参数列表只有一个参数,参数数据类型是double,参数名是x。
(4)函数体是实现函数功能的语句,除了返回类型是void的函数,其他函数的函数体中至少有一条语句是“return表达式;”用来返回函数的值。执行函数过程中碰到return语句,将在执行完return语句后直接退出函数,不去执行后面的语句。
(5)返回值的类型一般是前面介绍过的int、double、char等类型,也可以是数组。有时函数不需要返回任何值,例如函数可以只描述一些过程用printf向屏幕输出一些内容,这时只需定义函数返回类型为void,并且无须使用return返回函数的值。
1.2.2函数定义应用实例
根据上述定义,我们知道C++函数形态有以下四类:
(1)返回类型函数名(参数列表)。
(2)返回类型函数名()。
(3)void函数名(参数列表)。
(4)void函数名()。
下面我们一起来看几个例子:
【例1.2】给定两个非负整数n和m,编写函数计算组合数Cmn。
分析:首先分析函数的功能,根据给定的n,m计算Cmn。n,m已知,相当于自变量;Cmn未知,相当于因变量。设计以下函数:
longlongC(intn,intm)
其中,函数的返回值为Cmn,返回类型为longlong,函数名为C,参数列表中有两个参数n,m,类型都是int。函数体是实现函数功能的语句,根据发现需要三次用到“计算一个数的阶乘”这个功能,因此把这个功能独立出来设计一个函数来实现:
longlongf(intn)
该函数的返回值为n!,返回类型为longlong,函数名为f,需要一个参数n,类型为int。
综上,该函数的代码如下:
1//eg1.2
2longlongf(intn)
3{
4longlongans=1;
5for(inti=1;i<=n;i++)
6ans*=i;
7returnans;
8}
9
10longlongC(intn,intm)
11{
12returnf(n)/(f(m)*f(n-m));
13}
提示:
(1)函数体中的语句可以是对另一个函数的调用。
(2)对于较大的n,m来说,上述程序可能会产生溢出。
【例1.3】编写函数输出斐波那契数列的第n项。其中斐波那契数列f(n)的定义如下:
f(1)=0,f(2)=1
f(n)=f(n-1)+f(n-2)(n>=2)
分析:因为该函数不需要返回值,只需要输出f(n)即可,所以该函数的返回类型为void,函数体部分只需计算出f(n)再输出即可。
函数代码如下:
1//eg1.3
2voidoutput(intn)
3{
4if(n<=2)
5cout<6else
7{
8longlongp1,p2,p3;
9p1=0;
10p2=1;
11for(inti=3;i<=n;i++)
12{
13p3=p1+p2;
14p1=p2;
15p2=p3;
16}
17cout<18}
19}
1.3函数调用与参数传递
上一节学习了函数的定义方法和四种不同类型的函数,在实际编程中如何调用函数呢?调用函数时参数是如何传递的?参数传递又有几种方法呢?本节将重点学习这些内容。
1.3.1函数的调用
1.调用方法
上一节中讲过函数一共有四种不同的类型,也可以根据返回类型分为两大类:其中一类有返回值,如程序eg1.1_2中的abs函数、例1.2中的f函数和C函数;另一类没有返回值,如例1.3中的output函数。对于有返回值的函数,调用时必须以值的形式出现在表达式中。比如程序eg1.1_2第16行:
mht=abs(x1-x2)+abs(y1-y2);
该语句对abs函数的调用出现在赋值语句的右边,程序eg1.2第12行:
returnf(n)/(f(m)*f(n-m));
该语句对f函数的调用出现在return语句中,作为C函数的返回值。
对于没有返回值的函数,直接写“函数名(参数);”即可。如例1.3中,如果需要输出斐波那契数列的第10项,用“output(10);”即可实现。
程序可以调用任何前面已经定义的函数,如果我们需要调用在后面定义的函数,就要先声明该被调用的函数。声明方法如下:
返回类型函数名(参数列表);
程序如下:
1#include
2usingnamespacestd;
3intsgn(intn);//声明sgn函数
4intmain()
5{
6intn;
7cin>>n;
8cout<9return0;
10}
11intsgn(intn)
12{
13if(n==0)return0;
14return(n>0)?1:-1;
15}
2.形式参数与实际参数
函数调用需要理解形式参数与实际参数:
(1)函数定义中的参数名称为形式参数,如longlongC(intn,intm)中的n和m是形式参数,我们完全可以把n换成a,把m换成b,再把函数体中的n换成a,m换成b,函数的功能完全一样。
(2)实际参数是指实际调用函数时传递给函数的参数的值。如调用函
《算法的边界:揭示计算思维的无限可能》 在这信息爆炸、技术日新月异的时代,我们是否常常感到被海量的信息淹没,却又渴望理解驱动这一切的底层逻辑?在瞬息万变的数字浪潮中,我们是否渴望拥有驾驭技术、解决复杂问题的核心能力?《算法的边界》正是为这样一位求知者而生,它将带领你穿越纷繁的表象,深入探索计算机科学的精髓——算法。 本书并非一本枯燥的技术手册,而是一场激动人心的思想冒险。它将以引人入胜的方式,为你揭示那些支配着现代世界运转的强大思维工具。你将认识到,算法不仅仅是程序员手中的代码,更是解决问题、优化流程、发现模式的通用语言。从日常生活中的简单决策,到支撑人工智能、大数据分析等尖端技术的复杂系统,算法无处不在,它的力量深邃而广泛。 为何选择《算法的边界》? 在这个信息时代,拥抱计算思维已成为一项至关重要的能力。我们生活在一个被算法深刻影响的世界里,从搜索引擎的推荐,到社交媒体的内容推送,再到交通导航的规划,算法早已渗透到我们生活的方方面面。理解算法,就是理解我们所处世界的运作方式。 《算法的边界》将为你构建一个坚实的理论基础,让你能够: 洞察问题的本质: 学习如何将复杂问题分解为更小的、可管理的部分,并找到高效的解决路径。 掌握逻辑的艺术: 掌握结构化的思考方式,培养严谨的逻辑推理能力,这不仅在编程领域,在任何需要解决问题的场景下都至关重要。 解锁创新的钥匙: 算法是创新的强大引擎。理解算法的原理,你就能思考如何利用它们创造新的应用、优化现有流程,甚至解决那些 hitherto unresolved 的难题。 提升解决问题的能力: 本书将通过一系列经典的算法案例,让你亲身体验如何运用算法思维来解决实际问题,从经典的排序、搜索,到更具挑战性的图论、动态规划等,你将逐步建立起强大的问题解决武器库。 为未来做好准备: 无论你未来选择从事哪个行业,深入理解算法都将为你提供独特的竞争优势。在人工智能、机器学习、数据科学等新兴领域,算法更是核心中的核心。 本书的独特视角与价值: 《算法的边界》区别于市面上许多偏重于特定编程语言实现的书籍,它更侧重于算法的思想、原理和应用。我们将: 聚焦算法思想: 深入剖析各种算法的核心思想、设计思路和适用场景。我们将探讨“分治”、“贪心”、“动态规划”、“回溯”等不同的算法设计范式,理解它们为何能如此高效地解决特定类型的问题。 强调理论与实践的结合: 虽然不侧重于具体的编程语言,但书中会穿插清晰的伪代码和逻辑流程图,帮助你理解算法的实现细节。我们相信,理解算法的“为什么”和“如何做”是同等重要的。 展示算法的普适性: 我们将从多个角度展示算法在不同领域的应用,让你看到算法不仅仅是程序员的工具,更是科学家、工程师、甚至决策者的强大助手。例如,你将了解到图算法在网络分析、交通规划中的应用,字符串匹配算法在生物信息学、文本处理中的价值。 鼓励批判性思维: 学习算法不仅仅是学习固定的模式,更重要的是培养一种评估不同算法优劣、选择最适合解决方案的能力。本书将引导你思考算法的时间复杂度和空间复杂度,理解在不同约束条件下,哪种算法才是最优选择。 搭建学习的阶梯: 本书从易到难,循序渐进。从基础的搜索和排序算法入手,逐步深入到更复杂的图算法、动态规划、回溯搜索等。每一种算法的引入都伴随着清晰的解释和生动的案例,确保你能逐步建立起扎实的知识体系。 《算法的边界》将带你领略的精彩旅程: 你将踏上一段探索算法世界的奇妙旅程。我们将从最基础的概念出发,让你理解什么是“指令序列”,什么是“递归”,什么是“数据结构”——它们是算法的载体和伙伴。 搜索的艺术: 从简单的线性搜索,到高效的二分查找,你将了解如何快速在海量数据中找到目标。你还会接触到广度优先搜索(BFS)和深度优先搜索(DFS),这两种强大的搜索策略将为你打开解决许多复杂问题的大门,比如迷宫寻路,社交网络关系分析。 排序的智慧: 冒泡排序、选择排序、插入排序……这些看似简单的排序算法,却蕴含着深刻的效率思想。你将理解它们的工作原理,并学习如何分析它们的优劣。更进一步,你将接触到更高效的排序算法,如快速排序和归并排序,它们是现代计算机科学的基石。 图的奥秘: 图数据结构是描述现实世界复杂关系的最佳模型。你将学习如何表示图,如何解决最短路径问题(例如,导航软件的核心算法)、最小生成树问题(例如,网络连接优化),以及如何遍历图。 动态规划的威力: 当问题可以分解为相互重叠的子问题时,动态规划就闪耀着智慧的光芒。你将学习如何通过存储和重用子问题的解,来高效地解决原本看似棘手的难题,例如背包问题、最长公共子序列问题。 回溯与分支限界: 对于一些搜索空间巨大的问题,回溯和分支限界提供了系统性的解决方案。你将学习如何通过试探性地搜索,并在必要时“回退”,来找到问题的解,例如数独求解、八皇后问题。 本书的学习方法与建议: 为了最大限度地从《算法的边界》中获益,我们鼓励你: 主动思考: 在阅读过程中,尝试自己推导算法的步骤,预测算法的执行过程。 动手实践(可选): 如果你有编程基础,可以尝试用你熟悉的编程语言实现书中的部分算法。这将极大地加深你的理解。 举一反三: 思考书中的算法案例是否可以在其他场景下应用,尝试将算法思维融入你的日常学习和生活中。 循序渐进: 不要急于求成。算法的学习是一个循序渐进的过程,打好基础至关重要。 《算法的边界》不仅仅是一本书,更是一扇通往无限可能的大门。它将激发你的好奇心,磨砺你的思维,让你在数字化时代拥有更强大的竞争力。准备好踏上这段激动人心的旅程,去探索算法的奇妙世界,揭示计算思维的无限可能吧!

用户评价

评分

我不得不说,《CCF中学生计算机程序设计-基础篇》这本书的出版,无疑给广大信息学奥赛的参赛者们提供了一份宝贵的“官方秘籍”。拿到这本书的时候,我首先被它严谨的逻辑和系统性的知识框架所吸引。它不像市面上一些零散的编程教程,这本书从最基本的语法开始,循序渐进地引导读者掌握各种数据结构和算法。让我印象深刻的是,书中的例子设计得非常贴切,既能清晰地阐释理论知识,又能激发读者的解题兴趣。尤其是在学习图论和动态规划这些比较难的章节时,作者并没有简单地给出公式和代码,而是深入剖析了问题的本质,一步步引导读者构建解题思路,这种“授人以渔”的教学方式,是我在其他书中很少见到的。虽然有些章节需要反复琢磨,甚至需要结合网上的资料一起学习,但这恰恰反映了这本书的深度和广度。它不是一本看完就能立即“出师”的书,而更像是一本需要伴随你整个信息学奥赛学习生涯的“圣经”。我个人认为,这本书在培养学生的逻辑思维能力和抽象化能力方面,起到了至关重要的作用,是备赛过程中不可或缺的参考资料。

评分

最近我终于读完了这本《CCF中学生计算机程序设计-基础篇》,说实话,过程跌宕起伏,让我又爱又恨。起初,我怀揣着一颗“我要成为编程大神”的雄心壮志,信心满满地打开了第一页。然而,书中的某些章节,特别是涉及到一些基础算法的讲解,对我来说就像是天书。我花了大量的时间去理解那些抽象的概念,比如递归和分治,脑子里反复回放着书上给出的例子,还是觉得云里雾里。有几次,我甚至想把书合上,彻底放弃。但是,当我尝试着自己动手写代码,将书上的理论转化为实际操作时,那种豁然开朗的感觉是无与伦比的。看到程序按照我的想法运行起来,即使只是一个简单的打印输出,也足以让我获得巨大的成就感。这本书的魅力就在于它逼迫你去思考,去尝试,去克服困难。它不像很多速成教材那样,告诉你“怎么做”,而是让你明白“为什么这么做”,这对于打牢基础至关重要。当然,在某些部分,如果能有更具象化的类比或者更丰富的图示,可能会让初学者更容易入门。但总的来说,这本书确实是一本值得深入钻研的宝藏,它教会我的不仅仅是代码,更是解决问题的思维方式。

评分

实话讲,初次接触《CCF中学生计算机程序设计-基础篇》这本书,我还是有些犯怵的。毕竟,信息学奥赛听起来就不是那么容易掌握的。但当我真正沉下心来阅读时,我发现这本书的语言风格非常友好。它不像有些技术书籍那样,用一大堆专业术语把人吓倒,而是用一种相对平实的语言,一点点地引导你进入编程的世界。我尤其喜欢书中对“调试”过程的强调。作者并没有回避程序中可能出现的错误,而是详细讲解了如何通过各种方法来定位和修复bug。这让我意识到,编程并非一蹴而就,犯错并不可怕,关键在于如何从错误中学习。在学习一些比较复杂的算法时,比如树的遍历和图的搜索,我发现书中提供了多种实现方式,并对它们的优劣进行了分析,这让我能够根据不同的场景选择最合适的解决方案。这本书的价值,不仅仅在于教你如何写代码,更在于教会你如何像一个真正的程序员那样去思考和解决问题。虽然我离“精通”还有很长的路要走,但这本书无疑为我打开了一扇新的大门,让我看到了计算机科学的无限可能。

评分

翻开《CCF中学生计算机程序设计-基础篇》这本书,我立刻感受到了一种扑面而来的专业气息。这本书的编排非常紧凑,每个章节的内容都直击要点,没有丝毫的冗余。我特别欣赏书中的习题设计,它们紧密结合了章节内容,并且难度循序渐进,从简单的巩固练习到需要综合运用知识的挑战题,能够有效地检验和提升读者的掌握程度。在学习过程中,我发现作者在解释一些抽象的数学概念,例如组合数学在算法中的应用时,都力求做到清晰明了,并且提供了大量的实例来支撑理论。这对于理解那些看似枯燥的数学原理,帮助我将其与实际编程问题联系起来,起到了至关重要的作用。虽然书中涵盖的知识点非常丰富,有时候会觉得信息量有点大,但整体而言,这本书的结构化程度非常高,很容易就能找到自己需要的内容。它更像是一部“武功秘籍”,你需要付出努力去领悟其中的精髓,才能真正掌握这门“绝学”。对于那些渴望在信息学奥赛领域取得突破的同学来说,这本书绝对是一本值得深入研究和反复品味的“案头必备”。

评分

作为一个对计算机科学充满好奇但又缺乏系统指导的中学生,我一直以来都在寻找一本能带我入门的优秀教材。《CCF中学生计算机程序设计-基础篇》这本书,在我的眼中,无疑是这样一本“灯塔”。它没有一开始就抛出晦涩难懂的概念,而是从最基础的变量、数据类型、控制结构讲起,语言通俗易懂,即使是没有任何编程基础的同学,也能快速上手。我最喜欢的是书中关于“算法效率”的讲解。它不是简单地告诉你一个算法有多快,而是通过直观的例子,比如比较不同排序算法的时间复杂度,让我深刻理解了“好”算法的重要性。这不仅仅是为了应付考试,更是为了培养一种“用更少的资源解决问题”的编程哲学。当然,书中涉及的某些高级算法,如网络流和字符串匹配,对我来说还是有一定的挑战性。我常常需要花上几个小时去理解一个算法的原理,然后写出对应的代码进行调试。但每一次克服困难,都会带来巨大的满足感。这本书的价值在于,它不仅仅是一本教材,更是一个循循善诱的老师,它教会我如何独立思考,如何解决问题,如何享受编程的乐趣。

评分

学校里要用,这书应该是正版。

评分

haoyong

评分

不错。。。。。。。。。。

评分

学校里要用,这书应该是正版。

评分

很好,很实用,内容丰富

评分

很好,速度快!

评分

很好,正版。

评分

很好,正版。

评分

正版,放心购买

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有