01-C++编程入门
编程定义
生活中的程序
- 人脸识别、指纹识别。
- 无人驾驶、扫地机器人。
- 外卖、地图导航。
- QQ、微信、抖音、小红书。
- 人工智能软件,DeepSeek、ChatGPT、豆包等
编程又称编写程序,程序是为了解决某个问题而编写的计算机能识别和执行的指令集合。
什么是C++
编程语言是和计算机沟通的方式
C++是计算机能认识的一门功能强大的高级语言
计算机有众多语言,但是计算机真的可以听懂这些语言吗?实际上,计算机只可以识别二进制 0 和 1。其他的内容都不能够识别,这种由 0 和 1 构成的语言就是机器语言。
而 C++、Python 等语言就是计算机提供给我们人类和计算机交互的接口。
算法竞赛
- CSP系列, CSP-J、CSP-S、NOIP、NOI等等
- ACM/ICPC
- LeetCode
学习规范
- 课上的例题要按照要求自己动手写代码。
- 例题要求必须掌握,习题在例题熟练情况下再完成。
- 课后习题不要照标准程序抄,先自主思考。
C++语言基本结构
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
cout 算术运算符
cout << "Hello World!" << endl;
cout << 1+2 << endl;
cout << 10/3 << endl;
cout << 10*1.0/3 << endl;
cout << 10%3 << endl;
C++ 中除法是整除,两个整数相除,结果会舍弃小数。如果要保留小数,需要将分子或分母变为小数。
02-C++变量常量,输入输出
什么是变量?
变量是程序可操作存储区的名称。顾名思义,就是可以改变的量。
变量声明的语法格式
数据类型 变量名;
数据类型 变量名 = 初始值;
例如:
int a; // 定义一个整型变量
变量赋值
赋值号即 =,表示将 = 右边的值赋给 = 左边的变量,而并不是相等的意思。
int a;
a = 1;
a = 2;
a = 3; // 最终输出a的值为3
变量命名规范
规则:由字母、数字和下划线组成的符号串。
- 数字不能开头
- 不能使用 C++ 关键字
- 区分大小写
cin输入数据
int a;
cin >> a;
cout << a;
常量
常量是指在程序执行过程中其值不会发生变化的标识符。
const 类型名 常量名 = 常量值;
#define 常量名 常量值
const double PI = 3.1415926;
#define PI 3.1415926
03-C++标准数据类型
整型
整型最常见的就是 int,占 4 个字节,表示范围为 -2^31 ~ 2^31-1。
cout << sizeof(int) << endl;
输出:4
浮点型
float 占 4 字节,保留有效位数 7 位;double 占 8 字节,保留有效位数 16 位。
#include <iomanip>
const double PI = 3.14159265358;
cout << fixed << setprecision(6) << PI;
字符型
字符常量是由单个字符组成,所有字符采用 ASCII 编码,共有 128 个字符。
类型转换
- 隐式转换:编译器自动转换
- 显式转换:使用强制类型转换运算符
// 隐式转换
int a = 5;
double b = a;
// 显式转换
double c = 3.14;
int d = (int)c;
04-C++格式化输入输出
C++格式化输出
| 控制符 | 功能 |
|---|---|
| endl | 输出一个新行符 |
| fixed | 按定点格式显示浮点数 |
| setprecision(n) | 设置浮点数输出精度 |
| setw(n) | 设置输出宽度 |
C语言风格格式化输出
// scanf输入
int a;
scanf("%d", &a);
// printf输出
printf("我今年%d岁了", a);
printf("%.2f", 3.14159);
05-选择结构
布尔类型
bool a = true, b = false;
cout << a << " " << b; // 输出:1 0
关系运算
>、<、>=、<=、==、!=
逻辑运算
&&(与)、||(或)、!(非)
if 语句
if (条件) {
// 条件为真时执行
} else {
// 条件为假时执行
}
switch语句
switch(表达式){
case 常量1:
// 语句
break;
case 常量2:
// 语句
break;
default:
// 默认语句
}
06-循环结构
for 循环
for(初始化; 条件; 增量) {
循环体;
}
// 常见写法
for(int i = 0; i < n; i++) // 循环n次
for(int i = 1; i <= n; i++) // i从1到n
while 循环
while(条件) {
循环体;
}
do...while 循环
do {
循环体;
} while(条件);
循环基本问题
- 计数问题:cnt++
- 累加问题:s += x
- 累乘问题:r *= x
- 最值问题:maxn = max(maxn, x)
循环跳出
- continue:重新开始循环
- break:跳出当前循环
- return:返回函数
07-一维数组
为什么需要数组?
用一个数组变量存储所有的学员分数:int a[50];
一维数组定义
数据类型 数组名[数组长度];
int a[10]; // 合法
int b[n]; // 非法(n是变量)
数组初始化
int a[5] = {1,2,3,4,5};
int b[10] = {0,1,2,3,4}; // 其余为0
int c[5] = { }; // 全部初始化为0
全局变量与局部变量
- 全局变量:定义在所有函数外,自动初始化为0,占用内存空间
- 局部变量:定义在函数内,默认随机值,占用栈空间
08-二维数组
二维数组定义
数据类型 数组名[行数][列数];
int a[3][4]; // 3行4列的二维数组
二维数组初始化
int a[2][3] = {
{1,2,3},
{4,5,6}
};
int b[2][3] = {1,2,3,4,5,6}; // 按行顺序初始化
二维数组遍历
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
09-字符串
C风格字符串
char str[100];
cin >> str; // 输入字符串(空格结束)
cin.getline(str, n); // 输入整行(包含空格)
C++字符串
#include <string>
string s;
cin >> s;
getline(cin, s); // 读取整行
字符串常用操作
s.length() // 获取长度
s.empty() // 判断是否为空
s.substr(pos, len) // 截取子串
s.find(t) // 查找子串位置
s + t // 字符串拼接
10-函数
函数定义
返回类型 函数名(参数列表) {
函数体;
return 返回值;
}
函数分类
- 无参无返回值
- 有参无返回值
- 无参有返回值
- 有参有返回值
函数重载
同名函数但参数列表不同(参数个数或类型不同)。
递归函数
函数调用自身,需要有终止条件。
int factorial(int n) {
if(n == 1) return 1;
return n * factorial(n-1);
}
11-结构体和联合体
结构体定义
struct 结构体名 {
数据类型 成员名1;
数据类型 成员名2;
...
};
struct Student {
string name;
int age;
double score;
};
Student s;
s.name = "小明";
s.age = 10;
结构体数组
struct Student stu[100];
for(int i = 0; i < n; i++) {
cin >> stu[i].name >> stu[i].score;
}
联合体
联合体的所有成员共享同一块内存空间,同一时刻只能有一个成员有效。
12-指针
什么是指针?
指针是一个变量,它存储的是另一个变量的内存地址。
指针声明
数据类型 *指针名;
int a = 10;
int *p = &a; // p指向a的地址
指针操作
*p // 解引用,获取指针指向的值
&a // 取地址,获取变量a的地址
p++ // 指针移动
指针与数组
int a[5] = {1,2,3,4,5};
int *p = a; // p指向数组首元素
cout << *p; // 输出1
cout << *(p+1); // 输出2