admin管理员组

文章数量:1571949

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等。

关于程序设计中的基本概念可参考:程序设计中的基本概念_软件开发技术爱好者的博客-CSDN博客_软件程序设计

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,支持过程化编程、面向对象编程和泛型编程。

常用C++学习环境简介

Dev-C++ 是Windows环境下的轻量级C/C++ 集成开发环境,自由开源。Dev-C++ download | SourceForge

上次更新时间为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/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/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++5.11安装使用简介

目前国内学校教学、信息学竞赛主要使用Dev-C++,故对Dev C++5.11安装使用简要介绍。(或用Embarcadero Dev-C++,两者界面和使用基本相同)

Dev-C++开发环境下载官网:

Dev-C++ download | SourceForge

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

语言先默认选择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 <iostream>

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 <iostream>
using namespace std;
 
int main( )
{
   char str[] = "Hello C++";
   cout << "Value of str is : " << str << endl;
}
说明
endl 是“end of line”的缩写,用于在行末添加一个换行符。

cin与流提取运算符 >> 结合使用,例
#include <iostream>
using namespace std;
 
int main( )
{
   char name[50];
   cout << "请输入您的名称: ";
   cin >> name;
   cout << "您的名称是: " << name << endl;

}

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++ 头文件<iomanip>是I/O流控制头文件,就像C里面的格式化输出一样。<iomanip>是C++标准库中的头文件,用于控制输入输出流的格式化。<iomanip>头文件常用于控制标准输出流的格式,例如设置输出浮点数时的位数、调整对齐方式、设置填充字符等等。可参见https://blog.csdn/cnds123/article/details/132045856 一文

输出格式测试例:

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

#include<iostream>
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 函数。

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

本文标签: 修订版基础知识环境