我只是想添加3和5的所有常见因子,以1000的总和停止。我在第15:18行继续获得预期的表达式。有没有人可以找到任何新的错误或帮助?非常感谢。感谢。
#include<stdio.h>
#include<stdlib.h>
/*Multiples of 3 and 5
If we list all natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6
and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.*/
int cd_function(int n, int sum)
{
if(sum >= 1000)
return 0;
if(n%3 == 0 || n%5 == 0)
sum + return cd_function(n, sum);
}
int main(void)
{
int i, iter, sum = 0;
for(i = 0; i < cd_function(iter, sum); i++)
sum++;
return 0;
}
答案 0 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
大多数人会在这里添加空格:
#include <stdio.h>
#include <stdlib.h>
int cd_function(int n, int sum)
{
if(sum >= 1000)
return 0;
if(n%3 == 0 || n%5 == 0)
sum + return cd_function(n, sum);
}
有两种方法,让这个函数将n加到sum:通过将sum作为指针(引用)传递,这将以这种方式完成:
void cd_function(int n, int * sum) {
// if (*sum >= 1000) - no need to test this here
if (!n%3 || !n%5) {
*sum += stuff;
}
}
或让函数返回新的总和:
int cd_function(int n, int sum) {
// if (sum >= 1000) - no need to test this here
if (!n%3 || !n%5) {
return sum + stuff;
} else {
return sum;
}
}
现在,sum + return cd_function(n, sum);
是错误的,YSC已在评论中说明了这一点。因此,您应该使用*sum += n;
或return sum + n;
(即将stuff
替换为上面的n
)。
int main(void)
{
int i, iter, sum = 0;
因为你不需要iter
,所以摆脱它:
int i, sum = 0;
for(i = 0; i < cd_function(iter, sum); i++)
sum++;
一个。如果你想总结一些[tm] i
s,那么你不应该在每次迭代中增加sum
。
for (i = 0; i < cd_function(iter, sum); i++)
;
湾然后你应该得到一个适当的退出条件。你想要总结所有东西,直到你得到一个&gt; = 1000的总和,所以在条件中写下:
for (i = 0; sum < 1000; i++)
/* ??? i < cd_function(iter, sum) */;
℃。根据您从上面选择的cd_function的实现,您现在可以调用
cd_function(i, &sum);
或
sum = cd_function(i, sum);
d。最后,你应该添加大括号,即使只有一个语句:
for (i = 0; sum < 1000; i++) {
// option 1
cd_function(i, &sum);
// option 2
sum = cd_function(i, sum);
}
休息很好:
return 0;
}