向初中的高中生讲授C ++:划清界限?


35

我将指导一组高中生参加FIRST机器人大赛,这里的大多数团队都使用C ++开发他们的机器人软件。对于团队中的许多学生来说,这将是他们的编程入门。我不会选择C ++向高中生教授编程(例如,我认为使用Python或Javascript会更容易),但是选择已经确定。

我想教给他们适当的C ++(即避免使用混合的C / C ++方言,即C +),但是我不想以不必要的复杂性来吓them他们。对于这个问题:

  • 我应该从第一天开始使用STL,尤其是。vector还是只坚持使用标准阵列?数组更易于引入,但指针错误可能更难捕捉。
  • 对于I / O,我应该坚持使用cout等等,还是您认为printf它更容易学习?
  • 是否有适合这些年轻人使用的C ++在线资源?

谢谢!

编辑:感谢这么多出色的答案。除了很多人建议的“ 加速C ++”外,我还发现“ C ++ For Everyone”是一本很好的书。


52
哦,天哪,请不要教任何人将javascript作为第一语言!
SoapBox 2011年

26
@SoapBox:相对于什么?我认为Java语言作为第一语言非常棒。您可以用几行代码来完成有趣的事情,没有启动开销来学习编译器和IDE等,它易于测试和调试,并且支持OO和函数式编程。有什么更好的办法吗?
凯文·克莱恩

7
为什么说数组更容易引入?我认为向量对于新手来说要直观得多,因为您不必考虑指针或类似的东西。
Casey Patton

19
如果您正在向高中生教授C ++,那么您已经越过了界限。
tylerl 2011年

7
教C ++的替代方法不是COBOL。
2011年

Answers:


40

我认为您应该从语言内置的数据类型开始,例如数组和指针,然后当您的学生理解这些数据类型时,继续进行类和OO,然后是STL。

原因是,您可以教人们理解数组,而不了解变量和底层计算机体系结构之外的其他知识,但是如果不先教vector他们类,就不能教他们理解数组。如果您从一开始就使用STL,您的学生将不得不忍受不知道如何vector正确运行的线索。然后,当您达到这一点时,它们将对指针和数组以及您通过编写自己的向量类,编写自己的链表类等工作所获得的东西没有足够的了解。欣赏和利用其功能。当学生说“那是什么?”时,我很烦。老师说:“只要忽略它,您稍后就会学习。”

正如Demian在评论中指出的那样,解密从模板错误中获得的相对神秘的消息比理解从数组/非模板结构中获得的错误要困难得多。

我对cout和的感觉不一样printf。除了cout使用运算符重载之外,任何一个都不比另一个低级。

这可能看起来很愚蠢,但是我非常热衷于让人们在继续进行抽象之前了解所有事物的最基本的构建基块。在精通原始指针,数组之前没有向量之类的东西之前,您不应该使用智能指针。

我经常这样说,但我会再说一遍:最好先教学生长除法,然后让他们使用计算器,而不是先让学生使用计算器然后再教他们长除法。

至于教初学者的书籍,请参阅优秀C ++书籍总清单


4
我实际上有相同的看法,但是看了Strousrup的C ++教学书(stroustrup.com/Programming),他明确提倡使用vectorover数组。我好疼
recipriversexclusion

4
@recipriversexclusion:只是说明明显,但斯特劳斯先生是从一个高中生;)
德棉布莱希特

14
我的天啊。如何在世界上任何人都可以认为,手动操纵动态分配数组可能是C ++的“最简单的一”的路线,当有std::stringstd::vector?!那是32位C程序员赞成吗?我从事C ++的教学已有十年之久了,面向编程初学者,拥有Java一年的学生以及面向编程专业人士。我使用std::stringstd::vector从天一个。不管他们有什么内向,它们都易于使用。(您不会回避教VB的字符串,因为它的内部太复杂了吗?)
sbi 2011年

