NOIP魔导书#0 你好世界

NOIP魔导书#0 你好世界_第1张图片
随便找张图占下位

这个教程,也许理想状况下将会以较轻松幽默的语言较全面地指导NOIP(?)比赛中的知识、注意事项。

进入教程吧。

如果在阅读过程中,发现某处有错或难以理解,欢迎反馈,这会帮助更多的人.

在获得帮助前,自己尝试解决也许能学到更多.

对于非教程内的问题,不保证回答.但是呢...

NOIP魔导书#0 你好世界_第2张图片
用钱砸我呀qwq

开个玩笑

目标

阅读完这一篇文章,你将会掌握

  1. 缩小一点神秘的计算机黑盒
  2. 粗面了解你要面对的东西
  3. 会配开发环境
  4. 在指导下运行起来已经被无数人写过无数遍的第一个程序。哦,如果你已经有了一点编程基础,当我没说。
  5. 提高自学能力

起步

概览

你可能需要以下东西

  1. 脑子和大量的时间
  2. 嘤语
  3. (越多越好的)数学基础:推算公式的能力,数论,图论,运筹学等。不过你不需要现在就掌握它们,也不需要了解太深.
  4. 学会至少2门编程语言:比如C++和Python
  5. 了解Linux和Windows
  6. 擅于利用系统命令行
  7. 自学和解决麻烦的能力

脑子,时间,嘤语,数学基础不在讨论范围内,请自行准备。只会在必要时补充一小部分。

那么,接下来

确定一门语言

只要你阅读到这,我就默认你不管是因为什么原因,反正是想参加NOIP了。为了参加NOIP,你需要确定自己的学习方向。

说是方向,最多也就是选择个语言。

编程语言如同人的自然语言一样,分为多种。它们各有各的特点和优势,分别用于不同的领域。在中国,你得说汉语;在联合国,你最好说嘤语。在NOIP中,程序集中于表现算法和数据结构,强调效率,因此,官方限定的语言有:

  1. C++
  2. C
  3. Pascal(它即将被去掉)

为什么Pascal要被去掉了?

如果你已经读过一些较老的教程,那么你可能更熟悉Pascal。然而,计算机与其他学科不一样,它发展实在太快了。

Pascal实际上是利于表达算法的语言,但是由于历史因素,它的种种特性如几乎没有的包管理,(在目前看来)奇怪的语法,限制了它在现代下的使用范围。可能是出于这种考虑,Pascal将于不久后从NOI系列比赛中被移除。

虽然C系列的语言相比Pascal更难以学习,但是学了对你没坏处。学不会就再学,如果确定不会的话,现在停下是可以的。

听说还能用其他的语言

有些比赛可以用更多其它类型的语言.不过,参加OI还是老老实实从上面选一个.并且学好C系语言后,快速掌握其他语言语法并不困难.

我将使用C++作为导学语言,原因有下:

  1. 难学
  2. 特性多的令人抓狂
  3. 居高临下地学习其他语言
  4. 加上STL瞬间增加学习内容
  5. 我只会C++

确定一门辅助脚本语言

什么是脚本语言?

为了解释这个问题,需要引入2个概念:解释型语言和编译型语言.脚本语言属于解释型语言,指运行时由解释器直接解释运行,无需编译.(可以理解为同声翻译)编译型语言如C++,需要经过编译生成相应平台的运行程序后才能运行.(可以理解为事先翻译)

为什么非得再学一个语言不可?

脚本语言自有它的优点,小巧方便,适用于NOIP中编写暴力算法,写对拍,写生成器......当你了解了脚本语言和编译语言的差异时,你会选择再学的.

啥是暴力,啥是对拍,啥又是生成...

打住,之后会有解释.

建议选择:

  1. Python
  2. Ruby
  3. bash或bat

你选择了Python,因为你了解到任何Linux发行版上都自带它.而且你又了解到一个事实:不管你选哪个,选项3中的2个玩意你都会被迫学习一点.

了解Linux

在windows之外,还有一个系统叫做linux.

其实还有个系统叫OSX.

其实还有很多系统.

在开发程序时,这两个都比用windows好.

根据规定,原则上竞赛使用的操作系统为linux,评测机一定是linux.

