《算法详解 C++11语言描述》日沉云起作|(epub+azw3+mobi+pdf)电子书下载

图书名称:《算法详解 C++11语言描述》

【作 者】日沉云起作
【页 数】 507
【出版社】 北京:机械工业出版社 , 2021.05
【ISBN号】978-7-111-67774-1
【分 类】C++语言-程序设计
【参考文献】 日沉云起作. 算法详解 C++11语言描述. 北京:机械工业出版社, 2021.05.

图书封面:

图书目录:

《算法详解 C++11语言描述》内容提要:

2011年,C++标准委员会发布了ISOC++标准的一个重要修订版,即C++11,揭开了C++发展的新篇章。目前,许多程序设计竞赛和相关考试都已经提供了支持C++11程序运行的编译器。本书的代码完全采用C++11的语法进行编写,并力求帮助读者养成一种良好的C++11代码编写风格,在程序设计竞赛和相关考试中能够快速而准确地编写代码。除了介绍C++11新特性之外,本书还会详细介绍各类基础的数据结构和算法。本书的具体内容包括5个部分:C++11基础、C++11标准库简介、算法基础、数据结构基础、C++标准库进阶。本书主要面向计算机专业零基础的学习者,特别适合作为学习C++语言、数据结构与算法的入门书籍,也可作为计算机专业研究生入学考试复试上机考试、各类算法考试和算法竞赛的辅导书籍。

《算法详解 C++11语言描述》内容试读

第1部分C++11基础

bhow allsH

本部分介绍C+11的一些基础语法,主要包括两部分:

1)数据类型,包括C+提供的算术类型、复杂类型以及类和对象的设计。

2)程序设计,包括C+中的控制流语句、变量的输入与输出、函数以及C+11

提供的一些语法糖。

通过本部分的学习,读者将对C+语言有一个初步的了解,并能够利用这些

基础语法编写一些简单的程序,解决一些比较简单的算法题目。

第1章C++11简单入门

本章主要介绍:

1)算术类型。算术类型是程序中最常用的数据类型,本章主要介绍程序设计竞赛和考试中常用的算术类型:long long、double、char、bool。

2)控制流语句。C+的控制流语句包括条件执行语句、重复执行相同代码的循环语句和

用于中断当前控制流的跳转语句。

3)针对算术类型变量的输入与输出方法。本章会介绍C语言和C++的输入输出方法,

笔者更建议使用C++的输入输出方法。

1.1从“Hello world”开始

本节主要从一个简单的“Hello world”程序引入,逐行解释“Hello world”程序中每行代

码的作用,让不熟悉C+的读者对C+程序先有一个简单的认识。

学习程序设计最好的方法就是编写程序,编写一个简单的“Hello world”程序,这个程序将会在控制台打印“Hello world”字符串。程序代码如下:1 #include

//引入头文件

2 using namespace std;

//使用命名空间std

