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.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++5.11安装使用简介

目前国内学校教学、信息学竞赛主要使用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;

☆语句块

语句块是一组使用大括号括起来的按逻辑连接的语句。例如:

{

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 <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用来在程序执行期间给变量输入数据,一般格式为:

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 <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 函数。

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

C++基础知识与开发环境【修订版】相关推荐

  1. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  2. 知识点总结Day01——JAVA基础知识、开发环境搭建、入门程序、常量、变量及数据类型

    目录 第一章 前言 一.Java概述 1.什么是Java 2.什么是编程语言 3.Java发展历史 二.计算机基础知识 1.二进制 2.字节 3.常见的DOS命令 第二章 Java开发环境搭建 一.搭 ...

  3. Slick2D游戏引擎基础知识和开发环境搭建

    目录 介绍 开发环境搭建 文件准备 添加库文件 设置 VM Options HelloWorld示例 示例程序说明 介绍 Slick 2D 是一个轻量级.跨平台的 Java 2D 游戏引擎. 我一直打 ...

  4. 1000行代码入门python-Python基础知识和工作环境

    Python基础知识和工作环境 第一堂课的教学目标是: [1]掌握Python的基础知识,比如,谁是Python的创始人,它有哪些特点: [2]Python的开发工具Anaconda的操作界面是怎样的 ...

  5. 【干货】房地产基础知识及开发流程.pdf(附下载链接)

    大家好,我是文文(微信:sscbg2020),今天给大家分享一份房地产行业的干货资料<房地产基础知识及开发流程.pdf>.关注房地产的伙伴别错过啦! 另外,我们也搭建了行业交流社群,涵盖房 ...

  6. stm32f4 hal 4位数码管_STM32裸机开发基础篇01开发环境搭建(HAL库)

    前言 众所周知,在32位单片机中,STM32占有重要市场份额,其社区活动频繁,网上相关资料也比较多,无论是学习入门,还是工作使用,都无疑是极好的选择,本节开始,我们将学习如何使用STM32,首先,我们 ...

  7. 软件测试整理一:测试基础知识以及开发、测试模型、按照开发阶段进行测试

    文章目录 一.基础概念 1.什么是软件测试 2.软件测试的目的 3.软件测试的原则 4.软件测试的分类 4.1 按照开发阶段分类 4.2 按照软件特性分类 4.3 按照测试技术分类 4.4 按照测试运 ...

  8. asp.net js函数弹出登录窗口_JS基础 | Cocos Creator 开发环境搭建

    编程并不只是简单地写代码,而是要将编写的代码运行在指定平台环境上,在此之前我们还需要搭建生产代码的环境. 一. 软件准备 Chrome:浏览器,用于预览.调试我们的游戏 VSCode:代码编辑器,用于 ...

  9. [Vue.js 1] 入门基础知识与开发

    最近接触的几个项目框架全部用到了Vue.js技术,没办法只能对vuejs进行深入学习,不过可喜的是Vue.js学习路线非常快,上手也是非常快的,所以对于前端开发也是主流的开发框架了.不过其中的js部分 ...

最新文章

  1. Pandas Cheat Sheet
  2. python小程序-10个Python练手小程序,学习python的很好的资料
  3. gz键盘增强小工具_这些不起眼的Mac小工具,能让你的Macbook效率倍增!
  4. ubuntu16.04 svn搭建多项目搭建多个版本仓
  5. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)
  6. 10 分钟使用 Spring Boot + Vue + Antd + US3 搭建自己的图床
  7. 常用Function Module
  8. 通过RocketMQ的java客户端api进行测试
  9. linux 文件服务,linux系统文件服务
  10. 计算机基础及wps office应用_自考本科计算机应用基础考试大纲
  11. Unix环境高级编程学习笔记(五)
  12. Unity3D调用摄像头显示当前拍摄画面
  13. linux curl证书错误,关于curl:使用Wget忽略SSL证书错误
  14. jquery toggle_响应式WordPress主题教程–第6部分– jQuery Toggle菜单
  15. 神奇的H5视频画中画功能
  16. creator shader, 河面水流的效果 噪声图的花式用法
  17. MTK65XX平台充电调试总结 (转载)
  18. getText()和getText().toString()
  19. 按照奇原则配置汉明码_舞台灯光设计的原则和工艺要求
  20. 小米手机、华为手机、一加手机、小米手环NFC刷门禁卡教程!

热门文章

  1. 吃货联盟订餐系统(对象+集合)
  2. 个人....LATEX常用数学符号
  3. RT-Thread 流水笔记一 startup ,schedule,thread
  4. Pragmatic eBook 介绍 :Test-Driving JavaScript Applications
  5. codeforces 规则
  6. 浅谈:为什么vue和react都选择了Hooks?
  7. 插件化中Activity的加载
  8. 苹果商店ASA广告投放之TTR和CR
  9. 【Git】使用手册02--在本地玩转代码
  10. c语言中 间接成员选择运算符,c语言中-(间接成员运算符)的含义