相对于windows,linux对编程极其友好,体现在环境的配置以及各平台的支持上.你有必要在电脑上安装linux系统.如果你不想折腾,建议安装深度.这是一个国产的linux发行版,非常适合过渡到linux同时保留图形界面的使用习惯,尽量不造成麻烦.

请悉知:深度系统似乎有停滞的危险,请搜索关于深度的新闻了解详情。

想快速提高能力的话,请选择arch发行版进行自虐.在安装和配置arch的过程中,你可以了解如何看wiki,了解引导,初步了解linux的命令行,了解linux的文件系统和软件组织形式以及配置方法,了解bash脚本的写法。

你甚至可以了解怎么快速删除这个系统然后重装其他简单的发行版.

"用户体验是狗屁,用户中心是王道."

--arch大法好

当然,现在有巨硬家的加成,最新的windows 10系统还可以选择安装subsystem,它将提供给你近完备的linux环境.这也是个非常好的选择,能给你省点事.可以用作临时方案.

提供给你的发行版候选

  • elementary
  • ubuntu
  • fedora
  • openSUSE
  • 等等

了解windows

自己想办法.可参考初高中的计算机教材,如果你还能找到的话.

与命令行做伴

不要畏惧命令行,总有些时候不得不用它.

为了快速的使用图形界面,需要记住各种快捷键;使用命令行,需要...

不管用什么,你都得付出代价.而它们给你带来的收获却不一样大.图形界面早就熟悉了,命令行能教给你新的东西.


配置开发环境

c++

推荐配置是:掌握dev c++用法后使用code blocks或者vscode.同时一定学会使用gdb.(它会在之后提到)

对windows系统的步骤

  1. 安装你选择的IDE和编辑器(推荐:code blocks + sublime text)
  2. 建议你再自行安装编译器(必须:MinGW)
  3. 了解环境路径的作用,并配置好编译器的环境变量.
  4. win+R,输入cmd并回车.在新窗口中输入g++clang++,观察输出.你不应该看到类似于没有找到相应可执行文件的错误,否则请检查上述过程是否出错.

对linux系统的步骤

  1. 了解系统发行版的包管理程序
    1. arch为pacman
    2. ubuntu为apt
    3. opensuse为yast
    4. 等等
  2. 使用包管理安装gcc
  3. 打开终端,输入g++,观察输出.
  4. 恭喜,你不需要自己配置什么环境变量,并且今后的升级和卸载均能够全自动完成.

对OS X的步骤

  1. 如果事先没有安装,安装homebrew
  2. 了解homebrew的用法
  3. 安装clang++gcc

最后windows和OS X可以选择再安装下vs,体验世界第一IDE的快感.

以下是对可能会用的一些软件的小说明
(如果你的考场没用NOI Linux的话)

Dev C++

这是目前考场标配的一个IDE,你可以选择安装它,它将自动安装好编译器.那么剩下的这些你都可以略过.

但注意,它的调试能力几乎为0.用这玩意调试程序会让你痛不欲生.

code blocks

有的考场会提供这个.

这是个不错的轻量级IDE,调试功能完备.你需要提前安装编译器,如何安装编译器在下方.

Sublime Text

很多考场会提供这个.

这是个编辑器,但是它是极其优秀的选择之一.为了使用它你需要更加充分的了解命令行并且安装编译器.

Visual Studio

几乎没有考场提供这个.

自带全套开发工具.宇宙第一IDE,如果你的考场真的有这个,一定要用!调试能力无人能比.但是平时只建议了解,不要依赖,会上瘾.

Visual Studio Code

应该不会有考场提供这个

你可以在sublime和这个之间选一个安装.

Atom

应该不会有考场提供这个

你可以在visual studio, sublime 和这个中选一个.

vim

是否提供不好说

...如果你能学会的话,不反对使用

编译器

  • 对于linux,GCC或者clang++,你只有这2个选择.
  • 对于windows,MinGW,不想作死就装这个.clang对windows支持很差,而微软的编译器附带在IDE内.
  • 对于osx,clang++,苹果亲儿子.GCC也行

建议在日常使用中尝试下clang.clang的错误提示信息比gcc更加友好.