int main(){

//主函数

A

cout<<"Hello world";//在控制台打印"He11owor1d"字符串

5

return 0;

//返回值0

61

首先要了解“∥”之后到本行末尾的文字,称之为注释。注释的主要用途是帮助代码的阅读者理解程序。注释通常用于概述算法、确定变量的用途,或者解释晦涩难懂的代码段。编译器会忽略注释,注释也不会被运行,因此注释对程序的行为或性能不会有任何影响。所以第1行“引入头文件”就是注释,用来表示第1行代码的作用是引入头文件。

下面笔者逐行解释这段程序中每行代码的作用。

1.头文件

第1行代码尖括号中的“bits/stc+h”就是一个头文件,头文件中封装了一些功能,使得其他程序能够调用,程序通过“#include”指令引入头文件。一般将一个程序的所有“include”指令都放在文件的开始位置。

例如,“iostream”头文件就是C+的标准输入输出库,通过“include”指令引入头文件“iostream”,代码为“#include<-iostream>”(注意最后没有分号),在程序开始写入这行代码,

整个程序就可以利用C+的标准输入输出库读取输入和进行输出了。

C+语言中有许多头文件,每个头文件都封装了一些功能,程序中需要哪些功能,就需

要用“clude”指令引入哪个头文件。这样的话,在程序设计中不仅需要记住哪个功能封装在哪个头文件中,还需要记住头文件的具体拼写,而且当引入的头文件过多时,也会浪费大

第1章C+11简单入门

量编码时间。这时候头文件“bits/stdc+.h”的优势就体现出来了。

头文件“bits/stdc+.h”称为万能头文件,这个头文件中封装了C++标准库中几乎所有的

头文件。程序中引入这个头文件就相当于引入C+标准库中所有的头文件,也就是说,引入

这个头文件,你就可以使用C+中所有头文件中的功能了。但是引入万能头文件也有缺点,

一是并不是所有的编译器都支持万能头文件的编译,如Visual Studio就不支持万能头文件,所以引入万能头文件的程序很可能在一些机器上无法正常编译,限制了程序的可移植性,当然在CCF CSP和PAT考试中只要选择g+编译器,万能头文件一般就能够被编译;二是由于

万能头文件引入了C++标准库中所有的头文件,在编写程序的过程中,程序中的变量或函数

的命名很可能会与C++标准库中的命名冲突,这种命名冲突在存在大量程序文件的工程项目

中更容易出现:三是利用万能头文件会降低编译效率,增长编译时间,由于在CCF CSP和PAT

考试中,所有的代码都放在一个程序文件中,这些时间可以忽略不计,但是在工程项目中代码可能会被放在数以千计的程序文件中,编译时间过长就是一个影响程序性能的大问题了。所以在工程项目中不要使用万能头文件!

2.命名空间

第2行代码“using namespace std;”表示使用了命名空间std。命名空间简单说来,就是

为了防止名字冲突而提供的一种可控机制。在CCF CSP和PAT考试中,无须知道它的具体机

制和使用方法,只需知道C++标准库中的所有数据类型和相关函数都定义在命名空间st中。引入万能头文件并使用了命名空间st之后,就可以随心所欲地使用C++标准库中的所有数据类型和相关函数了。

正如前面所说,这样引入万能头文件和命名空间st,的确会让编码变得更加方便,但它也会带来其他的问题,即命名冲突,在83节中会探讨这个问题。为了避免命名冲突,在工程项目中不要直接使用命名空间std!

3.主函数

第3行代码“int main0{”和第6行代码“}”组成了一个主函数main。每个C+程序都包含一个或多个函数,其中必须有一个且只能有一个函数命名为main。main函数就是所说的主函数,它是整个程序的入口,操作系统通过调用main函数来运行整个程序。

4.打印字符串“Hello world”

第4行代码负责打印一串字符串“Hello world”。cout是C++标准库中的输出流,在1.6

节中会详细介绍C++的输入输出流,这里不详细展开。

5.返回值

第5行代码“return0;”表示终止main函数的执行并将程序控制权转交回操作系统。在主函数main中一般都会返回一个整数值0给调用主函数的操作系统,意思是告知操作系统该

C+程序成功执行完毕。关于return语句在2.3.1节中也会进行详细阐述,这里不详细展开。

1.2变量

变量是程序中值可以进行改变的量。C++中的每个变量都有其数据类型,数据类型决定

着变量所占内存空间的大小、变量能存储的值的范围以及变量能参与的运算。变量需要定义后才能使用,变量的定义语法如下:

变量类型变量名:

川算法详解(C+11语言描述)

可以在定义变量的时候就赋初值,称这一过程为初始化,语法如下变量类型变量名=初值:

变量名一般来说可以任意取,但要注意以下几点:

1)不能是C++标识符,如nt、return都不能作为变量名。

2)变量名的第一个字符必须是字母或下画线,除第一个字符之外的其他字符必须是字母、数字或下画线。

3)区分大小写,如cCf和CC℉可以作为两个不同的变量名。

1.3算术类型

C+中的算术类型包括整型、浮点型、字符和布尔型。算术类型的尺寸(也就是该类型

数据所占的比特数)在不同机器上有所差别,这取决于机器上的编译器。这里主要考虑在CC℉

CSP和PAT考试中比较常用的算术类型和常见尺寸。

此外,C+中的算术类型还可以分成有符号类型和无符号类型。在CCF CSP和PAT考试

中一般使用有符号类型就足够了,因此这里只介绍有符号类型。

1.3.1整型

整型表示的就是数学上的整数。在CCF CSP和PAT考试中,比较常用的整型类型有两种:

int和long long,二者的尺寸和能够表示的数据范围不同,如表1-1所示。

表1-1int和long long数据类型

类型

尺寸(所占位数)

能够表示的数据范围

能够表示的大致范围

int

32位

-2147483648-+2147483647

-2×109-2×109

long long

64位

-263-+23-1)

9×1089x108

NT MAX、NTMN分别代表了t类型的最大值和最小值,程序中可以直接使用这两个标识符,通常在程序中会把它们当作无穷大或无穷小使用。

利用“=”符号为一个变量赋值。可以通过下面的代码定义一个int类型的变量a和long long类型的变量b,并分别赋予初始值NT MAX和1000。1

int a=INT MAX;2 longlong b=1000;

1.3.2浮点型

浮点型表示的是数学上的小数。C+中的浮点型有两种:float和double。.由于double比f1oat所能表示的数据范围更广,精度更高,在程序中遇到浮点数只要用double就可以。

可以通过下面的代码定义一个double类型的变量a,并赋予初始值3.14。double a=3.14;

1.3.3字符

C+中的字符类型是char,尺寸是8位。

第1章C+11简单入门

在C+中,字符常量使用ASCI码统一编码。什么是常量?常量就是值不可改变的量。

标准ASCI码的范围是0~127,其中包含了控制字符或通信专用字符和常用的可显示字符。

在键盘上通过敲击可以在屏幕上显示的字符就是可显示字符,如09、A~Z、z等都是可显示字符。字符常量必须用单引号标注出来。字符常量可以用来给字符变量赋值。

