Das finden der kleinsten Zahl in einem array von ganzen zahlen
Ich geschrieben habe, ein kleines Programm, das dauert nur 5 zahlen vom Benutzer und speichert Sie
in einem array von ganzen zahlen. Das array wird an eine Funktion übergeben. Die Funktion wird verwendet, um zu finden, die kleinste Zahl im array und drucken Sie es aus. Sincerly die Ausgabe ist nicht korrekt und ich weiß nicht, warum. Die Funktion immer gibt das erste element des array zurück, das sollte die kleinste Zahl, aber es ist nicht.
#include <stdio.h>
void smallestint (int intarray [], int n)
{
int i;
int temp1 = 0;
int temp2 = 0;
for(i = 0; i < n; i ++)
{
if (intarray [i] < temp1)
{
intarray [i-1] = intarray [i];
temp2 = intarray[i];
intarray[i] = temp1;
temp1 = temp2;
}
else
temp1 = intarray[i];
}
printf("%d\n", intarray[0]);
}
int main ()
{
const int n = 5;
int temp = 0;
int i;
int intarray [n];
printf("Please type in your numbers!\n");
for(i = 0; i < n; i ++)
{
printf("");
scanf("%d", &temp);
intarray[i] = temp;
}
smallestint (intarray, n);
getchar();
getchar();
return 0;
}
Ich habe aktualisiert mein code. Jetzt bin ich die Initialisierung der temp. - Werte vor der for-Schleife. Aber es ist immer noch nicht funktioniert.
Gibt es einen Grund, warum Sie machte die Dinge komplizierter als Sie sein müssen, D. H. das mischen der Inhalte des Arrays um? Auch wenn die Verwendung von null als Initialisierer klingt nicht wie eine sehr gute Idee. Siehe limits.h.
Ich bin verwirrt von Ihrem Algorithmus. Vergleichen Sie einfach jede Zahl gegenüber dem Vorjahr ein, die Speicherung der kleinere Wert. Verwenden
Oder verwenden Sie
Ich bin verwirrt von Ihrem Algorithmus. Vergleichen Sie einfach jede Zahl gegenüber dem Vorjahr ein, die Speicherung der kleinere Wert. Verwenden
INT_MAX
als die ersten kleinsten Wert. Und don ' T schieben Sie die array!Oder verwenden Sie
intarray[0]
als Anfangswert (aber stellen Sie sicher, dass (n > 0)
ersten).InformationsquelleAutor Ordo | 2011-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen einfach nur drucken Sie das kleinste element des Arrays, dies ist über die einfachste Möglichkeit, es zu tun:
InformationsquelleAutor Jim Brissom
Die geringste Menge an code haben, werden mithilfe von LINQ:
InformationsquelleAutor Shane_Yo
Du bist re-Initialisierung der temp-Variablen auf jeder iteration der Schleife.
Sollten Sie speichern die aktuelle kleinste Anzahl außerhalb der loop () initialisiert, um das erste element des Arrays), und die Prüfung gegen.
Es scheint sehr kompliziert mit all dem verschieben von array-Elementen, zu. Sie müssen nur die Schleife über das array einmal, überprüfen Sie jeden Wert mit den vordefinierten 'min' - Wert, der standardmäßig "intArray" [0], wenn auch kleinere, setzen Sie " min "intArray" [ich]. Meine syntax könnte leicht aus, es ist schon ein paar Jahre her, seit ich getan habe, jede C.
InformationsquelleAutor sevenseacat
temp1
variable muss initialisiert werden, mit SEHR großer Wert (z.B.INT_MAX
) außerhalb der Schleife.InformationsquelleAutor DReJ
wenn Sie nur wollen, um die Rückkehr der kleinsten Zahl - nicht die Mühe, die Sortierung des Arrays.
sowieso,
in der ersten iteration legen Sie das erste element des array in der index -1 ist (was "legal" in C - aber es ist nicht, was Sie tun wollen...) : "intarray" [i-1] = "intarray" [ich]. beginnen sollten Sie Ihren loop aus 1.
laufen Sie über den Wert von temp1 auf jeden iteration (da Sie Sie initialisieren auf 0 innerhalb der Schleife). Ich schlage vor, Sie die Initialisierung außerhalb der Schleife.
BTW, wenn Sie initialisiert die variable temp1, bevor die Schleife zu intarry[0] (anstatt 0), werden Sie in der Lage zu unterstützen, negative zahlen als gut.
InformationsquelleAutor SivGo