深圳8月1期XP01-编程大师笔记
2025-08-10 10:01:28
发布于:广东
DAY01
1. C++基本框架
#inlcude <iostream> //单行注释
using namespace std;
int main(){
/*
多行注释
*/
return 0;
}
2. 输出:输出一句话 换行 变量 表达式
cout << "一句话" << endl;
cout << 变量名称;
cout << 式子; //输出结果
3. 变量定义 赋值 命名规则
数据类型 变量名称; //int long long float double
数据类型 变量名称=数值;
只能由大小写字母+数字+下划线(+$)
数字不可以做开头
大小写严格区分
不能和关键字相同(int)
int a;
double b,c; //多个变量连续定义只能类型相同
4. 输入
cin>>变量名称;c //输入前必须先定义
5. 算术运算符
+ - * / %
/整数除法和小数除法
%取余
6. 数据类型 范围 类型转换
int 2*10^9
long long 9*10^18
float 10^38 有效位数:6~7
double 10^308 有效位数:15~16 //只要是浮点数优先存储为double
类型转换
6.1.赋值时进行转换
int a=2.5; //浮点数转换int a=2
6.2.计算表达式时进行转换 //两个值均转换为相同类型
cout<<5/2.0; //5double 2.0double -> 2.5
6.3.强制类型转换 (类型)变量
cout<<(double)(5/2); //2.0
7. 格式化输出
头文件:#include <cstdio>
printf("一句话");
printf("\n");
printf("%d",变量名称);
long long -%lld
float -%f
double -%lf或%f
右对齐m位,空格补齐 %md
右对齐m位,0补齐 %0md
printf("%8d",a);
printf("%010d",b);
保留m位小数输出,四舍五入 %.mf
printf("%.5f",a);
8. 转义字符
\\代表一个反斜杠
\n代表换行
\'代表一个单引号
\"代表一个双引号
cout<<"\\";
DAY02
1. 数学函数
头文件:#include <cmath>
max(a,b) 比较两者之间的较大值
min(a,b) 比较两者之间的较小值
pow(a,b) 计算a的b次方结果 -> double
sqrt(a) 计算a的算术平方根 -> double
abs(a) 计算a的绝对值
fabs(a) 计算浮点数a的绝对值
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int a,b,c;
cin >> a >> b >> c;
cout << min(a,b); //待比较元素类型必须一致
cout << max(a,max(b,c)); //比较三者
cout << pow(a,b); //a的b次方
cout << pow(b,a); //b的a次方
cout << sqrt(81); //81的算术平方根 9
cout << abs(-9); //9
return 0;
}
2. bool类型
只能存储true真或false假
输出只能输出1(true)或0(false)
可以用其他数值赋值,只有0为假,非0即真
bool flag=-1; //true
bool f=0; //false
cout<<flag<<" "<<f; //1 0
3.分支语句
3.1 单分支语句
if(表达式){
语句组;
}
3.2 双分支语句
if(表达式){
语句组1;
}else{
语句组2;
}
3.3 多分支语句
if(表达式1){
语句组1;
}else if(表达式2){ //前提条件:表达式1不成立
语句组2;
}else{
语句组3;
}
Day07
函数--工具
在使用之前,先定义(制作)
1. 功能:我要的是什么?能做什么?
2. 参数(参考的数据):准备材料
3. 开始实现
4. 确定返回值:函数结束后我会得到什么?
返回值类型 函数名称(参数表格){
// 参数单独【一个一个】定义,逗号间隔
// 函数体;
return 返回值; // 一个return 返回一个值
// 只有具体值才可以返回,不可以返回语句,不可返回数组整体
}
int main(){
接收返回值=函数名称(参数);
// 参数列表只写名称,逗号间隔
}
tips:
1.函数定义是单独的 函数里所有的变量都是局部变量(初始随机)
2.参数表格可以空着不写,但() {}不能省略
3.可以没有返回值,返回值类型为void(空类型)
return 此时可以省略 或写为 return;
4.函数定义后可以重复使用,包括库函数
判断一个数是否为质数
// 函数功能:判断x是否为质数
// 参数:x
// 返回值:是质数true 不是质数false bool
bool is_prime(int x){ //prime质数
if(x<=1){
return false; //不是质数 特殊情况
}
for(int i=2;i<=x-1;i++){
if(x%i==0){
return false; //找到其他因子 不是质数
}
}
return true; //是质数
}
判断一个数是否为回文数
//判断x是否为回文数
//返回值类型:b0ol true-是 false-不是
//功能:反着拼凑x
bool is_hw(int x){
int rx; //rx记录x反转后的结果 123->3 2 1->3*100+2*10+1
int temp=x; //temp是x的复制体
while(temp!=0){
rx=rx*10+temp%10; //30+2=32 320+1=321
temp/=10;
}
if(rx==x){
return true; //是回文数
}else{
return false;
}
}
int main(){
int n;
cin>>n;
if(is_hw(n)){ //回文数 正着读和反着读一样 121
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}
形式参数:虚拟的
在函数定义时写下的参数
实际参数:具体的
在函数调用时给到的参数
单向值传递:只传递数值,对【复制体】做操作
引用传递:将地址传递,对【本体】做操作
//引用传递是指 在函数定义时,参数定义加上&
//形如:数据类型& 变量名称
& 引用
记录一个变量的别名,对引用值更改会直接影响本体
格式:数据类型& 变量别名=变量名称;
注意:必须初始化
int main(){
int a=4;
int& b=a; //b是a的别名
b=3;
cout << a; //3
}
数组元素如何传递?数组如何当作参数?
数组类型 数组名称[]
所有的数组作为参数时均为引用传递 【所有修改对本体】
数学函数 取整
floor(x) 向下取整
返回第一个小于等于x的整数
cout<<floor(2.5); //2.0
cout<<floor(3.14159); //3.0
ceil(x) 向上取整
返回第一个大于等于x的整数
cout<<ceil(2.5); //3.0
cout<<ceil(3); //3.0
round(x) 四舍五入取整
cout<<round(3.14159); //3.0
cout<<round(2.5); //3.0
指针
一个可以存放地址的变量
变量类型* 指针名称;
&取地址符号
*解引用符号
int n=1; //n变量名称 地址0x7ffeeaae
int* x=&n; //x能够存储一个整型变量的地址
//x=0x7ffeeaae x里存储的是n的地址
cout << x; //输出n的地址 0x7ffeeaae
cout << *x; //输出n的值 1
DAY08
sort函数
作用:对数组中一段连续区间内的元素排序
前提条件:元素需要存储在数组中,并且待排序元素下标连续
头文件:#include <algorithm>
【格式1】对下标范围内的元素按照数值大小升序排列
//sort(首排序元素地址,尾排序元素地址+1);
sort(数组名称+开始排序的下标,数组名称+结束排序的下标+1);
【格式2】按照给定规则对下标范围内的元素按照数值大小排序
//注意:规则函数是自定义函数
功能:判断两个待比较的元素是否位置正确
参数:两个待比较的元素
返回值:bool true 位置正确 false 位置错误
bool cmp(两个待比较的元素){ //默认第一个参数在数组中的位置在前
if(元素位置合理){
return true;
}else{
return false;
}
}
sort(数组名称+开始排序的下标,数组名称+结束排序的下标+1,规则函数的名称);
tips:库里的规则函数
greater<数据类型>() //按照数值的从大到小排序
sort(a+1,a+n+1,greater<int>());
sort(a+1,a+n+1,greater<char>());
less<数据类型>() //按照数值的从小到大排序
升序排序
#include <iostream>
using namespace std;
int a[n的最大值+5];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){ //输入n和n个元素,并存储在数组a中
cin>>a[i]; //n个元素对应的存储下标:1~n
}
sort(a+1,a+n+1); //使用sort函数,对所有元素 升序排序
for(int i=1;i<=n;i++){ //输出排序后的n个元素
cout<<a[i];
}
return 0;
}
降序排序
#include <iostream>
using namespace std;
int a[n的最大值+5];
bool cmp(int x,int y){ //按数值大小降序排列
return x>y;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){ //输入n和n个元素,并存储在数组a中
cin>>a[i]; //n个元素对应的存储下标:1~n
}
sort(a+1,a+n+1,cmp); //使用sort函数,对所有元素 降序排序
for(int i=1;i<=n;i++){ //输出排序后的n个元素
cout<<a[i];
}
return 0;
}
桶排序
桶计数(桶标记):用数组记录每一个值的出现次数
cnt数组 -> i表示元素 -> cnt[i]表示元素i出现的次数
#include <iostream>
using namespace std;
int cnt[元素x的最大值+5]; //必须为全局数组 或 必须清空
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){ //输入n个元素的值【桶标记思想】
int x;
cin>>x;
cnt[x]++; //元素x多出现了一次
}
//从小到大的顺序排序 桶排序
for(int i=元素x的最小值;i<=元素x的最大值;i++){
for(int j=1;j<=cnt[i];j++){ //元素i出现了cnt[i]
cout<<i<<" "; //重复输出i
}
}
return 0;
}
冒泡排序
思想:每次比较两个相邻元素的大小,如果发现位置错误,那么
性质:每一轮会确定一个右侧最值
比较轮次:n个元素排序 比较n-1轮
每轮比较次数:待比较元素数量-1
-> 如果当前是第i轮 前i-1轮已经确定了i-1个元素的位置 剩下n-(i-1)
如果n=5,总共5个元素等待排序
第一轮:5个元素排序 两两比较4次 确定一个元素位置
第二轮:4个元素排序 两两比较3次 确定一个元素位置
第三轮:3个元素排序 两两比较2次 确定一个元素位置
第四轮:2个元素排序 两两比较1次 确定一个元素位置
第五轮:1个元素排序 结束
for(int i=1;i<=n-1;i++){ //外层循环用于模拟每一轮次 i表示轮次
for(int j=1;j<=n-i;j++){ //里层循环用于模拟两两比较
if(a[j]和a[j+1]位置不合理){
swap(a[j],a[j+1]);
}
}
}
选择排序
思想:每次选择一个最左侧值放在对应的位置上
特点:每一轮会确定一个最左侧元素的位置
选择轮次:n个元素n-1轮
5 4 3 2 1 从小到大
第一轮:选择第一个最小值 1 4 3 2 5
第二轮:选择第二个最小值 1 2 3 4 5
第三轮:1 2 3 4 5
第四轮:1 2 3 4 5
for(int i=1;i<=n-1;i++){ //外层循环用于模拟选择轮次 选择第i小值
//从第i位开始依次向后选择,选择完成后和第i位的值交换
int k=i; //临时变量 存储当前的最值位置
for(int j=i;j<=n;j++){
if(a[j]比a[k]更符合要求){
//从小到大 a[j]<a[k]
//从大到小 a[j]>a[k]
k=j; //更新位置
}
}
swap(a[i],a[k]);
}
插入排序
99 | 56 78 59 80 100
第1轮插入 56 99 | 78 59 80 100
第2轮插入 56 78 99 | 59 80 100
第3轮插入 56 59 78 99 | 80 100
第4轮插入 56 59 78 80 99 | 100
第5轮插入 56 59 78 80 99 100 |
插入排序思想:每次拿一个元素放入已经排好序的序列中,并且放入后仍旧有序
特点:第一个元素默认有序
每一轮放入一个元素,只需要放入n-1轮即可(从第二个元素开始放入)
第i轮结束后,前i+1个元素一定是有序的
for(int i=2;i<=n;i++){ //从第二个元素开始插入
int k=a[i]; //k表示等待插入的元素
int j=i-1; //j表示已经有序的元素数量,此时1~j均是有序
//找到第一个比k小的数字,并且插入进去
while(j>=1 && k<a[j]){ //如果还有元素可以比较 并且需要后移
a[j+1]=a[j]; //后移一位
j--;
} //结束a[j]<=k k应该被放在a[j]的后面 j+1
a[j+1]=k; //j=0 k应该被放在第一位 j+1
}
DAY09
结构体类型->DIY类型,使用方法类似 int/char
定义结构体类型前:需要捆绑的数据有哪些?
struct 结构体类型名称{
成员1定义;
成员2定义;
...
//所有的成员作为变量定义
};
struct bank{
string name;//姓名
double money;//存款
int year;//年数
//所有的成员作为变量定义
};
结构体变量
结构体类型 变量名称; //bank a,b,c;
结构体数组
结构体类型 数组名称[数组长度]; //bank arr[100];
bank a;
cin >> a.name >> a.money >> a.year;
bank b=a; //结构体变量之间可以整体赋值
bank name;
cin>>name.name; //变量名称可以和结构体成员名称一致
#include <iostream>
using namespace std;
struct student{
string name; //姓名
int age; //年龄
}; //结构体类型定义完成
int main(){
student a,b,c; //三名同学
cin >> a.name >> a.age;
cin >> b.name >> b.age;
cin >> c.name >> c.age;
cout << a.name << " " << a.age << endl;
cout << b.name << " " << b.age << endl;
cout << c.name << " " << c.age << endl;
return 0;
}
常见错误原因
AC ✅
WA ❌
RE 运行错误 (常见1.数组下标使用错误 2.除0计算 a/0)
PE 格式错误 (常见:换行/空格)
CE 编译错误 (常见:语法错误 cpp:x 表示错误在第x行)
TLE 时间超时 (常见:循环太多次)
MLE 内存超限 (常见:数组过大 一维数组10^8 二维数组10^4)
OLE 输出超限 (常见:死循环)
全部评论 7
ybb
2025-08-03 来自 广东
22025-08-09 来自 广东
1day3-day6的在哪
2025-08-08 来自 广东
1惠州
2025-08-09 来自 广东
0没有
2025-08-09 来自 广东
0人家说知识点
2025-08-09 来自 广东
0
😅😅😅😅老师你。。。。。。。
2025-08-12 来自 广东
0👀
2025-08-12 来自 广东
02025-08-08 来自 广东
0666
2025-08-06 来自 广东
0
有帮助,赞一个