18
这是你的不赞成票。您不必学习建造房屋即可享受住在房屋中的好处。您不必能够编写std::vector就能使用它。类是C ++的一个极其基本的部分。基本的调试是使用本机数组和指针调试所有这些错误。
DeadMG 2011年

6
@DeadMG:房子的比喻不起作用。在房屋中,一旦建立了基础,您就无需再考虑它。您只需继续构建其他所有内容。在C ++中,瞬间你看到的new关键字,你说得对回内存管理terrirory。通常,库会要求提供指针,而您需要问自己:“这是否要取得所有权?还是我还需要清理它?”。踩我的脚。更像指甲,填缝之类的东西。
克里斯·埃伯勒

38

这是我自己的经验。不管它的价值如何。

回首来时我开始编程,我真希望我也不会学到内存第一。不,这并不令人兴奋。它会让你生气。但这是一个非常容易教授的概念。只需显示一维表格并进行一些心理锻炼即可:

第1课:
这是10个字节的内存。这是在单元格编号3中放入的字母“ a”。“ a”是值,而3是地址。好?这是放在单元格5中的数字3。它的值是3,地址是5。现在数字3意味着什么?嗯,它可能只是数字3-或-可能是对地址 3 的引用。就像1可能是数字或国家代码一样。这只是一个数字,这完全取决于我们如何对待它。

第2课:
让我们学习以二进制计算。让我们使用二进制手指计数到10。有趣吗?看看那只需要四根手指吗?所以我们说只需要4位(1/2单元)。您一方面可以指望的最高数字(答案是31)。两只手怎么样(答案是1023)。说明更多的位意味着更大的数字范围。提醒他们存储单元为8位。问一个数字需要多于8位会发生什么。他们如何将多字节数字(以逻辑方式)放入内存?将它们介绍给char,short,integer和longs。

第3课:
这是我用C ++编写的程序。它使用32位整数。这也是一个数字。但这是用于指向的数字。通过使用这个小小的星号小东西,我们可以保证该数字将用于指向。这就是我们将其指向第一个数字的方式。小号“&”号为我们填充了价值。整洁吧?

等。一旦您掌握了基本的内存,其他所有的事情都会变得很困难。贫穷的学生认为编译器所做的事情很神奇(或者他们从不必考虑内存管理),他们的挣扎最多。而C ++则使事情更加混乱,因为有些东西会自动清理(即正常向量),而其他东西却没有(例如使用“ new”分配的向量)不会自动清理。而且甚至不要让我开始使用字符串(char *与std :: string -在没有指针知识的情况下尝试进行解释)。

我不知道您的机器人竞赛将针对哪个平台,但是如果在有限的内存环境中,则内存管理技能至关重要。

编辑

一旦您教会了他们基础知识,那么是的,我会说一路走C ++。从技术上讲,它们只是不同的库,但是是的,将它们与多个范例混淆是没有意义的。给他们C ++工具(包括指针和数组)。


这是一个很好的回应。我认为的问题是,您可以教给很多孩子(我是一个因为缺乏兴趣而在指针/内存概念上苦苦挣扎的孩子)的人,他们会把它调出来,因为它虽然很有趣,但它并不有趣在C ++中成功编程。
基思·莱恩

3
是的,这里没有争论。出于同样的原因,孩子们会调整数学和地理。直到后来,他们才意识到自己应该一直在关注。可以肯定的是,仍然没有解决特定的问题。
克里斯·埃伯勒

+1。我记得在我被介绍给C ++之后很长时间才将我对内存如何工作的理解加在一起。不过,我认为我不可能事先理解它(从任何实际意义上讲,例如表示值的方式)。
卡梅伦

+1,这就是我想说的,但更好。在培训机械师时,在让他们成为驾驶专家之前,他们必须了解发动机。
塞斯·卡内基

