商品详情

书名:CCF中学生计算机程序设计-基础篇
定价:36.0
ISBN:9787030500298
作者:中国计算机学会
版次:1
出版时间:2016-10
内容提要:
本书由CCF组织富有程序设计教学经验的中学老师编写。通过详实的例题,循序渐进地介绍中学生计算机程序设计的各种知识,内容包括模块化编程、字符串处理、数据类型的组合、指针、数据外部存储、数据结构及其应用、简单算法、数学在程序设计中的应用、STL(标准模块库)简要说明等,旨在普及计算机科学教育,培养中学生的计算思维能力。
目录:
目录
第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.3*大公约数的欧几里德算法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<iostream>
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<<dx+dy<<endl;
18return0;
19}
可以使用自定义函数来计算|x1-x2|,|y1-y2|。
程序如下:
1//eg1.1_2
2#include<iostream>
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<<mht<<endl;
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<<n-1<<endl;
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<<p3<<endl;
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<iostream>
2usingnamespacestd;
3intsgn(intn);//声明sgn函数
4intmain()
5{
6intn;
7cin>>n;
8cout<<sgn(n)<<endl;
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)实际参数是指实际调用函数时传递给函数的参数的值。如调用函
- 科学出版社旗舰店 (微信公众号认证)
- 科学出版社秉承多年来形成的“高层次、高水平、高质量”和“严肃、严密、严格”的优良传统与作风,始终坚持为科技创新服务、为传播与普及科学知识服务、为科学家和广大读者服务的宗旨。
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...