2 Stimmen

Verwendung von Arrays zur Berechnung des Prozentsatzes einer Zahl

Also versuche ich ein Programm zu schreiben, das den Prozentsatz einer der Zahlen in einer Gruppe von Zahlen berechnet. Ich kann die Zahlen eingeben, aber die Prozentsätze sind immer 0 und ich habe die Formel auf Papier ausprobiert und es funktioniert jedes Mal, also weiß ich nicht, was das Problem zu sein scheint.

#include 

int main() {
    int x[10];
    int i, sum;
    float perc;
    sum = 0;

    for(i = 0; i < 10; ++i) {
        scanf("%d", &x[i]);
        sum = sum + x[i];
    }

    printf("n            Prozentsatz des Gesamtbetrags\n");

    for(i = 0; i < 10; ++i) {
        perc = (x[i] / sum) * 100;
        printf("%d          %.2f\n", x[i], perc);
    }
    return (0);
}

5voto

Vaibhav Jain Punkte 3729

Ändern Sie Ihren Deklarationsteil wie folgt:

   int i;
   float sum,perc;
   sum=0;

Dies liegt an der Typumwandlung in C. Der linke Teil des Bildes zeigt, was das Ergebnis ist, wenn Ihre Ergebnisvariable integer ist und der rechte Teil zeigt, was das Ergebnis ist, wenn Ihre Ergebnisvariable float ist.

Bildbeschreibung hier eingeben

2voto

SigTerm Punkte 25410

Dieser Ausdruck

perc=(x[i]/sum)*100;

führt eine Ganzzahldivision durch. Die Ganzzahldivision liefert keinen Bruchteil zurück.

Wenn (x[i] >= 0) und (x[i] < sum) ist, dann ist (x[i]/sum) null. (100 * 0) ergibt auch null.

Entweder zuerst mit 100 multiplizieren und dann dividieren (auf diese Weise erhältst du jedoch keinen Bruchteil des Prozentsatzes):

perc=(x[i]*100/sum);

Oder Werte in Floats umwandeln:

perc=((float)x[i]*100.0/(float)sum);

oder

perc = x[i] * 100.0f / sum;

0voto

haccks Punkte 100455

Sie erhalten das Ergebnis null, weil das Teilen einer int immer zu einer int führt. Wenn der Nenner größer als der Zähler wird, ergibt dies 0.
Nutzen Sie das Typumwandlung, ändern

perc=(x[i]/sum)*100;

zu

perc= ((float)x[i]/sum)*100; //Typumwandlung

Sie können dies auch tun, indem Sie 100 in 100.0 ändern, wie

perc= (x[i]*100.0/sum);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X