

既然要学习编程就不得不提一下信息学奥赛。
信息学奥赛的主旨在于经过比赛活动培育大批核算机爱好者,选拔优秀的计算机后备人才。信息学奥赛作为世界公认的五大奥赛之一,知识点涵盖广泛(如图论、动态规划、数据结构、数论等算法),其目的是拓宽学生的视野、培养思维、紧跟时代步伐,绝非培养青少年软件开发者!
简单来说:信息学 = 编程语言 + 算法。 信息学奥赛则考查学生对算法和编程能力的掌握。
就算法而言,同一种算法可以由不同的编程语言来写。不同的语言写的算法所实现的效果是一样的,只是它们在语法和运行效率上稍微有点差异而已。编程语言只是工具,验证、实现算法的工具!算法才是核心!
但"工具"掌握得不好,又无法支撑后续的算法学习。

Part 1

编程语言有很多,Pascal、C、C++、Java、Python等,为什么要选C++呢?
信奥原来有三种编程语言可选择,分别是pascal,C和C++,但在各类信息学竞赛中由于程序速度、代码灵活等各种原因,99%以上的选手都会选用C++语言,还有就是大多数相关资料所涉及代码为C++语言,选择C++会更有利于学习探讨、交流。
依据国际信息学奥林匹克比赛(IOI)的相关最新决议,CCF做出以下决定:
1、2020年开端,除NOIP以外的NOI系列其他赛事(包含冬令营、CTSC、APIO、NOI)将不再支撑Pascal语言和C语言;
2、从2022年开端,NOIP比赛也将不再支撑Pascal语言。即从NOIP2022开端,NOI系列的一切赛事将悉数取消Pascal语言。在无新增程序规划语言的状况下,NOI系列赛事自2022开端将仅支撑C++语言。

Part 2
既然想用C++写出第一个欢迎程序“hello world”,还是要了解下这个语言的来龙去脉。


Part 3

C++语言能够运用规范模板库,极大便利程序规划,如比赛中经常用到的排序,如果用C语言需自己编写排序函数,但C++供给规范的排序算法,其时间杂乱度为O(NlogN),这已相当高效了。
比赛中运用C++语言,并不需要选手完全掌握C++语言,一些较难的内容并不学习,也为后期更复杂的运用打下基础,另外受IOI影响,在信息学比赛学习中选用C++也成了必然趋势,现在绝大多数学生也会选择C++作为信息学程序语言。
C++的学习能够培育孩子的思想能力,训练创新思想。C++课程中,需要学习组合数学、图论、根本算法、数据结构、搜索算法及数学建模等知识,能够加深学生对数学的了解,提高孩子的逻辑思想,而这些又能帮助其更好地学习其他学科。
至于从哪个年龄段去学,我的感觉是适合就好,小学四五年级就可以开端学习C++,经过C++语言的学习培育编程思想和着手能力,对C++代码有根本的认知。经过体系学习,建立根本的编程思想,把握根本指令(包含输入输出句子、运算符、变量的运用、顺序结构、分页结构、循环结构的根本运用)等,这时能够对杂乱的数学和逻辑问题有着更好的了解。当孩子开始具备了编程根底,再进行进阶学习时,就能够从高深的编程语言下手了。

Part 4
不可否认的是,C++是一门难学的编程言语,但静下心来学还是可以接受的。想学好它或者想学好C++去参加信奥,必须要有明确的目标和为目标学习下去的勇气和毅力。
因为C语言的学习相对比较枯燥,过程中也必然会经历一段焦躁期。这个时候特别需要家长支持、鼓励和不放弃。
必须要多练习、多动脑、多思考、多总结。这个时候一定要有错题本儿。因为信奥其实是一个黑盒测试,就是给你一个输入。然后让你得到一个输出。这时,某一些输入能得到正确的输出,但是也有一些输入得不到。这时就需要在做题的过程中去多次总结错误的情况和细节。反复纠错、积累经验,增加自己编程的能力。
在解题或比赛的过程中,有很多同学不是不会编这道程序,能编也编的出来,但是因为会忽略掉某一些细节,导致这个程序得不到满分。
学习最快的方法就是有老师的指导,一定要相信老师的专业性。遇到问题,一定要及时沟通,有什么问题及时跟老师提,可以随时去调整进度和安排。

Part 5
转入正题,再说估计有人脑袋要炸了,但这篇就是要了解下自己使用的工具,所以还是建议认真准备下。
信息学奥赛中选用的开发工具是Dev-C++,虽然官方已经停止维护该开发工具,Last Update停止在 2016-11-29,但对于初学C++来说,不失为是一种非常适合入门的应用,大家可以到如下网站去下载安装包:
https://sourceforge.net/projects/orwelldevcpp/

最新版本是下面这个:

具体安装过程这边不赘述,但安装完成后打开之时,大家要留意选择“简体中文”。尤其是低龄学生学习更方便一些。


