C++基础知识与开发环境
C++基础知识与开发环境
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等。
关于程序设计中的基本概念可参考:https://blog.csdn.net/cnds123/article/details/108810035
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
开发环境简介
Dev-C++ 是Windows环境下的轻量级C/C++ 集成开发环境,自由开源。https://sourceforge.net/projects/orwelldevcpp/
上次更新时间为2015年4月到Dev C++5.11。已停止维护了。现在出现了一些(目前依然在稳定运行的)分支版本!
(1)embarcadero Dev cpp,网址:https://github.com/Embarcadero/Dev-Cpp
国外开发者 FMXExpress 等人在 Embarcadero 公司支持下继续开发 Embarcadero Dev-C++。Embarcadero Dev-C++是原版Dev-C++的继承和发展。
(2)小熊猫Dev-C++ 网址 https://royqh.net/devcpp/ 或 斑竹软件Dev-C++ https://devcpp.gitee.io/ 小熊猫 Dev-C++ 的开发者royqh1979 斑竹软件Dev-C++ 的开发者 Anbang24,两位都是是教师。为了教学,他们接手了 Dev-C++ 的继续更新和开发,做了很多修复和优化工作。这些优化对于初学者很友好,非常适合中国学生练习使用。
除此之外,有人推荐使用
1、 Code::Blocks
简单,体积小,专注于编程,win+linux双环境支持,一个开放源码的全功能的跨平台C/C++集成开发环境。
Download binary release(下载二进制发行版)网址 http://www.codeblocks.org/downloads/26
Windows 用户请下载 .exe 安装文件时,请注意要下载名字里有 mingw 的那个(比如 codeblocks-20.03mingw-setup.exe),因为如果没有 mingw 这几个字母的版本不包含编译器,就会很麻烦。
2、VSCode+gcc+cmake
可以管理,写一些大型的项目,但是需要做一些配置,可能要花点时间搞懂。
参见 VScode配置C/C++编程总结(GCC+Clang+CMake)https://blog.csdn.net/weixin_44049923/article/details/103619882
目前国内学校教学、信息学竞赛主要使用Dev-C++,故对Dev C++5.11安装使用简要介绍。
Dev-C++开发环境下载官网:
https://sourceforge.net/projects/orwelldevcpp/
下载完成后,就像安装其它软件一样,点击安装包,稍等一会儿出现如下图,
语言先默认选择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;
☆语句块
语句块是一组使用大括号括起来的按逻辑连接的语句。例如:
{
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++ 中的关键字(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<<”最大数是:”<<max(i, j)<<’\n’; //输出提示信息和结果
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++ 基本的输入输出
在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”的缩写,用于在行末添加一个换行符。
cin与流提取运算符 >> 结合使用,例
#include
using namespace std;
int main( )
{
char name[50];
cout << “请输入您的名称: “;
cin >> name;
cout << “您的名称是: “ << name << endl;
}
cin用来在程序执行期间给变量输入数据,一般格式为:
cin>> <变量名1>[>> <变量名2> >>…>> <变量名n>];
其中:>> 称为“提取运算符”,程序执行到这条语句便暂停下来,等待从键盘上输入相应数据,直到所列出的所有变量均获得值后,程序方继续执行。
cout实现将数据输出到显示器的操作,一般格式为:
cout<< <表达式1> [<< <表达式2> <<…<< <表达式n>];
其中:<< 称为“插入运算符”,将紧跟其后的表达式的值输出到显示器上当前光标位置。
cin和cout的书写形式很灵活,如果有多个变量,即使类型不相同,也可以写在同一个语句中或者分成若干个语句输入或输出。
cin可以同时为多个变量输入数据,在各输入数据之间用一个或多个空白(空格,回车,Tab)作为间隔符,按Enter键结束。
如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。
C++ 头文件iomanip是I/O流控制头文件,就像C里面的格式化输出一样。
控 制 符 | 作 用 |
dec | 设置整数为十进制 |
hex | 设置整数为十六进制 |
oct | 设置整数为八进制 |
setbase(n) | 设置整数为n进制(n=8,10,16) |
setfill(n) | 设置字符填充,c可以是字符常或字符变量 |
setprecision(n) | 设置浮点数的有效数字为n位 |
setw(n) | 设置字段宽度为n位 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法表示 |
setiosflags(ios::left) | 输出左对齐 |
setiosflags(ios::right) | 输出右对齐 |
setiosflags(ios::skipws) | 忽略前导空格 |
setiosflags(ios::uppercase) | 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。 |
setiosflags(ios::showpos) | 输出正数时显示“+”号 |
setiosflags(ios::showpoint) | 强制显示小数点 |
resetiosflags() | 终止已经设置的输出格式状态,在括号中应指定内容 |
注意、有效位数默认是6位,即setprecision(6),即小数点前面和小数点后面加起来的位数为6个有效数字(注意会四舍五入)。
另外,科学计数法输出E与十六进制输出默认是以小写的,要换成大写需添加uppercase
而setw(n)设置宽度,若是实际宽度大于被设置的,则setw函数此时失效。
输出格式测试例:
#include
#include
using namespace std ;
int main()
{
double PI=3.141592654;
cout<<PI<<endl;
cout<<setprecision(2)<<PI<<endl;
cout<<fixed<<setprecision(2)<<PI<<endl;
cout<<setfill('\*')<<setw(20)<<setprecision(10)<<PI<<endl;
cout<<setfill('\*')<<setw(20)<<setprecision(10)<<left<<PI<<endl;
cout<<scientific<<setprecision(10)<<PI<<endl;
cout<<scientific<<uppercase<<setprecision(10)<<PI<<endl;
return 0 ;
}
运行之,参见下图:
使用控制符hex、dec和oct的例
#include
using namespace std;
int main()
{
int x =64;
cout<<dec<<x<<” “<<hex<<x<<” “<<oct<<x<<endl;
return 0;
}
运行结果如下:
一行可以书写多个语句
语句之间用分号隔开即可,例如:
x = y;
y = y+1;
也可以写为:
x = y; y = y+1;
从可读方面来看,不建议这么做。
C++多行语句
一行较长的语句可以分行写,规则如下:
- 预处理一行写不下:
把一个预处理(如define定义的宏)写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成。 - 字符串常量跨行
在行尾使用“\”,然后回车换行,就可以将字符串常量跨行书写,注意下一行要顶格写;对于长的字符串要多行书写的方法,还可将它分行写成多个字符串, - 运算符、关键字的换行,可以在其之后直接换行
例、
#include
using namespace std;
#define PI (2.141 +\
1) //宏跨行,需要用续行符
int main()
{
int x =64;
cout<<PI<<endl;
//字符常量跨行,使用续行符\,注意下一行要顶格写
cout<<”Hello, W\
orld!”<<endl;
// 对于长的字符串要多行书写的方法,还可将它分行写成多个字符串
cout<<”这是C++程序”
“设计示例!”<<endl;
//运算符、关键字的换行,见下面的3行
float
y =
10*2;
cout<<y<<endl;
return 0;
}
运行之,参见下图:
C++ 程序书写规范:
每个说明和每条语句都必须以分号“;”结尾(预处理命令,函数头和花括号“ } ”之后除外)。
标识符,关键字之间必须至少加一个空格表示间隔,若已有明显的间隔符,也可不再加空格来间隔。
习惯用小写字母,区分大小写。
注释:单行注释用// ,多行注释用 /* */。
常用锯齿(缩进)形书写格式。
所有标点符号必须在英文状态下输入。
C++ 源程序结构:
一个 C++ 源程序由一个或多个源文件组成。
每个源文件可由一个或多个函数组成。
一个源程序有且只能有一个 main 函数。
源程序中可以有预处理命令,通常应放在源文件或源程序的最前面。
附、
CodeBlocks是一个免费的开放源码的跨平台C/C++集成开发环境。CodeBlocks是开放源码软件。体积较小运行速度快。
CodeBlocks官网
http://www.codeblocks.org/
还没有评论,来说两句吧...