是的,我来回学习有关初学者是否可以理解这一点。这太容易了(您突然发现自己在说:“哇,计算机真是愚蠢的机器,不是吗?”),但是这要求他们注意并坚持承诺会出现更多激动人心的事情。看不到“全局”会使整体方法麻木。
克里斯·埃伯勒

31

我应该从第一天开始使用STL,尤其是。向量还是坚持使用标准数组?数组更易于引入,但指针错误可能更难捕捉。

肯定会直接使用标准库类型。一个std::string或者std::vector是什么,他们应该经常使用和(绝大多数的实现),这些类型提供某种形式的错误检测和错误处理的,而抽象很多是从学生的复杂性。

您可以花大量时间教学生如何构造内存以及如何管理内存(C风格),也可以直接使用该语言的惯用类型进行工作,然后在需要时解释实现细节(以及在有知识的情况下更好地了解什么是数组以及在哪里使用它们)。

std::vector(创建/读取/写入)的语法并不比C数组复杂得多。相比之下,手动内存管理以及新学习者使用C数组所犯的所有常见错误要难于学习,教导和使用。

对于I / O,我应该坚持使用cout等吗?还是您认为printf更容易学习?

cout。就个人而言,我认为这cout更容易学习。也许更重要的是,您应该选择cout它,因为它更安全,更通用,并且允许您定义对象的打印方式,这意味着您已经使用某些标准库类型具有内置的功能和类型安全性。最后,你会刚刚结束了与混合程序,当你意识到,他们可能还需要学习cout除了printf

实际上,我认为您应该阅读Koenig和Moo撰写的Accelerated C ++, 并可能将其用于教学(间接回答问题3)。在这本书中,他们std::cout只是在开始介绍return(第3页),并保存指针和数组,直到第10章为止。(注意:我建议您从教学C ++的角度阅读它)。

编辑 这是序言

是否有适合这些年轻人使用的C ++在线资源?

如果您不想使用Accelerated C ++(通常确实需要一些编程背景),那么也许您会喜欢Eckel的C ++思维。我没有读过它,但是它是自由分发的C ++简介文本。


1
+1 ...,我大声疾呼“他们在返回前介绍了std :: cout(第3页)”:必须偷看一下它:)
Felix Dombek

1
@Felix以及在std::cout介绍之前,直接介绍了花括号=)(这是无处不在的“ Hello,World”的简单剖析)
justin

1
我衷心地赞同Koenig和Moo的书的建议。它的目标是教授C ++和编程。Bruce Eckle的《 C ++思维》的主要目的是向那些曾经使用过过程语言(例如C或Basic)的人讲授C ++。
斯蒂芬·斯蒂尔

11

要考虑的一件事是,在任何形式的典型FIRST代码中,数据结构(结构,类,数组,向量,列表)的作用很小。通常,您需要处理非常少量的传感器数据,并使用它来决定非常少量的执行器运动。

但是,什么发挥了巨大的作用,并且可以非常难以理解都是不同形式的控制是继续。

因此,我将重点放在控制上。先从基础:ifforwhile。让他们练习很多。让他们很好地了解这些。

...但随后变得更加困难。任何中等大小的机器人代码最终都会陷入一些棘手的控制模式:

  • 大的“主”循环,可以调用所有内容

  • 状态机(显示很多)

  • 保存先前的值/运行计数器(如PID)

这些对于初学者来说很难理解。考虑到程序如何在这样的代码中移动是令人困惑的,您可能现在没有意识到,但事实确实如此。这将给您的学生带来比语言本身更多的麻烦。

另外,祝你好运!希望这个季节顺利。


2
+1; 这不是常规的桌面环境,而是真正的嵌入式代码。状态机比std :: vector vs数组重要得多。
MSalters 2011年

8
  • 我应该从第一天开始使用STL,尤其是。vector还是只坚持使用标准阵列?数组更易于引入,但指针错误可能更难捕捉。