可以通过下面的代码定义一个char类型的变量a,并赋予初始值'c'。char a='c';

1.3.4布尔型

布尔型变量又称为“bool型变量”,它的取值只能是true(真)或者false(假)。在赋值时,可以直接使用rue或false这两个标识符进行赋值,也可以使用整型数值对其进行赋值,非零值在赋值给布尔型变量时会转换成true,零赋值给布尔型变量时会转换成false。

注意,“非零”是包括正整数和负整数的,即1和-1都会转换为u。但是对计算机来说,

5

true和false在存储时分别为1和0。因此,如果按整数格式输出bool型变量,则true和false会输出1和0。笔者在这里建议大家尽量用true和false给布尔型变量赋值,不要用整型变量给布尔型变量赋值。

可以通过下面的代码定义两个布尔类型的变量a和b,并分别赋予初始值true和false。bool a=true,b=false;

1.3.5字面值常量

形如“42”“3.14”“c”的值都是字面值常量。“字面值”是因为只能用它的值来称呼它,“常量”是因为它的值不能被修改。每个字面值都有相应的类型,42是int型,3.14是double型,“c”是字符型。

1.整型字面值常量

整型字面值常量可以用十进制、八进制(数值前添“0”)、十六进制(数值前添“0x”)表示。例如:1 int i=20;

//20解释为十进制,1的值为20

2intj=020;

//020解释为八进制,j的值为16

3 int k=0x20;

//0x20解释为十六进制,k的值为32

整型字面值常量的类型默认为int,如果想指定整型字面值常量类型为long long,需要在

数值后添加两个小写字母“1”或两个大写字母“L”。

2.浮点字面值常量

浮点字面值常量的类型默认为double

浮点字面值常量可以用科学计数法(指数用E或e)表示,类型同样默认为double。例如,“2e3”就代表double类型的浮点值“2000.0”。再如:1//a的值是-2000.0,b的值是0.015,c的值是1.9

2doub1ea=-2e3,b=1.5e-2,c=9e-1+1;

当需要表示10的幂数时,使用科学计数法形式的浮点字面值常量是一个很好的选择。

3.字符型字面值常量

字符型字面值常量就是前面谈到的字符常量,它的类型默认为char,可以用来给char类

算法详解(C+11语言描述)

型变量赋值。这里着重提一下转义字符。

非打印字符和特殊字符(如单引号、双引号、反斜杠)都要写为转义字符,转义字符以反斜杠开头。表1-2列举了几种常用的转义字符。

表1-2常用的转义字符

当你想使用上表中相关的字符时,必

转义字符

n

须用对应的转义字符来代替。

代表的字符换行符反斜杠单引号双引号问号

4.布尔型字面值常量

tnue和false是两个布尔型字面值常量。注意,当把整型转换为布尔型时,非零值会转换成tnue,零会转换成false。

5.字符串字面值常量

类似于“abc”“123a”等连续多个字符常量称为字符串字面值常量。字符串字面值常量通常用来给字符串变量赋值(字符串类型会在2.5节讲解),赋值时要用两个双引号("")标

6

注起来。

1.4运算符

运算符就是用来计算的符号。C+定义了一元运算符、二元运算符和三元运算符。作用

于一个运算对象的运算符是一元运算符,如取地址符(&)和解引用符(*):作用于两个运算对象的运算符是二元运算符,如相等运算符(一)和乘法运算符(*)。除此之外,还有一个作用于三个运算对象的三元运算符(?:)。

些符号既能作为一元运算符也能作为二元运算符。以符号*为例,作为一元运算符时执行解引用操作,作为二元运算符时执行乘法操作。一个符号到底是一元运算符还是二元运算符由具体情境决定。对于这类符号来说,它的两种用法互不相干,完全可以当成两个不同的符号。

关于取地址符(&)和解引用符(*)以及函数调用运算符会在之后的章节中讲解。本节主要讲解常用的算术运算符、递增和递减运算符、逻辑运算符、关系运算符、条件运算符、位运算符等。

1.4.1算术运算符

表1-3算术运算符

运算符

功能

用法举例

举例解释

表13中列举了几种常用的算术运算符,并举

一元正号

a=+3

a的值为3

例说明了它们的用法。一元运算符正号和负号的优

一元负号

a=-3

a的值为-3

先级最高,接下来是乘法和除法,优先级最低的是

加法

a=1+2

a的值为3

加法和减法。

减法

a=1-2

a的值为-1

需要注意的是,使用除法运算符()时,如

乘法

a-2*3

a的值为6

果被除数和除数都是整型类型,结果并不会是一个

除法

a-5/2

a的值为2

浮点型的小数,而会直接舍去小数部分,得到一个

%

整数,即对运算结果进行向下取整。

求余

a-5%2

a的值为1

1.4.2递增和递减运算符

递增运算符(++)和递减运算符(--)为对象的加1和减1操作提供了一种简洁的书写

···试读结束···

阅读剩余
THE END