2016-04-05 6 views
1

ich ein Programm schreiben müssen, ist, dass alle drei Dinge tut: alle Faktoren drucken, die Faktoren summieren und überprüfe, ob es eine perfekte Nummer ist.Wie ein C-Programm schreiben, das alle Faktoren einer Zahl druckt, wobei die Summe der Faktoren, und prüft, ob es sich um eine perfekte Zahl

Ich soll nur While-Schleifen verwenden, aber ich konnte es nicht zum Laufen bringen, also habe ich stattdessen einige For-Schleifen benutzt. Abgesehen davon besteht das Hauptproblem darin, dass das Programm überprüft, ob die Nummer perfekt ist oder nicht.

Zum Beispiel gebe ich ‚6‘, die 1,2,3,6 mir die Faktoren gibt, die Summe = 12, aber das Programm denkt, ‚6‘ nicht eine perfekte Zahl ist. Bitte schauen Sie sich meinen Code an, um zu sehen, wo ich falsch gelaufen bin.

#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

Erfahren Sie, wie ein Debugger verwenden, dann können Sie zwar den Code Zeile für Zeile Schritt, um zu sehen, was es tut, aber auch die Variablen und ihre Werte zu beobachten und wie sie sich verändern. –

+2

Jede for-Schleife kann in eine while-Schleife umgewandelt werden und umgekehrt. –

Antwort

2

Schauen Sie, wo Sie f deklarieren und wo Sie es zum ersten Mal verwenden. Etwa eine Meile Entfernung. Das ist schlecht.

Jetzt schauen Sie, wo Sie die Summe deklarieren, und wo Sie es zum ersten Mal verwenden. Noch schlimmer. Und nun, warum dein Code nicht funktioniert: Schaue, wo du zum zweiten Mal denkst, dass du "sum" zum ersten Mal benutzt hast. Außer du nicht.

Indem Sie die Initialisierung so weit von der tatsächlichen Verwendung der Variablen entfernt haben, haben Sie nicht nur Ihren Code unlesbar gemacht, sondern Sie haben sich selbst in den Fuß geschossen, indem Sie die Summe als Wert von Null angenommen haben. t.

+1

Vielleicht lernt er gerade aus einem Buch, das in strengem C89 geschrieben ist ;-) –

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

kann geschrieben werden:

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

muss man vorsichtig sein beim Gebrauch von 'continue'. in 'for' führt es den Iterator aus, in' while' müssen Sie es selbst tun. –

Verwandte Themen