数组的问题在于,除了简单的教科书示例外,任何其他内容都需要动态调整大小的数组,而当您需要动态调整大小的数组时,此操作std::vector就容易得多。同样,安全处理动态大小的数组的唯一方法是将它们包装在您自己的类中,这将是很糟糕的事情std::vector
与莫名其妙的普遍看法相反,学生可以使用需要实施复杂机制的功能,而无需自己了解如何实施此类野兽。正如我在评论中所说:您甚至不会考虑不以其他语言来教授字符串,只是因为它们的实现很复杂,对吗?

  • 对于I / O,我应该坚持使用cout等等,还是您认为printf它更容易学习?

为什么使用一组过时的格式字符串约定,使您的程序在出现错误时(如果您typedef在某些看似无关的标头中更改a时就发生了崩溃)比屋顶的安全性高std::cout呢?

  • 是否有适合这些年轻人使用的C ++在线资源?

无论在线与否,大多数C ++资源都是不好的。我并不是在谈论使用难以阅读的字体或语言。我说的是明显的事实错误。好的C ++资源很少,主要是一两本书。我所知道的唯一在线内容是Bruce Eckel的C ++思维


十年来,我一直以Koenig / Moo的Accelerated C ++为基础,向背景迥异的学生教授C ++ 。在那十年中,我的课程发生了很大变化,除了基本原理外,现在与本书相距甚远:从一开始就使用现代,正确,安全的习语。不要教你的学生如何手动操作记忆,只是为了让他们以后不再学习,而是为了更安全的习惯。正如您在此处提供的一些答案中所看到的,这是行不通的:那些曾经首先教过手动方法的人很少会理解使用现代,安全的习惯用法的优势。


7

如果要教C ++,我将直接从vector和cout的C ++结构开始,而不是像printf这样的C子集。


7

我应该从第一天开始使用STL吗?

是。在C ++中使用本机数组容易出错,并且99%的时间都是错误的做法。

对于I / O,我应该坚持使用cout等吗?

是。

是否有适合这些年轻人使用的C ++在线资源?

他们还不算年轻。学习编程不需要智慧,只需要动力和开放的胸怀。我想不出高中最后两年教过的任何东西,可以更好地让学生准备学习编程。您是否看过Bruce Eckel的C ++思维?它可以免费下载并经过很好的审查。请避免使用流行但可怕的C ++:如何编程以及所有Sam的自学C ++ ...书籍。


5

我学会了C ++在高中的第一个编程语言,但它更像是“C +”,现在你提到它; 我们曾经使用cout过向控制台和文件中写入文本的方法,但是也有很多C函数(这getch()是我的最爱)。

我认为最有效的(可能是有趣的)基础知识教学方法是使用面向目标的课程:首先显示如何输出内容,然后是键盘输入,然后是简单的文件I / O,等等。基于游戏的游戏(或等同的机器人游戏)。然后,当他们问“我该怎么做X?”时,您可以按照他们已经看过的示例细分X,例如“首先,您需要像在Z中所做的那样从用户那里获取输入,然后......”(显然这不是很容易在实践中,因为X很可能是,他们需要更多的知识才能做,比如什么‘3D图形’,但你仍然可以解释它是如何在高级别工作道路)。

您所展示的示例将以黑盒复制粘贴的魔术开始,随着编程难题的慢慢被发现,其奥秘得以揭开。例如,您的学生将if很快学习s 的基础知识,但他们可能不会意识到布尔表达式不仅仅限于在if的条件下使用(导致经典if (blah) return true; else return false;代码)。

首先,对于学生来说,选择数组还是向量作为容器的微妙之处似乎无关紧要。向量/数组只是将许多变量作为一个变量(可通过索引访问)的一种方式。尽量坚持下去。指针直到以后也不会被理解。这并不是说您不应该解释任何事情;只是您无法一次解释所有内容,而您所做的解释也不会被完全吸收。人类是有机地学习,而不是线性学习。我已经使用cout几年,直到我正确理解什么是运算符重载!