Part 6
下面我们通过一段经典的入门程序——“hello world”,来大致了解下c++代码的基本格式:
#include <iostream>using namespace std;
int main()
{
cout << "Hello world!";
return 0;}
如果这是你第一次编写程序,可以尝试把上面的代码复制一份,并且你成功执行了上述过程,那么恭喜你!你已经完成了每一名程序设计者在开始学习编程时接触到的第一个,也是最有价值的一个编程任务:“你好,世界!”。
编写程序输出helloworld,对于编程者来说,是十分具有意义的一刻——这标志着你正式走进了编程的殿堂,你所将要学习的一切编程技巧,都会从此时此刻开始加入你的知识库。
欢迎成为一名编程者!
Welcome, Coder, to the world of Programming!
接下来我们解析下代码,里面很多词可能枯燥,慢慢理解,理解不了就无视。
第1行代码:
“#include
软件开发领域里面有个名词叫做:不要重复造轮子。什么意思呢?比较浅显的比喻就是,我们看到路上跑的那些车,比如本田车的轮胎不是本田公司自己从零开始生产的,而是可能直接用邓禄普轮胎,跑了6万公里换轮胎的时候,你还可以换成是米其林的。软件领域里就是说一些公用的通用的已经写好了的方法,我们不用重复去写,直接拿来调用使用就可以了,省去了很多的不必要的重复劳动。毕竟,时间就是金钱啊。计算机从某个角度来说不就是为了帮人类节省时间吗?
#include
第2行代码:
"using namespace std;",c++不同于c的地方其中一个就是多了这么一个命名空间,这个是c++中必须要有的。关于用这个命名空间的原因,我们打个比方,随着工业革命的蓬勃发展,能够提供轮子的厂商越来越多,当我们联络的两个厂商中,都提供轮子给你时,你就要说明清楚,是要A厂商的轮子,还是B厂商的轮子。对应:随着C++的蓬勃发展,能能够提供相同方法的头文件越多越多,当我们引用的两个头文件中,都提供同样的方法(比如lunzi())给你时,你就要说明清楚,是要A文件的方法(lunzi()),还是B文件的方法(lunzi()),因此,在引入头文件之后,我们需要有个命名空间来标识,用的是谁的方法。姑且这么理解,如果还是不理解,放过也无妨。
第3行代码:
"int main()",int表示的是“整型”数据类型,声明这个函数会给调用者返回一个整数值,这个之后的课程我们会深入去学习。main就是这个函数的名字,用于区分该源代码中的其他函数以及方便被其他函数或方法体调用。关于函数,也会在以后进一步来学习。这边main是比较特殊的函数,它是主函数,是这个源代码中的入口,等这个hello world编译成为exe二进制文件后,运行该文件时,就是从这个main函数开始执行。函数名后面跟着的是小括号,这个格式一定要记得,括号里面也可以放一些参数进去。
第4行代码:
是一个大括号,它标识一段代码块的开始,这里跟第7行的大括号是成对出现的,第7行的大括号标识的是这一段代码块的结束。大括号包裹着的内容,就是这个函数能够起到的作用,比如功能等等。
第5行代码:
“cout << "Hello World!" ;”,cout就是用的iostream这个厂商提供的轮子(方法),作用就是输出“<<”后面的内容,"<<"是可以连续使用的,比如你可以试试cout<<"Hello World!"<<"娃哈哈"<<123<<"达拉崩吧"<<endl;这里最后的"endl"作用是换行,大家都可以实际操作代码来试试。
第6行代码:
"return 0;",表示的返回值,也就是main这个方法,你调用了它之后,它给你反馈的一个信息,就好比是,你问他5+3等于多少,它给你回答8差不多的意思,具体内涵会在以后学习到函数的时候来详细阐述,另外,这个回答的内容,跟main前面的int类型也有关系,当然也是后话。
以上就是对我们第一个c++代码进行的逐行解析,目的也是想通过这样的方式告诉大家,学习编程,就是要学会阅读代码,而阅读代码,就是需要一行一行的读懂每一条指令,有同学一听头就大了,那动辄几百行的代码,不得看的两眼昏花吗?别担心,熟悉了之后,一目十行甚至一目百行都是可能的。
实际操练一下:
大家打开Dev c++后通过“Ctrl+N”快捷键新建一源文件,然后试着敲完上述代码,“Ctrl+S”快捷键按照下述方式保存后,按下“F11”快捷键编译运行看看效果吧。

未来每节课内容不会很多,关键是希望想学的同学一定要自己动手实践,把代码可以熟练运用到不用“临摹”,都可以自行完成为止,就好比写作文一样。课后大家也可以试试尝试不同的输出内容。

Part 7
目前,我们知道了C++的Hello World程序写法、运行的结果样式和代码含义,接下来可以思考一下。





