C++介绍:
C++ 是一种通用编程语言,是 C 语言的扩展和增强版本。它在1979年由 Bjarne Stroustrup 创建,最初被称为 "C with Classes",后来在1983年更名为 C++。C++ 继承了 C 语言的特性,并引入了面向对象编程(OOP)的概念,使得它更具灵活性和功能强大。
以下是 C++ 的一些重要特性和概念:
1.面向对象编程(OOP): C++ 支持面向对象的编程范式,包括封装、继承和多态。这使得程序员可以更好地组织和设计代码,提高代码的可维护性和可重用性。
2.泛型编程: C++ 引入了模板(templates)的概念,允许编写泛型代码,即可以在不同数据类型上通用的代码。这提高了代码的灵活性和可重用性。
3.标准模板库(STL): C++ 提供了一个强大的标准模板库,其中包括许多通用数据结构(如向量、队列、映射等)和算法(如排序、搜索等)。STL 的使用使得编程更加方便和高效。
4.低级内存访问: C++ 具有与 C 语言一样的底层内存访问能力,允许直接操作内存,对于系统级编程和性能优化非常有用。
5.多范式编程: C++ 支持多种编程范式,包括面向过程编程、面向对象编程和泛型编程。这使得程序员可以根据需要选择最适合问题的编程方式。
6.跨平台性: C++ 程序可以在多个平台上编写一次并在不同的平台上进行编译,因为它提供了对多种操作系统的支持。
7.强类型和静态类型: C++ 是一种强类型语言,每个变量都有特定的数据类型,并且是静态类型,即在编译时确定变量的类型。
8.广泛应用: C++ 在系统编程、游戏开发、嵌入式系统、高性能计算等领域得到广泛应用,是一种功能强大且灵活的编程语言。
总体而言,C++ 是一门强大的编程语言,适用于各种不同规模和类型的应用程序。
1.nameSpace 命名空间:
#include <iostream.h> 后缀为 .h 的·头文件在 C++里明确不再 支持了;
// 引入 使用cout 必须引入 iostream
// 命名空间 所谓的namespace 是指标识符的可见范围
// C++标准程序库中的所有标识符都被定义在了一个名为std的 namespace 中
常规输出:
// 类似于 Console.WriteLine() 往控制台输出
// 必须写 stdstd::cout << "Hello World!\n";
std::cout << "Hello IKun!\n";
using namespace std;
//用完省个std 全局引入 在当前文件任何方法里面 都可以使用
//也可以在 区域内 局部引入
int a = 1;
cout << "Hello IKuns!" << a << "吴亦凡" << "李易峰\n";
cout << "Hello IKuns!" << a << "吴亦凡" << "李易峰" << endl;cout << "Hello 蔡徐坤!";
// 自定义命名空间
namespace nameSpaceA {
int a = 10;
}namespace nameSpaceB {
int a = 20;
namespace nameSpaceC {
// 结构体
struct Teacher {
char name[20];
int age;
};}
}
// << 输出
// >> 输入
使用命名空间:
int main() {
using namespace nameSpaceA;
using namespace nameSpaceB;
using namespace std;cout << nameSpaceA::a<<endl; // 10
cout << nameSpaceB::a << endl; //20// 使用方式1:
nameSpaceB::nameSpaceC::Teacher t1;
t1.age = 33;
cout << t1.age << endl;
//使用方式2:
using nameSpaceB::nameSpaceC::Teacher;
Teacher t2;
t2.age = 36;
cout << t2.age << endl;
//
int num;
cout << "请输入一个整数:";
cin >> num; // 给 num 赋值 接受控制台输入的内容
cout << "这个数字num 是:" << num;}
2.变量声明:
// C语言中 所有的变量 都必须在作用域 开始的位置定义
// C++ 和 C# 中更强调语言的 “实用性”,所有的变量 都可以在需要使用的时候在定义
// 数据类型 变量名称:
int i;
i = 10;int k;
k = 20;cout << k << endl;
// %d 数字占位符
printf("i: %d,k: %d \n", i, k);
// C 中可以重复定义 定义后覆盖
//C++ 不允许
// int v;
// int v=1; //会报错 牢记
栈 里面的内存 会自动释放
// 堆 需要手动释放
3.数据类型:
// 1.基本数据类型
// int(整型) 4个字节 范围:-2147483648 到 2147483648
int i = 2147483648;
printf("i : %d\n ", i);
// float 和 double (浮点 和 双浮点型)
// float 4个字节 内存空间 7个有效数字
// Double 8个字节 内存空间 15个有效数字
float area = 2.34;
double vol = 134.654321;
double dis = 45E12; // 45 * 10^12 科学计数法
printf("area: %f\n", area);
printf("vol: %f\n", vol); // float 和 double 均使用 %f 进行站位
printf("dis: %f\n", dis);
// char (字符型 ) 1个字节 用'' 引 起来
char c = 'h';
//bool (布尔型)
bool b = false;
// void (无类型) 表示不存在数据 没有值
//类型修饰符 修改一些基本数据类型: signed unsigned short long
// 修饰以下数据类型 : int double char
char 1个字符 -128——127 或者 0——255
unsigned char 1个字节 0-255 (只能有正数)
signed char 1个字节 -128——127
int 4个字节 -2147483648 到 2147483648
unsigned int 4个字节 0 到 2147483648
signed int 4个字节 -2147483648 到 2147483648
short int 2个字节 -32768 到 32768
unsigned short int 2个字节 0 到 65,535
signed short int 2个字节 -32768 到 32768 //signed 默认的意思
long int 4个字节-9,223,372,036,854,775,808 到9,223,372,036,854,775,807
signed long int 8个字节-9,223,372,036,854,775,808到9,223,372,036,854,775,807
unsigned long int 8个字节o 到18,446,744,073,709,551,615
float 4个字节― 精度型占4个字节(32位)内存空间,+/-3.4e +/- 38 (~7个数字)
double 8个字节―双精度型占8个字节(64位)内存空间,+/- 1.7e +/-308 (~15个数字)
long double 16 个字节―长双精度型16 个字节(128位)内存空间,可提供18-19位有效数字。
******
long int c1 = 2345342;
//short int d1 = 34343434; // 错误:超出范围
unsigned int a1 = -5; // unsigned 不允许 负数cout << c1 << endl; // 2345342
cout << a1 << endl; // 数据出现问题 4294967291
************
printf中的占位符使用
char short int使用%dlong使用%ld
long long使用%lldunsinged char unsigned short, unsigned int 使用%u,
unsigned long 使用%lu
unsigned long long 使用%llu非 基本数据类型(构建数据类型)
枚举类型
数组类型: 一维数组 多维数组
指针类型: int* p;
结构体类型 struct
联合类型 union
引用类型 int& p = value;
字符串类型 =0enum 定义一个枚举
enum Sex {
man,
woman
};
enum week { 周日,周一,周二,周三,周四,周五,周六 };
week today;
today = 周一;
cout << "星期几?" << today << endl; // 星期几? 2 枚举中的数据对应的值默认是从0开始的
cout << "星期几?" << today + 1 << endl; // 星期几? 3
// 更改默认值
enum seasons {spring,summer,autumn,winter};
seasons s;
s = spring;
cout << "s?" << s << endl;
s = summer;
cout << "s?" << s << endl;
s = autumn;
cout << "s?" << s << endl;
s = winter;
cout << "s?" << s << endl;
4.运算符:
// 算术运算符 + - * / %
int a = 21, b = 10, c;
c = a - b;
cout << "c的值是:" << c << endl;c = a + b;
cout << "c的值是:" << c << endl;c = a * b;
cout << "c的值是:" << c << endl;c = a / b;
cout << "c的值是:" << c << endl;c = a % b;
cout << "c的值是:" << c << endl;
// 自增自减
int d = 10;
c = d++;
cout << "c的值是:" << c << endl;
c = d--;
cout << "c的值是:" << c << endl;
// 关系 运算符 == != > < >= <=
int a1 = 21, b1 = 10;
if (a1 >= b1) {}if (a1 = b1) {
}
else {}
-----------------------------------------------------------------------------------------
// 逻辑运算符 && || !
int c1 = 15;
if (a > b || c1 > b) {}
--------------------------------------------------------------------------------------------
//赋值运算符 = += -= *= /= %=
c += b; // c=c+b;
条件运算符: 条件 ? X : Y, 例题:
// 输入四个整数,求出其中的最大值和最小值 并显示出来
int num1, num2, num3, num4;
//int max=0, min=0;
cout << "请依次输入四个整数:" << endl;
cin >> num1;
cin >> num2;
cin >> num3;
cin >> num4;
/* if (num1 > num2 && num1 > num3 && num1 > num4) {
max = num1;
}else if (num2>num1 && num2>num3&& num2>num4) {
max = num2;
}else if (num3 > num1 && num3 > num2 && num3 > num4) {
max = num3;
}
else {
max = num4;
}*/
int max = (num1 > num2 && num1 > num3 && num1 > num4) ? num1 :
(num2 > num1 && num2 > num3 && num2 > num4) ? num2 :
(num3 > num1 && num3 > num2 && num3 > num4) ? num3 : num4;cout << "输入的四个整数中 最大值是:" << max << endl;
//
/* if (num1 < num2 && num1 < num3 && num1 < num4) {
min = num1;
}else if (num2 < num1 && num2 < num3 && num2 < num4) {
min = num2;
}else if (num3 < num1 && num3 < num2 && num3 < num4) {
min = num3;
}
else {
min = num4;
}*/
int min = (num1 < num2 && num1 < num3 && num1 < num4) ? num1 :
(num2 < num1 && num2 < num3 && num2 < num4) ? num2 :
(num3 < num1 && num3 < num2 && num3 < num4) ? num3 : num4;cout << "输入的四个整数中 最小值是:" << min << endl;
5.循环判断:
// for 循环
//size_t 的真实类型与 操作系统有关;
32位的操作系统 unsigned int size_t
64位操作系统 unsigned long size_t
for (size_t i = 0; i < 10; i++)
{}
for (int i = 0; i < 20; i++)
{
//cout << "i的值是:" << i << endl;
}
//求 1-100 的和
int res = 0;
for (int i = 1; i <= 100; i++)
{
res += i;
}
cout << "1-100之间的和是:" << res << endl; //5050
练习: 目标搬砖500个,第一次 搬一个,后面更加熟练了,每次递增一倍,1、2、4、8、16.. . 搬500块砖 需要多少次?
int count = 0;
int number = 1;
for (int sum = 0; sum < 500; )
{
count++;
sum += number;
number *= 2;
}
cout << "搬" << "500" << "块砖头需要" << count << "次" << endl; // 9次
有一个学校,现在有8个人,每年学院增长23%,几年后学员可以达到100人以上
int year = 0;
double numpeople;
for ( numpeople = 8; numpeople < 100;) {
numpeople *= 1.23;
year++;
}
cout << "需要" << year << "年后学院可以达到100人以上!"<< "现在学院有:" << numpeople <<"人" << endl; // 8年
//while 循环
/*
while (true)
{
cout<<"循环的内容"<< endl;
}
// do. . .while/*
do{}while (true);
*/循环使用场景:
for最常用的循环,用于循环次数明确且固定
while循环次数可以不固定,但是要有明确的目标
dowhile和while相似但是至少会执行一次//break 终止循环
//continue 跳过本次循环
goto实例:
//goto 语句
ask:
cout << "你愿意做我女朋友么?(y/n):" << endl;
string res1;
cin >> res1;
if (res1 == "y") {
cout << "宝贝你好" << endl;
}
else {
cout << "你说什么?风太大,我听不见~";
goto ask;
}
switch .....case
int a = 1;
switch (a)
{
case 1:
cout << "蔡徐坤" << endl;
break;
case 2:
cout << "吴亦凡" << endl;
break;
default:
break;
}
6.数组:
// 一维数组
// C# 中 int[] arr;// age数组最多可容纳100个整数类型的元素。声明数组后,数组的大小和类型不能更改的
int age[100];//初始化
int arr[5] = {1, 2, 3};
// 另一种
int arr1[] = { 11,12,13,14,15,16 };
//获取数组中的 某一项
printf("arr1中的第一项:%d,第二项是:%d,\n", arr1[0], arr1[1]);//修改 第四个元素为 100
arr1[3] = 100;// 从用户获取 输入值,并插入 第三个元素
cin >> arr1[2];
cout << "arr1[2]现在变成了:" << arr1[2] << endl;//
cout << "整个数组占用的内存空间是:" << sizeof(arr1) << endl;
cout << "数组中某个元素占用的内存空间是:" << sizeof(arr1[0]) << endl;
//长度必须用 除法 除 出来
cout << "数组中元素的个数:"<< sizeof(arr1) / sizeof(arr1[0]) <<endl;// 一维数组
for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
{
cout << arr1[i] << endl;
}
多维数组:
//二维数组:
int x[2][3]; // 最多可容纳 (2*3)6 个元素
// 二维数组 初始化 数组的初始化只能在声明中完成,不能先声明,再初始化
//x = { {1,2,3,4},{5,6,7,8},{11,12,13,14} }; 报错//这样初始化 才可以
int test[2][3] = { {2,4,5},{6,7,8} };//循环 二维数组
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << "test[" << i << "][" << j << "]=" << test[i][j] << endl;
}
}
// 三维数组
int arr2[2][3][4] = {
{{1,1,1,1},{2,2,2,2},{3,3,3,3}},
{{4,4,4,4},{5,5,5,5},{6,6,6,6}}
};for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 4; k++)
{
cout << "arr2[" << i << "][" << j <<"][" << k << "]=" << arr2[i][j][k] << endl;
}
}
}