哦,不要害怕重复。“这就像我们所做的“ Hello World”程序一样,还记得我们如何向控制台编写文本吗?” (不。。。)“让我们再次检查一下以确保。” ...问问题!让学生参与有趣的示例并进行大量互动。

C ++是一门复杂的语言,无论您做什么,都会使学生失去大量的复杂性(以及一般编程技巧)。您向他们展示的所有内容对他们来说都是新的。大多数内容不会深入了解(至少不是马上)。大多数人都无法正确理解内存的工作方式,PC组件如何交互,堆栈和堆是什么,指针,类,甚至循环以及if-else链。还行吧!不一定非要使用它们-可以用超丑陋的1000行函数编写代码,这些函数带有五重嵌套的冗余ifs和43个名为like的变量,数量惊人x_2r。重要的是学生要不断学习和提高。只要黑匣子从长远来看是透明的(或至少是半透明的灰色),就可以使用。在课程结束时,他们可能不知道什么是设计模式,但是他们应该能够回顾一下前几周编写的程序,并对代码有所畏惧。他们应该在相当详细的水平上理解他们编写的第一个程序是如何工作的(而在编写程序时他们并不知道)。但是他们还一无所知


5

从高中到大学,我一生中参加了许多编程课程。我可以说,除了如何将内容打印到流中之外,我真的没有从我的第一个c ++类中学到太多。

我的建议是,作为一名年轻的学生,过去几年才从事开发人员工作,但不要愚弄他们。告诉他们他们在做什么以及它在操作系统级别上的工作方式(无需参与IMO入门)。

我认为教他们C是解决问题的更好方法(如您所知,它几乎始终会像C ++一样进行编译)。教他们终端的真正含义,程序如何与之交互,字符串是在内存中以\ 0结尾的char数组,malloc是什么以及C ++如何抽象它,char和int如何存储在内存中等等...这些东西使某人在开发中遇到问题时实际上知道如何解决问题。

我不能强调让孩子们学习节目并在那里主要回答问题的重要性。以我的经验,您通过使用语言来学习。书籍和课程可能对您有所帮助,并且是入门必不可少的。但是最后,我说给他们一个C / C ++文件,然后说:这是X的示例,我希望您做Y(可以做通过入侵X)。向他们展示如何使用手册页(如果他们正在使用* NIX)或向他们展示cplusplus.com,并让他们探索std库以自行解决问题。

TL; DR让孩子们自学。在那里提供结构并回答问题。

另外:链接列表是事实!


4

您不是在以一般的方式教他们编程,而是在教他们使用Robots之类的嵌入式编程。如果我理解正确。

首先,我认为您应该检查将要使用的库以及所需的库。

如果您碰巧有一个C库可以使用或带有很多指针和C数组的C语言库,那么我想您需要一种教他们如何使用它或为什么使用它的方法。

但是,您可以向他们展示一些简单的代码,以使它们从字符串和向量开始,这就是C ++的工作方式。这并不意味着您不能教他们指针。

也许您应该清楚使用STL的低级C ++(类似于C)和高级C ++之间的区别。对于初学者来说,C ++中最困难的事情之一就是了解什么是C,什么是C ++以及不同的系统API。

因为这里的目标不是学习通用编程,而是参加机器人竞赛,所以我将教学定位为这种方式。


2

去年下半年,我开始教学生C ++;今年夏天,我也为我们的FIRST机器人技术团队教书。

我们正在使用Stroustrup的编程-使用C ++的原理和实践。我发现这本书平易近人,易读且井井有条。我们大约有6名学生自己阅读了这些章节。我在那里帮助他们解决术语和问题。他们完成了本书中的所有练习。

我让学生们学习了第14章。跳过了有关流的章节(对FRC编程无用)。第14章很有用,因为它们获得了子类的介绍。但是,为了更好地理解与子类相关的构造函数和析构函数,他们可能需要在书中走得更远。

