2016-04-05 3 views
1

3つのことすべてを実行するプログラムを書く必要があります。それが完全な数であるかどうかを確認してください。書く方法1数値のすべての要素、要素の合計を出力し、それが完全な数であるかどうかをチェックするCプログラム

whileループのみを使用するはずですが、動作できないので、代わりにいくつかのForループを使用しました。それ以外に、私が持っている主な問題は、数字が完璧かどうかをプログラムがチェックすることです。

たとえば、1,2,3,6の合計値が12になる「6」と入力しますが、プログラムは「6」は完全な数ではないと考えます。私が間違っていた場所を見るために私のコードを見てください。

#include <stdio.h> 
int main(void) { 
    int n, f, sum; 
    f = 1; 
    sum = 0; 
    printf("Enter number: "); 
    scanf("%d", &n); 
    printf("The factors of %d are:\n", n); 
    //Finding the factors of the given number 
    while (f <= n) { 
     if (n % f == 0) { 
      printf("%d\n", f); 
     }   
     f++; //f++ is the same as f = f + 1 
    } 
    //Finding the sum of the factors 
    for (f = 1; f <= n; f++) { 
     if (n % f == 0) { 
      sum = sum + f;    
     } 
    } 
    printf("Sum of factors = %d\n", sum); 

    //Checking if the number is perfect or not; A number is considered perfect if the sum of it's divisiors equal the number eg 6 = 1+2+3 
    for (f = 1; f < n; f++) { 
     if (n % f == 0) { 
      sum = sum + f;    
     } 
    }  
    if (sum == n) { 
     printf("%d is a perfect number\n", n); 
    } else { 
     printf("%d is not a perfect number\n", n); 
    } 
    return 0; 
} 
+2

は、その後、あなたはそれが何をするか見るために線でのコード行もののステップ実行することができ、デバッガを使用する方法を学習し、彼らがどのように変化するか。 –

+2

すべての 'for'ループは' while'ループに変換することができ、その逆もあります。 –

答えて

2

fを宣言する場所と、初めて使用する場所を見てください。約1マイルの距離。それは良くないね。

ここで、合計を宣言する場所と、初めてそれを使用する場所を見てください。さらに悪い。そして、あなたのコードがうまくいかない理由:最初に「合計」を使うことを2度目に考えてみてください。あなたはそうではありません。

変数の実際の使用から遠くに初期化を置くことによって、コードを読むことができなくなっただけでなく、足で実際に足を引っ掛けました。 t。

+1

おそらく、彼は厳密なC89で書かれた本から学んでいるでしょう;-) –

1
for (i = 0; i < n; i++) { 
    statement; 
} 

は、のように書くことができます。また、変数とその値を見ながら

i = 0; 
while (i < n) { 
    statement; 
    i++; 
} 
+0

あなたは 'continue'の使用に注意する必要があります。 'for'ではイテレータを実行し、' while'ではそれを自分で行う必要があります。 –

関連する問題