Как найти сумму Простых чисел в C в данном диапазоне?

Я очень плохо знаком с программированием, и меня попросили найти сумму простых чисел в данном диапазоне, используя в то время как петля. Если вход равняется 5, ответ должен быть 28 (2+3+5+7+11) . Я пытался писать код, но кажется, что логика не правильная.

КОДЕКС

#include 
int main()
{
    int range,test;
    int sum = 2;
    int n = 3;
    printf("Enter the range.");
    scanf("%i",range);
    while (range > 0)
    {
        int i =2;
        while(i

Было бы хорошо, если вы могли бы указать на мою ошибку и возможно сказать мне, как пойти об оттуда.

1
Я посмотрел на ваш код на взгляд и счел этикетку "концом" там, насколько я помню, что использование этикеток считают плохим стилем, потому что это делает кодовый пересмотр очень сложным
добавлено автор spin_eight, источник
ya просто удаляют этикетку goto, и она должна работать.
добавлено автор shalki, источник
@Shade I' ve, замеченные много торгового кода в C, используйте goto
добавлено автор Aniket Inge, источник
@shade, используя goto мало является хорошо практикой. ничто слишком неремонтируемое об этом
добавлено автор Aniket Inge, источник
Для примера 5 в вашем вопросе, что произведено фактическое ?
добавлено автор Some programmer dude, источник
Я didn' t спрашивают, что ожидал , продукция была, но фактическое .
добавлено автор Some programmer dude, источник
Если необходимо получить сумму начал, почему вы добавляете остаток от последнего подразделения испытания вместо этого? (сумма = суммирует +test) вместо (sum=sum+n)
добавлено автор Aki Suihkonen, источник
используйте разрыв вместо этого и удаляют конец: и это должно работать как прежде
добавлено автор scones, источник
@Aniket, хорошо, I' m не программист C и только читал о goto и почему вы никогда не должны использовать его. Однако, когда вы начинаете использовать немного тогда, вещи начинают уже становиться плохими - сколько немного? Один раз в немного линий? Однажды за функцию? И почему can' t вы структурируют ваш код лучшим способом, вместо того, чтобы срезать путь? Посмотрите stackoverflow.com/questions/46586/goto-still-considered-harm‌ ​ ful для большего количества информации (если вы чувствуете себя подобно ему, хотя).
добавлено автор Shade, источник
@Aniket, это doesn' t означают it' s хорошая практика. Если вам не нравится неремонтируемый код, который является.
добавлено автор Shade, источник
Просто быстрый кодовый качественный комментарий - don' t используют goto.
добавлено автор Shade, источник
@AkiSuihkonen Да, у вас есть пункт. Это должен быть sum=sum+n.
добавлено автор Shail, источник
@JoachimPileborg продукция должен быть "28".
добавлено автор Shail, источник

5 ответы

first of all, in the scanf use &range and not range

scanf("%i",&range);

Второй эта инструкция не правильна

sum = sum + test;

это должно быть

sum = sum + n;

и также

while (range > 0)

должен быть изменен на

while (range > 1)

Поскольку в вашем алгоритме вы уже поместили первый элемент диапазона в сумме сумма = 2 так, в то время как должен образовать петли диапазон - 1 времена и не диапазон времена

Это - все

4
добавлено
да действительно я обновлю свое спасибо ответа
добавлено автор MOHAMED, источник
%i работает также или лучше (признание ведьмы и octals)
добавлено автор Aki Suihkonen, источник
Спасибо за вашу помощь!
добавлено автор Shail, источник

Я не выполнил в C некоторое время, но я сделал бы несколько функций, чтобы упростить вашу логику:

#include 
#include 

int is_prime(n) {
    int i;

    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return 0;
        }
    }

    return 1;
}

int main() {
    int range, i, sum, num_primes = 0;

    printf("Enter the range: ");
    scanf("%d", &range);

    for (i = 2; num_primes < range; i++) {
        if (is_prime(i)) {
            sum += i;
            num_primes++;
        }
    }

    printf("The sum is %d", sum);

    return 0;
}

Используя goto и пихающий весь ваш код в главный () сделает вашу программу трудно, чтобы отладить.

0
добавлено
@Aniket: There' s никогда слишком много Пайтона.
добавлено автор Blender, источник
Слишком много питона в эти дни?:-)
добавлено автор Aniket Inge, источник
@Blender, Никогда не говорите Никогда:-),
добавлено автор Ashish Ahuja, источник

Попробуйте самый простой подход здесь. Проверить C программа, чтобы найти сумму всего начала между 1 и n числа.

КОДЕКС

#include 

int main()
{
    int i, j, n, isPrime, sum=0;

    /*
     * Reads a number from user
     */
    printf("Find sum of all prime between 1 to : ");
    scanf("%d", &n);

    /*
     * Finds all prime numbers between 1 to n
     */
    for(i=2; i<=n; i++)
    {

        /*
         * Checks if the current number i is Prime or not
         */
        isPrime = 1;
        for(j=2; j<=i/2 ;j++)
        {
            if(i%j==0)
            {
                isPrime = 0;
                break;
            }
        }

        /*
         * If i is Prime then add to sum
         */
        if(isPrime==1)
        {
            sum += i;
        }
    }

    printf("Sum of all prime numbers between 1 to %d = %d", n, sum);

    return 0;
}
0
добавлено

Хорошо, мой C действительно плох, но попробуйте что-то как следующий код. Вероятно, не собирает, но если это - домашняя работа или что-то, вы лучше изображаете его сами:

ОБНОВЛЕНИЕ: Сделанный им некоторое время петля согласно просьбе.

#include 
int main()
{
    int range, test, counter, innerCounter, sum = 1;
    int countPrimes = 1;
    int [50] primesArray;
    primesArray[0] = 1;

    printf("Enter the range.");
    scanf("%i",range);

    counter = 2;
    while (counter <= range) {
        for (innerCounter = 1; innerCounter < countPrimes; innerCounter++) {
            if (counter % primesArray[innerCounter] == 0)
                continue;
            primesArray[countPrimes + 1] = counter;
            countPrimes ++;
            sum += counter;
        }

        counter ++
    }

    printf("The sum is %i",sum);
    return 0;
}
0
добавлено

Копия - приклеиваемый от здесь.

#include 

  int main() {
        int i, n, count = 0, value = 2, flag = 1, total = 0;

        /* get the input value n from the user */
        printf("Enter the value for n:");
        scanf("%d", &n);

        /* calculate the sum of first n prime nos */
        while (count < n) {
                for (i = 2; i <= value - 1; i++) {
                        if (value % i == 0) {
                                flag = 0;
                                break;
                        }
                }
                if (flag) {
                        total = total + value;
                        count++;
                }
                value++;
                flag = 1;
        }

        /* print the sum of first n prime numbers */
        printf("Sum of first %d prime numbers is %d\n", n, total);
        return 0;
  }

Продукция:

Enter the value for n:5
Sum of first 5 prime numbers is 28
0
добавлено