不要小看你的学生。学生们乐于拥有本书,阅读,学习和练习;那是在夏天的时候!有很多不懂的学生。他们应该继续前进。并非所有人都了解编程。

最大的障碍不是语言或书籍;这是开发环境。Visual Studio Express对初次使用的用户可能会令人望而生畏。在帮助学生专注于编程而非环境方面,您可能会很有价值。但是,学习环境非常有价值,因为程序员会花费大量时间来适应新的开发系统。

祝好运。


+1:到目前为止的最佳答案。课本的绝佳选择。恭喜您成功。
凯文·克莱恩

1

您说您想教他们C ++,但不想教他们任何C构造,但是它们首先需要知道的大多数编程构造对于所有语言都是通用的,并且C ++版本植根于C:

  1. 这就是您制作程序的方式[int main(..){return 0; }]。提供您也希望他们尝试的编程环境的基本概述。他们将需要知道如何制作一个项目并实际编译/运行它。

  2. 这是一个变量。变量可以存储数据(int,char,float等)。

  3. 字符串(C ++字符串更易于在cin中使用)。

  4. 这就是您读写数据(cin,cout)的方式。“你好,%s!”

  5. 有条件的(计算机需要做出决定)。

  6. 循环(计算机擅长一遍又一遍地做同样的事情)。显示while和for循环。

每个课程大约需要一个小时的两个课。确保准备一组简明的注释,以便在实际组件中可以参考。您并不是想让他们成为优秀的程序员,而是举一些示例,说明如何从控制台读取内容,创建结构以及他们需要做的所有其他事情。仅使用语言支持的功能,而不使用自定义实用程序库。您只会让他们更加困惑。

从一开始,以身作则,并向他们展示布局合理的示例。缩进应该正确,括号和括号应与您最习惯的样式一致。变量名应该有意义。如果以slop为例,他们将了解到slop是可以接受的。这是一个糟糕的起点。强调缩进正确的重要性-我发现,当我教的很多东西一致地缩进他们的代码时,他们可以更容易地看到它们出了问题的地方。那是因为它们的大多数错误都是错误的操作范围(将操作放入并非本应是的循环/条件或相反的操作)中。

然后继续进行实际工作。学习某些东西的最好方法是打破它,找出原因。您将要确保它们具有易于使用的环境来编译其代码。用分发的屏幕截图记录下来。

一个帮助我理解其中一些概念的好例子是构建可乐机:

  • 输出项目和价格菜单(存储菜单是用户定义的结构的数组。可以是C ++中的类)。输出它需要一个循环。
  • 读入用户的选择。
  • 向用户索要钱。他们可以输入以美分计的硬币面额(澳元为1、5、10、20、50、100、200)。忽略未知的面额。当用户没有投入足够的钱时,继续询问(循环)。
  • 计算所需的零钱(模数除法),得到最少的硬币数。将输出打印到屏幕上。
  • 等待下一个用户。

之后,您可以转到C ++结构。您不想在他们至少可以编写基本程序之前就投入太多。

最重要的是,有大量的业余时间和耐心来解决问题。将会有很多,其中大多数会使您畏缩,因为它们是如此琐碎,答案对您来说显而易见。


1

我认为您不应该从C ++的角度(“ C ++ hello world”)教事物,而应该从问题域(在这种情况下为机器人技术)的角度教事物。因此,您好,您的世界会闪烁LED或驱动电机。

当然,您可以/应该将每个微小的机器人任务分解为一部分在概念上有意义的C ++动作,这些动作涉及类型,函数和IO操作。

至于我自己,我不是专业的程序员,而是尝试学习Java,C ++和Python。当我遇到真正的(简单)问题时,我真的真正开始实现某些东西(Python)。这使我很正确,避免了过多地关注语言本身的附带实现细节。

因此,我建议您:不要阅读某种语言的手册,而要学习使用您选择的语言来做事。我认为,这就是保持人们动力的原因。


0

