少儿编程

NOIP魔导书#0 你好世界

2018-07-26  本文已影响0人  kanari
随便找张图占下位

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

进入教程吧。

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

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

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

用钱砸我呀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环境.这也是个非常好的选择,能给你省点事.可以用作临时方案.

提供给你的发行版候选

了解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

是否提供不好说

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

编译器

建议在日常使用中尝试下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 <iostream>

using namespace std;

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

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

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

如何切换目录

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

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

相对目录和绝对目录

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

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

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

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

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

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

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

至此,结束.

希望它还有下一章.

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

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

上哪找环境变量啊?

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

我想学C,我也不想学Python

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

上一篇 下一篇

猜你喜欢

热点阅读