C++ 由C语言发展而来,几乎完全兼容C语言;换句话说,你编写的C语言代码几乎可以不加修改地用于 C++。
相对于C语言,C++语言对C语言的功能做了一定的扩充,同时增添了面向对象编程以及泛型编程机制。
随着C++发展,多数人认为,成了一门独立的语言,学C++之前完全没有必要学C,而C是面向过程的程序设计,C++的核心是面向对象的程序设计,C++支持多种程序设计风格,包括面向过程的程序设计,面向对象程序设计,泛型程序设计。C++ 和C这两个语言是平等的两种语言。
信息学竞赛主要分为NOIP(全国青少年信息学奥林匹克联赛/分区联赛)、NOI(全国青少年信息学奥林匹克竞赛)、冬令营、选拔赛、IOI(国际信息学奥林匹克竞赛)这几个级别的比赛,使用的语言就有C++。
程序设计中的基本概念
程序(Program)告诉计算机应如何完成一个任务的一组指令( A set of instructions),用于指定操作、操作数和处理必须遵循的顺序。
电脑程序设计(Computer programming),或称程序设计(programming),是给出解决特定问题程序的过程,程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程一般包括分析、设计、编码、测试、调试等不同阶段。
编程语言(programming language)又叫程序设计语言(program design language, PDL),是用来定义计算机程序的形式语言。泛指一切被标准化用来向计算机发出指令系统。如C/ C++、python等。
关于程序设计中的基本概念可参考:程序设计中的基本概念_软件开发技术爱好者的博客-CSDN博客_软件程序设计
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,支持过程化编程、面向对象编程和泛型编程。
Dev-C++ 是Windows环境下的轻量级C/C++ 集成开发环境,自由开源。Dev-C++ download | SourceForge.net
上次更新时间为2015年4月到Dev C++5.11。已停止维护了。
现在出现了一些(目前依然在稳定运行的)分支版本:
(1)embarcadero Dev cpp,网址:GitHub - Embarcadero/Dev-Cpp: A fast, portable, simple, and free C/C++ IDE
国外开发者 FMXExpress 等人在 Embarcadero 公司支持下继续开发 Embarcadero Dev-C++。Embarcadero Dev-C++是原版Dev-C++的继承和发展。C++程序使用Embarcadero Dev-C++注意事项 https://blog.csdn.net/cnds123/article/details/128715404
(2)小熊猫Dev-C++ 网址 小熊猫C++
或 小龙Dev-C++ 小龙 Dev-C++ 中文主页
(3)、 Code::Blocks
简单,体积小,专注于编程,win+linux双环境支持,一个开放源码的全功能的跨平台C/C++集成开发环境。 CodeBlocks官网
Code::Blocks - Code::Blocks
Windows 用户C++程序使用codeblocks集成开发环境注意事项 https://blog.csdn.net/cnds123/article/details/128728379
(4)、VSCode+gcc+cmake
可以管理,写一些大型的项目,但是需要做一些配置,可能要花点时间搞懂。
参见 VScode配置C/C++编程总结(GCC+Clang+CMake)VScode配置C/C++编程总结(GCC+Clang+CMake)_zhou_haha的博客-CSDN博客_gcc vscode
目前国内学校教学、信息学竞赛主要使用Dev-C++,故对Dev C++5.11安装使用简要介绍。(或用Embarcadero Dev-C++,两者界面和使用基本相同)
Dev-C++开发环境下载官网:
Dev-C++ download | SourceForge.net
下载完成后,就像安装其它软件一样,点击安装包,稍等一会儿出现如下图,
语言先默认选择English,不要改变(安装完成后会选择中文简体的选项设置)。点ok!
接下来的安装界面点“I agree”按钮,参见下图:
之后,点击“next”按钮,参见下图:
可以改变默认安装位置,参见下图:
单击“Install”,请等待一会,出现下图界面:
单击“Finish”按钮,完成Dev-C++安装。
此时为英文界面,如果你想改为中文界面,点击菜单栏中“Tools"的"Environment Options"命令项,参见下图操作:
最后单击“OK”按钮确认即可!
文本为防止引发翻译可能造成的歧义,采用英文界面。
Dev C++的主界面
Dev C++的主界面主要由菜单栏、工具栏、项目管理器(也称为项目/类浏览器)、源码编辑区、报告窗口和状态栏组成,参见下图:
下面介绍C++ 基本语法
☆C++ 中的分号
在 C++ 中,分号是语句结束符。也就是说,每个语句通常以分号结束。它表明一个逻辑实体的结束。
例如,
x = y; // 赋值语句
y = y+1; // 赋值语句
int x = 5; // 变量声明和初始化语句
cout << "Hello, world!"; // 输出语句
x++; // 表达式语句,对变量进行自增操作
for (int i = 0; i < 5; i++) { // 循环语句
cout << i;
}
需要注意的是,有一些特殊情况下不需要分号:
在类定义中的成员函数定义,函数体不需要分号;
在命名空间定义中,命名空间体也不需要分号;
在枚举类型定义中,如果最后一个枚举常量后面跟着花括号,则不需要分号;
某些预处理器的指令(如 #define、#include 等),在其内容后面是不需要分号的。
☆语句块
语句块是一组使用大括号括起来的按逻辑连接的语句。例如:
{
cout << "Hello World"; // 输出 Hello World
return 0;
}
C++ 不以行末作为结束符的标识,因此,您可以在一行上放置多个语句。例如:
x = y;
y = y+1;
等同于
x = y; y = y+1;
☆C++ 中的空格
空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符,这样编译器才能够区分它们。另一方面,在下面的语句中:
total = quantity1 + quantity2;
total 和 =,或者 = 和 quantity1 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
运算符、关键字等符号前后可有任意个空格。与C一样,C++中,空格用来占位,并没有实际的内容,对于编译器,除由" "包围起来的字符串中的空格不会被忽略,其它的空格会被忽略。善用空格、缩进和空行可以让代码结构更加清晰。
☆C++ 标识符
C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C++ 标识符内不允许出现标点字符,比如 @、& 和 %。标识符区分大小写,C++ 是区分大小写的编程语言。标识符不允许使用关键字作为其名称。
【C++17(SO/IEC 14882:2017)允许标识符 由Unicode字符(如中文)组成,但是C++编译器可能对Unicode标识符的支持程度有所差异。建议不要使用_开头】
☆C++ 中的关键字(keyword)又称保留字,如auto、else、new、this等不能作为常量名、变量名或其他标识符名称。C++区分大小写,关键字全部由小写字母组成。
建议使用有一定含义的英文单词或拼音序列作标识符,以提高可读性;另外,尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。
常用关键字及分类见下表:
数据类型说明符与修饰符 |
bool、char、wchar_t、class、const、double、enum、float、int、long、short、signed、struct、union、unsigned、void、volatile |
存储类型说明符 |
auto、extern、inline、register、static |
访问说明符 |
friend、private、protected、public |
其它说明符 |
asm、operator、template、this、typedef、virtual |
语句与标号 |
break、case、catch、continue、default、do、else、for、goto、if、return、switch、throw、try、while |
运算符及逻辑值 |
delete、false、new、sizeof、true |
C++源程序代码以扩展名为.cpp的文件形式保存在磁盘上,经编译、连接生成可执行程序,即扩展名为.exe的文件。
下面通过一个简单的程序例子来分析C++程序的基本构成及主要特点。
例、一个简单的C++程序:输入两个整数,通过调用函数求两个数中的较大值。
#include
using namespace std;
int max(int i, int j){ /*定义max()函数*/
if (i>=j) return i;
else return j;
}
int main(void){ /*定义main()函数*/
cout<<"输入i,j 两数之间用空格分隔:"; //显示提示信息
int i, j; //说明变量
cin>>i>>j; //接受键盘输入的变量值
cout<<"最大数是:"< return 0; } 说明: C++的程序结构由注释、编译预处理指令和程序主体组成。 ☆ 注释:注释内容不参与编译,仅供程序阅读使用,编写程序时可根据需要选取。 注释有两种形式: 以“//”开头,至所在行结尾处(换行符之前)之间的内容。 以“/*”开头和“*/”结尾,两者之间的内容均为注释,可占多行。 ☆ 编译预处理:以符号“#”引出,一条指令也需在一行内写完。 例中的#include命令,称为“文件包含指令”,它使得后面被包含文件成为本程序的一个组成部分,被包含文件中的代码可以直接被使用。编译预处理是C++提供的组织程序的工具,有关内容在后面介绍。 ☆C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace。using namespace std;表示使用标准命名空间。举例说明:假设有两个开发者或两家公司A,B,封装好了两个产品,程序中都包含了一个fun()函数,问题来了,怎么区分哪个是A,哪个是B呢?这是名称空间起了作用,实际上A公司的fun()函数全称:A::fun(),B公司的则为:B::fun(),使用了名称空间,就可以省去fun()的前缀。 ☆ 程序主体:一般由一个或多个函数组成,但只有一个函数是程序入口,即代码执行的起点。如本例由max()和main()两个函数组成,函数main()是所有控制台程序程序的入口。 在传统的Windows操作系统编程中,入口由系统定义为Winmain()函数。 任一函数的描述都是包括在一对 “{”和“}”中的语句序列,每个语句以“;”结束。关于函数的详细知识以后介绍。 输出一个换行符,可以使用\n,这是一个转义序列(转义符);还可以使用预定义常数endl,“end line”的缩写。 在c++中,有一些特定的字符,当他们前面有反斜杠时,就具有特殊的含义,被用来表示换行符或制表符等,下表列出了一些这样的转义序列: 转义序列 含义 \\ \字符 \' '字符 \" "字符 \? ?字符 \a 警报铃声 \b 退格键 \f 换页符 \n 换行符 \r 回车 \t 水平制表符 \v 垂直制表符 \ooo 一到三位的八进制数 \xhh 一到多位的十六进制数 C++中严格区分大小写,但不严格限制程序的书写格式,不过从可读性角度出发,程序书写应采用内缩格式,一般一个语句占一行。 C++中使用的标点符号,如()"" '' + - * /:,等等是半角英文的,字符串中(字符串内部)的除外。新手要特别注意这点。 【全角和半角 ☆全角:是一种电脑字符,占两个字节。 在全角中,字母和数字等与汉字一样占据着等宽的位置。 ☆半角:是指一个字符占一个字节。 半角是ASCII方式的字符。 】 现在演示用Dev-C++编译运行上面的例子 打开Dev-C++,输入上例代码,参见下图: 编译运行,参见下图: C++ 基本的输入输出 例、 cin与流提取运算符 >> 结合使用,例 } cin与cout解释 cin用来在程序执行期间给变量输入数据,一般格式为: cin>> <变量名1>[>> <变量名2> >>…>> <变量名n>]; 其中:>> 称为“提取运算符”,程序执行到这条语句便暂停下来,等待从键盘上输入相应数据,直到所列出的所有变量均获得值后,程序方继续执行。 cout实现将数据输出到显示器的操作,一般格式为: cout<< <表达式1> [<< <表达式2> <<…<< <表达式n>]; 其中:<< 称为“插入运算符”,将紧跟其后的表达式的值输出到显示器上当前光标位置。 cin和cout的书写形式很灵活,如果有多个变量,即使类型不相同,也可以写在同一个语句中或者分成若干个语句输入或输出。 cin可以同时为多个变量输入数据,在各输入数据之间用一个或多个空白(空格,回车,Tab)作为间隔符,按Enter键结束。 下面是cin的示意图: cin>>x1>>x2>>x3; 等价于 cin>>x1; cin>>x2; cin>>x3; 析取运算符>>后只能出现变量名,且应该是系统预定义的简单类型。 cin 能够自动识别数据类型。 int a,b; char c; double d; cin>>a>>b>>c>>d; 可以输入:23 34 A 34.5。 下面是cout的示意图: C++ 头文件 输出格式测试例: #include cout< 运行之,参见下图: 使用控制符hex、dec和oct的例 #include int main() 运行结果如下: 一行可以书写多个语句 C++多行语句 #include return 0; 运行之,参见下图: C++ 程序书写规范: 每个说明和每条语句都必须以分号“;”结尾(预处理命令,函数头和花括号“ } ”之后除外)。 标识符,关键字之间必须至少加一个空格表示间隔,若已有明显的间隔符,也可不再加空格来间隔。 习惯用小写字母,区分大小写。 注释:单行注释用// ,多行注释用 /* */。 常用锯齿(缩进)形书写格式。 所有标点符号必须在英文状态下输入。 C++ 源程序结构: 一个 C++ 源程序由一个或多个源文件组成。 每个源文件可由一个或多个函数组成。 一个源程序有且只能有一个 main 函数。 源程序中可以有预处理命令,通常应放在源文件或源程序的最前面。
在C语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++语言中,C语言的这一套输入输出库我们仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库。
C++ 头文件iostream定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
【C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。】
流插入运算符 <<和流提取运算符 >>
cout、cerr、clog与流插入运算符 << 结合使用。
#include
using namespace std;
int main( )
{
char str[] = "Hello C++";
cout << "Value of str is : " << str << endl;
}
说明
endl 是“end of line”的缩写,用于在行末添加一个换行符。
#include
using namespace std;
int main( )
{
char name[50];
cout << "请输入您的名称: ";
cin >> name;
cout << "您的名称是: " << name << endl;
#include
using namespace std ;
int main()
{
double PI=3.141592654;
}
using namespace std;
{
int x =64;
cout<
}
语句之间用分号隔开即可,例如:
x = y;
y = y+1;
也可以写为:
x = y; y = y+1;
从可读方面来看,不建议这么做。
一行较长的语句可以分行写,规则如下:
1. 预处理一行写不下:
把一个预处理(如define定义的宏)写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成。
2. 字符串常量跨行
在行尾使用“\”,然后回车换行,就可以将字符串常量跨行书写,注意下一行要顶格写;对于长的字符串要多行书写的方法,还可将它分行写成多个字符串,
3. 运算符、关键字的换行,可以在其之后直接换行
例、
using namespace std;
#define PI (2.141 +\
1) //宏跨行,需要用续行符
int main()
{
int x =64;
cout<
cout<<"Hello, W\
orld!"<
cout<<"这是C++程序"
"设计示例!"<
float
y =
10*2;
cout<
}