上海交大ACM班C++算法与数据结构——C++基础

上海交大ACM班C++算法与数据结构——C++基础

上海交大ACM班C++算法与数据结构——C++基础_第1张图片

C++ 在线编程平台

replit.com

变量

  • int a = b = 1; cout << a << b;
    a和b不能同时初始化,会编译报错。

常量

  • 声明:获取一块用于存储的地址空间 → 变量名:将变量名与存储空间相关联 → 字面量:为变量赋值,本身值不能变

上海交大ACM班C++算法与数据结构——C++基础_第2张图片

  • 指数:浮点字面量的一种。e或E的左侧必须要有数字,右侧为幂次的数值,必须为整数。
	  1. 6E-1,30.0e0,0.01415926E3
  • 128个ASCII码
    上海交大ACM班C++算法与数据结构——C++基础_第3张图片
    上海交大ACM班C++算法与数据结构——C++基础_第4张图片
  • 字符串除了存储所包含的字符外,还额外包含一个结束标志’\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 可以进行字符串连接strcat(s1, s2)、字符串长度获取strlen(s1)(不算’\0’)、字符串字典序比较strcmp(s1, s2)、复制字符串strcpy(s1, s2)。其中连接和复制操作,是以s2为操作对象,改变并返回s1。

  • 不能使用赋值符号=进行数组之间的赋值。

string字符串

  • 将字符串视为一个整体,比字符数组更加灵活。需要#include
    字符串数组是用数组构造的字符串,操作不够符合字符串的要求;
    string字符串是专门为字符串写的新的数据类型,有针对性的方法和符号重载。

函数

  • 在调用前就定义的函数,可以省略函数声明。
  • 由于参数传递中使用指针复杂,c++ 用引用来起到指针传参的作用。

递归函数

  • 包括递归关系和终止条件

  • 经典问题:汉诺塔

    左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间需要遵循以下原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤。若将A最上面的盘子移动到B上,则可表示为 “A -> B”
    输入描述:一行,一个整数n
    输出描述:若干行,每行代表一次操作
    示例1:
    输入:2
    输出:
    A -> B
    A -> C
    B -> C

    实现代码:

		#include 
		using namespace std; 

		void move(int n,char x,char y,char z){
		  //将n个盘子从x上借助y移到z上
		  if(n==1){
			cout< "<>n;
			move(n,'A','C','B');
		  //基本思路:
		  //要把n个盘中从A移到C,
		  //要将n-1个盘子借助C从A移到B上,
		  //再将A上最后一个盘子直接移动到C上,
		  //再将B上n-1个盘子用同样的办法借助A移动到C上,
		  //也就是从这里开始了递归。
			return 0;
		}

你可能感兴趣的:(上海交大ACM班C,++算法与数据结构,c++,经验分享)