Merge branch 'camera-2018:master' into master
This commit is contained in:
@@ -36,6 +36,8 @@ author:wenjing
|
||||
|
||||
③ 在初高中参加竞赛的学生的数量和质量有极可能已经有所下降,因为竞赛相关政策的紧缩,稀烂的强基计划替代了对竞赛友好的自主招生,选择全力投身竞赛,拼搏省队的学生有所下降,有基础的学生现在也不见得很强。
|
||||
|
||||
UPD at 2023/7/19:从长期来看,这个结论应该是没有错的,但是很可惜,如果您是2023届的新生,您将遭遇紧缩政策下一波不得不来hdu的竞赛高材生,截至笔者更新为止,已经有五位NOI银牌选手和两位具备NOI银牌能力的选手提前加入了集训队,也许对于零基础的同学而言,仍然只要和别的零基础同学竞争保底的三个席位就好了。但从长远来看,进队不是结束,抢夺比赛机会才是开始。而且如果hdu能抢到这样的生源,其他学校的水平大概率也会上涨,就算有了比赛机会也很难说会不会拿铜遗憾结尾。如果您出于好奇,想了解这荒谬的景象是如何诞生,请参阅电子书[《整型溢出》](https://zhuanlan.zhihu.com/p/117660874)
|
||||
|
||||
进队的学生零基础偏少,如果你选择这条路你可能需要克服不小的困难
|
||||
|
||||
# 我应该以什么态度学习 ACM?
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
进入 [https://www.luogu.com.cn/](https://www.luogu.com.cn/)
|
||||
|
||||

|
||||

|
||||
|
||||
## 社交模块
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
|
||||
点开题库,我们看见以下界面
|
||||
|
||||

|
||||

|
||||
|
||||
在上方我们可以筛选我们想要的题目,接下来我们点开 P1000 为例
|
||||
|
||||

|
||||

|
||||
|
||||
右侧三个模块为折叠状态,下面介绍他们的作用
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
点击提交答案
|
||||
|
||||

|
||||

|
||||
|
||||
左侧可以选择语言类型,C++ 用户建议选择 C++14。
|
||||
|
||||
@@ -44,7 +44,7 @@ O2 优化是一种优化(废话)假如您的代码复杂度正确但 TLE,
|
||||
|
||||
怎么知道自己代码的问题出在哪里呢?记录模块是帮助你的好工具。
|
||||
|
||||

|
||||

|
||||
|
||||
AC:通过该数据点
|
||||
|
||||
@@ -64,7 +64,7 @@ OLE:输出超限 放心你见不到的
|
||||
|
||||
点开侧栏题单
|
||||
|
||||

|
||||

|
||||
|
||||
建议新手从官方精选题单开始,由浅入深,由简到难。等到对算法形成概念,针对漏洞补习时可以尝试用户分享题单(到那个阶段已经有很多手段去找题了,刘教练的题单就够你做了)
|
||||
|
||||
@@ -76,7 +76,7 @@ OLE:输出超限 放心你见不到的
|
||||
|
||||
进入 [https://codeforces.com/?locale=en](https://codeforces.com/?locale=en)
|
||||
|
||||

|
||||

|
||||
|
||||
比起 Luogu,这样的 UI 设计离 CN 互联网已经很远了(然而比起更硬核的一些做题网站,CF 的 UI 真是越看越顺眼)
|
||||
|
||||
@@ -100,7 +100,7 @@ OLE:输出超限 放心你见不到的
|
||||
|
||||
进入比赛页面
|
||||
|
||||

|
||||

|
||||
|
||||
上方为将举办比赛,显示开始时间(UTC+8 也就是我们时区的时间)和持续时间大多都开始的比较晚,例如笔者就没有这么晚学习的习惯,所以一般赛后写题。比赛分为以下几种类型(例如写在括号里的 Div.2)
|
||||
|
||||
@@ -114,14 +114,14 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。
|
||||
|
||||
## VP
|
||||
|
||||

|
||||

|
||||
|
||||
这是一场笔者之前赛后补过的 Div.2,画面右下角分别为赛后公告和题解,右侧便是开启 VP 的按钮。
|
||||

|
||||

|
||||
|
||||
<em>VP</em><em>模拟赛时的好处就是在虚拟参赛中获得真实比赛才能积累的经验,比如这里笔者发现通过前三题后,我应该先去看看 F 题,因为做出来的人更多,我有更大的可能性做出来,ACM 中题目并不是 100% 按难度排序。</em>
|
||||
|
||||

|
||||

|
||||
|
||||
进入 VP 后,我们可以发现比起正常赛后补题有了明显不同。
|
||||
|
||||
@@ -135,25 +135,25 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。
|
||||
|
||||
让我们点开 A 题,来看看如何提交答案
|
||||
|
||||

|
||||

|
||||
|
||||
可以看见,右侧有一个 submit,与 luogu 不同的是,你需要上传源代码文件(如 cpp)然后选择 G++17 为语言,提交。
|
||||
|
||||
当然,你也可以点开上侧的 submit code
|
||||
|
||||

|
||||

|
||||
|
||||
选择题目、语言,填写代码后提交,就和 Luogu 的方式一样了。
|
||||
|
||||
同样,在上侧 MY SUBMISSIONS 处可以查看已提交的代码和状态
|
||||
|
||||

|
||||

|
||||
|
||||
## PROBLEMSET
|
||||
|
||||
同样,CF 也有题库
|
||||
|
||||

|
||||

|
||||
|
||||
如果你只想做某道题而不是某场比赛,这里也许更适合你。
|
||||
|
||||
|
||||
79
3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md
Normal file
79
3.编程思维体系构建/3.2.3ACM 竞赛从入门到入坟.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 3.2.3 ACM 竞赛从入门到入坟
|
||||
|
||||
> 作者:[选择公理](https://github.com/axiomofchoice-hjt)
|
||||
>
|
||||
> 利益相关:2021 杭电六队,2022 杭电一队成员
|
||||
|
||||
相信大家从前面的文章中已经了解 ACM 的基本情况,这里就不赘述了。
|
||||
|
||||
首先需要强调的是,选择 ACM 这条路非常辛苦,每天要花大量时间刷题;同时,ACM 也是残酷的,唯有实力才能保证你不被集训队淘汰。
|
||||
|
||||
这里就不得不提一下参加 ACM 竞赛的一般流程了:
|
||||
|
||||
1. 大一上:参加集训队选拔,进入集训队(错过选拔的要用 [Codeforces](https://codeforces.com/) 分数来向老刘申请)。
|
||||
2. 大一下:主要是个人训练,经历多轮淘汰,期末会组队(三人一队)。
|
||||
3. 大一暑假:以组队形式参加多校等训练,这些训练将决定你在大二这个赛季能参加几次比赛。
|
||||
4. 大二:训练或比赛。没比赛资格没关系,你可以沉淀,大三还有机会。
|
||||
5. 大三同上,但是也有选择退出的。
|
||||
|
||||
## 第一阶段
|
||||
|
||||
打 ACM 要趁早。从上面流程图可以看出来,大一入学就应该决定好了,然后是学习,再然后参加选拔(冷知识:集训队不是想进就能进的)。
|
||||
|
||||
### 群
|
||||
|
||||
首先是加群。每一届老刘都会弄个杭电 ACM 新生群,没有门槛的。想要加这个群,可以问一问杭电的其他群 / 学长学姐。
|
||||
|
||||
群里主要关注两件事,一个是 ACM 公选课,一个是选拔。然后有问题也可以丢群里。
|
||||
|
||||
### 公选课
|
||||
|
||||
老刘每学期都有公选课,大一上的时候可以去旁听。公选课的内容和选拔是相关的,课讲了哪些,选拔就考哪些。所以,跟上课程进度是很有必要的。
|
||||
|
||||
### 要学什么
|
||||
|
||||
编程语言(C/C++)是算法的前提,而公选课是不会教你语言的,得自学。零基础的同学要注意了,千万不要跟着 C 语言的课来学,太慢了。尽量在一个礼拜内学完 C 的基础内容(指针可以跳过),然后跟上公选课。C++ 可以晚点再学。
|
||||
|
||||
说明一下,语言其实包含很多语法,但是 ACM 用得到的只是其中的一个子集。像 C 的指针,C++ 的模板,都是很难但是鸡肋的知识点。如果你要做工程,那这些语法都得学。
|
||||
|
||||
学会语言后,可以找一个算法书(算法竞赛入门经典(刘汝佳),算法赛进阶指南(李煜东)等等)系统学习各种算法。
|
||||
|
||||
提醒一下,这里讲到的所有东西都要上机实践,ACM 非常注重实践。你在开始学语言的时候就要多上机。
|
||||
|
||||
### 选拔
|
||||
|
||||
在大一上 10 月开始,每个月至少 1 场选拔赛(上机编程的模式),每场比赛都会根据参选人员的实际表现确定若干数量的同学入围集训队。
|
||||
|
||||
除了选拔,还有一种进队方法那就是 [Codeforces](https://codeforces.com/)。Codeforces 每个账号都会有一个分数(rating),打 Codeforces 比赛打得好就上分,反之就掉分。只要大一上你的 rating 连续三次达到 1400(具体以老刘为准),就可以向老刘申请入队。事实上,这种方法甚至到了大二都是可以的(大二你的 rating 可能要 1900),不过几乎没有人这么做,所以还是要趁早。
|
||||
|
||||
大一上会选拔 50-60 人,大一下会保留 20 人左右。(仅供参考)
|
||||
|
||||
## 第二阶段
|
||||
|
||||
恭喜你,你已经学完了基础算法,可以进入以刷题为主的学习模式了。
|
||||
|
||||
刷题平台(OJ)有很多,如果没有特别适合你的,那就去刷 [Codeforces](https://codeforces.com/)。因为这个平台比赛多,老刘认可。建议 Codeforces 的每场比赛都参加(如果时间不好可以第二天补上)。
|
||||
|
||||
说到时间,Codeforces 比赛最常见的时间是 22:35 到 00:35(Codeforces 是俄罗斯的,有时差,所以时间有点阴间)。ACMer 其实很多都是熬夜党。
|
||||
|
||||
打完比赛,建议钻研一下自己没做出的前一两题,写个题解。为什么要写题解呢,一个是方便以后来回顾,一个是加深印象,一个是把自己的思维用文字表达出来,这样能发现思维的漏洞(比如证明不严谨之类的)。题解写出来发不发博客就看个人喜好吧。作者以前也是坚持写博客写了很久。
|
||||
|
||||

|
||||
|
||||
为什么要打 Codeforces 比赛呢?主要原因是打比赛有计时,有压力(怕掉分的压力),能让人提升更快。不要因为怕掉分就不参加了,你要相信只要你一直打比赛,你的 rating 曲线一定是波动上升的。
|
||||
|
||||
另外建议大家整理一个自己的模板(算法套路),这里推荐几个资料供参考:[OI Wiki](https://oi-wiki.org),[Kuangbin 模板](https://kuangbin.github.io/2018/08/01/ACM-template/)。想要验证模板可以去 [luogu](https://www.luogu.com.cn/),luogu 收录了很多模板题。
|
||||
|
||||
## 第三阶段
|
||||
|
||||
恭喜你,你应该已经度过淘汰阶段,到了组队环节了,祝愿你组队能抱到大腿。
|
||||
|
||||
有了队伍,可以考虑一下分工问题,包括读题、键盘手、各种算法类型等分工。这里建议对于任何一类问题(比如数据结构),队伍里要有至少两个人擅长,因为两个人讨论解决问题比一个人要快很多很多。而在比赛中期,最好的策略也是双开,即两个人研究一题,剩下一个研究另一题(不过这只是经验之谈了)。
|
||||
|
||||
如果你在激烈的竞争中获得参赛资格,那么你基本可以认为你有至少银牌的实力了。(~~拿了铜牌及以下老刘会生气的~~)
|
||||
|
||||
## 退役的姿势
|
||||
|
||||
打 ACM 很多是为了方便找工作的,但是作者这届找工作太难了😭,光凭借 ACM 奖牌是远远不够的,要拥有好多其他能力。
|
||||
|
||||
不管你 ACM 是否取得了成绩,建议退役后要好好做规划,多了解行情,选择好的方向进行研究。
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
首先附上一张经典老图
|
||||
|
||||

|
||||

|
||||
|
||||
## C 语言/C++
|
||||
|
||||
@@ -56,6 +56,6 @@ Python 在图里是电锯,适合干比较“狂野”的任务,也是深度
|
||||
|
||||
<strong>频繁应用于</strong><strong>W</strong><strong>eb 开发,安卓应用等等。</strong>
|
||||
|
||||

|
||||

|
||||
|
||||
当然还有各种形形色色的编程语言等着同学们去探索。
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
尝试借鉴他人的代码也未尝不可,但是要保证每一行都看懂哦
|
||||
|
||||

|
||||

|
||||
|
||||
# 我感觉讲义写的不够细
|
||||
|
||||
@@ -67,6 +67,6 @@ NJU-ICS-PA 南京大学计算机系统基础
|
||||
|
||||
# <strong>坚持了好久还是搞不定, 我想放弃了</strong>
|
||||
|
||||

|
||||

|
||||
|
||||
也许是你坚持的姿势不对,来和 ZZM 聊聊吧
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
|
||||
初学 C 语言,第一个问题莫过于用什么软件编写 C 语言程序。学校的老师可能会推荐包括但不限于 VC6.0,CodeBlocks,devC++,Visual Studio2013 等,如果你的电脑不是老年机,那么以上软件衷心建议你不要去使用,过于老旧了。
|
||||
|
||||
# Windows-Visual Studio
|
||||
## Windows-Visual Studio
|
||||
|
||||
[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT?vd_source=699341ff80cb01917fb43665199a48dd)
|
||||
[vs2022(Visual Studio 2022)指南&&技巧要领](https://www.bilibili.com/video/BV1Xt411g7jT)
|
||||
|
||||
<Bilibili bvid='BV1Xt411g7jT'/>
|
||||
|
||||
Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言的开发平台,有“宇宙第一 IDE”之称,功能丰富,开箱即用。目前更新到 2022 版。
|
||||
|
||||
@@ -16,7 +18,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言
|
||||
|
||||
选择社区版
|
||||
|
||||

|
||||

|
||||
|
||||
社区版和专业版等的区别:社区版免费,功能上几乎无差别
|
||||
|
||||
@@ -24,7 +26,7 @@ Visual Studio (以下简称 VS )是 Windows 下最完美的 C/C++ 等语言
|
||||
|
||||
选择 C++ 桌面开发,其他不用选,有需要了再说。另外,Python 开发不好使,不要像我一样选 Python 开发。
|
||||
|
||||

|
||||

|
||||
|
||||
安装完成后,一般来说 VS 不会自动创建桌面快捷方式,你需要到开始菜单中启动 VS。
|
||||
|
||||
@@ -38,19 +40,19 @@ VS 是项目制,你需要创建一个项目才能开始编写代码并运行
|
||||
|
||||
打开 VS,会打开如下界面(我使用深色主题),在此处单击“创建新项目”
|
||||
|
||||

|
||||

|
||||
|
||||
在创建新项目页面中选择项目模板为控制台应用(空项目亦可,后续手动添加.c 源文件),并单击下一步
|
||||
|
||||

|
||||

|
||||
|
||||
为你的项目起一个名字,以及选择项目的位置,一般默认即可,如果你有强迫症,C 盘一定不能放个人数据,请自行修改。完成后单击“创建”
|
||||
|
||||

|
||||

|
||||
|
||||
自此就创建了一个项目了,你将会到达如下界面:
|
||||
|
||||

|
||||

|
||||
|
||||
其中,左侧(如果在一开始没有选择 C++ 开发环境的话可能在右侧)为资源管理器,列出了本项目所用到的所有文件,包括代码(外部依赖项、源文件、头文件),以及将来开发图形化界面所需的资源文件;最中间占据面积最多的是代码编辑器窗口,你以后将会在这里编写你的 C 语言代码。最下面是输出窗口,源代码进行编译时,会在此处给出编译进度以及可能的代码中的错误。
|
||||
|
||||
@@ -66,7 +68,7 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合
|
||||
|
||||
当你编写完自己的代码后,即可单击“本地 Windows 调试器”(或者使用快捷键 F5)进行“运行”。
|
||||
|
||||

|
||||

|
||||
|
||||
你可能会发现在“本地 Windows 调试器”右侧还有一个绿色三角形,并且单击这个也可以“运行”,这两个的区别在于“本地 Windows 调试器”是调试运行,右侧那个是不调试直接运行。
|
||||
|
||||
@@ -74,17 +76,17 @@ C 语言是编译型语言,因此说“运行”代码其实并不是十分合
|
||||
|
||||
如果你的代码被 VS 提示“This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.”
|
||||
|
||||

|
||||

|
||||
|
||||
需要你在项目-xxx 属性(xxx 是你的项目名)-C/C++-代码生成-安全检查里将安全检查禁用
|
||||
|
||||

|
||||

|
||||
|
||||
## 调试
|
||||
|
||||
IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统。通过调试,可以快速定位代码中没有被编译器检查出来的逻辑错误。如果需要调试,则可以在这个位置单击,打下断点,并且运行程序,程序运行时,就会在此处暂停下来,暂停时就可以查看各个变量的值了。
|
||||
|
||||

|
||||

|
||||
|
||||
## <strong>深色主题</strong>
|
||||
|
||||
@@ -94,15 +96,15 @@ IDE 相比于代码编辑器,最强大的一点莫过于成熟的调试系统
|
||||
|
||||
### 仔细查看报错
|
||||
|
||||

|
||||

|
||||
|
||||
如果程序代码中出现红色波浪线,则表示该处代码有“错误”,并且该处的错误会同步显示在下面的这个位置,单击即可看到错误详情。如果代码中出现绿色波浪线,则表示该处代码中有警告。警告和错误的区别是警告可以通过编译运行,但编译器认为你这里可能写错了;错误是完全不可以通过编译。
|
||||
|
||||

|
||||

|
||||
|
||||
### 善用提示
|
||||
|
||||

|
||||

|
||||
|
||||
当你打一些函数名或者关键字时,VS 会给出你语法提示,如果这个提示正确,按下 Tab 键即可将这个提示补全到你的代码里;或者你也可以跟着这个提示打一遍,防止打错关键字。
|
||||
|
||||
@@ -136,7 +138,7 @@ vscode 的项目和 VS 不同,vscode 的项目比较松散,并没有 VS 那
|
||||
|
||||
编写完代码后,保存文件,并点击运行-启动调试
|
||||
|
||||

|
||||

|
||||
|
||||
此时会弹出如下选择框,我的电脑上同时安装有 VS 和 gcc 编译器,因此有两个,大部分的电脑上应该只有一个“C++ (Windows)”,选择你电脑上的编译器并运行即可。
|
||||
|
||||
@@ -162,25 +164,25 @@ CLion 是 jetbrains 家族的 C 语言 IDE
|
||||
|
||||
XCode 是 mac 官方的 IDE,能编写所有 mac 家族设备的软件。但缺点是没有中文。
|
||||
|
||||

|
||||

|
||||
|
||||
打开以后选择 Create a new Xcode project,选择 macOS-Command Line Tool
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
两个空里第一个填项目名,第二个随便填就行
|
||||
|
||||
next 后选择项目保存的位置,之后即可到达以下界面:
|
||||
|
||||

|
||||

|
||||
|
||||
点左上方小三角即可运行
|
||||
|
||||
在行号上点击并运行即可调试
|
||||
|
||||

|
||||

|
||||
|
||||
# Linux
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
- 本篇不需要任何前置知识,推荐在学习 C 语言和学完 C 语言后各看一遍。
|
||||
- 我们鼓励你在解决问题的时候进行思考,锻炼解决问题的能力,而不只是成为一个做代码翻译工作的“码农”。
|
||||
|
||||

|
||||

|
||||
|
||||
解决编程问题的常见误区:
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
如果你计划得足够好并且代码编写得正确,你的代码将在第一次工作。即便它第一次不起作用,那么你至少有一个对于代码如何调试的可靠计划。
|
||||
|
||||

|
||||

|
||||
|
||||
## Work an Example Yourself
|
||||
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
|
||||
以下方式难度由易到难,但并不意味着收获由小到大:
|
||||
|
||||
1.Video:[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1?spm_id_from=333.337.search-card.all.click&vd_source=da5a5affb1b0c71c0d7e410b1d1a3c17)(非常基础,缺点是只看视频学的过浅)
|
||||
1.Video:[B 站翁恺的 C 语言课程](https://www.bilibili.com/video/BV19W411B7w1)(非常基础,缺点是只看视频学的过浅)
|
||||
|
||||
<Bilibili bvid='BV19W411B7w1'/>
|
||||
|
||||
2.MOOC:[翁凯 C 课程的 MOOC 慕课](https://www.icourse163.org/course/ZJU-9001)(同上,慕课的习题和 Projects 性价比不高,几乎没有差别)
|
||||
|
||||
@@ -34,6 +36,6 @@
|
||||
|
||||
计算机思维与计算机科学与编码能力
|
||||
|
||||

|
||||

|
||||
|
||||
### <strong>CS education is more than just “learning how to code”!</strong>
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。例如,使用链表存储 {1,2,3},各个元素在内存中的存储状态可能是:
|
||||
|
||||

|
||||

|
||||
|
||||
可以看到,数据不仅没有集中存放,在内存中的存储次序也是混乱的。那么,链表是如何存储数据间逻辑关系的呢?
|
||||
|
||||
链表存储数据间逻辑关系的实现方案是:为每一个元素配置一个指针,每个元素的指针都指向自己的直接后继元素,如下图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
显然,我们只需要记住元素 1 的存储位置,通过它的指针就可以找到元素 2,通过元素 2 的指针就可以找到元素 3,以此类推,各个元素的先后次序一目了然。像图 2 这样,数据元素随机存储在内存中,通过指针维系数据之间“一对一”的逻辑关系,这样的存储结构就是链表。
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
|
||||
在链表中,每个数据元素都配有一个指针,这意味着,链表上的每个“元素”都长下图这个样子:
|
||||
|
||||

|
||||

|
||||
|
||||
数据域用来存储元素的值,指针域用来存放指针。数据结构中,通常将这样的整体称为结点。
|
||||
|
||||
也就是说,链表中实际存放的是一个一个的结点,数据元素存放在各个结点的数据域中。举个简单的例子,图 3 中 {1,2,3} 的存储状态用链表表示,如下图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
在 C 语言中,可以用结构体表示链表中的结点,例如:
|
||||
|
||||
@@ -66,7 +66,7 @@ typedef struct Node* Link;
|
||||
|
||||
例如,创建一个包含头结点的链表存储 {1,2,3},如下图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
## 链表的创建
|
||||
|
||||
@@ -104,7 +104,7 @@ while (Judgement)
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 创建结点——尾插法
|
||||
|
||||
@@ -121,7 +121,7 @@ while (Judgement) //for同理
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
## 链表的基本操作
|
||||
|
||||
@@ -176,7 +176,7 @@ int GetElem(Link *L, int i; int *e)
|
||||
|
||||
例如,在链表 `{1,2,3,4}` 的基础上分别实现在头部、中间、尾部插入新元素 5,其实现过程如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
从图中可以看出,虽然新元素的插入位置不同,但实现插入操作的方法是一致的,都是先执行步骤 1 ,再执行步骤 2。实现代码如下:
|
||||
|
||||
@@ -207,7 +207,7 @@ int ListInsert(Link *L, int i, int e)
|
||||
|
||||
对于没有头结点的链表,在头部插入结点比较特殊,需要单独实现。
|
||||
|
||||

|
||||

|
||||
|
||||
和 2)、3) 种情况相比,由于链表没有头结点,在头部插入新结点,此结点之前没有任何结点,实现的步骤如下:
|
||||
|
||||
@@ -253,7 +253,7 @@ temp->next=temp->next->next;
|
||||
|
||||
例如,从存有 `{1,2,3,4}` 的链表中删除存储元素 3 的结点,则此代码的执行效果如图 3 所示:
|
||||
|
||||

|
||||

|
||||
|
||||
实现代码如下:
|
||||
|
||||
@@ -282,7 +282,7 @@ int ListDelete(Link *L, int i, int* e)
|
||||
|
||||
对于不带头结点的链表,需要单独考虑删除首元结点的情况,删除其它结点的方式和图 3 完全相同,如下图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
实现代码如下:
|
||||
|
||||
@@ -319,7 +319,7 @@ int ListDelete(Link *L, int i, int* e)
|
||||
|
||||
如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列:
|
||||
|
||||

|
||||

|
||||
|
||||
出列顺序依次为:
|
||||
|
||||
@@ -339,10 +339,10 @@ int ListDelete(Link *L, int i, int* e)
|
||||
|
||||
为了使空链表和非空链表处理一致,我们通常设一个头结点,当然,并不是说,循环链表一定要头结点,这需要注意。循环链表带有头结点的空链表如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
对于非空的循环链表如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断 p->next 是否为空,现在则是 p->next 不等于头结点,则循环未结束。
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
当然,如果你选择跳过,也不会对 python 开发那里造成非常大的影响但是你会错失一个非常宝贵的学习机会。
|
||||
|
||||

|
||||

|
||||
|
||||
在 1980 年代, [文字冒险](http://en.wikipedia.org/wiki/Text_adventure) 是一种受人尊敬的电脑游戏类型。但是时代已经变了,在 21 世纪,它们与 带有 3D 引擎的现代 [MMORPG 相比显得苍白无力。](http://en.wikipedia.org/wiki/Mmorpg)书籍在电影的兴起中幸存下来,而基于文本的游戏很快就输掉了与图形游戏的战斗。“互动小说”由一个活跃的社区保持活力,但它的商业价值早已不复存在。
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
- 打印变量, 断点, 监视点, 函数调用栈...
|
||||
|
||||

|
||||

|
||||
|
||||
# 调试理论
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
请在开始进行 C 语言编程之后查阅使用
|
||||
|
||||

|
||||

|
||||
|
||||
# GDB 是什么?
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# C 的历史问题:undefined behavior
|
||||
|
||||

|
||||

|
||||
|
||||
简写为 UB
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
值得一提的是,我不会在本教程讲授过于基础的概念,但是会贴出你可能需要学习的内容。
|
||||
|
||||

|
||||

|
||||
|
||||
同时我要说的是:C 语言为了适配多种多样的硬件以及各式各样的操作,他对非常多的 undefined 操作不做太多限制,也就是说你可能会出现各种各样的问题,<del>甚至把你电脑炸了</del>
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
- Linux 下
|
||||
|
||||
```
|
||||
```bash
|
||||
# Debian , Ubuntu
|
||||
sudo apt install git
|
||||
```
|
||||
@@ -35,7 +35,7 @@ sudo apt install git
|
||||
|
||||
安装好之后,你需要先进行一些配置工作。在终端里输入以下命令:
|
||||
|
||||
```
|
||||
```bash
|
||||
git config --global user.name "Zhang San" # your name
|
||||
git config --global user.email "zhangsan@foo.com" # your email
|
||||
```
|
||||
@@ -44,7 +44,7 @@ git config --global user.email "zhangsan@foo.com" # your email
|
||||
|
||||
你会通过 `git clone` 命令来拉取远程仓库的代码,里面已经包含一些 `git` 记录,因此不需要额外进行初始化。如果你想在别的实验、项目中使用 `git` ,你首先需要切换到实验、项目的目录中,然后输入
|
||||
|
||||
```
|
||||
```bash
|
||||
git init
|
||||
```
|
||||
|
||||
@@ -54,7 +54,7 @@ git init
|
||||
|
||||
使用
|
||||
|
||||
```
|
||||
```bash
|
||||
git log
|
||||
```
|
||||
|
||||
@@ -64,7 +64,7 @@ git log
|
||||
|
||||
使用
|
||||
|
||||
```
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
@@ -76,23 +76,23 @@ git status
|
||||
|
||||
首先你需要使用 `git status` 查看是否有新的文件或已修改的文件未被跟踪;若有,则使用 `git add` 将文件加入跟踪列表,例如
|
||||
|
||||
```
|
||||
```bash
|
||||
git add file.c
|
||||
```
|
||||
|
||||
会将 `file.c` 加入跟踪列表。如果需要一次添加所有未被跟踪的文件,你可以使用
|
||||
会将 `file.c` 加入**跟踪列表**。如果需要一次添加所有未被跟踪的文件,你可以使用
|
||||
|
||||
```
|
||||
```bash
|
||||
git add -A
|
||||
# or
|
||||
# 或者
|
||||
git add .
|
||||
```
|
||||
|
||||
但这样可能会跟踪了一些不必要的文件(二进制文件),例如编译产生的 `.o` 文件,和最后产生的可执行文件。事实上,我们只需要跟踪代码源文件即可。为了让 `git` 在添加跟踪文件之前作筛选,你可以编辑 `.gitignore` 文件( 没有的话手动创建 文件名就叫这个 ),在里面给出需要被 `git` 忽略的文件和文件类型。
|
||||
|
||||
这个网页可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件
|
||||
[这个网页](https://www.toptal.com/developers/gitignore) 可以根据你搜索的语言来给你创建必要的 `.gitignore` 文件
|
||||
|
||||
```
|
||||
```bash
|
||||
# .gitignore文件示例
|
||||
.idea # 编辑器配置
|
||||
__pycache__ # 缓存文件夹
|
||||
@@ -107,13 +107,13 @@ file.o # 一个编译后的文件
|
||||
|
||||
把新文件加入跟踪列表后, 使用 `git status` 再次确认. 确认无误后就可以存档了, 使用
|
||||
|
||||
```
|
||||
```bash
|
||||
git commit -m "...comment..."
|
||||
```
|
||||
|
||||
提交工程当前的状态(注释)。其中 `...comment...` 是你本次提交的注释( 一般在注释中简略写出本次提交干了什么)以下为注释规范,养成良好习惯请遵守:
|
||||
|
||||
```
|
||||
```bash
|
||||
模板:
|
||||
type(scope): subject
|
||||
|
||||
@@ -149,7 +149,7 @@ subject为commit概述
|
||||
|
||||
如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用光玉来救你一命了。首先使用 `git log` 来查看已有的存档,并决定你需要回到哪个过去。每一份存档都有一个 `hash code`,例如 `b87c512d10348fd8f1e32ddea8ec95f87215aaa5` , 你需要通过 `hash code` 来告诉 `git` 你希望读哪一个档。使用以下命令进行读档:
|
||||
|
||||
```
|
||||
```bash
|
||||
git reset --hard b87c
|
||||
```
|
||||
|
||||
@@ -161,7 +161,7 @@ git reset --hard b87c
|
||||
|
||||
当然还是有办法来避免上文提到的副作用的,这就是 `git` 的分支功能。使用命令:
|
||||
|
||||
```
|
||||
```bash
|
||||
git branch
|
||||
```
|
||||
|
||||
@@ -169,7 +169,7 @@ git branch
|
||||
|
||||
读档的时候使用以下命令:
|
||||
|
||||
```
|
||||
```bash
|
||||
git checkout b87c
|
||||
```
|
||||
|
||||
@@ -178,13 +178,13 @@ git checkout b87c
|
||||
- 查看 `b87c` 存档的内容
|
||||
- 使用以下命令切换到其它分支
|
||||
|
||||
```
|
||||
```bash
|
||||
git checkout 分支名
|
||||
```
|
||||
|
||||
- 对代码的内容进行修改,但你不能使用 `git commit` 进行存档,你需要使用
|
||||
|
||||
```
|
||||
```bash
|
||||
git checkout -B 分支名
|
||||
```
|
||||
|
||||
@@ -200,23 +200,50 @@ git checkout -B 分支名
|
||||
|
||||
## 全球最大男性交友网站 —— Github
|
||||
|
||||
::: tip 🤡
|
||||
想象一下你正在进行人生中第一次软件开发的小组合作。
|
||||
|
||||
你把任务分配好让组员去写代码中的某一个模块。组员写好之后发给你。
|
||||
|
||||
你一看,通过QQ发过来的是一个文件啊文件 比如说 `学生管理模块.c` 你打开一看,我去是**乱码**。
|
||||
|
||||
你废了九牛二虎之力把他的 GBK 编码改成 UTF8 之后,细细地品鉴这段代码,发现我去有严重逻辑错误,而且代码很不规范。
|
||||
|
||||
你通过QQ告诉他,这一行有问题,能不能改一下。他说,好的我改一下。
|
||||
|
||||
然后又发了文件啊文件给你,如此反复循环,你俩已经互相传了好几百个源代码文件,很没效率!
|
||||
:::
|
||||
|
||||
|
||||
> 通过Git版本控制管理自己的代码 ,再通过Github来发布、同步互联,是一个很好的解决方案!
|
||||
|
||||
简介
|
||||
|
||||
作为开源代码库以及版本控制系统,Github 拥有超过 900 万开发者用户。随着越来越多的应用程序转移到了云上,Github 已经成为了管理软件开发以及发现已有代码的首选方法。
|
||||
|
||||
页面大概是这样:
|
||||
页面大概是这样(老图):
|
||||
|
||||

|
||||

|
||||
|
||||
### Git 和 Github
|
||||
|
||||
[GitHub](https://github.com/)[ ](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
|
||||
[GitHub](https://github.com/)是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
|
||||
|
||||
### Git 绑定 Github
|
||||
|
||||
::: tip 🤗
|
||||
下面将教学如何注册这个网站,并给[本项目](https://github.com/camera-2018/hdu-cs-wiki)点一个小小的 kita kita 的 star🎇
|
||||
:::
|
||||
|
||||
#### 第一步:注册账号
|
||||
|
||||
([GitHub 官网](https://github.com/))右上角 sign up 会有一个非常酷炫的界面指引你注册 🥳
|
||||
([GitHub 官网](https://github.com/))右上角点击 sign up 会有一个非常酷炫的界面指引你注册 🥳
|
||||
|
||||
他会用一个像是命令行交互的方式引导注册,你需要依次填写 `邮箱` 、`密码` 、 `用户名(此为 ID 非昵称)` 、`是否同意邮箱广告推送` 、`机器验证码` 之后创建账户,随后会给你填写的邮箱发送验证码,填写注册。
|
||||
|
||||
随后是一个欢迎问卷😋随便填写、如果他问你什么PRO Plan 选择 free 不付费就好。
|
||||
|
||||
最后你访问[GitHub 官网](https://github.com)应该会显示你的 dashboard 管理台界面
|
||||
|
||||
#### 第二步:创建 SSH Key 并获取公钥
|
||||
|
||||
@@ -226,7 +253,7 @@ git checkout -B 分支名
|
||||
|
||||
如果没有,打开 Shell( Windows 下打开 Git Bash <em>前提是你已经安装好了 git 在桌面右键应该会有 Git bash here 选项 </em>),创建 SSH Key:
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电子邮件地址
|
||||
```
|
||||
|
||||
@@ -234,32 +261,33 @@ ssh-keygen -t rsa -C "youremail@example.com" # youremail为你注册用的电
|
||||
|
||||
#### 第三步:绑定 Github
|
||||
|
||||
登陆 `GitHub`,打开 `settings`
|
||||
登陆 `GitHub`,点击右上角自己的头像,打开 `settings`
|
||||
|
||||

|
||||

|
||||
|
||||
然后打开左侧栏 `SSH and GPG`` keys` 页面
|
||||
|
||||

|
||||

|
||||
|
||||
然后,点 `New SSH Key`,填上任意 Title,在 Key 文本框里粘贴 `id_rsa.pub` 文件的内容即可
|
||||
|
||||
#### 第四步:创建仓库并和本地绑定
|
||||
|
||||
绑定完 GitHub 然后你可以创建仓库了
|
||||
首先在 GitHub 主页,找到 “New” 按钮,创建一个新的仓库
|
||||
绑定完 GitHub 然后你可以创建仓库了
|
||||
|
||||

|
||||
首先在 GitHub 主页,找到 `New` 或者 `Create repository` 一个绿色的按钮,创建一个新的仓库
|
||||
|
||||

|
||||
|
||||
然后填上这个仓库的大名就可以创建了
|
||||
|
||||

|
||||

|
||||
|
||||
根据之前学习的方法在本地创建完 git 仓库之后
|
||||
|
||||
在 git bash 中输入:
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
git remote add origin git@github.com:yourname/gitexample.git
|
||||
# 请将yourname换成自己的id
|
||||
```
|
||||
@@ -268,45 +296,61 @@ git remote add origin git@github.com:yourname/gitexample.git
|
||||
|
||||
或者是直接 git clone 下来
|
||||
|
||||
```powershell
|
||||
```bash
|
||||
git clone git@github.com:yourname/gitexample.git
|
||||
```
|
||||
|
||||
> 以上方法是基于 ssh 方式的,下面方法是基于 HTTPS 方式的
|
||||
|
||||
或者你可以跟随新创建之后的指引,`…or create a new repository on the command line` 内他描述了如何创建一个文件夹、创建一个README.md的文件,然后和github仓库绑定。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 下载代码——clone
|
||||
|
||||
拷贝他人存档也未尝不可,而我们如果用他人存档时,次次都需要一样一样的拷贝文件和代码未免太过折磨,下面简单介绍如何使用
|
||||
|
||||
```powershell
|
||||
git clone [url]
|
||||
```bash
|
||||
git clone <url>
|
||||
```
|
||||
|
||||
接下去对着下面这个 GitHub 的代码使用一下
|
||||
|
||||
首先,代码的 url 在下图所示的位置
|
||||
|
||||

|
||||

|
||||
|
||||
然后复制完代码后切换回我们的命令行
|
||||
|
||||
```bash
|
||||
e: #powershell or cmd
|
||||
# 进入到想要存储该代码的地方
|
||||
# powershell or cmd
|
||||
# 进入(cd)到想要存储该代码的地方(父文件夹目录)
|
||||
git clone https://github.com/camera-2018/git-example.git
|
||||
```
|
||||
|
||||
> 这里使用的[例子](https://github.com/camera-2018/git-example)是我的仓库,当然你也可以用你自己的仓库。
|
||||
>
|
||||
> 如果你使用我的仓库的话,你 clone 过后在你自己电脑更改的文件等东西,是没法直接提交回来的(因为你没有我仓库管理权限)
|
||||
>
|
||||
> 如果你非要给我的仓库添加东西呢 也是可以,参照下面的 PR (Pull Request)教程
|
||||
|
||||
一阵抽搐过后就下载好了
|
||||
|
||||

|
||||

|
||||
|
||||
注意:用完之后别忘记给 camera-2018 点个 follow 呃呃 follow 没用 star 有用
|
||||
::: tip
|
||||
用完之后别忘记给 camera-2018 点个 follow 😋 `呃呃 follow 没用 star 有用`
|
||||
:::
|
||||
|
||||
注意:失败就重试吧 还失败建议使用魔法
|
||||
注意:失败就重试吧 还失败建议使用魔法(非国内网你懂得)
|
||||
|
||||
### 提交和合并分支
|
||||
|
||||
如图 我在仓库里新建了 `helloworld.c` 并且写了一些代码
|
||||
|
||||

|
||||

|
||||
|
||||
接下来是提交操作
|
||||
|
||||
@@ -314,7 +358,7 @@ git clone https://github.com/camera-2018/git-example.git
|
||||
git status #看一下文件暂存区
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
红色表示文件没有提交到暂存区 我们要提交
|
||||
|
||||
@@ -324,7 +368,7 @@ git status #看一下文件暂存区
|
||||
git add . #将没有提交的所有文件加入暂存区
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
绿色表示所有文件已加入暂存
|
||||
|
||||
@@ -332,61 +376,131 @@ git add . #将没有提交的所有文件加入暂存区
|
||||
git commit -m "feat(helloworld): add helloworld file"
|
||||
```
|
||||
|
||||
将刚才加入暂区的文件发起了一个提交 注释是 `feat(helloworld): add helloworld file`
|
||||
将刚才加入暂区的文件发起了一个提交,提交注释(commit message)是 `feat(helloworld): add helloworld file`
|
||||
|
||||

|
||||

|
||||
|
||||
1. 如果这是你自己的仓库有权限 你就可以直接使用
|
||||
1. 如果这是你自己的仓库有权限(本人仓库或 Collaborators 有权限的情况下)你就可以直接使用
|
||||
|
||||
```bash
|
||||
git push origin main # origin是第四步里remote add起的远程名字
|
||||
# main是分支名
|
||||
```
|
||||
```bash
|
||||
git push origin main # origin是第四步里remote add起的远程名字
|
||||
# main是分支名
|
||||
```
|
||||
|
||||
上传本次提交
|
||||
上传本次提交
|
||||
|
||||

|
||||

|
||||
|
||||
1. 如果你没有本仓库的主分支提交权限 可以提交 pr(pull requests)
|
||||
2. 如果你没有本仓库的主分支提交权限 可以提交 PR(Pull Requests)
|
||||
|
||||
这里假设我是协作者 无主分支权限
|
||||
**第一种情况:这里假设我是协作者 无主分支权限,但有创建分支权限**
|
||||
|
||||
首先创建一个新分支 命名为 `yourname-dev`
|
||||
首先创建一个新分支 命名为 `yourname-dev`
|
||||
|
||||

|
||||

|
||||
|
||||
然后按照上面的方法 `git clone` 并切换到你刚创建的分支
|
||||
然后按照上面的方法 `git clone` 并切换到你刚创建的分支
|
||||
|
||||
```bash
|
||||
git switch camera-2018-dev
|
||||
```
|
||||
```bash
|
||||
git switch camera-2018-dev
|
||||
```
|
||||
|
||||
然后提交一个文件 这里使用 vscode 自带的 git 工具试试
|
||||
然后提交一个文件,这里直接使用 vscode 自带的 git 工具试试 (很方便、不用敲命令行)
|
||||
|
||||

|
||||

|
||||
|
||||
点暂存所有更改 写好 comment 之后点提交
|
||||
点暂存所有更改 写好 comment 之后点提交
|
||||
|
||||

|
||||

|
||||
|
||||
最后点同步更改上传
|
||||
最后点同步更改上传
|
||||
|
||||

|
||||

|
||||
|
||||
如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮
|
||||
如果是你提交 在 github 上会显示这个 快捷创建 pr 的按钮
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
点它创建 pr
|
||||
点它创建 PR
|
||||
|
||||

|
||||

|
||||
|
||||
这样管理本仓库的人看到 pr 请求就可以 merge 合并辣
|
||||
这样管理本仓库的人看到 pr 请求就可以 merge 合并辣
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧
|
||||
实际合作过程中可能会出现代码冲突无法 merge 的情况 😋 遇到了自己去 STFW 吧
|
||||
|
||||
**第二种情况:我不是协作者、我什么权限也没有,我看了这个 public 项目后觉得很好但是有一些问题,我要给他贡献一些代码**
|
||||
|
||||
可以点击仓库右上角的 fork
|
||||
|
||||

|
||||
|
||||
这样会在你的名下多出来一份这个同名仓库,而这个仓库你是拥有所有权限的,你可以 clone 你这个同名仓库,更改代码,提交代码之后
|
||||
|
||||
回到源仓库点击 Pull Request 然后创建 PR `New pull request`
|
||||
|
||||
最上面会提示你说
|
||||
|
||||
Comparing changes
|
||||
Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also **compare across forks** .
|
||||
|
||||
点击小蓝字 `compare across forks` 这会让你对比你fork仓库和源代码仓库的提交记录,之后就可以创建 PR 了,原作者看到了会合并。
|
||||
|
||||
|
||||
### 其他功能
|
||||
|
||||
问题跟踪:GitHub的问题跟踪功能可用于报告软件中的问题、错误和功能请求,并进行讨论、分配和解决。
|
||||
|
||||
Wiki页面:用户可以创建和编辑与存储库相关的Wiki页面,用于提供项目的文档、指南、示例代码等。
|
||||
|
||||
Pull请求(Pull Requests):使用者可以将自己的代码变更提交给其他项目的所有者,并请求合并到主干代码中。
|
||||
|
||||
项目管理:GitHub提供项目管理功能,包括任务管理、里程碑(milestones)、项目板(project boards)等工具,可用于组织和跟踪项目的进展。
|
||||
|
||||
部署功能:GitHub可以与各种持续集成和部署(CI/CD)工具集成,帮助开发人员自动化构建、测试和部署他们的应用程序。
|
||||
|
||||
统计信息:GitHub提供有关存储库活动和贡献者的统计信息,例如提交图表、活动日历等,有助于跟踪和分析项目的发展。
|
||||
|
||||
社交功能:用户可以关注其他用户、存储库和组织,接收他们的更新和活动通知,并与他们进行交流和讨论。
|
||||
|
||||
代码审核(Code Review):GitHub的Pull请求功能允许团队成员对代码进行审查和讨论,以确保代码质量和最佳实践。
|
||||
|
||||
集成和扩展:GitHub支持与其他工具和服务的集成,例如持续集成(CI)工具、代码质量检查工具、项目管理工具等。
|
||||
|
||||
页面托管:GitHub Pages功能使您可以托管静态网站和文档,这在展示和共享项目文档、演示和博客等方面非常有用。
|
||||
|
||||
然后还有一些比如说 Copilot 之类的有用的功能。
|
||||
|
||||
[Copilot](https://github.com/features/copilot) 是 GitHub 推出的一款基于人工智能技术的代码辅助工具。它使用了机器学习模型 codex,并针对编写代码的场景进行了训练。
|
||||
|
||||
Copilot 可以根据上下文和输入的提示,为开发人员生成代码建议和自动完成。它可以通过分析现有代码库、注释和上下文来生成代码片段,提高编码效率并减少重复劳动。
|
||||
|
||||
## [Copilot](https://github.com/features/copilot) 白嫖教程
|
||||
|
||||
你需要学生认证你的 Github 账号。
|
||||
|
||||
地址在 https://education.github.com/students 点击 `Sign up for Global Campus` 来开始认证,下面会让你输入学校,绑定学校邮箱(杭电为 @hdu.edu.cn 结尾的邮箱)(如果你是杭电新生的话,可能要等到智慧杭电账号发放时才能注册杭电邮箱)并上传**学生证明**(从21年开始这个验证越来越严,如果不过的话你可以尝试 `学生证第一页`、`学生证第一页英文翻译(像有道翻译那样 P 图上去)`、`学信网学籍证明英文翻译(英文也是 P 上去)`)
|
||||
|
||||
通过了的话你的账户会有 Pro 标识 然后你可以享受的 Github 学生包里包含[这些东西](https://education.github.com/pack)
|
||||
|
||||
里面比较有用的有
|
||||
- JETBRAINS 全家桶的免费用(我没用,我用的是jb自己家的验证方式,不是github)
|
||||
- name.com 家的一个一年期的免费域名(大概价值吧 六七十块钱?)
|
||||
- github 的容量扩容和 actions 时间扩容、Codespaces 时间延长、Pages 扩容(没啥用倒是)
|
||||
- Termius 学生包,这是我很喜欢用的终端软件,有学生包可以多端同步ssh的账号密码啥的,很方便。
|
||||
- Sentry 容量扩容
|
||||
- Copilot 免费用
|
||||
|
||||
你可以在 `settings` 里看到你的copilot ,配置如下
|
||||
|
||||

|
||||
|
||||
然后就可以在你喜欢的 IDE 或编辑器上下载 Copilot 插件,来启用他。
|
||||
|
||||

|
||||
|
||||
@@ -10,21 +10,21 @@
|
||||
|
||||
装下来之后具体操作可以看[安装教程](https://blog.csdn.net/in546/article/details/117400839),如果自动配置环境变量的选项是灰色的话,请按照下面的教程把下面的几个文件路径加入环境变量。
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
在里面添加并写入文件路径加入就好了~
|
||||
|
||||

|
||||

|
||||
|
||||
然后打开 Pycharm,创建新项目,设置按照以下方式操作,记得挂梯子。
|
||||
|
||||
如果不挂梯子,请按照教程配置清华源。[我是教程](https://blog.csdn.net/jasneik/article/details/114227716)
|
||||
|
||||

|
||||

|
||||
|
||||
然后一个新的环境就创建好辣~
|
||||
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
|
||||
教程
|
||||
|
||||
[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学,干货!_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW?p=1&share_medium=android&share_plat=android&share_source=COPY&share_tag=s_i×tamp=1623240637&unique_k=vHC5Wg)
|
||||
[Python 小白必看,非常生动的 Pycharm 与 Anaconda 安装教学,干货!_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Bp4y117UW)
|
||||
|
||||
[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss?from=search&seid=1987861827719523712&spm_id_from=333.337.0.0)
|
||||
<Bilibili bvid='BV1Bp4y117UW'/>
|
||||
|
||||
[Win10 下 Conda-Pycharm-Pytorch 的安装_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV15U4y1J7Ss)
|
||||
|
||||
<Bilibili bvid='BV15U4y1J7Ss'/>
|
||||
|
||||
# 巧妇难为无米之炊
|
||||
|
||||
@@ -32,7 +36,7 @@
|
||||
|
||||
可以输入 `python3 --version` 检验是否成功。
|
||||
|
||||

|
||||

|
||||
|
||||
# Jupyter Notebook
|
||||
|
||||
@@ -50,6 +54,6 @@ jupyter notebook
|
||||
|
||||
进行使用
|
||||
|
||||

|
||||

|
||||
|
||||
[Pycharm](https://www.jetbrains.com/zh-cn/pycharm/):可能很多同学已经用上了,我在这里不做更多解释
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
什么是递归呢?
|
||||
|
||||

|
||||

|
||||
|
||||
#
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ P7:9*9 乘法表
|
||||
|
||||
可能现在对你来说,构建像下图这样的 99 乘法表已经是非常容易的一件事了,可是如果我要求你使用 python 的列表推导式(list comprehension),在两行以内完成呢?
|
||||
|
||||

|
||||

|
||||
|
||||
P8:couple 情侣
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此,
|
||||
|
||||
首先,打开一个终端窗口。
|
||||
|
||||

|
||||

|
||||
|
||||
#### 主目录
|
||||
|
||||
@@ -174,11 +174,11 @@ VS Code 的另一个不错的功能是它具有“嵌入式终端”。因此,
|
||||
|
||||
PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路径(或路由)。请记住,您可以通过两种不同的方式访问计算机上的文件和目录(文件夹)。您可以使用终端(这是一个<strong>命令行</strong>界面或 CLI),也可以使用 Finder <strong>。</strong>Finder 是<strong>图形</strong>用户<strong>界面</strong>(或 GUI)的一个 例子<strong>。</strong>导航技术不同,但文件相同。例如,这是我的 CS 61A 实验室文件夹在我的 GUI 中的样子:
|
||||
|
||||

|
||||

|
||||
|
||||
这是完全相同的文件夹在终端中的外观:
|
||||
|
||||

|
||||

|
||||
|
||||
请注意,在这两种情况下,黄色框都显示了 PATH,紫色椭圆显示了“labs”文件夹的内容。
|
||||
|
||||
@@ -186,7 +186,7 @@ PATH 就像一个地址:它告诉您和计算机到某个文件夹的完整路
|
||||
|
||||
让我们停下来思考一下终端和 Python 解释器之间的区别。
|
||||
|
||||

|
||||

|
||||
|
||||
1. 哪个是终端?
|
||||
2. 哪个是 Python 解释器?
|
||||
@@ -197,7 +197,7 @@ A 和 D 都是我的终端。在这里您可以运行 bash 命令,例如 `cd`
|
||||
|
||||
B 是 Python 解释器。你可以从 >>> 提示中看出这意味着你已经启动了一个 Python 解释器。您还可以判断,因为启动它的命令是可见的:`python3`。该 `python3` 命令启动 Python 解释器。如果您在 Python 解释器中键入 bash 命令,您可能会遇到语法错误!这是一个例子:
|
||||
|
||||

|
||||

|
||||
|
||||
C 是我的代码编辑器。这是我可以编写 Python 代码以通过我的终端执行的地方。
|
||||
|
||||
@@ -287,7 +287,7 @@ mkdir lab
|
||||
|
||||
现在,如果您列出目录的内容(使用 `ls`),您将看到两个文件夹,`projects` 和 `lab`.
|
||||
|
||||

|
||||

|
||||
|
||||
### 更多目录更改
|
||||
|
||||
@@ -475,7 +475,7 @@ ______
|
||||
|
||||
实验室还将包括函数编写问题。在你的文本编辑器中打开 `lab00.py`。您可以 `open .` 在 MacOS 或 `start .` Windows 上键入以在 Finder/文件资源管理器中打开当前目录。然后双击或右键单击以在文本编辑器中打开文件。你应该看到这样的东西:
|
||||
|
||||

|
||||

|
||||
|
||||
三引号中的行 `"""` 称为<strong>文档字符串(Docstring)</strong>,它描述了函数应该做什么。在 61A 中编写代码时,您应该始终阅读文档字符串!
|
||||
|
||||
@@ -483,7 +483,7 @@ ______
|
||||
|
||||
在这里,我们圈出了文档字符串和文档测试,以便于查看:
|
||||
|
||||

|
||||

|
||||
|
||||
在 `twenty_twenty_two`,
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
|
||||
一路下一步
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
这俩我推荐勾掉
|
||||
|
||||

|
||||

|
||||
|
||||
安装过后点许可证 输上面的 key 激活
|
||||
|
||||
@@ -30,15 +30,15 @@
|
||||
|
||||
下好回到 VMware
|
||||
|
||||

|
||||

|
||||
|
||||
创建新的虚拟机-典型(推荐)-下一步-安装程序 iso 选中你刚下的 iso 下一步
|
||||
|
||||

|
||||

|
||||
|
||||
这里填你一会儿要登录 linux 的个人信息
|
||||
|
||||

|
||||

|
||||
|
||||
这里建议把位置改到其他盘
|
||||
|
||||
@@ -46,21 +46,21 @@
|
||||
|
||||
启动后进入 Ubuntu 安装
|
||||
|
||||

|
||||

|
||||
|
||||
键盘映射 直接 continue
|
||||
|
||||
接下来一路 continue install now
|
||||
|
||||

|
||||

|
||||
|
||||
最后 restart
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
这个 skip
|
||||
|
||||
@@ -68,15 +68,15 @@
|
||||
|
||||
点右上角 settings
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
然后按指引 restart 系统
|
||||
|
||||

|
||||

|
||||
|
||||
会提示你要不要重新命名这些用户下的文件夹
|
||||
|
||||
@@ -84,27 +84,27 @@
|
||||
|
||||
如果你的语言还没有变过来的话
|
||||
|
||||

|
||||

|
||||
|
||||
点击这个他会安装语言
|
||||
|
||||

|
||||

|
||||
|
||||
把汉语拖到英文之上 点应用到整个系统
|
||||
|
||||

|
||||

|
||||
|
||||
右上角 logout 重新登陆 就是中文辣
|
||||
|
||||
最后在设置-电源把息屏改成从不
|
||||
|
||||

|
||||

|
||||
|
||||
<strong>至此 恭喜安装完成!</strong>
|
||||
|
||||
之后就可以在桌面上右键
|
||||
|
||||

|
||||

|
||||
|
||||
打开命令行
|
||||
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
|
||||
(现在可能是只开 `适用于Linux的windows子系统`)
|
||||
|
||||

|
||||

|
||||
|
||||
如果你的 windows 版本为<strong>家庭版</strong> 那么 hyperv 选项是没有的
|
||||
|
||||
你需要右键以管理员权限打开以下脚本来强行开启 hyperv
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -133,7 +133,12 @@ int main(void) {
|
||||
}
|
||||
```
|
||||
|
||||
> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。<br/>对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式(具体处于那个模式可以观察窗口左下角,NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )(`:q 仅退出` `:q! 不保存退出` )<br/>呃呃 [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg)
|
||||
> 相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线及其陡峭而著称。
|
||||
> 对于 vi(m)风格的编辑器,你需要先按 `ESC` 返回 NORMAL 模式(具体处于那个模式可以观察窗口左下角,NORMAL 模式是空白的),再输入 `:wq` 来保存并退出(注意 `:` 是输入的一部分 )(`:q 仅退出` `:q! 不保存退出` )
|
||||
>
|
||||
> [【保姆级入门】Vim 编辑器](https://www.bilibili.com/video/BV13t4y1t7Wg)
|
||||
>
|
||||
> <Bilibili bvid='BV13t4y1t7Wg'/>
|
||||
|
||||
保存后就能够看到 `hello.c` 的内容了. 终端中可以用 `cat hello.c` 查看代码的内容. 如果要将它编译, 可以使用 `gcc` 命令:
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ python内容完成后,基本学习到如何使用python当一门工具使用
|
||||
|
||||
如果你要开始,推荐你从3.0开始阅读,然后挑选你喜欢的内容
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 本章参考内容
|
||||
|
||||
BIN
3.编程思维体系构建/static/Axiomofchoice_1.png
Normal file
BIN
3.编程思维体系构建/static/Axiomofchoice_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 230 KiB |
Reference in New Issue
Block a user