暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C++入门:试着写出“hello world”!

酷教 2020-04-29
805


我不是花迷,但最近华晨宇的一首《西门少年》中一句歌词对我感触很大。“野火烧不尽我们的野生野长”,一首老歌,不同的环境,不同的人唱,听出了不一样的感觉。
突然想现在很多的信息技术老师未尝不是在“野生野长”。他们很多都是从其他学科半途改科过来,有数学、有物理、有音乐、有体育。如果有人说我的信息技术是体育老师教的,一点都不用惊讶。
随着"人工智能"概念在互联网时代下快速发酵,人们对计算机的观念也发生了变化,编程也走进了K12,从小学到高中都有涉及,但很多老师看到编程两字却不敢去尝试,有教材但熟悉什么教什么。
其实,编程的学习不再只是"程序猿"的专属,编程的起跑线也多了孩子的身影,更多家庭开始愿意让孩子更早接触编程。开始严肃地将信息学看作一个与物理、化学一样的学科进行学习。在家长心目中,以程序设计为主要内容的信息学已经不是一个从小“学着玩”的东西,而是一个从孩子比较成熟的年纪开始,需要严肃对待的学科了。
今天起,“酷教”将由浅入深的讲一些编程的学习,希望大家能持续关注,零起点的老师和稍高年级的同学(9岁怎样?)都可以进来尝试。

既然要学习编程就不得不提一下信息学奥赛。

信息学奥赛的主旨在于经过比赛活动培育大批核算机爱好者,选拔优秀的计算机后备人才。信息学奥赛作为世界公认的五大奥赛之一,知识点涵盖广泛(如图论、动态规划、数据结构、数论等算法),其目的是拓宽学生的视野、培养思维、紧跟时代步伐,绝非培养青少年软件开发者!

简单来说:信息学 = 编程语言 + 算法。 信息学奥赛则考查学生对算法和编程能力的掌握。

就算法而言,同一种算法可以由不同的编程语言来写。不同的语言写的算法所实现的效果是一样的,只是它们在语法和运行效率上稍微有点差异而已。编程语言只是工具,验证、实现算法的工具!算法才是核心!

但"工具"掌握得不好,又无法支撑后续的算法学习。

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”,还是要了解下这个语言的来龙去脉。

一台计算机由被称为硬件的各种物理装置组成,这些硬件包括显示器、硬盘、鼠标、内存、处理器等。计算机在被称为计算机程序的机器指令序列的控制下对数据进行处理,进行一系列有序操作,我们通常所说的软件正是由程序的集合所组成。
人们可以用多种程序设计语言编写计算机指令,如今使用的计算机语言多达几百种,这些语言可以分为机器语言、汇编语言、高级语言
机器语言是计算机由能直接理解数字(0或1)组成的,不便理解,不便修改。汇编语言是由于编写机器语言费时费力所发明出来的,由具有英语风格的缩写词所构成。汇编语言也必须翻译为机器语言才能被计算机理解,计算机所能理解的也只有机器语言。
高级语言是在汇编语言的基础上发展而来的,第一种高级语言FORTRAN诞生于1954年,BASIC语言(1964)是由FORTRAN语言的简化而成的是为初学者规划的小型高档语言,C语言是1972年由美国贝尔实验室的D.M.Ritchie 研制成功的,而C++是由 AT&T Bell实验室于20世纪80年代初在C语言的根底上成功开发出来的。
C++是C语言的继承,它保留了C语言原有的一切长处,并增加了面向对象的机制。C++与C兼容,用C语言写的程序根本上能够不加修改地用于C++,从C++的姓名能够看出它是C的超集,C++既可用于面向过程的程序规划,又可用于面向对象的程序规划,是一种功能强大的混合型程序规划语言。
C++语言灵活,运算符的数据结构丰厚、具有结构化操控句子、程序执行效率高,被认为是一种高级语言,是一门系统级语言。
C++凭借先进的数值计算库、泛型编程等优势在各职业范畴应用颇多:网络游戏开发、服务器端开发、数字图像处理、网络软件、移动(手持)设备音视频技术、Socket网络通信等等。苹果/谷歌/微软等大型软硬件公司的体系或者软件上面都支撑C/C++语言的集成开发。
但新手学习C++很容易陷入误区,有一定的难度,有小伙伴学了很久才明白明白栈与堆、内存管理等的含义,所以K12教材中涉及编程但鲜有C语言出现。
关于C++的介绍这里只做简单交流,想深入学习请买一本相关的教材去看看,在实际运用中或随着学习的深入,建议把汇编语言也熟悉一下。


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",include就是引入、包含,iostream是c++语言中的头文件,在这个文件里面包括了很多已经写好的,可以直接给我们重复使用的常用的标准的输入输出函数或者说方法,比如:输入/输出、错误警告等。第5行代码中的cout方法就是该头文件提供的方法。

软件开发领域里面有个名词叫做:不要重复造轮子。什么意思呢?比较浅显的比喻就是,我们看到路上跑的那些车,比如本田车的轮胎不是本田公司自己从零开始生产的,而是可能直接用邓禄普轮胎,跑了6万公里换轮胎的时候,你还可以换成是米其林的。软件领域里就是说一些公用的通用的已经写好了的方法,我们不用重复去写,直接拿来调用使用就可以了,省去了很多的不必要的重复劳动。毕竟,时间就是金钱啊。计算机从某个角度来说不就是为了帮人类节省时间吗?

#include整条语句的意思就是你可以理解为,你的代码比喻为在生产一辆法拉利,然后你联系iostream这个厂商提供给你轮子、螺丝钉等这些原材料,这样,你在生产“法拉利”的时候,就可以直接用iostream厂家提供的轮子了,不用自个一个一个做轮子了,甚至做螺丝钉了。

第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程序写法、运行的结果样式和代码含义,接下来可以思考一下。

1. 你会使用Dev-C++工具创建C++文件了吗?不看教程,试试能否写出来?
2. 如果把代码里的"Hello World"改成"ABC",点击【编译运行】按钮后,会有什么变化?
3.尝试输出一首唐诗,自己能背熟的即可,尝试把唐诗换行输出。
有什么问题请在留言处留言,学习中交流是最好的方法。


声明  本文素材综合自网络,以上图文,贵在分享,版权归原作者及原出处所有,内容仅为作者观点,并不代表本公众号立场。如涉及版权等问题,请及时与我们联系。
    「您的每一个  对我们都是鼓励」
文章转载自酷教,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论