2016-04-06 20 views
2

So heute an der Universität ich dieses einfache Programm, wo wir die Höhen von n Zahl der Studenten an dem Eingang hatten und dann aus der Summe der Höhen drucken. Die Höhen wurden in einem Array gespeichert. Nun, das war einfach genug - aber wir haben das Problem mit einer festen Anzahl von Schülern angefangen, 5 in meinem Beispiel. Dann fragte ich den Professor, wie ich das Problem lösen würde, wenn die Anzahl der Studenten nicht bereits definiert wäre, und sie sagte mir, dass ich Listen und dynamische Array-Element-Zuweisung verwenden müsste. Das haben wir noch nicht erreicht, also bin ich hergekommen, um um Hilfe zu bitten, da ich daran interessiert bin, es so zu lösen.dynamische Speicherzuweisung für Arrays C

Könnte jemand mir erklären/erklären oder mir einige Richtlinien geben, wie ich das Problem angehen sollte. Hier ist, wie das Problem im Unterricht gelöst wurde.

#include <stdio.h> 
#include <conio.h> 

int main(){ 


    int height[5], sum=0, i; 
    int numOfStudents=5; 
    float average; 

    for(i=0; i<numOfStudents; i++){ 
     printf("Type in the height of the %d. student: ", i+1); 
     scanf("%d", &height[i]); 

     sum+=height[i]; 
    } 
    printf("\n Sum of all heights is: %d. There were %d students", sum, numOfStudents); 

return 0; 
} 
+1

Blick in die 'malloc()' Funktion befindet sich in 'stdlib.h' können Sie' int * height' deklarieren und dann in einen Wert für 'n' und etwas tun, ähnlich wie' malloc (sizeof (int) * lesen n);. Lies doch die Funktion nach, damit du sie verstehst. – JackVanier

+0

Warum fragst du das hier? Es gibt endlose Ressourcen, die Sie programmieren oder speziell C lehren, eines davon ist Ihr Lehrbuch. Wenn du lernen willst, mach es. – Amit

+1

Und vergessen Sie nicht, '' 'free()' '' einmal aufzurufen, rufen Sie '' 'malloc()' '' –

Antwort

2

definieren Gerade height als Zeiger

int *height;

Dann dinamically Speicher zuordnen die Arrayelemente zu speichern

height = malloc(sizeof(int) * numOfStudents);

Hinweis, dass die geeignete Grße (in Bytes) berechnet als das Produkt der Größe eines int durch die Anzahl der Array-Elemente.

Dieser Ansatz impliziert, dass die Größe des Arrays im Voraus bekannt ist.

Als Speicher zugewiesen dinamically es Ihre Pflicht ist es zu befreien, mit

free(height);

, da Sie nicht mehr das Array benötigen.


Das Ganze wird

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

int main() 
{ 
    int *height, sum=0, i; 
    int numOfStudents=5; 

    height = malloc(sizeof(int) * numOfStudents); 

    for(i=0; i<numOfStudents; i++) 
    { 
     printf("Type in the height of the %d. student: ", i+1); 
     scanf("%d", &height[i]); 

     sum+=height[i]; 
    } 

    printf("\n Sum of all heights is: %d. There were %d students", sum, numOfStudents); 

    free(height); 

    return 0; 
} 
+0

Das half, danke. Ich werde jetzt versuchen, Malloc-Funktion mehr zu studieren und es in einigen anderen Beispielen auszuprobieren. Vielen Dank noch mal. – Bayaz

0

Zuerst müssen Sie verstehen, dass ‚Liste‘ ein abstrakter Datentyp ist, die wie folgt aussieht: von https://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Singly_linked_list.png/220px-Singly_linked_list.png

Es besteht aus einer Reihe Knoten, die sich wie eine Kette verbinden und jeder Knoten seinen eigenen Wert behält.

Eine einfache Möglichkeit, diese Datenstruktur in c Sprache zu implementieren, ist wie folgt:

struct Node { 
    int val; 
    struct Node* next; 
}; 

Wo ‚val‘ speichert den Wert und ‚next‘ speichert die Adresse zum nächsten Knoten. Behandle 'struct Node *' als Ganzes, und du wirst erfahren, dass 'struct Node pointer' steht, das literarisch auf die Adresse eines Knotens zeigt.

Und jetzt können Sie eine Liste von 2 Elemente wie folgt erstellen:

struct Node* n1 = malloc(sizeof(struct Node)); 
n1->val = 200; 
struct Node* n2 = malloc(sizeof(struct Node)); 
n2->val = 300; 
n1->next = n2; 

Halten anhängt Elemente und Sie können eine Liste ‚Knotens von schaffen, was Länge, die Sie wollen.

+0

Warum die Notwendigkeit, so etwas zu tun, wenn es möglich ist, ein dynamisch zugewiesenes Array zu verwenden? –

+0

Da Professor sagte Bayaz, dass "Sie Listen und dynamische Array-Element-Zuweisung verwenden müssen.", Und mein Code ist die gängigste Möglichkeit, "Liste" in c-Sprache zu implementieren. – TangKe

+0

Dennoch ist diese Methode ein echter Overkill für das, was das OP zu tun versucht –