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等。
关于程序设计中的基本概念可参考:程序设计中的基本概念_软件开发技术爱好者的博客-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++基础知识与开发环境【修订版】相关推荐
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- 知识点总结Day01——JAVA基础知识、开发环境搭建、入门程序、常量、变量及数据类型
目录 第一章 前言 一.Java概述 1.什么是Java 2.什么是编程语言 3.Java发展历史 二.计算机基础知识 1.二进制 2.字节 3.常见的DOS命令 第二章 Java开发环境搭建 一.搭 ...
- Slick2D游戏引擎基础知识和开发环境搭建
目录 介绍 开发环境搭建 文件准备 添加库文件 设置 VM Options HelloWorld示例 示例程序说明 介绍 Slick 2D 是一个轻量级.跨平台的 Java 2D 游戏引擎. 我一直打 ...
- 1000行代码入门python-Python基础知识和工作环境
Python基础知识和工作环境 第一堂课的教学目标是: [1]掌握Python的基础知识,比如,谁是Python的创始人,它有哪些特点: [2]Python的开发工具Anaconda的操作界面是怎样的 ...
- 【干货】房地产基础知识及开发流程.pdf(附下载链接)
大家好,我是文文(微信:sscbg2020),今天给大家分享一份房地产行业的干货资料<房地产基础知识及开发流程.pdf>.关注房地产的伙伴别错过啦! 另外,我们也搭建了行业交流社群,涵盖房 ...
- stm32f4 hal 4位数码管_STM32裸机开发基础篇01开发环境搭建(HAL库)
前言 众所周知,在32位单片机中,STM32占有重要市场份额,其社区活动频繁,网上相关资料也比较多,无论是学习入门,还是工作使用,都无疑是极好的选择,本节开始,我们将学习如何使用STM32,首先,我们 ...
- 软件测试整理一:测试基础知识以及开发、测试模型、按照开发阶段进行测试
文章目录 一.基础概念 1.什么是软件测试 2.软件测试的目的 3.软件测试的原则 4.软件测试的分类 4.1 按照开发阶段分类 4.2 按照软件特性分类 4.3 按照测试技术分类 4.4 按照测试运 ...
- asp.net js函数弹出登录窗口_JS基础 | Cocos Creator 开发环境搭建
编程并不只是简单地写代码,而是要将编写的代码运行在指定平台环境上,在此之前我们还需要搭建生产代码的环境. 一. 软件准备 Chrome:浏览器,用于预览.调试我们的游戏 VSCode:代码编辑器,用于 ...
- [Vue.js 1] 入门基础知识与开发
最近接触的几个项目框架全部用到了Vue.js技术,没办法只能对vuejs进行深入学习,不过可喜的是Vue.js学习路线非常快,上手也是非常快的,所以对于前端开发也是主流的开发框架了.不过其中的js部分 ...
最新文章
- Pandas Cheat Sheet
- python小程序-10个Python练手小程序,学习python的很好的资料
- gz键盘增强小工具_这些不起眼的Mac小工具,能让你的Macbook效率倍增!
- ubuntu16.04 svn搭建多项目搭建多个版本仓
- 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)
- 10 分钟使用 Spring Boot + Vue + Antd + US3 搭建自己的图床
- 常用Function Module
- 通过RocketMQ的java客户端api进行测试
- linux 文件服务,linux系统文件服务
- 计算机基础及wps office应用_自考本科计算机应用基础考试大纲
- Unix环境高级编程学习笔记(五)
- Unity3D调用摄像头显示当前拍摄画面
- linux curl证书错误,关于curl:使用Wget忽略SSL证书错误
- jquery toggle_响应式WordPress主题教程–第6部分– jQuery Toggle菜单
- 神奇的H5视频画中画功能
- creator shader, 河面水流的效果 噪声图的花式用法
- MTK65XX平台充电调试总结 (转载)
- getText()和getText().toString()
- 按照奇原则配置汉明码_舞台灯光设计的原则和工艺要求
- 小米手机、华为手机、一加手机、小米手环NFC刷门禁卡教程!
热门文章
- 吃货联盟订餐系统(对象+集合)
- 个人....LATEX常用数学符号
- RT-Thread 流水笔记一 startup ,schedule,thread
- Pragmatic eBook 介绍 :Test-Driving JavaScript Applications
- codeforces 规则
- 浅谈:为什么vue和react都选择了Hooks?
- 插件化中Activity的加载
- 苹果商店ASA广告投放之TTR和CR
- 【Git】使用手册02--在本地玩转代码
- c语言中 间接成员选择运算符,c语言中-(间接成员运算符)的含义