我会教严格的C ++。您知道如何编写printf并将其赋予小参数或错误类型时发生奇怪的事情吗?如果使用无效的指针,可能会发生不好的事情?别教

从第一天开始,我将教如何使用引用,STL,并告诉您使用指针的损失标记。也不要教智能指针。我唯一发现使用指针的时间是在执行GUI且对象(例如图像框)必须存在且为有效图像或null时。对于控制台编程,我已经很长时间没有使用指针(智能指针或原始指针)了。

所以总之不要教给他们任何可能给他们带来麻烦的东西。教iostream,结构,并告诉他们在类型转换中也失去了标记,不要尝试教授设计。您不希望任何人成为经验丰富的专业人员


0

这不是一个C ++讲座系列,但是Richard Buckland的COMP1917是关于C语言编程的出色的讲座系列(紧随其后的是COMP1927,数据结构)。

以我个人的观点,C ++对新生来说过于复杂,但是C更简单了,为新C ++程序员经常缺乏的系统编程奠定了良好的基础。


0

我将从大量的样板代码开始,帮助他们立即通过编程“做一些很酷的事情”,并加深他们对事情随着时间的推移的理解。他们不需要欣赏或理解C ++的所有复杂性即可使LED闪烁。他们只需要知道“如果将此代码放在此处,它将使LED闪烁”。然后“嘿,让我们谈谈现在是一个循环,如果编写一个循环,您可以使LED闪烁50次而无需编写50行代码,这不是很酷吗?” 现在让我们来谈谈条件条件,当用户按下控制盒上的按钮A时,我们想激活气动按钮以升起一个标志,这就是我们添加代码来实现的条件。或者,如果控制箱上的开关2拨到ON位置,则我们将钻电机反向运行而不是向前运行。

如果您将重点放在“足够”地教导他们以解决他们感兴趣的问题上,那将使事情变得不那么压倒性,也更加平易近人。如果他们真的很感兴趣,并且想了解其中的复杂性,他们可能会回去阅读一本关于编程的综合书籍,或者在当地的JC参加暑期课程。

列出机器人上“他们希望能够控制的事物”的清单,然后将每一个变成一堂课……他们至少需要知道……。

  • 如果开关处于特定设置中,会“看起来很酷”吗?
  • 告诉气动阀打开或关闭(例如:抓斗附件)?
  • 打开和关闭钻机电机(用于传动系统)?
  • 如果激活了障碍物检测传感器,可以使机器人改变方向?
  • 使机器人在2轮与4轮驱动模式之间切换?
  • 调整操纵杆的灵敏度?
  • 等等

我会坚持讲最简单的构造,就像我在printf上讲cout一样,因为格式说明符很容易混淆,错误的说明符通常是导致程序崩溃的自动秘诀。同样,向量混淆了某些内存管理的复杂性。不必担心事情如何运作或STL库是什么的每一个细节,只需完成X所需的最低知识(例如,可能需要使用STL库数据结构)


0

使用Deitel和Deitel的“ 如何编程C ++”。我认为这是很棒的教科书。

听起来您正在尝试教新手如何编程,然后让他们同时进行高级编程。如果您希望给他们一些猴子,请看一下猴子在编写代码片段,而无须理解,否则您注定要失败。

远离STL进行初学者学习。

如果您已经为自己的机器人提供了编码解决方案-或其外观非常好,那么您可以将教科书中的课程“映射”到机器人的编码任务。但是,让课本带动学习。

如果您强制输入代码,给学生非常狭窄的课程和对语言的了解,那么我认为随着您编写的代码海洋越来越大,这就像就像学会了划桨一样,您会淹死,因为真正的游泳是必须的。

这不是“他们应该学习cout还是printf?”的问题。这是一个足够学习的问题,需要深入了解如何针对给定的机器人编程任务来解决要编写的代码。

如果这是一项阅读任务,那么如果他们所知道的只是简单的主谓词句子,而您只需要知道一半的词汇量,结果将是什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.