AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

lesson

作者: 作者的头像   吾乃闪耀の芝士蛋挞 ,  2023-09-17 11:48:03 ,  所有人可见 ,  阅读 156


0


lesson_0 preface

方法

自学,自学,自学(重要的事说三遍)

编程学习和一般的课程学习不一样,在网络上有非常多优秀的资源(文档,网课,代码托管平台 github 等),如果想要走竞赛的路线,每周一两次课绝对是不够的,非常需要自身的主动性。

Do

学习编程最快的办法就是直接上手写代码,运行,debug。

教学

  1. 布置下一周的学习任务。
  2. 每周的小测验和讲解。
  3. 答疑(,手机号)

思路:实用主义,我们只学需要用到的,比如语言,我们只学你会用到的,不相干的比如成员,类,异常处理都一概不管

学习准备

  1. 一台笔记本(windows mac都行,能coding,上网,尽量轻薄)
  2. 一个记笔记的软件(typora或者vscode+插件,markdown语法)
  3. C++编译环境(MINGW64),一个代码编辑器(vscode或者sublime text),虽然更多的是用网上的编译器运行代码,但是你可以保存你的代码,便于复习等等
  4. 勤洗手,多学多写多练

学习路线&资源

  1. C/C++语法 + 数据结构

  2. 网课

    • 浙江大学翁恺C语言程序设计 (部分)
    • 浙江大学数据结构(部分)
  3. 书籍

    • Essential C++
  4. 算法

系统的学习算法,掌握模板(相当于背单词,非常重要),多练多学思路(需要沉淀)

  1. 代码测试平台(不推荐leetcode,不适合算法学习)
    • 浙江大学PTA(免费,题很多,难度曲线不错,有分类)
    • ACWing(收费,但是有系统的课程,但是难度较大,题不多,划分得很细)
    • codeforce(免费,题非常多,但是是国外平台,需要一定的英文水平)
  2. 书籍

    • 算法导论(暂时不需要)
    • 算法竞赛进阶指南(暂时也不需要)
  3. 多参加比赛,积累经验

Lesson_1 变量&运算符&顺序语句

变量

类型 大小(64位系统)
bool 1Byte 0,1
int, long long 4Byte, 8Byte 整数
char(string) 1Byte 字符
float, double 4Byte, 8Byte 浮点数(小数)
指针 (int * ) 8Byte 地址(计算机寻址)

这里都是有符号数(signed),无符号数(unsigned)基本上用不到

定义一个变量

变量类型 + 变量名

如下:

int a = 1;
char b = 'a';   // ASCII码值(0 ~ 255, 2^8)
float c = 0.1;

全局变量和局部变量(函数部分再将讲)

转义字符:

\n:换行

\t:制表位(tab键)

\0:null

\':

\\:

\":

运算符

算数运算符(一些小细节)

符号 含义
+ 加
- 减
* 乘
/ 除( int / int 是舍去)
% 取余

此外还有关系运算符,逻辑运算符,

类型转换

强制类型转换

隐式类型转换

顺序语句

#include <iostream> // 头文件申明,相当于工具包,编译的过程中,编译器会连接这些库。
#include <cstring>
#include <algorithm>

using namespace std;    // 省略std::,stl库

int main()  // 主函数,顺序执行
{
    expr1;
    expr2;


    return 0;   // 函数返回值,0表示程序正常结束,其他数表示异常
}

标准输入输出

用于读数据和输出数据。

  1. C中的scanf, printf

写起来相对繁琐,需要知道输入的具体格式,以\t, 空格, \n作为 delimited

int scanf(const char *format, ...)

type 输入格式 变量类型
%c 字符 char *
%d 整型数据 int *
%f 浮点数/小数 float *
%s 字符串(这将读取后续字符,直到找到空格为止) cahr *
%p 指针
#include <stdio.h>

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);  // 这里的`&`是引用,即取地址,地址在计算中是非常重要概念
    printf("%d%d", a, b);
    return 0;
}
  1. C++ 中的cin, cout

C++中的cin, cout对象是iostream类的对象

#include <iostream>

int main()
{
    int a, b;
    cin >> a >> b;
    cout << a << b;
    return 0;
}

如果在数据量较大时,建议使用scanf, printf,会比较快。

判断语句

if, else, else if, expr1?expr2:expr3, switch...case

int main()
{
    bool a = 1;
    if (a == 0)
    {
        expr;
    }
    else if (a < 0)
    {
        expr;
    }
    else
    {
        expr;
    }


    var = expr1 ? expr2 : expr3;

    switch (expr)
    {
    case constant1:
      // statements
      break;

    case constant2:
      // statements
      break;
    .
    .
    .
    default:
      // default statements
    }
}

## Lesson_2 循环结构和数组

在顺序语句中,程序里面的每一行都被**依次**执行一遍。

在循环语句中,如果**条件**一直成立,会循环执行当前语句。

```c++
int main()
{
    int n;
    cin >> n;
    while (n -- )   // while 循环
    {
        expr1;
    }

    for (int i = 1; i <= n; i ++ )  // for循环
    {
        expr2;
    }
}

while和for循环基本上可以互相代替的(python 中就不存在while循环)。

数组

[HTML_REMOVED]intuition:[HTML_REMOVED] 我们希望把一群相同类型的变量放在一起,并且不需要为他们单独的取名。

  • array

直接对内存操作速度快,但是存在安全问题,并且难以扩容(算法中常用而现实工程建议使用vector)。

// 定义方式

// 1. 显示定义num_size
int a[8];   // 和之前的变量一样,变量类型 + 变量名 + [num_size]
for (int i = 0; i < 8; i ++ )
    a[i] = i;   // 利用for循环,输入array中的值

// 2 . 
int b[] = {0, 1, 2, 3, 4, 5, 6, 7}

//主要区别在于,第一种显示定义了array长度,而第二种方式是程序自动计算出了我们数组的长度
// 操作方式

// 1. 索引操作
a[index];   // 数组名 + [index]

// 2. 指针操作
sort(a, a + num_size);
memset(a, 0, sizeof(a));
reverse(a, a + num_size);
  • vector

STL中实现的数组,速度会慢一些,但是有很多内置的函数(书上记一些常用的)。

#include <vector>   // 导入vector包

// 定义方式

// 1.定义长度
vector<int> a(8);   // 与array一样,定义了一个长度为8的vector,里面保存的变量类型为`int`

// 2.不定义长度
vector<int> b = (a, a + num_size); // 利用array来定义vector
vector<int> c;  // 只vector名称(其实就是开头),不指定大小,后续可以用append()来添加元素

利用循环结构和数组我们可以实现很多之前重复的操作。
```

Lesson_4 字符串

ASCII码

string类型的读写

cin >> str

该方法会跳过空格, \n, \t

getline(cin, str)

读取一行数据, 并且该方法会丢弃结尾的 \n

cin.get()
读取一行, 并且不会丢弃结果的\n

索引,属性

字符串的索引方式同数组
str.size()

常用的方法

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息