Frage Ordnen Sie die angegebenen Nummern in aufsteigender Reihenfolge an


Ich habe gerade angefangen, C zu lernen, und heute bekam ich eine Frage, in der einer der Teile das Array von Zahlen vom Benutzer akzeptieren und in aufsteigender Reihenfolge ordnen sollte. Die Array-Größe sollte auch vom Benutzer angegeben werden. Ich habe den folgenden Code für diesen Zweck verwendet->

   for (i = 0; i <= y - 1; ++i) {
        for (ii = i + 1; ii <= y - 1; ++ii) {
            if (x[i] > x[ii]) {
                temp = x[i];
                x[i] = x[ii];
                x[ii] = temp;
            }
        }
    }
    int k;
    printf("\nNumbers arranged in ascending order:\n");
    for (k = 0; k < y; ++k) {
        printf("%d\n", x[i]);
    }

Hier ist die Variable y die Größe des Arrays, x ist der Name der Array-Variablen (also die Variable definiert wie folgt-> int x[y]; Aber das Problem ist, es druckt nur den endgültigen Wert des Arrays aus. Um Problem zu erarbeiten: Angenommen, ich habe 3 als meine Array-Größe eingegeben. Dann fragt das Programm nach 3 Zahlen, die ich 34,45,22 gewählt habe. Jetzt, nachdem dieser ganze Code ausgeführt wurde, zeigt er x [3] an (jetzt existiert x [3] nicht einmal! Da x [2] der letzte Wert im Array ist. So gibt es mir den Speicherort der Variablen.) Wo gehe ich falsch?


5
2018-04-15 18:11


Ursprung


Antworten:


Du musst dich ändern

 printf("%d\n", x[i]);

zu

printf("%d\n", x[k]);

in der Druckschleife, wie Sie verwenden k als Schleifenzählervariable.


5
2018-04-15 18:13



In deiner letzten for-Schleife machst du das

 printf("\nNumbers arranged in ascending order:\n");
for (k = 0; k < y; ++k) {
    printf("%d\n", x[i]);
}

aber du druckst x[i], aber nicht erhöhen i. Merken, i und k sind nur Array-Variablen, nicht die tatsächlichen Werte im Array. Ändere einfach die printf zu printf("%d\n", x[k]); und es sollte gut funktionieren.


0
2018-04-15 18:15