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

  • Post author:
  • Post category:其他




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



C++ 在线编程平台


replit.com



变量


  • int a = b = 1; cout << a << b;


    a和b不能同时初始化,会编译报错。



常量


  • 声明

    :获取一块用于存储的地址空间 →

    变量名

    :将变量名与存储空间相关联 →

    字面量

    :为变量赋值,本身值不能变


  • 指数

    :浮点字面量的一种。e或E的左侧必须要有数字,右侧为幂次的数值,必须为整数。
	  1. 6E-1,30.0e0,0.01415926E3
  • 128个

    ASCII码



    enter description here

    enter description here

  • 字符串

    除了存储所包含的字符外,还额外包含一个结束标志’\0’(自动添加,无需手动添加,‘\0’:结束符,ASCII编码值为0),所以

    "c++"

    占用是字节数是4,空字符串并不是不占空间,而是占用了 1 字节的空间,这个字节中储存了一个 ‘\0’。

  • 符号常量

    :随着程序运算不改变的量
	 const int kCokePrice = 5;
	 //const 数据类型 常量名称 = 初始值;
	 int const kCokePrice = 5;
	 //数据类型 const 常量名称 = 初始值;



一维数组

  • 数组方便对大量数据进行存储和操作。
  • 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;
		}



版权声明:本文为weixin_53610475原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。