C++基础知识与开发环境

深藏阁楼爱情的钟 2022-12-11 02:24 332阅读 0赞

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/

下载完成后,就像安装其它软件一样,点击安装包,稍等一会儿出现如下图,

20200928111749163.png

语言先默认选择English,不要改变(安装完成后会选择中文简体的选项设置)。点ok!

接下来的安装界面点“I agree”按钮,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70

之后,点击“next”按钮,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 1

可以改变默认安装位置,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 2

单击“Install”,请等待一会,出现下图界面:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 3

单击“Finish”按钮,完成Dev-C++安装。

此时为英文界面,如果你想改为中文界面,点击菜单栏中“Tools”的”Environment Options”命令项,参见下图操作:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 4

最后单击“OK”按钮确认即可!

文本为防止引发翻译可能造成的歧义,采用英文界面。

Dev C++的主界面

Dev C++的主界面主要由菜单栏、工具栏、项目管理器(也称为项目/类浏览器)、源码编辑区、报告窗口和状态栏组成,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 5

下面介绍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()函数*/

  1. if (i>=j) return i;
  2. 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++,输入上例代码,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 6

编译运行,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 7

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;

  1. cout<<PI<<endl;
  2. cout<<setprecision(2)<<PI<<endl;
  3. cout<<fixed<<setprecision(2)<<PI<<endl;
  4. cout<<setfill('\*')<<setw(20)<<setprecision(10)<<PI<<endl;
  5. cout<<setfill('\*')<<setw(20)<<setprecision(10)<<left<<PI<<endl;
  6. cout<<scientific<<setprecision(10)<<PI<<endl;
  7. cout<<scientific<<uppercase<<setprecision(10)<<PI<<endl;
  8. return 0 ;

}

运行之,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 8

使用控制符hex、dec和oct的例

#include
using namespace std;

int main()
{
int x =64;
cout<<dec<<x<<” “<<hex<<x<<” “<<oct<<x<<endl;
return 0;
}

运行结果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 9

一行可以书写多个语句
语句之间用分号隔开即可,例如:
x = y;
y = y+1;
也可以写为:
x = y; y = y+1;
从可读方面来看,不建议这么做。

C++多行语句
一行较长的语句可以分行写,规则如下:

  1. 预处理一行写不下:
    把一个预处理(如define定义的宏)写成多行要用“\”续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成。
  2. 字符串常量跨行
    在行尾使用“\”,然后回车换行,就可以将字符串常量跨行书写,注意下一行要顶格写;对于长的字符串要多行书写的方法,还可将它分行写成多个字符串,
  3. 运算符、关键字的换行,可以在其之后直接换行
    例、

#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;
}

运行之,参见下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NuZHMxMjM_size_16_color_FFFFFF_t_70 10

C++ 程序书写规范:

 每个说明和每条语句都必须以分号“;”结尾(预处理命令,函数头和花括号“ } ”之后除外)。

 标识符,关键字之间必须至少加一个空格表示间隔,若已有明显的间隔符,也可不再加空格来间隔。

 习惯用小写字母,区分大小写。

 注释:单行注释用// ,多行注释用 /* */。

 常用锯齿(缩进)形书写格式。

 所有标点符号必须在英文状态下输入。

C++ 源程序结构:

 一个 C++ 源程序由一个或多个源文件组成。

 每个源文件可由一个或多个函数组成。

 一个源程序有且只能有一个 main 函数。

 源程序中可以有预处理命令,通常应放在源文件或源程序的最前面。

CodeBlocks是一个免费的开放源码的跨平台C/C++集成开发环境。CodeBlocks是开放源码软件。体积较小运行速度快。

CodeBlocks官网

http://www.codeblocks.org/

发表评论

表情:
评论列表 (有 0 条评论,332人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++基础知识

    [原文链接][Link 1] 1 static关键字 加了 static 关键字的全局变量只能在本文件中使用。 static 定义的静态局部变量分配在数据段上,普通的

    相关 C/C++基础知识

    文字目录 数组和指针的区别 指针数组和数组指针 字符数组和字符串常量 引用和指针的区别 C++中class和struct的区别 new

    相关 C++基础知识

    一、命名空间 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。 namespace关键字就是针对这种问题,起隔离的作用。 (1)普通的命名空