1

私はプログラミングに非常に慣れていないので、whileループを使用して、指定された範囲の素数の合計を見つけるように求められました。入力が5の場合、答えは。になります28 (2+3+5+7+11)。コードを書いてみましたが、ロジックが正しくないようです。

コード

#include <stdio.h>
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<n)
        {
            test = n%i;
            if (test==0)
            {
             goto end;
            }
                  i++;
        }
        if (test != 0)
        {
            sum = sum + test;
            range--;
        }
        end:
                  n++;
    }
    printf("The sum is %i",sum);
    return 0;
}

私の間違いを指摘して、そこからどうやって行くのか教えていただければ幸いです。

4

5 に答える 5

4

まず第一に、scanf使用&rangeではなくrange

scanf("%i",&range);

第二に、この指示は正しくありません

sum = sum + test;

そのはず

sum = sum + n;

そしてまた

while (range > 0)

に変更する必要があります

while (range > 1)

あなたのアルゴリズムでは、すでに範囲の最初の要素を合計に入れているため、 while は時間ではなく時間sum = 2をループする必要がありますrange - 1range

それで全部です

于 2013-02-07T08:26:07.460 に答える
0

OK、私のCは本当に悪いですが、次のコードのようなものを試してください。おそらくコンパイルされませんが、宿題などの場合は、自分で理解する方がよいでしょう。

更新:要求に応じてwhileループにしました。

#include <stdio.h>
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;
}
于 2013-02-07T08:33:30.480 に答える
0

しばらく C をやっていませんが、ロジックを単純化するためにいくつかの関数を作成します。

#include <stdio.h>
#include <math.h>

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して押し込むmain()と、プログラムのデバッグが難しくなります。

于 2013-02-07T08:36:39.800 に答える