上海交大ACM班C++算法与数据结构——C++基础
C++ 在线编程平台
变量
-
int a = b = 1; cout << a << b;
a和b不能同时初始化,会编译报错。
常量
-
声明
:获取一块用于存储的地址空间 →
变量名
:将变量名与存储空间相关联 →
字面量
:为变量赋值,本身值不能变
-
指数
:浮点字面量的一种。e或E的左侧必须要有数字,右侧为幂次的数值,必须为整数。
1. 6E-1,30.0e0,0.01415926E3
-
128个
ASCII码
:
-
字符串
除了存储所包含的字符外,还额外包含一个结束标志’\0’(自动添加,无需手动添加,‘\0’:结束符,ASCII编码值为0),所以
"c++"
占用是字节数是4,空字符串并不是不占空间,而是占用了 1 字节的空间,这个字节中储存了一个 ‘\0’。 -
符号常量
:随着程序运算不改变的量
const int kCokePrice = 5;
//const 数据类型 常量名称 = 初始值;
int const kCokePrice = 5;
//数据类型 const 常量名称 = 初始值;
-
十六进制和八进制不能有符号
。 -
goole开源项目风格指南(C++,C,python,shell,javescript,typescript)
一维数组
- 数组方便对大量数据进行存储和操作。
-
c++ 数组长度不能改变,声明时数组长度必须是一个
固定的整型常量
,不能是变量。 -
c++
数组越界时
,程序一般不会产生运行错误,但是可能会导致其他后果,比如修改了无关变量的值。 - 几种初始化的方式:(声明和引用元素都使用[ ])
// TODO 第一种:大括号中包含 1,3,5,7,9,11这6个值
int sales_1[6] = {1,3,5,7,9,11};
// TODO 第二种:大括号中包含 1,3这2个值,其他默认初始化为0
int sales_2[6] = {1,3};
// TODO 第三种:大括号中包含 1,3,5,7,9,11这6个值,但是不指定数组的长度, 会得到一个长度为6的数组
int sales_3[] = {1,3,5,7,9,11};
// TODO 声明后对每个元素依次赋值
int sales_4[6];
for (int i = 0; i < 6; i++) {
sales_4[i]=2 * i +1;
}
- C++ 中,普通的一维数组只能对单个元素进行输入输出。
- 数组名表示首元素的地址。
字符数组
-
初始化:(结尾要包含一个’\0’)
// 第一种:给每个元素指定初始化值 // 依次赋初值,剩下的会默认被初始化为\0 char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'}; char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g'}; // 和普通数组一样,元素个数可以省略,c++会自动识别长度为8 char userName[] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'}; //第二种:使用字符串常量初始化字符数组 char userName[11] = {"LaoWang"}; // 大括号可以省略 char userName[11] = "LaoWang";
-
使用cin语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入。
-
cout输出字符串时,遇见第一个’\0’就会停止输出。
-
#include <cstring>
可以进行字符串连接
strcat(s1, s2)
、字符串长度获取
strlen(s1)
(不算’\0’)、字符串字典序比较
strcmp(s1, s2)
、复制字符串
strcpy(s1, s2)
。其中连接和复制操作,是以s2为操作对象,改变并返回s1。 -
不能使用赋值符号=进行数组之间的赋值。
string字符串
-
将字符串视为一个整体,比字符数组更加灵活。需要
#include <string>
字符串数组是用数组构造的字符串,操作不够符合字符串的要求;
string字符串是专门为字符串写的新的数据类型,有针对性的方法和符号重载。
函数
- 在调用前就定义的函数,可以省略函数声明。
- 由于参数传递中使用指针复杂,c++ 用引用来起到指针传参的作用。
递归函数
-
包括递归关系和终止条件
-
经典问题:汉诺塔
左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间需要遵循以下原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤。若将A最上面的盘子移动到B上,则可表示为 “A -> B”
输入描述:一行,一个整数n
输出描述:若干行,每行代表一次操作
示例1:
输入:2
输出:
A -> B
A -> C
B -> C实现代码:
#include <bits/stdc++.h>
using namespace std;
void move(int n,char x,char y,char z){
//将n个盘子从x上借助y移到z上
if(n==1){
cout<<x<<" -> "<<y<<endl;
}
else{
move(n-1,x,z,y);
move(1,x,y,z);
move(n-1,z,y,x);
}
}
int main() {
// 请补全代码,实现题目功能
int n;
cin>>n;
move(n,'A','C','B');
//基本思路:
//要把n个盘中从A移到C,
//要将n-1个盘子借助C从A移到B上,
//再将A上最后一个盘子直接移动到C上,
//再将B上n-1个盘子用同样的办法借助A移动到C上,
//也就是从这里开始了递归。
return 0;
}