2017-03-21 2 views
0

wie geben i Werte in einen leeren Vektor (Faktoren) für die Schleife ein?Wie übertrage ich Werte in einem leeren Vektor?

in diesem Code Ich versuche, die Anzahl der Faktoren einer Zahl zu finden und dann die Faktoren in einen leeren Vektor passieren, aber es hält mich geben Nullen

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

int main(void) 
{ 

    int facVar = 57; 
    int S; 
    double numFact = 0; 
    int k; 
    int factors1[4]; 

    for (S = 1; S <= facVar; S = S + 1) 
    { 
     if (facVar % S == 0) 
     { 
      numFact = numFact + 1; 

     } 
    } 
    int factNum = numFact; 
    int factors[factNum]; 
    int indices[factNum]; 
    int i; 
    printf("the number of factors is %.lf \n", numFact); 

    for (k = 0; k < factNum; k++) 
    { 

     factors[k] = S; 
    } 

    for (k = 0; k < factNum; k++) 
    { 
     printf("factors are %.lf", factors[k]); 
    } 

    return 0; 
} 
+2

Verwenden ' "% d"' ganze Zahlen zu drucken, die Dokumentation lesen. –

+1

Sie füllen das Array (Faktoren) mit dem gleichen Wert (S = 58) in allen Elementen des Arrays. –

Antwort

0

Zunächst einmal brauchen Sie nicht zu nennen:

#include <math.h> 

Danach in der ersten Schleife überprüfen Sie den Faktor Ihrer Nummer, die Sie nicht speichern es in einem Array:

for(S=1 ; S <= facVar ; S = S + 1){ 
if(facVar % S == 0){ 
    numFact = numFact + 1; 

} 
} 

Sie müssen also die Faktoren in den Array-Faktoren speichern. Dieses Programm hilft Ihnen, die Ergebnisse zu erhalten, die Sie brauchen:

#include <stdio.h> 
#include <stdlib.h> 

int main(void){ 

int facVar = 57; 
int S, k; 
int numFact = 0; 

for(S = 1, k = 0 ; S <= facVar ; S++){ 
    if(facVar % S == 0){ 
     numFact++; 

    } 
} 
int factors[numFact]; 
for(S = 1, k = 0 ; S <= facVar ; S++){ 
    if(facVar % S == 0){ 
     factors[k] = S; 
     k++; 

    } 
} 
printf("the number of factors is: %d \n" , numFact); 

for(k = 0; k < numFact ; k++){ 
    printf("factors are: %d\n" , factors[k]); 
} 

return 0; 

} 
+0

Aufruf realloc in einer Schleife wie das ist eine schlechte Idee, da es sehr ineffizient ist. Es wäre viel schneller, die benötigte Größe vorab zu berechnen, wie im ursprünglichen Post. – Lundin

+0

@Lundin wenn wir den Original-Beitrag folgen werden wir die Schleife twice.The zuerst verwenden, um die Anzahl von Faktoren und den zweiter bekommen die Faktoren array.Because in der ursprünglichen Nachricht zu füllen, erklärte er das Array nach der Schleife. –

+0

Bezüglich ** realloc ** Ich fand diese [Nachteile der Aufruf realloc in einer Schleife] (http://stackoverflow.com/questions/30976295/disadvantages-of-calling-realloc-in-a-loop?answertab=votes# tab-top) –

0

Sie sind auf dem richtigen Weg, Ihr Programm braucht nur ein bisschen clean-up. Befreien Sie sich von Fließkommazahlen, überflüssigen Variablen usw. Auch die Anzahl der Faktoren zu zählen und sie zu berechnen ist der gleiche Algorithmus, der zweimal wiederholt wird. factors[k] = S; ergab keinen Sinn.

Arbeitscode:

#include <stdio.h> 

int main(void) 
{ 
    const int facVar = 57; 
    int numFact = 0; 

    for (int i = 1; i <= facVar; i++) 
    { 
    if (facVar % i == 0) 
    { 
     numFact++; 
    } 
    } 
    printf("The number of factors is %d \n", numFact); 

    int factors[numFact]; 
    int fact_n=0; 
    for (int i = 1; i <= facVar; i++) 
    { 
    if (facVar % i == 0) 
    { 
     factors[fact_n] = i; 
     fact_n++; 
    } 
    } 

    printf("The factors are: "); 
    for (int i = 0; i < numFact; i++) 
    { 
    printf("%d ", factors[i]); 
    } 

    return 0; 
} 
Verwandte Themen