目录
介绍
C++ 是一种高级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。
C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件
Visual Studio 2019安装与使用
写在源文件中的源代码是人类可读的源。它需要"编译",转为机器语言,这样 CPU 可以按给定指令执行程序,C++ 编译器用于把源代码编译成最终的可执行程序。大多数的 C++ 编译器并不在乎源文件的扩展名,但是如果您未指定扩展名,则默认使用 .cpp。这里使用Visual Studio 2019进行编译
下载:Visual Studio 2019 ,选择社区版
- 工作负载这里我们可以勾选"使用C++的桌面开发"和"Visual Studio 扩展开发"以及python开发,点击安装
等待下载安装
书写第一个程序
选择控制台应用
运行程序
C++基础
1、第一个c++程序
c++基本格式
一个最简单的c++程序如下,固定的格式。main是一个程序的入口,每个程序必须有这么一个函数,有且仅有一个
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;
}
注释
- // 单行注释
- /*hello*/ 多行注释
注意的点:
- 对大小写不敏感
- 对缩进不敏感
- 单行代码结束以";"分号结尾
- 必须要有主函数main
变量
- 作用:给一段内存空间起名,方便操作这段内存
- 语法:数据类型 变量名 = 初始值;
c++中所有的数据都会放到内存中,变量存在的意义就是方便我们管理内存空间。地址编号为十六进制的数据
#include <iostream>
using namespace std;
int main()
{
int a = 10;
cout << "a的值为:" << a << endl; //输出"a的值为:10"
}
常量
作用:用于记录程序中不可更改的数据
C++定义常量两种方式
- #define 宏常量:#define 常量名 常量值
通常在文件上方定义,表示—个常量
- const修饰的变量 const 数据类型 常量名 = 常量值
通常在变量定义前加关键字const,修饰该变量为常量,不可修改
#include <iostream>
using namespace std;
//1. #define 宏常量
#define Day 7
int main()
{
//Day = 14; 报错,因为常量不可更改
cout << "Day的值为:" << Day << endl;
//2. const修饰的变量
const int month = 12;
//month = 14; const修饰的变量也称为常量,不能修改
}
关键字
作用:关键字是c++中预先保留的单词(标识符)。在定义常量或者变量时,不要用关键字
标识符命名规则
作用:c++规定给标识符(常量、变量)命名时,有一套自己的规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读
2、数据类型
C++规定在创建一个变是或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存
数据类型存在的意义:给变量分配大小合适的内存空间,不造成资源浪费
整型
整型变量表示的是整数类型的数据
C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:
#include <iostream>
using namespace std;
int main()
{
//短整型(-32768 ~ 32767)
short num1 = 10;
int num2 = 10;
long num3 = 10;
long long num4 = 10;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
cout << "num3 = " << num3 << endl;
cout << "num4 = " << num4 << endl;
}
上面有个取值范围,那是什么意思了?如short的取值范围为(-2^15 ~ 2^15 -1),即(-32768 ~ 32767)。
在计算机当中数据都是以0,1二进制形式存储的,而short占的是2个字节,一个字节8位,也就是16位,所以一个short变量在计算机当中其实可以用16位的二进制来表示
//正整数 //比如1这个变量,用二进制可以表示为 0000 0000 | 0000 0001 (第一位为符号位,在二进制码中,采用最高位是符号位的方法来区分正负数,正数的符号位为0、负数的符号位为1。)
以上为正数1的原码(每8位为一个字节所以正好占2个字节) 。注:正整数用原码表示,负整数用补码表示,正整数的原码和补码相同。
所以用16位二进制数可表示的最大正整数为
0111 1111 | 1111 1111 | //即 2^14 + 2^13 + ... + 2^0 = 2^15 - 1 = 32767
所以当值超过了数据类型的取值范围的最大值则会异常,如下num2
sizeof关键字
利用sizeof关键字可以统计数据类型所占内存空间大小(字节)
语法:sizeof(数据类型 / 变量)
#include <iostream> using namespace std; int main() { short num1 = 10; cout << "short 类型所占的内存空间为: " << sizeof(short) << endl; }
实型(浮点型)
作用:用于表示小数
浮点型变量分为两种:
- 单精度float
- 双精度double
两者的区别在于表示的有效数字范围不同。如3.14的有效数字范围为3位。在c++中输出小数默认显示的有效数字位数为6位
#include <iostream> using namespace std; int main() { //最好在float类型值后面加f,因为默认情况下都认为小数是双精度 float f1 = 3.14159261f; cout << "f1: " << f1 << endl; double d2 = 3.14159261; cout << "f2: " << d2 << endl; }
科学计数法
float f1 = 3e2; //3 * 10 ^2
字符型
作用:字符型变量用于显示单个字符
语法:char ch = 'a';
- 在显示字符型变量时,用单引号将字符括起来,不要用双引号
- 单引号内只能是一个字符,不可以是字符串
- c和c++中字符型变量只占用1个字节
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ascii编码放入到存储单元。所以a存储在计算机中就是将a对应的ascii值97转换为二进制然后进行存储,即a对应的二进制01100001进行存储
#include <iostream>
using namespace std;
int main()
{
char ch = 'a';
cout << ch << endl;
cout << sizeof(char) << endl;
//char ch2 = "b"; //字符型变量要用单引号
//char ch2 = 'aff'; //字符型变量,单引号内只能有一个字符
//字符型变量对应的ascii编码
cout << (int)ch << endl;
}
转义字符
作用:用于表示一些不能显示出来的ascii字符,常用的转义字符有:\n \\ \t
#include <iostream> using namespace std; int main() { cout << "hello world" << endl; //endl代表换行的意思 cout << "hello world \n"; // /n换行 cout << "\\" << endl; //输出反斜杠 cout << "aa\t\tbb" << endl; //水平制表符,作用:整齐的输出数据 cout << "aaaa\t\tbb" << endl; cout << "aaaaa\t\tbb" << endl; }
字符串型
作用:用于表示一串字符
两种风格在c++中都可以使用
- c风格字符串 char 变量名[] = "字符串值"
- c++风格:string 变量名 = "字符串值"
ps:c++风格的字符串需要在文件后包含一个头文件 #include <string>,但是在vs2019中不需要包含
布尔类型
作用:代表真或假
- bool只有两个值:true(本质是1),false(本质是0)
- bool类型占1个字节大小
bool flag = true;
bool flag = false;
数据的输入
作用:用于从键盘获取数据
关键字:cin
#include <iostream> using namespace std; int main() { int a = 0; cout << "请给整形变量a赋值:"; cin >> a; // >>为右运算符 cout << "a的值为:" << a << endl; float f1 = 3.14f; cout << "请给f1重新赋值:"; cin >> f1; cout << "f1的值为:" << f1 << endl; }
3、运算符
运算符用于执行代码的运算
算术运算符:+ - * / %(取余/模 ) ++ --
#include <iostream>
using namespace std;
int main()
{
int a1 = 10;
int b1 = 3;
cout << a1 + b1 << endl;
cout << a1 - b1 << endl;
cout << a1 * b1 << endl;
cout << a1 / b1 << endl; //两个整数相除依然是整数,将小数部分去除
cout << "........." << endl;
//两个小数可以相除,结果也可以是小数。 除数不能为0
double d1 = 0.5;
double d2 = 0.6;
cout << d1 / d2 << endl;
}
递增递减运算符—> 运算符
- 变量++ (后置递增)先运算,再自加1
- ++变量 (前置递增)先自加1,再运算
赋值运算符
用于将表达式的值赋值给变量
比较运算符
用于表达式的比较,返回一个真或假的值
逻辑运算符
用于根据表达式的值返回真值或假值
#include <iostream> using namespace std; int main() { int a = 10; int b = 0; cout << (!a) << endl; //0 cout << (a && b) << endl; //0 cout << (a || b) << endl; //1 }
4、程序流程结构
c/c++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
选择结构
if语句
if语句的三种形式:
- 单行格式if语句 if(条件){条件满足执行的语句}
- 多行格式if语句 if(条件){条件满足执行的语句}else(条件不满足执行的语句)
- 多条件的if语句 if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句} ... else{都不满足执行的语句}
if(条件1)
{
...;
}
else if(条件2)
{
...;
}
else
{
...;
}
三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式1 ? 表达式2 : 表达式3
- 如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
- 如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
#include <iostream> using namespace std; int main() { int a = 2; int b = 4; int c = 6; int result = a > b ? a : b; //如果a大于b,则返回a的值,否则返回b的值 cout << result << endl; //4 }
Switch
当要针对变量设置一系列的特定值的选项时,就可以使用switch语句。switch表达式会有一个返回值,将返回值依次与value值进行匹配,匹配到哪个就执行对应的case中的语句,然后break退出整个switch语句,如果都没有匹配上则执行defalut中的语句
switch(表达式){ //switch是转换 开关的意思。case选项的意思 case value1: 执行语句1; break; case value2: 执行语句2; break; ... default: 执行最后的语句; }
具体可看:switch
循环结构
for
for(计数器的初始化;执行循环的条件;每一次循环对计数器的操作) { 每一次循环执行的代码; }
while
先判断条件,再执行循环体中的内容
while (循环条件) { 循环体; }
#include <iostream> using namespace std; int main() { int a = 10; while (a < 20) { cout << "a 的值:" << a << endl; a++; } }
do while
do{ 循环体 } while (判断条件);
while与do while的区别是:
- while先判断再执行循环体
- do while先执循环体行再判断,do while至少会执行一次循环体
跳转语句
- break:直接跳出整个循环
- contine:只是跳出当次循环,然后返回开头继续接着下次循环
- goto:可以无条件跳转语句。ps: 尽量少使用
语法:goto 标记
如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
#include <iostream>
using namespace std;
int main()
{
//goto语句
cout << 1111 << endl;
cout << 2222 << endl;
goto flag;
cout << 3333 << endl;
cout << 4444 << endl;
flag:
cout << 5555 << endl;
}