不过比不上rust的编译器,分分钟教你做人.

为什么不使用微软的编译器

微软的编译器中有自己夹杂的私货.的确,有的很方便,但是不属于C++标准,没有被其他编译器支持,你在考场上遇到GCC的编译器时可能就很难受.

几种概念间的关系

可能有人会奇怪编译器,编辑器,IDE之间的区别.

这要从编写的代码的格式说起.其实,你编写的一段代码,也不过是一段文本,并以文本的形式保存在电脑上,仅仅是后缀名被改为了.cpp.这个文本经过编译器的编译后能够生成程序.编辑器其实就是一个附带方便编程的各种工具的"记事本".

编辑器和编译器毫无关系,任意组合.

而IDE稍微有点复杂了,IDE如同胶水一样,将代码编写的过程中所需的工具(如编辑器,编译器,调试器)全部集成在了一起.

知道这些概念有什么用处?随着学习的深入,概念将变得越发重要.你至少得搞清楚自己在学什么.

"我的编译器是 Dev C++哦!"--千万别再这么说了,若是有别人这样讲,大可笑笑.

Python

如果你是linux或OSX,那可以跳过了.

如果你是windows,请安装linux.

  1. 上百度或者google搜索Python.
  2. 打开python官网,找到类似于download的按钮.
  3. 选择适合自己系统的版本下载,注意,请选择python3.
  4. 如果你没法确定x86x86_64的意思,请再百度或google.

万能解决方案

如果你不想看上面的东西.........................................

那就安装个NOI Linux吧,一步到位.

实际上是Ubuntu的定制版,极其难用,慎重安装.


第一个程序

有这么一个传统,不管是什么语言诞生,它的第一个程序都是:输出hello, world.现在,来写第一个程序.

使用你的vs code或者sublime新建文件,输入

#include 

using namespace std;

int main() {
    cout << "hello, world" << endl;
    
    return 0;
}

不要直接复制,请亲自动手.你要注意的有以下几点:

  • 用英文输入
  • 注意除引号内的单词外的所有拼写.还有引号是tm英文状态下的!
  • 注意分号
  • 不要试图从语言层面上理解这些单词的意思,这一般不管用
  • 不要太纠结它们都是什么意思,纠结现在也不告诉你,自己搜

现在,保存为.cpp,然后打开cmd或者终端,切换至文件所在目录,输入

  • 如果你是gcc:g++ .cpp -o
  • 如果你是clang++:clang++ .cpp -o

如何切换目录

  • windows:在盘符间切换请直接输入<盘符>:\然后回车;在目录切换请使用cd .
  • linux:直接cd .

现在,在目录下生成了执行文件,继续输入./来运行相应程序.你将会看到输出hello, world.

相对目录和绝对目录

  • ./:当前目录
  • ../:上一级目录
  • /:根目录

现在,假设有这种目录结构

|project
|   |a
|   |   |debug
|   |   |   debug.cpp
|   |   release.cpp
|   |b
|   |   b.cpp

目前在a目录下,那么,你可以这样表示其他目录下的文件

  • debug.cpp:debug/debug.cpp
  • b.cpp:../b/b.cpp

这被称为相对目录,即以当前目录为准,通过移动进入其他目录.

而绝对目录就是一个文件的全目录,如

  • debug.cpp:/project/a/debug/debug.cpp

使用相对目录能够给带来一些便捷,谁都不想动不动输入这么长的目录,不是吗?

至此,结束.

希望它还有下一章.

没办法,我就是不知道怎么打开cmd?

按住徽标键后敲击R,在出现的窗口里输入cmd,回车.如果你不会开bash,上网搜,搜了还不知道,请暂时远离linux.

上哪找环境变量啊?

  • win:右键这台电脑,选择属性,高级属性,一个tab一个tab的翻,反正它就在那,总会看到的.
  • linux:请培养使用wiki和搜索的能力.

我想学C,我也不想学Python

至少在NOI的比赛里,你会比学CPP丢掉很多好处(你可以事先了解一下STL).不想学Python,用C++也勉强可以代替,就是很麻烦是了.

你可能感兴趣的:(NOIP魔导书#0 你好世界)