2016-11-27 6 views
0

Я просто пытаюсь добавить все распространенные факторы 3 и 5, останавливаясь на сумму 1000. Я продолжаю получать ожидаемое выражение в строке 15:18. Есть ли кто-нибудь, кто может найти какие-либо новые ошибки или помочь? Это будет высоко ценится. Благодарю.Добавление общих факторов в C

#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; 
} 
+1

Проходите неинициализированный 'iter' переменную' cd_function() '. – YSC

+1

'sum + return ...' не то, что вы ожидаете – YSC

+0

Пожалуйста, перечитайте заявление о проблеме. Вы не останавливаетесь, когда сумма достигает 1000. – dasblinkenlight

ответ

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); 
} 

Существует два способа, чтобы иметь эти функции добавляют п просуммировать: либо пропускание суммы в качестве указателя (ссылок), это будет сделано так:

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); неправильно, МКЦ уже сказал это в своем комментарии. Поэтому вы должны либо использовать *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++) 
     ; 

b. Затем вы должны получить правильное условие выхода. Вы хотели бы суммировать все, пока не достигнете суммы> = 1000, поэтому напишите, что при условии:

for (i = 0; sum < 1000; i++) 
     /* ??? i < cd_function(iter, sum) */; 

c. В зависимости от реализации cd_function вы выбираете из выше, вы бы сейчас либо уравнять

 cd_function(i, &sum); 

или

 sum = cd_function(i, sum); 

д. И, наконец, вы должны добавить фигурные скобки, даже есть только один оператор:

for (i = 0; sum < 1000; i++) { 
     // option 1 
     cd_function(i, &sum); 
     // option 2 
     sum = cd_function(i, sum); 
    } 

остальное нормально:

return 0; 
} 
+0

Большое спасибо –

+1

@CarsonGedeus, пожалуйста, не говорите «спасибо» в комментарии, вместо этого принимайте ответы, это способ переполнения стека Спасибо ;) –