我如何学习C? (是计算机项目)

你能帮我写一个这个问题的代码吗? 你有一个Arduino Uno,8个LED连接到数字引脚2到9。 创建一个包含8个元素的数组。填写2到9之间的随机数(全包) 编写一个程序,确定其中最大的数字。将此数字保存在名为max的变量中。在串行监视器上打印此号码。闪烁连接到此号码的LED。让延迟时间为0.5秒。

请注意,随机函数可能会导致生成重复的数字。例如,生成的数组可能是{3,4,4,7,6,2,5,7}

最大数量为7.由于它在数组中出现两次,那么你应该将它闪烁两次^ _ ^ 它是阵列中出现3次的最大数量,然后你应该闪烁3次,因此对于任意次数都会闪烁

到目前为止我写过这个,但我确定这一切都是错的

int pins[8]={2, 3, 4, 5, 6, 7, 8,9};

void setup() 
{
   pinMode(pins[8], OUTPUT);
}

void loop() 
{
    x=random(0, 8);
    digitalWrite(pins[x], HIGH);
    delay(1000)
    digitalWrite(pins[x], LOW);
    delay(1000)
}
3
这是糟糕的家庭作业,因为他们只给了一个延迟,但期待图案闪烁。无论如何,通过想象你是一个机器人一次显示一个数字来接近这一点。你可以在可重写的暂存器上使用什么非常有效的注释(即,最少数量的变量)如果你假设数字列表可以任意长,它将有助于找到最佳解决方案...
额外 作者 rossp,
坦率地说,没有合理的理由将引脚放在阵列中,因为它们的范围是连续的。唯一需要的数组是输入数据。并且只需要两个局部变量和迭代器变量来解决问题。基本上,编写代码还为时过早。 找出算法
额外 作者 rossp,
对不起,但是这个网站有一个问题“如何学习C”。首先,您可以询问 Stack Overflow 这是一个编程站点。但即使在那里,他们也可能会告诉你读一本书或做一个教程。 Stack Exchange旨在回答特定问题,而不是“教C”(或学习如何飞行,或学习如何烹饪)。我要结束这个问题。随意使用新信息进行编辑。感谢您的理解与合作!
额外 作者 Nick Gammon,
@JRobert我陷入了if语句和数组我真的无法理解它们也应该是for循环
额外 作者 athanassis,
你会如何在纸上/物理上模拟这个?例如,使用N头尾币作为LED .....
额外 作者 Dave X,
好一点改进,引脚[8]未定义,因为C索引从0开始,所以在代码中只定义了引脚[0] ...引脚[7]。也许你可以在那里使用for(;;)循环?另外,尝试编译代码 - 如果编译器检测到并报告错误,它可能会帮助您优化逻辑。
额外 作者 Dave X,
@Chris Stratton。是的是的。在编码之前确定算法是最好的。但是由于OP已经有了没有算法的代码,我想我会将它们指向编辑 - 编译 - 测试周期的第二步。也许语法错误会提供足够的线索。
额外 作者 Dave X,
这个答案适用于C,这与Arduino非常相似。请仔细阅读,它讲授阵列: dummies.com/how-to/content/…
额外 作者 Nayt Grochowski,

1 答案

第一个提示:pinMode()一次只适用于一个引脚。您需要执行8次以初始化8个I/O引脚模式。

第二个提示:正如@ChrisStratton试图建议的那样,先生成随机数集;然后“弄清楚”(在内存中设置一些会告诉你的变量)终端输出和数字I/O有什么作用;然后做每一件事。它有助于将较大的问题划分为较小的问题。

Update: Considering your updated title, How do I learn C?, and since the question reads like a homework assignment, aren't you already taking a class in C or C++? If so, how do you find it lacking, i.e., what additional resources or direction would be most helpful to you? There are a number of good books on the C language, and one of those would be a good place to start. If you don't already have a favorite one, you can't go wrong with The C Programming Language, by Brian Kernighan & Dennis Ritchie, the authors/designers of the C language and its early compilers. It is book on the C language, not on programming per-se, so if you are new to programming as well, a programming tutorial would be an excellent additional choice (sorry I don't have one to recommend).

其次,打败ArduinoIDE附带的示例程序:单击“打开”按钮[IDE工具栏上的向上箭头图标;不是文件|打开菜单],您将看到当前草图的菜单,并在休息下方看到示例程序的类别。选择其中一个示例,阅读它并尝试理解它的作用以及为什么它按照它的方式编写。然后调整它的### p - 既要了解它的表现方式如何,也要打破它。您将通过以下方式学到很多东西:a)解释编译器的错误消息,以及b)找到并修复您的错误。如果你没有像你成功那样经常破坏你的程序的两倍,那你就不会努力了!

2
额外