【发布时间】:2020-09-29 09:13:58
【问题描述】:
我编写了我的第一个简单的 C 程序,它打印 3 、 5 以及 3 和 5 的倍数而不是数字,从 1 到 100。它可以工作。
我知道这个程序可以用数百万种不同的方式编写。专业的 C 程序员将如何实施最佳实践?作为一个完美主义者,我正在努力实现最高的最佳标准,主要是指针和专业的函数实现和预处理器。
#include <stdio.h>
void findMultiples(int n);
int main() {
findMultiples(100);
return 0;
}
void findMultiples(int n){
for (int i = 1; i <= n; i++)
if (i % 15 == 0){
printf("Multiple of 3 and 5\n");
}
else if (i % 5 == 0){
printf("Multiple of 5\n");
}
else if (i % 3 == 0){
printf("Multiple of 3\n");
}
else{
printf("%d\n", i);
}
}
【问题讨论】:
-
你可以稍微修正一下缩进,通常
{函数在行之后,for循环多行,鼓励将它括起来{ }。另一件事,几乎是个人喜好,将具有返回值而不是void的函数 -
假设代码有效,那么这个问题就是主题,应该在codereview.stackexchange.com 提问。在 SO 上是基于边界线的意见,过于宽泛。
-
(虽然这个特殊的小算法是著名的“Fizz Buzz”算法。如果你搜索“Fizz Buzz 优化”之类的,你会在网上找到很多例子。例如这个对于 CR 上的 Java:codereview.stackexchange.com/questions/74443/…)
-
代码将对 15 个连续数字的序列进行 39 次模运算。您可以通过始终执行
i % 3 == 0和i % 5 == 0运算并存储它们的结果来将其减少到 30 个模运算。 (除法和模运算相对昂贵。) -
void findMultiples(int n);bad name... 该函数不会在任何地方搜索任何内容(“查找”的含义)。我将其命名为printMultiples。此外,传递计算倍数的基础可能是一个好主意......并返回打印的倍数?int printMultiples(int limit, int *bases);这个新版本可以称为int p = printMultiples(100, (int[]){3, 5, 0});