预备篇 编程技术预备知识 二进制、十进制、十六进制
十进制思想 到n进制思想 的转化
二进制 、十进制 、十六进制 的书面表示, 比如:15, 二进制: 0b00001111, 十进制: 15, 十六进制: 0x0F
进制之间的转化
流程图
顺序结构
条件分支结构
循环结构
常见术语
编辑器 : 用来编写代码的工具,比如vim
vscode
nodepad
nodepad++
sublime text
atom
等
编译器 : 用来将源码装换为库文件和可执行二进制文件的命+令行工具套件, 比如 gcc
, g++
, cl.exe
, clang
, clang++
项目构建: 管理项目源码与编译生成脚本的工具软件, 比如 make
, cmake, scons
, gradle
, maven
IDE : 集成了编辑器
、编译器调用自动化
和项目构建自动化
的一种功能更强大的软件, 比如QtCreator
, XCode
, Visual Studio
, Clion
, Code Blocks
, Eclipse
C++开发环境安装 Windows平台环境安装
winddows系统下环境安装(Visual Studio)
WSL(Windows Subsystem Linux)下环境安装
Ubuntu(linux平台)环境安装 1 sudo aptitude install build-essential git cmake qtcreator
macOS平台环境安装(XCode安装) 打开AppStore
, 搜索 Xcode
, 找到右侧的Xcode
点击 获取
, 待 获取
变为 安装
后, 点击安装
IDE的选择 Windows:
Visual Studio Community/Professional/Ultimate
(Windows平台开发必备)
Visual Studio Code
(跨平台可扩展的编辑器, 可以配置成像IDE一样功能强大)
QtCreator
Clion
Linux:
Visual Studio Code
QtCreator
Clion
Code Blocks
macOS:
XCode
Clion
Visual Studio Code
QtCreator
入门篇 语法 语句
使用一部分参数经过特定的计算规则得到特定结果(可以没有结果值)的一句话, 通每行一条语句, 英文分号(;)结尾(仅当前C/C++语言, 部分其他编程语言语句法则不一样,有的无需分号结尾, 有的可有可无)
示例:
1 和 等于 参数1 + 参数2 +...+ 参数n
C/C++代码
1 2 1 + 2 + 3 ;10 * 5 / 2 + 6 / 3 ;
变量
当我们需要临时保存记录下某个语句的结果时, 变量就应运而生了, 比如
1 2 int sum = 1 + 2 + 3 ;int result = 10 * 5 / 2 + 6 / 3 ;
为什么要用变量呢?比如, 你有100
元人民币, 早上买早餐用掉10
元,中午买午餐又花掉了20
元, 晚上没忍住多吃了点, 花了50
, 那么请问,你早上、中午、晚上分别剩下多少钱呢?
不用变量时:
1 2 3 4 5 6 7 100 - 10 ; 100 - 10 - 20 ; 100 - 10 - 20 - 50 ;
现在我们使用变量:
1 2 3 4 5 6 7 int total = 100 ; total = total - 10 ; total = total - 20 ; total = total - 50 ;
对比发现:
当没有使用变量时, 如果是在同一个概念上的数值有变动, 每次变动都要把完整的变动过程写一遍,变动的次数越多, 书写的过程越繁琐, 如此下去,简直灭绝人性
使用了变量以后, 我们不仅可以把变量当成我们的原始数值一样进行计算, 还能把计算的结果进行保存留到后续的变动,而且不管多少次的变动, 计算表达式的语句也能一直保持很简洁
变量与变量有时候是会有区别的, 比如你18岁, 身高1.60米, 名字叫二愣子, 这种变量与变量之间的区别叫 变量类型
,18
岁: 这是个整数, 1.60
米: 这是实数,二愣子
:这是文本也叫字符串
变量有哪些类型呢? 基本的变量类型有以下几种:
整形
: 对应整数
浮点型
: 对应实数
布尔型
: 表示具有对立属性的状态, 一般可以表示为真
/假
, 0 < 1 真, 1 == 2 假
字符型
: 用来表示显示在屏幕上给我们看的文本
变量类型的具体C/C++语言中的类型有哪些呢?
整形
: (unsigned ) char/short/int/long/long long
浮点型
: float, double
布尔型
: bool
字符型
: char , wchar
有啥区别? 每种大类型里面的具体类型之间, 一般都只有存储空间和符号性的区别, 比如
1 2 3 4 5 char (1 字节, -2 ^7 ~2 ^7 -1 ), unsigned char (1 字节, 0 ~2 ^8 -1 ) short(2字节,-2^15~2^15-1), unsigned char(2字节, 0~2^16-1) int (4 字节, -2 ^31 ~ 2 ^31 -1 ), unsigned int (4 字节, 0 ~2 ^32 -1 ) long/ unsigned long(平台相关,一般不小于4字节,不大于 long long 的字节数) long long (8字节, -2^63~2^63-1), unsigned long long(8字节, 0~2^64-1)
1 bool (1 字节), 只有两个值, true : 真,false : 假
字符型
(使用单引号引用起来的单个内容):1 2 char (1 字节): 'A' , 'B' , '0' ...wchar_t(2字节): L'A', L'B', L'C'...
基本类型之间可否转换?
1 2 3 0 -> 0.0f , 0.0 1 -> 1.0f , 0.0 n -> n.0f , n.0
浮点数
-> 整数
, 直接取整数部分, 小数部分会直接丢弃, 因此可能会有精度损失, 比如1.5
转化为int
以后值为1
, 并且不会有像我们数学意义上的四舍五入发生
操作符
操作符分为 一元操作符、二元操作符、三元操作符, 所谓的元, 就是参数,一元表示只有一个参数…以此类推
一元操作符: -
(取负, a = 1, -a = -1) ~
(按位取反, ~0b00000000 = 0b11111111) !
(逻辑取反, !true = false, !false = true)
二元操作符: +
、-
、*
、/
、<
、>
、<=
、>=
、==
(相等)、!=
(不等) 、<<
(左移或者流输出)、>>
(右移或者流输入) 、+=
(自增)、-=
(自减)、*=
、/=
、&
(位与)、|
(位或)、^
(异或)、&&
(逻辑与)、||
(逻辑或) 、&=
、|=
、<<=
、>>=
三元操作符: ?:
(用法, 条件 ? 值1: 值2, 表达含义: 条件成立时, 返回值1, 不成立则返回值2)
函数
如果从某些已有的值,计算得到某个结果值, 需要执行的语句超过1条
时, 我们要怎么做呢?比如计算一个两个实数和的小数部分:
如果直接把每一组都计算一遍
1 2 3 4 5 6 7 8 9 double sum = 1.5 + 2.1 ; int part = sum; double result1 = sum - part; double sum = 9.5 + 0.7 ; int part = sum; double resultn = sum - part;
改为使用函数
1 2 3 4 5 6 7 8 9 10 double calc (double a, double b) { double sum = a + b; int part = sum; return sum - part; } double result1 = calc(1.5 , 2.1 ); double resultn = calc(9.5 , 0.2 );
其中的calc
便叫做函数, 所谓函数, 其实就是特定流程的多条语句的包装,使用函数可以避免编写大量重读的代码
函数的声明与定义
1 返回类型 函数名(参数1 类型 参数1 名称, ..., 参数n类型 参数名称);
比如上面的calc
函数:
1 double calc (double a, double b) ;
返回类型是double, 有2个参数, 第一个参数名叫 a, double 类型, 第二个参数名叫b, 也是double类型
1 2 3 4 返回值 函数名(参数1 类型 参数1 名称, ... , 参数n类型 参数n名称) { 具体实现细节,... }
比如上面的 calc
函数的定义:
1 2 3 4 5 6 double calc (double a, double b) { double sum = a + b; int part = sum; return sum - part; }
注意: 同一个函数, 只能定义一次, 但是可以在多处声明
只有 返回值、函数名、参数的类型、个数、位置完全一致的情况下,才能被称为同一个函数
1 2 3 4 5 6 7 8 9 int add (int a, int b) ;int add (int c, int d) ;bool check (double a, int b) ;double check (int a, bool b, char c) ;
在C中, 同一个函数名只能用在一个函数中,不支持使用同一个函数名字定义多个函数, 但是C++中却可以同一个函数名用于多个函数, 叫做函数重载
, 比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int max (int a, int b) { return a < b ? b: a; } double max (double a, double b) { return a < b ? b : a; } max(1 , 2 ); max(2.0 , 3.0 );
类型转换 原生数组 指针 枚举、 结构体、联合体 常量 提高篇 进阶篇 高级篇